import React, { useEffect, useRef, useState } from 'react'; import { Button, Dropdown, Input, InputRef, MenuProps, Typography } from '@/shared/antd-imports'; import { DeleteOutlined, EditOutlined, LoadingOutlined, MoreOutlined, PlusOutlined, } from '@/shared/antd-imports'; import { setTaskCardDisabled, initializeStatus } from '../../../features/board/create-card.slice'; import { TaskType } from '../../../types/task.types'; import TaskCreateCard from '../taskCreateCard/TaskCreateCard'; import TaskCard from '../taskCard/TaskCard'; import { useAppSelector } from '@/hooks/useAppSelector'; import '../commonStatusSection/CommonStatusSection'; import { deleteStatus } from '../../../features/projects/status/StatusSlice'; import { useAppDispatch } from '@/hooks/useAppDispatch'; import ChangeCategoryDropdown from '../changeCategoryDropdown/ChangeCategoryDropdown'; import { useTranslation } from 'react-i18next'; interface CommonPhaseSectionProps { status: string; dataSource: TaskType[]; category: string; id: string; } const CommonPhaseSection: React.FC = ({ status, dataSource, category, id, }) => { const dispatch = useAppDispatch(); const createTaskInputRef = useRef(null); // Initialize status in the Redux store if not already set useEffect(() => { dispatch(initializeStatus(status)); }, [dispatch, status]); // Get status-specific disable controls from Redux state const isTopCardDisabled = useAppSelector( state => state.createCardReducer.taskCardDisabledStatus[status]?.top ); const isBottomCardDisabled = useAppSelector( state => state.createCardReducer.taskCardDisabledStatus[status]?.bottom ); const themeMode = useAppSelector(state => state.themeReducer.mode); const [addTaskCount, setAddTaskCount] = useState(0); const [name, setName] = useState(status); const [isEditable, setIsEditable] = useState(false); const inputRef = useRef(null); const [isLoading, setIsLoading] = useState(false); const taskCardRef = useRef(null); const { t } = useTranslation('kanban-board'); const handleAddTaskClick = () => { dispatch(setTaskCardDisabled({ status, position: 'bottom', disabled: false })); setAddTaskCount(prev => prev + 1); }; const handleTopAddTaskClick = () => { dispatch(setTaskCardDisabled({ status, position: 'top', disabled: false })); setAddTaskCount(prev => prev + 1); }; useEffect(() => { if (isEditable && inputRef.current) { inputRef.current.focus(); inputRef.current.select(); } }, [isEditable]); useEffect(() => { createTaskInputRef.current?.focus(); taskCardRef.current?.scrollIntoView({ behavior: 'smooth', block: 'center', }); }, [dataSource, addTaskCount]); const handleChange = (e: React.ChangeEvent) => { setName(e.target.value); }; const handleBlur = () => { setIsEditable(false); setIsLoading(true); setTimeout(() => { setIsLoading(false); }, 3000); }; const items: MenuProps['items'] = [ { key: '1', label: (
setIsEditable(true)} > {t('rename')}
), }, { key: '2', label: , }, { key: '3', label: (
dispatch(deleteStatus(id))} > {t('delete')}
), }, ]; return (
setIsEditable(true)} > {isLoading ? ( ) : ( )} {isEditable ? ( ) : ( {name} )}
{!isTopCardDisabled && ( )} {dataSource.map(task => ( ))} {!isBottomCardDisabled && ( )}
); }; export default CommonPhaseSection;