All files / src/components/CommentDateGroupList index.tsx

0% Statements 0/29
100% Branches 1/1
100% Functions 1/1
0% Lines 0/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                                                                                         
// Types
import {
  CommentDateGroupProps,
  CommentDateGroup,
} from '@/components/CommentDateGroup';
 
// Utils
import { combineClasses } from '@shared/utils';
 
// Styles
import './styles/comment-date-group-list.css';
import { COMMENT_LIST_EMPTY_LABEL } from '@/constants';
 
export interface CommentDateGroupListProps {
  groups: CommentDateGroupProps[];
  /** Forwarded to every group — controls which comment checkboxes are checked. */
  selectedIds?: Set<string>;
  /** Forwarded to every group — controls which checkboxes show a loading spinner. */
  loadingIds?: Set<string>;
  onToggleSelect?: (commentId: string) => void;
  emptyLabel?: string;
  className?: string;
}
 
export const CommentDateGroupList = ({
  groups,
  selectedIds,
  loadingIds,
  onToggleSelect,
  emptyLabel = COMMENT_LIST_EMPTY_LABEL,
  className = '',
}: CommentDateGroupListProps) => {
  const nonEmptyGroups = groups.filter((group) => group.items.length > 0);
 
  if (!nonEmptyGroups.length) {
    return <div className="comment-date-group-list-empty">{emptyLabel}</div>;
  }
 
  return (
    <div className={combineClasses('comment-date-group-list-root', className)}>
      {nonEmptyGroups.map((group) => (
        <CommentDateGroup
          key={group.date}
          {...group}
          selectedIds={selectedIds}
          loadingIds={loadingIds}
          onToggleSelect={onToggleSelect}
        />
      ))}
    </div>
  );
};