'use client' import { DocumentPlusIcon, PlusIcon, XMarkIcon } from '@heroicons/react/24/outline' import React, { useRef, useState } from 'react' import { useProject } from '../../../context/Project/provider' import classNames from '../../../utils/classNames' import onEnterHandler from '../../../utils/onEnterHandler' import AddGroupInput from './AddGroupInput' import DocumentLineItem from './DocumentLineItem' import { useSidebar } from './provider' import { SidebarGroup } from './types' const GroupLineItem = (props: { group: SidebarGroup, dragOverGroupId?: string }) => { const { requestAddDocument, requestChangeGroupOrder, getGroupById, } = useProject() const { selectedGroupId, isAddNewDocumentInputShowing, setSelectedDocumentId, setSelectedGroupId, setIsAddNewDocumentInputShowing, setIsAddNewGroupInputShowing, dragOverGroupId, setDragOverGroupId } = useSidebar() const addDocumentTextInput = useRef(null) const onConfirmAddDocumentClickHandler = async (groupId: string) => { const documentName = addDocumentTextInput.current?.value if (!documentName) return const response = await requestAddDocument(groupId, documentName) if (!response.id) return setSelectedDocumentId(response.id) setSelectedGroupId(groupId) setIsAddNewDocumentInputShowing(false) } const onCancelAddItemClickHandler = () => { setIsAddNewDocumentInputShowing(false) } const onAddNewDocumentLineItemClickHandler = (groupId: string) => { setSelectedGroupId(groupId) setIsAddNewDocumentInputShowing(true) setIsAddNewGroupInputShowing(false) } const onGroupDragOver = (groupId: string) => { setDragOverGroupId(groupId) } const onGroupDragStart = (groupId: string) => { setSelectedGroupId(groupId) } const onGroupDropEnd = (groupId: string) => { if (!groupId || groupId == dragOverGroupId) return const groupDroppedOn = getGroupById(dragOverGroupId) console.log('groupDroppedOn', groupDroppedOn) if (!groupDroppedOn) return requestChangeGroupOrder(groupId, groupDroppedOn.order) setDragOverGroupId('') } const renderAddNewDocument = (groupId: string) => { return isAddNewDocumentInputShowing && selectedGroupId === groupId ?
{ onEnterHandler(event, () => onConfirmAddDocumentClickHandler(groupId)) }} ref={addDocumentTextInput} />
: onAddNewDocumentLineItemClickHandler(groupId)} > } return (
onGroupDragOver(props.group.id)} onDragEnd={() => onGroupDropEnd(props.group.id)} className={classNames( 'group items-center px-2 py-2 text-base font-medium rounded-t-md', selectedGroupId === props.group.id ? 'bg-gray-900 text-white' : 'text-gray-300 hover:bg-gray-700 hover:text-white', (dragOverGroupId === props.group.id) && props.group.id ? 'bg-gray-300 text-gray-700' : '', )} > {props.group.name}
) } export default GroupLineItem