import { useCallback, useEffect, useMemo, useState } from 'react'; import { FormsApi } from '../api/forms'; import { CardsSkeleton } from '../components/common/Skeleton'; import { SwitchFormTask } from '../components/common/SwitchFormTask/SwitchFormTask'; import Modal from '../components/common/Modal/Modal'; import { PageContainer, TasksContainer } from './StyledForPage'; import { TaskCardComponent } from '../components/common/TaskCardComponent'; import { WhitePlus } from '../components/common/icons/icons'; import { Autocomplete, Box, Button, Divider, FormControl, FormLabel, TextField, } from '@mui/material'; import SearchComponent from '../components/common/SearchComponent'; import { CustomCheckbox } from '../components/common/StyledCheckbox'; import { HeaderSwitch } from '../components/HeaderMenu/HeaderSwitch'; import { toast } from 'react-toastify'; import { PrimaryButton } from '../components/common/Buttons/Buttons'; export default function FormsPage() { const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); const [loadingUpdate, setLoadingUpdate] = useState(false); const [openModalCreate, setOpenModalCreate] = useState(false); const [query, setQuery] = useState(''); const baseFormState = useMemo( () => ({ nameForm: '', basis: false, basisForSelect: [], needBasis: false, }), [], ); const [newFormState, setNewFormState] = useState(baseFormState); const resetFormState = useCallback(() => { setNewFormState((prev) => ({ ...baseFormState, basisForSelect: prev.basisForSelect, })); }, [baseFormState]); const getFormsList = async () => { try { const data = await FormsApi.formsList(); setItems(data); } catch (error) { toast.error('Ошибка загрузки форм'); } finally { setLoading(false); } }; useEffect(() => { getFormsList(); }, []); useEffect(() => { const basisForSelect = items.map((item) => ({ id: item.id, name: item.title || '', })); setNewFormState((prev) => ({ ...prev, basisForSelect, })); }, [items]); const handleOpenCreateModal = () => { setOpenModalCreate(true); }; const handleCloseCreateModal = () => { setOpenModalCreate(false); resetFormState(); }; const createForm = async () => { try { let data; setLoadingUpdate(true); if (newFormState.needBasis) { data = await FormsApi.createFormFromOther({ title: newFormState.nameForm, form_id: newFormState.basis, }); } else { data = await FormsApi.createForm({ title: newFormState.nameForm, }); } setItems((prev) => [...prev, data.result]); setOpenModalCreate(false); resetFormState(); } catch (error) { toast.error(error.response?.data?.detail || 'Не удалось создать форму'); } finally { setLoadingUpdate(false); } }; // Фильтруем формы по query const filteredItems = items.filter((item) => item.title?.toLowerCase().includes(query.toLowerCase()), ); return ( } > Создать форму {loading ? ( ) : ( <> {filteredItems.length === 0 && (
{query ? 'Ничего не найдено' : 'Нет форм. Создайте новую, чтобы начать.'}
)} {filteredItems.map((t) => ( ))} )}
} >
Название формы setNewFormState((prev) => ({ ...prev, nameForm: e.target.value, })) } />
{ setNewFormState((prev) => ({ ...prev, needBasis: e.target.checked ? true : false, })); }} />
Создать на основе существующей формы
Вы можете дублировать и редактировать существующую форму
{newFormState.needBasis && ( Форма option.name || ''} value={ newFormState.basisForSelect.find( (item) => item.id === newFormState.basis, ) || null } onChange={(event, newValue) => { setNewFormState((prev) => ({ ...prev, basis: newValue ? newValue.id : false, })); }} slotProps={{ popper: { style: { zIndex: 60 }, }, }} renderInput={(params) => ( )} /> )}
); }