Fix: steward add buyer cleaner
This commit is contained in:
@@ -182,12 +182,16 @@ export const InquiryForStewardAddBuyer = ({
|
||||
})
|
||||
).then((r) => {
|
||||
dispatch(LOADING_END());
|
||||
if (r.error) {
|
||||
const hasError = r.error || r.payload?.error;
|
||||
if (hasError) {
|
||||
setNotFound(true);
|
||||
openNotif({
|
||||
vertical: "top",
|
||||
horizontal: "center",
|
||||
msg: "خریدار یافت نشد، یک خریدار جدید ثبت کنید!",
|
||||
msg:
|
||||
typeof hasError === "string"
|
||||
? hasError
|
||||
: "خریدار یافت نشد، یک خریدار جدید ثبت کنید!",
|
||||
severity: "error",
|
||||
});
|
||||
} else {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, { useContext, useEffect, useState } from "react";
|
||||
import React, { useContext, useEffect, useState, useCallback } from "react";
|
||||
import { Grid } from "../../../../components/grid/Grid";
|
||||
import { Button } from "@mui/material";
|
||||
import { Yup } from "../../../../lib/yup/yup";
|
||||
@@ -43,59 +43,74 @@ import {
|
||||
import { inspectorGetKillHousesService } from "../../../inspector/services/inspector-get-kill-houses";
|
||||
import { slaughterGetStewardsForAllocateService } from "../../../slaughter-house/services/slaughter-get-guilds-for-allocate";
|
||||
|
||||
// userType enums = steward | steward_true | steward_legal | _true | _legal
|
||||
const PAGE_STEWARD = "steward_add_buyer";
|
||||
const PAGE_SLAUGHTER = "slaughter_add_buyer";
|
||||
const PAGE_SLAUGHTER_MANAGE = "slaughter_manage_add_buyer";
|
||||
const PAGE_ADMIN = "admin_add_buyer";
|
||||
|
||||
const ADMIN_ROUTES = [
|
||||
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
|
||||
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
|
||||
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL,
|
||||
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_TRUE,
|
||||
];
|
||||
|
||||
const getCurrentPage = (role, pathname) => {
|
||||
if (role === "Steward") {
|
||||
if (pathname === ROUTE_STEWARD_SALE_OUT_PROVINCE) {
|
||||
return "steward_add_buyer";
|
||||
}
|
||||
if (role === "Steward" && pathname === ROUTE_STEWARD_SALE_OUT_PROVINCE) {
|
||||
return PAGE_STEWARD;
|
||||
}
|
||||
if (role === "KillHouse") {
|
||||
if (pathname === ROUTE_SLAUGHTER_INVENTORY_SELL_CARCASS_OUT_PROVINCE) {
|
||||
return "slaughter_add_buyer";
|
||||
return PAGE_SLAUGHTER;
|
||||
}
|
||||
if (pathname === ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE) {
|
||||
return "slaughter_manage_add_buyer";
|
||||
return PAGE_SLAUGHTER_MANAGE;
|
||||
}
|
||||
}
|
||||
if (role === "AdminX") {
|
||||
const routes = [
|
||||
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
|
||||
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
|
||||
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL,
|
||||
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_TRUE,
|
||||
];
|
||||
if (routes.some((r) => r === pathname)) {
|
||||
return "admin_add_buyer";
|
||||
}
|
||||
if (role === "AdminX" && ADMIN_ROUTES.some((r) => r === pathname)) {
|
||||
return PAGE_ADMIN;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const INITIAL_VALUES_BASE = {
|
||||
mobile: "",
|
||||
firstName: "",
|
||||
lastName: "",
|
||||
unit_name: "",
|
||||
province: "",
|
||||
city: "",
|
||||
};
|
||||
|
||||
const getInitialValues = (page) => {
|
||||
const initialValues = {
|
||||
mobile: "",
|
||||
firstName: "",
|
||||
lastName: "",
|
||||
unit_name: "",
|
||||
province: "",
|
||||
city: "",
|
||||
};
|
||||
if (page === "steward_add_buyer" || page === "slaughter_manage_add_buyer") {
|
||||
return initialValues;
|
||||
} else if (page === "slaughter_add_buyer") {
|
||||
return {
|
||||
...initialValues,
|
||||
nationalId: "",
|
||||
};
|
||||
} else if (page === "admin_add_buyer") {
|
||||
return {
|
||||
...initialValues,
|
||||
role_key: "",
|
||||
type: "",
|
||||
};
|
||||
if (page === PAGE_SLAUGHTER) {
|
||||
return { ...INITIAL_VALUES_BASE, nationalId: "" };
|
||||
}
|
||||
if (page === PAGE_ADMIN) {
|
||||
return { ...INITIAL_VALUES_BASE, role_key: "", type: "" };
|
||||
}
|
||||
return { ...INITIAL_VALUES_BASE };
|
||||
};
|
||||
|
||||
const getValidationSchema = (page, isRealPerson, isEdit) => {
|
||||
if (page === PAGE_STEWARD) return validationSchemaForStewardAddBuyer;
|
||||
if (page === PAGE_SLAUGHTER || page === PAGE_SLAUGHTER_MANAGE) {
|
||||
return validationSchemaForSlaughterAddBuyer(isRealPerson, isEdit);
|
||||
}
|
||||
if (page === PAGE_ADMIN) {
|
||||
return validationSchemaForAdminAddBuyer(isRealPerson, isEdit);
|
||||
}
|
||||
return Yup.object({});
|
||||
};
|
||||
|
||||
const setFormDataFromTableData = (page, data, formik) => {
|
||||
if (page === PAGE_STEWARD) {
|
||||
handleSetFormDataFromTableDataForStewardAddBuyer(data, formik);
|
||||
} else if (page === PAGE_SLAUGHTER || page === PAGE_SLAUGHTER_MANAGE) {
|
||||
handleSetFormDataFromTableDataForSlaughterAddBuyer(data, formik);
|
||||
} else if (page === PAGE_ADMIN) {
|
||||
handleSetFormDataFromTableDataForAdminAddBuyer(data, formik);
|
||||
}
|
||||
return initialValues;
|
||||
};
|
||||
|
||||
export const StewardAddBuyer = ({
|
||||
@@ -104,18 +119,16 @@ export const StewardAddBuyer = ({
|
||||
data,
|
||||
isRealPerson,
|
||||
buyerType = "",
|
||||
// buyerYype => "Guilds" | "Steward"
|
||||
}) => {
|
||||
const role = getRoleFromUrl();
|
||||
const { pathname } = useLocation();
|
||||
const dispatch = useDispatch();
|
||||
const [openNotif] = useContext(AppContext);
|
||||
const [notFound, setNotFound] = useState(false);
|
||||
const { selectedSubUser } = useSelector((state) => state.userSlice);
|
||||
|
||||
const page = getCurrentPage(role, pathname);
|
||||
|
||||
const IS_STEWARD_ADD_BUYER = page === "steward_add_buyer";
|
||||
const IS_SLAUGHTER_ADD_BUYER = page === "slaughter_add_buyer";
|
||||
const IS_SLAUGHTER_MANAGE_ADD_BUYER = page === "slaughter_manage_add_buyer";
|
||||
const IS_ADMIN_ADD_BUYER = page === "admin_add_buyer";
|
||||
|
||||
const {
|
||||
killHouses,
|
||||
stewards,
|
||||
@@ -127,71 +140,190 @@ export const StewardAddBuyer = ({
|
||||
setUserData,
|
||||
} = useAddBuyer(page);
|
||||
|
||||
const { selectedSubUser } = useSelector((state) => state.userSlice);
|
||||
|
||||
const [openNotif] = useContext(AppContext);
|
||||
const [notFound, setNotFound] = useState(false);
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const formik = useFormik({
|
||||
initialValues: getInitialValues(page),
|
||||
validationSchema: IS_STEWARD_ADD_BUYER
|
||||
? validationSchemaForStewardAddBuyer
|
||||
: IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER
|
||||
? validationSchemaForSlaughterAddBuyer(isRealPerson, isEdit)
|
||||
: IS_ADMIN_ADD_BUYER
|
||||
? validationSchemaForAdminAddBuyer(isRealPerson, isEdit)
|
||||
: Yup.object({}),
|
||||
validationSchema: getValidationSchema(page, isRealPerson, isEdit),
|
||||
});
|
||||
|
||||
// Re-validate when switching to edit mode
|
||||
useEffect(() => {
|
||||
if (isEdit) {
|
||||
formik.validateForm();
|
||||
}
|
||||
if (isEdit) formik.validateForm();
|
||||
}, [isEdit]);
|
||||
|
||||
// Populate form when editing
|
||||
useEffect(() => {
|
||||
if (IS_ADMIN_ADD_BUYER) {
|
||||
if (formik.values.type === "KillHouse") {
|
||||
dispatch(inspectorGetKillHousesService());
|
||||
} else {
|
||||
dispatch(
|
||||
slaughterGetStewardsForAllocateService({
|
||||
free: true,
|
||||
})
|
||||
).then((r) => {
|
||||
setStewards(r.payload.data || []);
|
||||
});
|
||||
}
|
||||
if (isEdit && page && data) {
|
||||
setFormDataFromTableData(page, data, formik);
|
||||
}
|
||||
}, [formik.values.type]);
|
||||
}, [isEdit, page]);
|
||||
|
||||
// Load cities when province changes
|
||||
useEffect(() => {
|
||||
if (isEdit) {
|
||||
if (IS_STEWARD_ADD_BUYER) {
|
||||
handleSetFormDataFromTableDataForStewardAddBuyer(data, formik);
|
||||
}
|
||||
if (IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER) {
|
||||
handleSetFormDataFromTableDataForSlaughterAddBuyer(data, formik);
|
||||
}
|
||||
if (IS_ADMIN_ADD_BUYER) {
|
||||
handleSetFormDataFromTableDataForAdminAddBuyer(data, formik);
|
||||
}
|
||||
if (!formik.values.province) {
|
||||
setCityData([]);
|
||||
return;
|
||||
}
|
||||
}, [isEdit]);
|
||||
setCityData([]);
|
||||
dispatch(slaughterGetCitiesService(formik.values.province)).then((r) => {
|
||||
setCityData(r.payload?.data ?? []);
|
||||
});
|
||||
}, [formik.values.province, dispatch]);
|
||||
|
||||
// Admin: load stewards or kill houses by type
|
||||
useEffect(() => {
|
||||
if (formik.values.province) {
|
||||
setCityData(
|
||||
[],
|
||||
dispatch(slaughterGetCitiesService(formik.values.province)).then(
|
||||
(r) => {
|
||||
setCityData(r.payload.data);
|
||||
}
|
||||
)
|
||||
if (page !== PAGE_ADMIN) return;
|
||||
if (formik.values.type === "KillHouse") {
|
||||
dispatch(inspectorGetKillHousesService());
|
||||
} else {
|
||||
dispatch(slaughterGetStewardsForAllocateService({ free: true })).then(
|
||||
(r) => {
|
||||
setStewards(r.payload?.data ?? []);
|
||||
}
|
||||
);
|
||||
}
|
||||
}, [formik.values.province]);
|
||||
}, [page, formik.values.type, dispatch]);
|
||||
|
||||
const handleSubmit = useCallback(() => {
|
||||
if (page === PAGE_STEWARD) {
|
||||
handleSubmitForStewardAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
role
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (page === PAGE_SLAUGHTER) {
|
||||
handleSubmitForSlaughterAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
selectedSubUser,
|
||||
isRealPerson
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (page === PAGE_SLAUGHTER_MANAGE) {
|
||||
handleSubmitForSlaughterAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
selectedSubUser,
|
||||
isRealPerson,
|
||||
buyerType
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (page === PAGE_ADMIN) {
|
||||
handleSubmitForAdminAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
isRealPerson,
|
||||
buyerType
|
||||
);
|
||||
}
|
||||
}, [
|
||||
page,
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
role,
|
||||
selectedSubUser,
|
||||
isRealPerson,
|
||||
buyerType,
|
||||
]);
|
||||
|
||||
const showInquiry = !isEdit && page;
|
||||
const showForm = (userData || notFound || isEdit) && page;
|
||||
|
||||
const inquiryProps = {
|
||||
notFound,
|
||||
setNotFound,
|
||||
setUserData,
|
||||
formik,
|
||||
};
|
||||
|
||||
const formProps = {
|
||||
formik,
|
||||
provinceData,
|
||||
cityData,
|
||||
notFound,
|
||||
};
|
||||
|
||||
const renderInquiry = () => {
|
||||
if (!showInquiry) return null;
|
||||
if (page === PAGE_STEWARD) {
|
||||
return <InquiryForStewardAddBuyer {...inquiryProps} />;
|
||||
}
|
||||
if (page === PAGE_SLAUGHTER || page === PAGE_SLAUGHTER_MANAGE) {
|
||||
return (
|
||||
<InquiryForSlaughterAddBuyer
|
||||
{...inquiryProps}
|
||||
isEdit={isEdit}
|
||||
isRealPerson={isRealPerson}
|
||||
provinceData={provinceData}
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (page === PAGE_ADMIN) {
|
||||
return (
|
||||
<InquiryForAdminAddBuyer
|
||||
{...inquiryProps}
|
||||
isEdit={isEdit}
|
||||
isRealPerson={isRealPerson}
|
||||
provinceData={provinceData}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const renderForm = () => {
|
||||
if (!showForm) return null;
|
||||
if (page === PAGE_STEWARD) {
|
||||
return <StewardAddBuyerForm {...formProps} />;
|
||||
}
|
||||
if (page === PAGE_SLAUGHTER || page === PAGE_SLAUGHTER_MANAGE) {
|
||||
return (
|
||||
<SlaughterAddBuyerForm {...formProps} isRealPerson={isRealPerson} />
|
||||
);
|
||||
}
|
||||
if (page === PAGE_ADMIN) {
|
||||
return (
|
||||
<AdminAddBuyerForm
|
||||
{...formProps}
|
||||
isRealPerson={isRealPerson}
|
||||
killHouses={killHouses}
|
||||
stewards={stewards}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
if (!page) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Grid
|
||||
@@ -202,124 +334,15 @@ export const StewardAddBuyer = ({
|
||||
direction="column"
|
||||
gap={2}
|
||||
>
|
||||
{!isEdit ? (
|
||||
IS_STEWARD_ADD_BUYER ? (
|
||||
<InquiryForStewardAddBuyer
|
||||
notFound={notFound}
|
||||
setNotFound={setNotFound}
|
||||
setUserData={setUserData}
|
||||
formik={formik}
|
||||
/>
|
||||
) : IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER ? (
|
||||
<InquiryForSlaughterAddBuyer
|
||||
notFound={notFound}
|
||||
setNotFound={setNotFound}
|
||||
setUserData={setUserData}
|
||||
formik={formik}
|
||||
isEdit={isEdit}
|
||||
isRealPerson={isRealPerson}
|
||||
provinceData={provinceData}
|
||||
/>
|
||||
) : IS_ADMIN_ADD_BUYER ? (
|
||||
<InquiryForAdminAddBuyer
|
||||
notFound={notFound}
|
||||
setNotFound={setNotFound}
|
||||
setUserData={setUserData}
|
||||
formik={formik}
|
||||
isEdit={isEdit}
|
||||
isRealPerson={isRealPerson}
|
||||
provinceData={provinceData}
|
||||
/>
|
||||
) : null
|
||||
) : null}
|
||||
{userData || notFound || isEdit ? (
|
||||
IS_STEWARD_ADD_BUYER ? (
|
||||
<StewardAddBuyerForm
|
||||
formik={formik}
|
||||
provinceData={provinceData}
|
||||
cityData={cityData}
|
||||
notFound={notFound}
|
||||
/>
|
||||
) : IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER ? (
|
||||
<SlaughterAddBuyerForm
|
||||
formik={formik}
|
||||
provinceData={provinceData}
|
||||
cityData={cityData}
|
||||
notFound={notFound}
|
||||
isRealPerson={isRealPerson}
|
||||
/>
|
||||
) : IS_ADMIN_ADD_BUYER ? (
|
||||
<AdminAddBuyerForm
|
||||
formik={formik}
|
||||
provinceData={provinceData}
|
||||
cityData={cityData}
|
||||
notFound={notFound}
|
||||
isRealPerson={isRealPerson}
|
||||
killHouses={killHouses}
|
||||
stewards={stewards}
|
||||
/>
|
||||
) : null
|
||||
) : null}
|
||||
{(userData || notFound || isEdit) && (
|
||||
{renderInquiry()}
|
||||
{renderForm()}
|
||||
{showForm && (
|
||||
<Grid container xs={12}>
|
||||
<Button
|
||||
fullWidth
|
||||
variant="contained"
|
||||
disabled={!formik.isValid}
|
||||
onClick={() => {
|
||||
if (IS_STEWARD_ADD_BUYER) {
|
||||
handleSubmitForStewardAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
role
|
||||
);
|
||||
}
|
||||
if (IS_SLAUGHTER_ADD_BUYER) {
|
||||
handleSubmitForSlaughterAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
selectedSubUser,
|
||||
isRealPerson
|
||||
);
|
||||
}
|
||||
if (IS_SLAUGHTER_MANAGE_ADD_BUYER) {
|
||||
handleSubmitForSlaughterAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
selectedSubUser,
|
||||
isRealPerson,
|
||||
buyerType
|
||||
);
|
||||
}
|
||||
if (IS_ADMIN_ADD_BUYER) {
|
||||
handleSubmitForAdminAddBuyer(
|
||||
formik,
|
||||
dispatch,
|
||||
isEdit,
|
||||
data,
|
||||
updateTable,
|
||||
openNotif,
|
||||
DRAWER,
|
||||
isRealPerson,
|
||||
buyerType
|
||||
);
|
||||
}
|
||||
}}
|
||||
onClick={handleSubmit}
|
||||
>
|
||||
{isEdit ? "ویرایش" : "ثبت"}
|
||||
</Button>
|
||||
|
||||
@@ -20,13 +20,16 @@ export const useAddBuyer = (page) => {
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (page === "admin_add_buyer") {
|
||||
const d = inspectorGetKillHouses?.map((item) => {
|
||||
return { name: item.name, key: item.key, killer: item.killer };
|
||||
});
|
||||
setKillhouses(d);
|
||||
if (page === "admin_add_buyer" && inspectorGetKillHouses?.length) {
|
||||
setKillhouses(
|
||||
inspectorGetKillHouses.map((item) => ({
|
||||
name: item.name,
|
||||
key: item.key,
|
||||
killer: item.killer,
|
||||
}))
|
||||
);
|
||||
}
|
||||
}, [inspectorGetKillHouses]);
|
||||
}, [page, inspectorGetKillHouses]);
|
||||
|
||||
return {
|
||||
killHouses,
|
||||
|
||||
Reference in New Issue
Block a user