From 958726e78342dea2b8019dd07bc6d96eefd0b887 Mon Sep 17 00:00:00 2001 From: Platon Yasev Date: Sat, 4 Mar 2023 19:38:14 +0300 Subject: [PATCH] Refresh layer after status update --- src/Map/Layers.jsx | 9 +++------ src/Map/Points.jsx | 4 ++++ src/Map/layers-config.js | 4 ++-- src/modules/Sidebar/RegionSelect.jsx | 2 +- src/modules/Sidebar/TakeToWorkButton.jsx | 7 ++++++- src/modules/Table/Table.jsx | 20 ++++++++++++++------ src/stores/useUpdateLayerCounter.js | 14 ++++++++++++++ 7 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 src/stores/useUpdateLayerCounter.js diff --git a/src/Map/Layers.jsx b/src/Map/Layers.jsx index 45b9a36..db52446 100644 --- a/src/Map/Layers.jsx +++ b/src/Map/Layers.jsx @@ -3,6 +3,7 @@ import { Layer, Source } from "react-map-gl"; import { aoLayer, rayonLayer, selectedRegionLayer } from "./layers-config"; import { useLayersVisibility } from "../stores/useLayersVisibility"; import { useFilters } from "../stores/useFilters"; +import { BASE_URL } from "../api"; export const Layers = () => { const { @@ -15,9 +16,7 @@ export const Layers = () => { { { if (!selectedRegion) return null; @@ -22,6 +23,8 @@ export const Points = () => { const includedArr = [...selection.included]; const excludedArr = [...selection.excluded]; + const { updateCounter } = useUpdateLayerCounter(); + const includedExpression = [ "in", ["get", "location_id"], @@ -83,6 +86,7 @@ export const Points = () => { { const getRegions = async () => { setLoading(true); try { - const response = await api.get("/api/placement_points/ao_rayons"); + const response = await api.get("/api/ao_rayons"); setData(response.data); } catch (err) { console.error(err); diff --git a/src/modules/Sidebar/TakeToWorkButton.jsx b/src/modules/Sidebar/TakeToWorkButton.jsx index f63d803..7406253 100644 --- a/src/modules/Sidebar/TakeToWorkButton.jsx +++ b/src/modules/Sidebar/TakeToWorkButton.jsx @@ -4,12 +4,14 @@ import { api } from "../../api"; import { useFilters } from "../../stores/useFilters"; import { usePointSelection } from "../../stores/usePointSelection"; import { STATUSES } from "../../config"; +import { useUpdateLayerCounter } from "../../stores/useUpdateLayerCounter"; export const TakeToWorkButton = () => { const { filters } = useFilters(); const { prediction, categories } = filters; const { selection } = usePointSelection(); const queryClient = useQueryClient(); + const { toggleUpdateCounter } = useUpdateLayerCounter(); const { mutate } = useMutation({ mutationFn: () => { @@ -25,7 +27,10 @@ export const TakeToWorkButton = () => { `/api/placement_points/update_status?${params.toString()}` ); }, - onSuccess: () => queryClient.invalidateQueries(["table", 1, filters]), + onSuccess: () => { + queryClient.invalidateQueries(["table", 1, filters]); + toggleUpdateCounter(); + }, }); const takeToWork = () => { diff --git a/src/modules/Table/Table.jsx b/src/modules/Table/Table.jsx index 569132e..48d76eb 100644 --- a/src/modules/Table/Table.jsx +++ b/src/modules/Table/Table.jsx @@ -73,12 +73,13 @@ const PAGE_SIZE = 30; const useTableData = (page) => { const [pageSize, setPageSize] = useState(PAGE_SIZE); const { filters } = useFilters(); - const { prediction, status, categories } = filters; + const { prediction, status, categories, region } = filters; + const { selection } = usePointSelection(); const { clickedPointConfig } = useClickedPointConfig(); const [finalData, setFinalData] = useState(); const { data } = useQuery( - ["table", page, filters], + ["table", page, filters, selection], async () => { const params = new URLSearchParams({ page, @@ -86,8 +87,19 @@ const useTableData = (page) => { "prediction_current[]": prediction, "status[]": status, "categories[]": categories, + "included[]": [...selection.included], }); + if (region) { + if (region.type === "ao") { + params.append("ao[]", region.id); + } + + if (region.type === "rayon") { + params.append("rayon[]", region.id); + } + } + const { data } = await api.get( `/api/placement_points?${params.toString()}` ); @@ -251,10 +263,6 @@ export const Table = React.memo(({ height = 200 }) => { return { onClick: () => { const geometry = parse(record.geometry); - // const feature = { - // properties: record, - // geometry, - // }; map.flyTo({ center: [geometry.coordinates[0], geometry.coordinates[1]], zoom: 15, diff --git a/src/stores/useUpdateLayerCounter.js b/src/stores/useUpdateLayerCounter.js new file mode 100644 index 0000000..68f0356 --- /dev/null +++ b/src/stores/useUpdateLayerCounter.js @@ -0,0 +1,14 @@ +import { create } from "zustand"; +import { immer } from "zustand/middleware/immer"; + +const store = (set) => ({ + updateCounter: -1, + + toggleUpdateCounter: () => { + set((state) => { + state.updateCounter = state.updateCounter === -1 ? 1 : -1; + }); + }, +}); + +export const useUpdateLayerCounter = create(immer(store));