135 lines
4.0 KiB
TypeScript
135 lines
4.0 KiB
TypeScript
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>
|
||
);
|
||
};
|