From 24980efca3240b4f576a5ad2018cda5b1ba0eb54 Mon Sep 17 00:00:00 2001 From: ledouxm Date: Mon, 23 Sep 2024 14:22:20 +0200 Subject: [PATCH] refactor: add useCanEdit hook --- .../frontend/src/features/ReportActions.tsx | 7 ++++--- .../frontend/src/hooks/useCanEditReport.tsx | 19 +++++++++++++++++++ .../frontend/src/routes/edit.$reportId.tsx | 14 ++------------ 3 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 packages/frontend/src/hooks/useCanEditReport.tsx diff --git a/packages/frontend/src/features/ReportActions.tsx b/packages/frontend/src/features/ReportActions.tsx index bafa7788..0b03f886 100644 --- a/packages/frontend/src/features/ReportActions.tsx +++ b/packages/frontend/src/features/ReportActions.tsx @@ -11,11 +11,12 @@ import { omit } from "pastable"; import { ReportWithUser } from "./ReportList"; import { useNavigate } from "@tanstack/react-router"; import { api } from "../api"; +import { useCanEditReport } from "../hooks/useCanEditReport"; export const ReportActions = forwardRef(({ report }, ref) => { const user = useUser()!; - const isOwner = report.createdBy === user.id; + const canEdit = useCanEditReport(report); const navigate = useNavigate(); @@ -44,7 +45,7 @@ export const ReportActions = forwardRef - {isOwner ? ( + {canEdit ? ( <> ) : null} - {isOwner ? ( + {canEdit ? ( <> { + const user = useUser()!; + const isOwner = report.redactedById === user.id; + const isCreator = report.createdBy === user.id; + + const userDelegations = useLiveQuery( + db.delegation.liveFirst({ where: { createdBy: report.createdBy, delegatedTo: user.id } }), + ); + + const hasDelegation = !!userDelegations.results; + const canEdit = isOwner || isCreator || hasDelegation; + + return canEdit; +}; diff --git a/packages/frontend/src/routes/edit.$reportId.tsx b/packages/frontend/src/routes/edit.$reportId.tsx index 1dc4fb07..b0801429 100644 --- a/packages/frontend/src/routes/edit.$reportId.tsx +++ b/packages/frontend/src/routes/edit.$reportId.tsx @@ -20,7 +20,7 @@ import { db } from "../db"; import { InfoForm } from "../features/InfoForm"; import { NotesForm } from "../features/NotesForm"; import { DisabledContext } from "../features/DisabledContext"; -import { useUser } from "../contexts/AuthContext"; +import { useCanEditReport } from "../hooks/useCanEditReport"; const EditReport = () => { const { reportId } = Route.useParams(); @@ -64,7 +64,6 @@ function useFormWithFocus(props: return [form, () => focusedRef.current] as const; } - const WithReport = ({ report }: { report: Report }) => { const { tab } = Route.useSearch(); const [form, getFocused] = useFormWithFocus({ @@ -72,16 +71,7 @@ const WithReport = ({ report }: { report: Report }) => { resetOptions: {}, }); - const user = useUser()!; - const isOwner = report.redactedById === user.id; - const isCreator = report.createdBy === user.id; - - const userDelegations = useLiveQuery( - db.delegation.liveFirst({ where: { createdBy: report.createdBy, delegatedTo: user.id } }), - ); - - const hasDelegation = !!userDelegations.results; - const canEdit = isOwner || isCreator || hasDelegation; + const canEdit = useCanEditReport(report); const navigate = useNavigate();