/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { ChangeEvent, useEffect, useState } from "react"; import api from "../../utils/api"; import Button from "../Button"; import IProject from "../../types/IProject"; import useModalStore from "../../stores/useModalStore"; interface EditProjectModalProps { projectId: string; } function EditProjectModal({ projectId }: EditProjectModalProps) { const [project, setProject] = useState({ name: "", company: "", city: "", image: "", devices: [], }); const [file, setFile] = useState(); const [previewFile, setPreviewFile] = useState(); const [setModal] = useModalStore((state) => [state.setModal]); function handleChangeFile(e: ChangeEvent) { if (!e.target.files) return; const targetFile = e.target.files[0]; setFile(targetFile); setPreviewFile(URL.createObjectURL(targetFile)); } async function uploadFile() { if (!file) return; const formData = new FormData(); formData.append("file", file); try { const { file }: { file: string } = await api .post("upload", { body: formData }) .json(); setProject((prev) => ({ ...prev, image: file })); } catch (error) { if (error instanceof Error) { alert(`Error: ${error.message}`); } } } async function updateProject() { try { await api.put(`projects/${projectId}`, { json: { ...project } }); } catch (error) { if (error instanceof Error) { alert(`Error: ${error.message}`); } } } async function handleSubmit(e: ChangeEvent) { e.preventDefault(); await updateProject(); setModal(null); window.location.reload(); } async function getProject() { try { const project: IProject = await api.get(`projects/${projectId}`).json(); setProject(project); } catch (error) { if (error instanceof Error) { alert(`Error: ${error.message}`); } } } useEffect(() => { uploadFile(); }, [file]); useEffect(() => { getProject(); }, []); return (

Редактирование проекта

setProject((prev) => ({ ...prev, name: e.target.value })) } />
setProject((prev) => ({ ...prev, company: e.target.value })) } />
setProject((prev) => ({ ...prev, city: e.target.value })) } />

Девайсы

); } export default EditProjectModal;