import React, { FC } from 'react';
import assert from 'assert';
import { templateChecker, pagePathUtils, IPageHasId } from '@growi/core';
import { FootstampIcon } from '../SearchPage/FootstampIcon';
const { isTopPage } = pagePathUtils;
const { checkTemplatePath } = templateChecker;
const SEEN_USERS_HIDE_THRES__ACTIVE_USERS_COUNT = 5;
const MAX_STRENGTH_LEVEL = 4;
type SeenUsersCountProps = {
count: number,
basisViewersCount?: number,
shouldSpaceOutIcon?: boolean,
}
const SeenUsersCount = (props: SeenUsersCountProps): JSX.Element => {
const { count, shouldSpaceOutIcon, basisViewersCount } = props;
if (count === 0) {
return <>>;
}
if (basisViewersCount != null && basisViewersCount <= SEEN_USERS_HIDE_THRES__ACTIVE_USERS_COUNT) {
return <>>;
}
const strengthLevel = Math.ceil(
Math.min(0, Math.log(count / (basisViewersCount ?? count))) // Max: 0
* 2 * -1,
);
if (strengthLevel > MAX_STRENGTH_LEVEL) {
return <>>;
}
assert(strengthLevel >= 0 && strengthLevel <= MAX_STRENGTH_LEVEL); // [0, MAX_STRENGTH_LEVEL)
const strengthClass = `strength-${strengthLevel}`; // strength-{0, 1, 2, 3, 4}
return (
{count}
);
};
type PageListMetaProps = {
page: IPageHasId,
likerCount?: number,
bookmarkCount?: number,
shouldSpaceOutIcon?: boolean,
basisViewersCount?: number,
}
export const PageListMeta: FC = (props: PageListMetaProps) => {
const { page, shouldSpaceOutIcon, basisViewersCount } = props;
// top check
let topLabel;
if (isTopPage(page.path)) {
topLabel = TOP;
}
// template check
let templateLabel;
if (checkTemplatePath(page.path)) {
templateLabel = TMPL;
}
let commentCount;
if (page.commentCount > 0) {
commentCount = {page.commentCount};
}
let likerCount;
if (props.likerCount != null && props.likerCount > 0) {
likerCount = {props.likerCount};
}
let locked;
if (page.grant !== 1) {
locked = ;
}
let bookmarkCount;
if (props.bookmarkCount != null && props.bookmarkCount > 0) {
bookmarkCount = {props.bookmarkCount};
}
return (
{topLabel}
{templateLabel}
{commentCount}
{likerCount}
{locked}
{bookmarkCount}
);
};