|
|
|
|
@ -1,17 +1,105 @@
|
|
|
|
|
import { Table } from "../Table";
|
|
|
|
|
import { columns } from "../InitialTable/columns";
|
|
|
|
|
import { useQuery } from "@tanstack/react-query";
|
|
|
|
|
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
|
import { api } from "../../../api";
|
|
|
|
|
import { useCallback, useState } from "react";
|
|
|
|
|
import { PAGE_SIZE } from "../constants";
|
|
|
|
|
import { STATUSES } from "../../../config";
|
|
|
|
|
import { useMergeTableData } from "../useMergeTableData";
|
|
|
|
|
import { Button, Select } from "antd";
|
|
|
|
|
import { useUpdateStatus } from "../../../hooks/useUpdateStatus";
|
|
|
|
|
|
|
|
|
|
const statusOptions = [
|
|
|
|
|
{ label: STATUSES.approve, value: STATUSES.approve },
|
|
|
|
|
{ label: STATUSES.working, value: STATUSES.working },
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const StatusSelect = ({ value, onChange, disabled }) => {
|
|
|
|
|
const handleClick = (e) => e.stopPropagation();
|
|
|
|
|
|
|
|
|
|
const handleChange = (value) => {
|
|
|
|
|
onChange(value);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Select
|
|
|
|
|
style={{
|
|
|
|
|
width: 250,
|
|
|
|
|
}}
|
|
|
|
|
value={value}
|
|
|
|
|
onChange={handleChange}
|
|
|
|
|
options={statusOptions}
|
|
|
|
|
disabled={disabled}
|
|
|
|
|
placeholder="Выберите статус"
|
|
|
|
|
onClick={handleClick}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const ChangeStatusButton = ({ selectedIds, selectedStatus }) => {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
const { mutate: updateStatus } = useUpdateStatus({
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries(["approve-points"]);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const handleClick = (e) => {
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
|
|
|
|
|
const params = new URLSearchParams({
|
|
|
|
|
status: selectedStatus,
|
|
|
|
|
"location_ids[]": selectedIds,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
updateStatus(params);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Button type="primary" onClick={handleClick}>
|
|
|
|
|
Обновить статус
|
|
|
|
|
</Button>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const Header = ({ selectedIds, onClearSelected }) => {
|
|
|
|
|
const [status, setStatus] = useState(STATUSES.approve);
|
|
|
|
|
|
|
|
|
|
const handleClear = (e) => {
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
onClearSelected();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className={"flex items-center w-full justify-between"}>
|
|
|
|
|
<div className={"flex items-center gap-x-4"}>
|
|
|
|
|
<span className="py-[5px]">Таблица атрибутов</span>
|
|
|
|
|
{selectedIds.length > 0 && (
|
|
|
|
|
<>
|
|
|
|
|
<StatusSelect value={status} onChange={setStatus} />
|
|
|
|
|
<ChangeStatusButton
|
|
|
|
|
selectedIds={selectedIds}
|
|
|
|
|
selectedStatus={status}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
{selectedIds.length > 0 && (
|
|
|
|
|
<Button type="text" onClick={handleClear}>
|
|
|
|
|
Очистить все
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const ApproveTable = () => {
|
|
|
|
|
const [pageSize, setPageSize] = useState(PAGE_SIZE);
|
|
|
|
|
const [page, setPage] = useState(1);
|
|
|
|
|
const [selectedIds, setSelectedIds] = useState([]);
|
|
|
|
|
console.log(selectedIds);
|
|
|
|
|
|
|
|
|
|
const clearSelected = () => setSelectedIds([]);
|
|
|
|
|
|
|
|
|
|
const { data } = useQuery(["approve-points"], async () => {
|
|
|
|
|
const params = new URLSearchParams({
|
|
|
|
|
@ -35,13 +123,16 @@ export const ApproveTable = () => {
|
|
|
|
|
const handlePageChange = useCallback((page) => setPage(page), []);
|
|
|
|
|
|
|
|
|
|
const rowSelection = {
|
|
|
|
|
onChange: (selectedRowKeys) => {
|
|
|
|
|
setSelectedIds(selectedRowKeys);
|
|
|
|
|
},
|
|
|
|
|
selectedRowKeys: selectedIds,
|
|
|
|
|
onChange: (selectedRowKeys) => setSelectedIds(selectedRowKeys),
|
|
|
|
|
hideSelectAll: true,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Table
|
|
|
|
|
header={
|
|
|
|
|
<Header selectedIds={selectedIds} onClearSelected={clearSelected} />
|
|
|
|
|
}
|
|
|
|
|
rowSelection={rowSelection}
|
|
|
|
|
data={mergedData}
|
|
|
|
|
onPageChange={handlePageChange}
|
|
|
|
|
|