import React from "react"; // react-beautiful-dnd import { DraggableProvided } from "react-beautiful-dnd"; // icons import { ArrowsPointingInIcon, ArrowsPointingOutIcon, EllipsisHorizontalIcon, PlusIcon, } from "@heroicons/react/24/outline"; // helpers import { addSpaceIfCamelCase } from "helpers/string.helper"; // types import { IIssue, NestedKeyOf } from "types"; type Props = { isCollapsed: boolean; setIsCollapsed: React.Dispatch<React.SetStateAction<boolean>>; groupedByIssues: { [key: string]: IIssue[]; }; selectedGroup: NestedKeyOf<IIssue> | null; groupTitle: string; createdBy: string | null; bgColor: string; addIssueToState: () => void; provided?: DraggableProvided; }; const BoardHeader: React.FC<Props> = ({ isCollapsed, setIsCollapsed, provided, groupedByIssues, selectedGroup, groupTitle, createdBy, bgColor, addIssueToState, }) => ( <div className={`flex justify-between p-3 pb-0 ${ !isCollapsed ? "flex-col rounded-md border bg-gray-50" : "" }`} > <div className={`flex items-center ${!isCollapsed ? "flex-col gap-2" : "gap-1"}`}> {provided && ( <button type="button" {...provided.dragHandleProps} className={`grid h-7 w-7 place-items-center rounded p-1 outline-none duration-300 hover:bg-gray-200 ${ !isCollapsed ? "" : "rotate-90" } ${selectedGroup !== "state_detail.name" ? "hidden" : ""}`} > <EllipsisHorizontalIcon className="h-4 w-4 text-gray-600" /> <EllipsisHorizontalIcon className="mt-[-0.7rem] h-4 w-4 text-gray-600" /> </button> )} <div className={`flex cursor-pointer items-center gap-x-1 rounded-md bg-slate-900 px-2 ${ !isCollapsed ? "mb-2 flex-col gap-y-2 py-2" : "" }`} style={{ border: `2px solid ${bgColor}`, backgroundColor: `${bgColor}20`, }} > <h2 className={`text-[0.9rem] font-medium capitalize`} style={{ writingMode: !isCollapsed ? "vertical-rl" : "horizontal-tb", }} > {groupTitle === null || groupTitle === "null" ? "None" : createdBy ? createdBy : addSpaceIfCamelCase(groupTitle)} </h2> <span className="ml-0.5 text-sm text-gray-500">{groupedByIssues[groupTitle].length}</span> </div> </div> <div className={`flex items-center ${!isCollapsed ? "flex-col pb-2" : ""}`}> <button type="button" className="grid h-7 w-7 place-items-center rounded p-1 outline-none duration-300 hover:bg-gray-200" onClick={() => { setIsCollapsed((prevData) => !prevData); }} > {isCollapsed ? ( <ArrowsPointingInIcon className="h-4 w-4" /> ) : ( <ArrowsPointingOutIcon className="h-4 w-4" /> )} </button> <button type="button" className="grid h-7 w-7 place-items-center rounded p-1 outline-none duration-300 hover:bg-gray-200" onClick={addIssueToState} > <PlusIcon className="h-4 w-4" /> </button> </div> </div> ); export default BoardHeader;