import React, { HTMLProps } from "react"; import { CustomContext } from "../CustomContext"; import { MenuItemsProps } from "../Menu"; import { FigureWrapper, Figure, FigCaption, Image } from "./style"; import { Title2, Subtitle, Label2 } from "../../typography"; export enum BinderSize { small = "339px", medium = "480px" } export interface BoardInterface { key: string; fk: string; date?: Date; title: string; snapshot: string; sharedWith?: string[]; lastUpdatedAt?: string; } export interface BinderInterface { key: string; title: { color: string; text: string }; img?: string; backgroundColor?: string; desc?: { color: string; text: string }; courseInformation?: { grade: string; teacher: string; schedule?: string; }; boards?: BoardInterface[]; date?: Date; } export interface BinderProps extends Omit< HTMLProps, "ref" | "onClick" | "contextMenu" | "size" | "as" > { binder: BinderInterface; onClick?: () => void; contextMenu?: MenuItemsProps[]; disabled?: boolean; size?: BinderSize; setCurrentBinder?: (currentBinder: BinderInterface) => void; carousel?: boolean; } export const Binder = ({ binder, disabled, setCurrentBinder, contextMenu, carousel, onClick, size, ...props }: BinderProps) => { const [showContextMenu, setShowContextMenu] = React.useState(false); const figureRef = React.useRef(); const imgRef = React.useRef(); const spanRef = React.useRef(); React.useEffect(() => { document.addEventListener("contextmenu", event => { event.preventDefault(); if ( event.target === figureRef.current || event.target === imgRef.current || event.target === spanRef.current ) { if (setCurrentBinder) { setCurrentBinder(binder); } setShowContextMenu(true); } else { setShowContextMenu(false); } }); document.addEventListener("click", event => { event.preventDefault(); setShowContextMenu(false); }); }, []); return ( {!disabled && contextMenu && ( )}
{binder.img && ( {`${binder.title.text}`} )}
{binder.courseInformation && ( {binder.courseInformation.grade} )} {binder.title.text} {binder.desc?.text}
); };