refactor: organized components based on domain
This commit is contained in:
134
src/partials/LiveStock/units/CooperativesSettingsTable.tsx
Normal file
134
src/partials/LiveStock/units/CooperativesSettingsTable.tsx
Normal file
@@ -0,0 +1,134 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useApiRequest } from "../../../utils/useApiRequest";
|
||||
import { Grid } from "../../../components/Grid/Grid";
|
||||
import Table from "../../../components/Table/Table";
|
||||
import ShowMoreInfo from "../../../components/ShowMoreInfo/ShowMoreInfo";
|
||||
import ShowStringList from "../../../components/ShowStringList/ShowStringList";
|
||||
import { AddActivityTypeSettings } from "./AddActivityTypeSettings";
|
||||
|
||||
type SettingsType = "purchase_policy" | "service_area";
|
||||
|
||||
type CooperativesSettingsTableProps = {
|
||||
settingsType: SettingsType;
|
||||
};
|
||||
|
||||
export const CooperativesSettingsTable = ({
|
||||
settingsType,
|
||||
}: CooperativesSettingsTableProps) => {
|
||||
const [pagesInfo, setPagesInfo] = useState({ page: 1, page_size: 10 });
|
||||
const [cooperativesTableData, setCooperativesTableData] = useState([]);
|
||||
|
||||
const { data: cooperativesData, refetch } = useApiRequest({
|
||||
api: "herd/web/api/v1/rancher_org_link/org_linked_rancher_list",
|
||||
method: "get",
|
||||
params: {
|
||||
...pagesInfo,
|
||||
},
|
||||
queryKey: ["cooperatives-settings", pagesInfo],
|
||||
});
|
||||
|
||||
const handleUpdate = () => {
|
||||
refetch();
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (cooperativesData?.results) {
|
||||
const formattedData = cooperativesData.results.map(
|
||||
(item: any, i: number) => {
|
||||
const baseColumns = [
|
||||
pagesInfo.page === 1
|
||||
? i + 1
|
||||
: i + pagesInfo.page_size * (pagesInfo.page - 1) + 1,
|
||||
item?.name || "-",
|
||||
item?.province || "-",
|
||||
item?.city || "-",
|
||||
item?.rancher_count || 0,
|
||||
item?.herd_count || 0,
|
||||
item?.livestock_count || 0,
|
||||
];
|
||||
|
||||
let lastColumn: React.ReactNode;
|
||||
|
||||
if (settingsType === "service_area") {
|
||||
lastColumn = item?.org_service_area?.length ? (
|
||||
<ShowMoreInfo key={i} title="محدوده فعالیت">
|
||||
<Grid
|
||||
container
|
||||
column
|
||||
className="gap-2 p-2 justify-start items-start w-full"
|
||||
>
|
||||
<ShowStringList
|
||||
showSearch={false}
|
||||
strings={item.org_service_area.map(
|
||||
(city: any) => city.name,
|
||||
)}
|
||||
/>
|
||||
</Grid>
|
||||
</ShowMoreInfo>
|
||||
) : (
|
||||
"-"
|
||||
);
|
||||
} else {
|
||||
lastColumn =
|
||||
item?.org_purchase_policy === "INTERNAL_ONLY"
|
||||
? "بر اساس تعاونی"
|
||||
: item?.org_purchase_policy === "CROSS_COOP"
|
||||
? "برای کل استان"
|
||||
: "-";
|
||||
}
|
||||
|
||||
// Add editable component
|
||||
const editableColumn = (
|
||||
<AddActivityTypeSettings
|
||||
key={i}
|
||||
item={item}
|
||||
settingsType={settingsType}
|
||||
onUpdate={handleUpdate}
|
||||
/>
|
||||
);
|
||||
|
||||
return [...baseColumns, lastColumn, editableColumn];
|
||||
},
|
||||
);
|
||||
setCooperativesTableData(formattedData);
|
||||
}
|
||||
}, [cooperativesData, pagesInfo, settingsType]);
|
||||
|
||||
const getColumns = () => {
|
||||
const baseColumns = [
|
||||
"ردیف",
|
||||
"نام",
|
||||
"استان",
|
||||
"شهر",
|
||||
"تعداد دامدار",
|
||||
"تعداد گله",
|
||||
"تعداد دام",
|
||||
];
|
||||
|
||||
if (settingsType === "service_area") {
|
||||
return [...baseColumns, "محدوده فعالیت", "ویرایش محدوده فعالیت"];
|
||||
} else {
|
||||
return [...baseColumns, "محدودیت دریافت نهاده", "ویرایش محدودیت"];
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Grid container column className="gap-4 mt-2">
|
||||
<Table
|
||||
className="mt-2"
|
||||
onChange={(e) => {
|
||||
setPagesInfo(e);
|
||||
}}
|
||||
count={cooperativesData?.count || 10}
|
||||
isPaginated
|
||||
title={
|
||||
settingsType === "service_area"
|
||||
? "محدوده فعالیت تعاونی ها"
|
||||
: "محدودیت دریافت نهاده تعاونی ها"
|
||||
}
|
||||
columns={getColumns()}
|
||||
rows={cooperativesTableData}
|
||||
/>
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user