|
|
|
|
@ -5,45 +5,119 @@ import { Title } from "../../../components/Title";
|
|
|
|
|
import { useQueryClient } from "@tanstack/react-query";
|
|
|
|
|
import { useUpdateStatus } from "../../../hooks/useUpdateStatus";
|
|
|
|
|
import { StatusSelect } from "../../../components/StatusSelect";
|
|
|
|
|
import { useCanEdit } from "../../../api";
|
|
|
|
|
import { useCanEdit, useUpdatePostamatId } from "../../../api";
|
|
|
|
|
import { Button, InputNumber } from "antd";
|
|
|
|
|
import { STATUSES } from "../../../config";
|
|
|
|
|
import { isNil } from "../../../utils.js";
|
|
|
|
|
|
|
|
|
|
export const OnApprovalPointPopup = ({ feature }) => {
|
|
|
|
|
const featureId = feature.properties.id;
|
|
|
|
|
const { setClickedPointConfig } = useClickedPointConfig();
|
|
|
|
|
const [status, setStatus] = useState(feature.properties.status);
|
|
|
|
|
|
|
|
|
|
const { status: initialStatus, postamat_id: initialPostamatId } =
|
|
|
|
|
feature.properties;
|
|
|
|
|
const [status, setStatus] = useState(initialStatus);
|
|
|
|
|
|
|
|
|
|
const [postamatId, setPostamatId] = useState(initialPostamatId);
|
|
|
|
|
const [needToFillPostamatId, setNeedToFillPostamatId] = useState(
|
|
|
|
|
status === STATUSES.working && isNil(postamatId)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const [error, setError] = useState("");
|
|
|
|
|
|
|
|
|
|
useEffect(() => setClickedPointConfig(featureId, false), [feature]);
|
|
|
|
|
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
const { mutate: updateStatus } = useUpdateStatus({
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
const onSuccess = () => {
|
|
|
|
|
queryClient.invalidateQueries(["on-approval-points"]);
|
|
|
|
|
queryClient.invalidateQueries(["clicked-point", featureId]);
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const { mutateAsync: updateStatus, isLoading: isStatusUpdating } =
|
|
|
|
|
useUpdateStatus({});
|
|
|
|
|
const { mutateAsync: updatePostamatId, isLoading: isPostamatIdUpdating } =
|
|
|
|
|
useUpdatePostamatId();
|
|
|
|
|
|
|
|
|
|
const isUpdating = isStatusUpdating || isPostamatIdUpdating;
|
|
|
|
|
|
|
|
|
|
const makeWorking = async () => {
|
|
|
|
|
const updatePostamatIdParams = new URLSearchParams({
|
|
|
|
|
id: featureId,
|
|
|
|
|
postamat_id: postamatId,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const updateStatusParams = new URLSearchParams({
|
|
|
|
|
status: STATUSES.working,
|
|
|
|
|
"location_ids[]": [featureId],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await updatePostamatId(updatePostamatIdParams);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
setError("Указанный id уже существует, попробуйте другой");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await updateStatus(updateStatusParams);
|
|
|
|
|
|
|
|
|
|
onSuccess();
|
|
|
|
|
setNeedToFillPostamatId(false);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleStatusChange = (value) => {
|
|
|
|
|
setStatus(value);
|
|
|
|
|
|
|
|
|
|
if (value === STATUSES.working) {
|
|
|
|
|
setNeedToFillPostamatId(true);
|
|
|
|
|
} else {
|
|
|
|
|
setNeedToFillPostamatId(false);
|
|
|
|
|
const params = new URLSearchParams({
|
|
|
|
|
status: value,
|
|
|
|
|
"location_ids[]": [featureId],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
updateStatus(params);
|
|
|
|
|
updateStatus(params).then(onSuccess);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const canEdit = useCanEdit();
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<FeatureProperties feature={feature} dynamicStatus={status} />
|
|
|
|
|
<FeatureProperties
|
|
|
|
|
feature={feature}
|
|
|
|
|
dynamicStatus={status}
|
|
|
|
|
postamatId={postamatId}
|
|
|
|
|
/>
|
|
|
|
|
{canEdit && (
|
|
|
|
|
<div className="flex justify-center mt-4">
|
|
|
|
|
<div className={"flex flex-col items-center"}>
|
|
|
|
|
<div className={"flex flex-col items-center space-y-2"}>
|
|
|
|
|
<Title text="Изменить статус" />
|
|
|
|
|
<StatusSelect value={status} onChange={handleStatusChange} />
|
|
|
|
|
{needToFillPostamatId && (
|
|
|
|
|
<>
|
|
|
|
|
<Title text="Укажите id постамата" />
|
|
|
|
|
<InputNumber
|
|
|
|
|
className="w-full"
|
|
|
|
|
min={0}
|
|
|
|
|
precision={0}
|
|
|
|
|
value={postamatId}
|
|
|
|
|
onChange={(value) => setPostamatId(value)}
|
|
|
|
|
/>
|
|
|
|
|
{error && (
|
|
|
|
|
<div className="text-primary text-center">{error}</div>
|
|
|
|
|
)}
|
|
|
|
|
<Button
|
|
|
|
|
type="primary"
|
|
|
|
|
disabled={isNil(postamatId)}
|
|
|
|
|
onClick={makeWorking}
|
|
|
|
|
loading={isUpdating}
|
|
|
|
|
>
|
|
|
|
|
Обновить статус
|
|
|
|
|
</Button>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
|