zapupenec/diary_app

View on GitHub
src/components/image-list/index.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import { DetailedHTMLProps, FC, HTMLAttributes } from 'react';

import styles from './image-list.module.css';
import { ImageItem } from './image-item';
import { TImage } from 'types';

interface IImageListProps
  extends DetailedHTMLProps<HTMLAttributes<HTMLUListElement>, HTMLUListElement> {
  images: TImage[];
  onClickItem: (image: TImage | null) => void;
  selectedImg: string;
}

export const ImageList: FC<IImageListProps> = ({ images, onClickItem = () => {}, selectedImg }) => {
  const handleClickItem = (image: TImage) => () => {
    if (selectedImg === image.url) {
      onClickItem(null);
      return;
    }

    onClickItem(image);
  };

  return (
    <ul className={styles.list}>
      {images?.map((image) => (
        <ImageItem
          tabIndex={0}
          role="button"
          aria-label="Выбрать эту фотографию"
          key={image.id}
          image={image}
          onClick={handleClickItem(image)}
          status={
            selectedImg === '' ? 'regular' : selectedImg === image.url ? 'active' : 'inactive'
          }
        />
      ))}
    </ul>
  );
};