From 16d30665d046100364f75047362937505f6917d1 Mon Sep 17 00:00:00 2001 From: baslani Date: Mon, 17 Nov 2025 17:12:11 +0330 Subject: [PATCH] restructured actions for privacy office table --- .../privacy-office/PrivacyOfficeList.jsx | 21 +--- .../RowActions/ActionsDialog.jsx | 97 ++----------------- .../RowActions/ConfirmAction/index.jsx | 4 +- .../RowActions/Forms/ComputePaymentForm.jsx | 3 + .../RowActions/Forms/ConfirmFileForm.jsx | 3 + .../RowActions/Forms/ConfirmRequestForm.jsx | 3 + .../RowActions/Forms/ReferForm.jsx | 9 ++ .../RowActions/Forms/RejectFileForm.jsx | 3 + .../RowActions/Forms/RejectRequestForm.jsx | 3 + .../RowActions/ReferralAction/index.jsx | 4 +- .../RowActions/RejectAction/index.jsx | 4 +- .../RowActions/RenderActionForm.jsx | 76 +++++++++++++++ .../privacy-office/RowActions/index.jsx | 56 ++++++++--- src/core/utils/routes.js | 1 + 14 files changed, 161 insertions(+), 126 deletions(-) create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ComputePaymentForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmFileForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmRequestForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ReferForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectFileForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectRequestForm.jsx create mode 100644 src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RenderActionForm.jsx diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx index c339a16..b6932ca 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx @@ -12,10 +12,9 @@ import SecurityIcon from "@mui/icons-material/Security"; import WindowIcon from "@mui/icons-material/Window"; import { Box, Stack } from "@mui/material"; import moment from "jalali-moment"; -import { useMemo, useState } from "react"; +import { useMemo } from "react"; import RowActions from "./RowActions"; -import ActionDialog from "./RowActions/ActionsDialog"; import ShowPrimaryArea from "./ShowPrimaryArea"; const PrivacyOfficeList = () => { @@ -31,20 +30,6 @@ const PrivacyOfficeList = () => { if (state_id === 12) return ; }; - const [modal, setModal] = useState({ - open: false, - type: null, // "reject" | "confirm" | "referral" - rowId: null, - }); - - const handleOpenModal = (type, rowId) => { - setModal({ open: true, type, rowId }); - }; - - const handleCloseModal = () => { - setModal({ open: false, type: null, rowId: null }); - }; - const columns = useMemo(() => { return [ { @@ -250,11 +235,9 @@ const PrivacyOfficeList = () => { table_name={"PrivacyOfficeList"} enableRowActions positionActionsColumn={"first"} - RowActions={(props) => } + RowActions={RowActions} /> - - ); }; diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ActionsDialog.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ActionsDialog.jsx index 75a1bf6..92afece 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ActionsDialog.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ActionsDialog.jsx @@ -1,101 +1,18 @@ -import { - Box, - Button, - Checkbox, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - FormControlLabel, - TextField, -} from "@mui/material"; -import { useEffect, useState } from "react"; -import { Controller, useForm } from "react-hook-form"; - -const ActionDialog = ({ open, type, rowDataId, onClose }) => { - const [needsAccessRoad, setNeedsAccessRoad] = useState(false); - const { - control, - handleSubmit, - reset, - formState: { isSubmitting }, - } = useForm({ - defaultValues: { - expert_description: "", - need_payment: false, - }, - }); - - useEffect(() => { - if (open) { - reset({ - expert_description: "", - need_payment: false, - }); - } - }, [open, reset]); +import { Dialog, DialogTitle } from "@mui/material"; +import RenderActionForm from "./RenderActionForm"; +const ActionDialog = ({ open, type, rowData, onClose, mutate }) => { const actionLabel = { - reject: "رد درخواست", - confirm: "تایید درخواست", - referral: "ارجاع درخواست", + reject_request: "رد درخواست", + confirm_request: "تایید درخواست", + refer_request: "ارجاع درخواست", }[type]; - const onSubmit = (formData) => { - console.log("Row data id:", rowDataId); - console.log("Action type:", type); - console.log("Form data:", formData); - - // TODO: Implement the API call here - - onClose(); - }; - return ( {actionLabel} - - - } - /> - {type === "confirm" && ( - <> - ( - } - label="نیاز به پرداخت" - /> - )} - /> - setNeedsAccessRoad(e.target.checked)} - /> - } - label="به راه دسترسی نیاز دارد" - /> - - )} - - - - - - - + ); }; diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx index ca0b3d5..bdb4b35 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx @@ -1,11 +1,11 @@ import ThumbUpIcon from "@mui/icons-material/ThumbUp"; import { IconButton, Tooltip } from "@mui/material"; -const ConfirmAction = ({ onClick }) => { +const ConfirmAction = ({ onClick, disabled }) => { return ( <> - + diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ComputePaymentForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ComputePaymentForm.jsx new file mode 100644 index 0000000..d40f0a3 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ComputePaymentForm.jsx @@ -0,0 +1,3 @@ +export default function ComputePaymentForm({ mutate }) { + return
ComputePaymentForm
; +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmFileForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmFileForm.jsx new file mode 100644 index 0000000..5f98d49 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmFileForm.jsx @@ -0,0 +1,3 @@ +export default function ConfirmFileForm({ mutate }) { + return
ConfirmFileForm
; +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmRequestForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmRequestForm.jsx new file mode 100644 index 0000000..5d0ca86 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ConfirmRequestForm.jsx @@ -0,0 +1,3 @@ +export default function ConfirmRequestForm({ mutate }) { + return
ConfirmRequestForm
; +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ReferForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ReferForm.jsx new file mode 100644 index 0000000..543bc33 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/ReferForm.jsx @@ -0,0 +1,9 @@ +import { Box } from "@mui/material"; + +export default function ReferForm({ mutate }) { + return ( + +
+
+ ); +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectFileForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectFileForm.jsx new file mode 100644 index 0000000..42080a3 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectFileForm.jsx @@ -0,0 +1,3 @@ +export default function RejectFileForm({ mutate }) { + return
RejectFileForm
; +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectRequestForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectRequestForm.jsx new file mode 100644 index 0000000..bca7ee3 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/Forms/RejectRequestForm.jsx @@ -0,0 +1,3 @@ +export default function RejectRequestForm({ mutate }) { + return
RejectRequestForm
; +} diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ReferralAction/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ReferralAction/index.jsx index 7f56971..a75ef8c 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ReferralAction/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ReferralAction/index.jsx @@ -1,11 +1,11 @@ import { Reply } from "@mui/icons-material"; import { IconButton, Tooltip } from "@mui/material"; -const ReferralAction = ({ onClick }) => { +const ReferralAction = ({ onClick, disabled }) => { return ( <> - + diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx index b2e40ab..edd0346 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx @@ -1,11 +1,11 @@ import ThumbDownIcon from "@mui/icons-material/ThumbDown"; import { IconButton, Tooltip } from "@mui/material"; -const RejectAction = ({ onClick }) => { +const RejectAction = ({ onClick, disabled }) => { return ( <> - + diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RenderActionForm.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RenderActionForm.jsx new file mode 100644 index 0000000..d901c13 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RenderActionForm.jsx @@ -0,0 +1,76 @@ +import { DialogContent } from "@mui/material"; +import ComputePaymentForm from "./Forms/ComputePaymentForm"; +import ConfirmFileForm from "./Forms/ConfirmFileForm"; +import ConfirmRequestForm from "./Forms/ConfirmRequestForm"; +import ReferForm from "./Forms/ReferForm"; +import RejectFileForm from "./Forms/RejectFileForm"; +import RejectRequestForm from "./Forms/RejectRequestForm"; + +export default function RenderActionForm({ type, rowData, mutate }) { + const formType = `${type}_${rowData?.state_id}`; + + console.log(formType); + + function renderForm() { + switch (formType) { + case "refer_request_2": + return ; + case "reject_request_2": + return ; + case "reject_request_5": + return ; + case "confirm_request_2": + return ; + case "confirm_request_5": + return ; + case "confirm_request_13": + return ; + default: + return <>; + } + } + + return {renderForm(formType)}; +} + +/* + + } + /> + {type === "confirm_request" && ( + <> + ( + } + label="نیاز به پرداخت وجه خزانه" + /> + )} + /> + setNeedsAccessRoad(e.target.checked)} + /> + } + label="نیاز به راه دسترسی" + /> + + )} + + + + + + +*/ diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx index 61c5a54..6cc004d 100644 --- a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx @@ -1,20 +1,54 @@ import { Box } from "@mui/material"; +import { useState } from "react"; +import ActionDialog from "./ActionsDialog"; import ConfirmAction from "./ConfirmAction"; import ReferralAction from "./ReferralAction"; import RejectAction from "./RejectAction"; -const RowActions = ({ - row: { - original: { id }, - }, - onActionClick, -}) => { +const RowActions = ({ row: { original }, mutate }) => { + const [modal, setModal] = useState({ + open: false, + type: null, // "reject_request" | "confirm_request" | "refer_request" + rowData: null, + }); + + const handleOpenModal = (type, rowData) => { + setModal({ open: true, type, rowData }); + }; + + const handleCloseModal = () => { + setModal({ open: false, type: null, rowData: null }); + }; + + const stateId = original.state_id; + + const disabled = { + referral: stateId !== 2, + reject: stateId !== 2 && stateId !== 5, + confirm: stateId !== 2 && stateId !== 5 && stateId !== 13, + }; + return ( - - onActionClick("referral", id)} /> - onActionClick("reject", id)} /> - onActionClick("confirm", id)} /> - + <> + + handleOpenModal("refer_request", original)} + disabled={disabled.referral} + /> + handleOpenModal("reject_request", original)} disabled={disabled.reject} /> + handleOpenModal("confirm_request", original)} + disabled={disabled.confirm} + /> + + + ); }; diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index 8572b6f..b2bb76d 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -240,3 +240,4 @@ export const GET_CITY_ADMIN_LIST = api + "/api/v3/harim/province_office"; export const GET_INQUIRY_PRIVACY_STATE_LIST = api + "/api/v3/harim/detail/states"; export const CITY_ADMIN_FEEDBACK = api + "/api/v3/harim/province_office/feedback"; export const GET_PRIVACY_ADMIN_LIST = api + "/api/v3/harim/harim_office"; +export const PRIVACY_ADMIN_ACTION_API = api + "/api/v3/harim/harim_office";