diff --git a/src/lib/api.ts b/src/lib/api.ts index b3a995f..b2bcfc9 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -133,6 +133,11 @@ export const getContacts = (id: string) => export const upsertContact = (id: string, b: Partial) => api.post(`/projects/${id}/contacts`, b).then((r) => r.data); export const deleteContact = (cId: string) => api.delete(`/contacts/${cId}`).then((r) => r.data); +// 비민감 정보(주의사항·계약범위)는 프로젝트 구성원 누구나 편집 +export const patchProjectNotes = ( + id: string, + b: { cautions?: string; scopeText?: string; scopeGraphic?: string } +) => api.patch(`/projects/${id}/notes`, b).then((r) => r.data); export const getTasks = (id: string) => api.get(`/projects/${id}/tasks`).then((r) => r.data); diff --git a/src/pages/ProjectDetail.tsx b/src/pages/ProjectDetail.tsx index 22a9233..a0176f4 100644 --- a/src/pages/ProjectDetail.tsx +++ b/src/pages/ProjectDetail.tsx @@ -10,7 +10,7 @@ import { getPayments, upsertProjectMember, deleteProjectMember, createTask, updateTask, deleteTask, getTaskComments, createTaskComment, deleteTaskComment, getProjectMails, putMailNote, syncProjectMails, hideMail, - upsertContact, deleteContact, putContract, uploadContractFile, getFileDownloadUrl, + upsertContact, deleteContact, patchProjectNotes, putContract, uploadContractFile, getFileDownloadUrl, deleteContractFile, createPayment, updatePayment, deletePayment, recomputeProject, updateProject, } from "@/lib/api"; @@ -67,7 +67,7 @@ export function ProjectDetailPage() { {tab === "members" && } {tab === "timeline" && } {tab === "mail" && } - {tab === "contacts" && } + {tab === "contacts" && } {tab === "contract" && isAdmin && } @@ -86,20 +86,35 @@ function Row({ label, value }: { label: string; value: React.ReactNode }) { function Overview({ project: p }: { project: Project }) { const { nameOf } = useDirectory(); + const qc = useQueryClient(); + const [cautions, setCautions] = useState(p.cautions); + useEffect(() => { setCautions(p.cautions); }, [p.id]); + const saveCautions = useMutation({ + mutationFn: () => patchProjectNotes(p.id, { cautions }), + onSuccess: () => qc.invalidateQueries({ queryKey: ["project", p.id] }), + }); return ( -
-
- - - - - +
+
+
+ + + + + +
+
+ + + +
-
- - - - + {/* 주의사항: 프로젝트 구성원 누구나 편집 (비민감 정보) */} +
+ 주의사항 · 구성원 누구나 편집 +