Separate all and filtered working points

dev
Platon Yasev 3 years ago
parent 81145cb689
commit 10ea3d3917

@ -0,0 +1,64 @@
import { Layer } from "react-map-gl";
import { workingPointLayer } from "./layers-config";
import { useLayersVisibility } from "../../stores/useLayersVisibility";
import { STATUSES } from "../../config";
import { useRegionFilterExpression } from "./useRegionFilterExpression";
import { LAYER_IDS } from "./constants";
import { useFilters } from "../../stores/useFilters";
const statusExpression = ["==", ["get", "status"], STATUSES.working];
export const FilteredWorkingPoints = () => {
const { isVisible } = useLayersVisibility();
const regionFilterExpression = useRegionFilterExpression();
const {
filters: { deltaTraffic, factTraffic, age },
} = useFilters();
const deltaExpression = [
[">=", ["get", "delta_current"], deltaTraffic[0]],
["<=", ["get", "delta_current"], deltaTraffic[1]],
];
const factExpression = [
[">=", ["get", "fact"], factTraffic[0]],
["<=", ["get", "fact"], factTraffic[1]],
];
const ageExpression = [
[">=", ["get", "age_day"], age[0]],
["<=", ["get", "age_day"], age[1]],
];
const filter = regionFilterExpression
? [
"all",
statusExpression,
...deltaExpression,
...factExpression,
...ageExpression,
regionFilterExpression,
]
: [
"all",
statusExpression,
...deltaExpression,
...factExpression,
...ageExpression,
];
return (
<>
<Layer
{...workingPointLayer}
id={LAYER_IDS.filteredWorking}
source={"points"}
source-layer={"public.service_placementpoint"}
layout={{
visibility: isVisible[LAYER_IDS.filteredWorking] ? "visible" : "none",
}}
filter={filter}
/>
</>
);
};

@ -4,6 +4,7 @@ import { useUpdateLayerCounter } from "../../stores/useUpdateLayerCounter";
import { InitialPoints } from "./InitialPoints"; import { InitialPoints } from "./InitialPoints";
import { ApprovePoints } from "./ApprovePoints"; import { ApprovePoints } from "./ApprovePoints";
import { WorkingPoints } from "./WorkingPoints"; import { WorkingPoints } from "./WorkingPoints";
import { FilteredWorkingPoints } from "./FilteredWorkingPoints";
export const Points = () => { export const Points = () => {
const { updateCounter } = useUpdateLayerCounter(); const { updateCounter } = useUpdateLayerCounter();
@ -21,6 +22,7 @@ export const Points = () => {
<InitialPoints /> <InitialPoints />
<ApprovePoints /> <ApprovePoints />
<WorkingPoints /> <WorkingPoints />
<FilteredWorkingPoints />
</Source> </Source>
</> </>
); );

@ -4,48 +4,16 @@ import { useLayersVisibility } from "../../stores/useLayersVisibility";
import { STATUSES } from "../../config"; import { STATUSES } from "../../config";
import { useRegionFilterExpression } from "./useRegionFilterExpression"; import { useRegionFilterExpression } from "./useRegionFilterExpression";
import { LAYER_IDS } from "./constants"; import { LAYER_IDS } from "./constants";
import { useFilters } from "../../stores/useFilters";
const statusExpression = ["==", ["get", "status"], STATUSES.working]; const statusExpression = ["==", ["get", "status"], STATUSES.working];
export const WorkingPoints = () => { export const WorkingPoints = () => {
const { isVisible } = useLayersVisibility(); const { isVisible } = useLayersVisibility();
const regionFilterExpression = useRegionFilterExpression(); const regionFilterExpression = useRegionFilterExpression();
const {
filters: { deltaTraffic, factTraffic, age },
} = useFilters();
const deltaExpression = [
[">=", ["get", "delta_current"], deltaTraffic[0]],
["<=", ["get", "delta_current"], deltaTraffic[1]],
];
const factExpression = [
[">=", ["get", "fact"], factTraffic[0]],
["<=", ["get", "fact"], factTraffic[1]],
];
const ageExpression = [
[">=", ["get", "age_day"], age[0]],
["<=", ["get", "age_day"], age[1]],
];
const filter = regionFilterExpression const filter = regionFilterExpression
? [ ? ["all", statusExpression, regionFilterExpression]
"all", : ["all", statusExpression];
statusExpression,
...deltaExpression,
...factExpression,
...ageExpression,
regionFilterExpression,
]
: [
"all",
statusExpression,
...deltaExpression,
...factExpression,
...ageExpression,
];
return ( return (
<> <>

@ -4,6 +4,7 @@ export const LAYER_IDS = {
"initial-unmatch": "initial-unmatch-points", "initial-unmatch": "initial-unmatch-points",
approve: "approve-points", approve: "approve-points",
working: "working-points", working: "working-points",
filteredWorking: "filtered-working-points",
cancelled: "cancelled-points", cancelled: "cancelled-points",
atd: "atd", atd: "atd",
}; };

@ -1,9 +1,6 @@
import { Title } from "../../components/Title"; import { Title } from "../../components/Title";
import { Checkbox } from "antd";
import { useLayersVisibility } from "../../stores/useLayersVisibility"; import { useLayersVisibility } from "../../stores/useLayersVisibility";
import { useMode } from "../../stores/useMode"; import { useMode } from "../../stores/useMode";
import { MODES } from "../../config";
import { LAYER_IDS } from "../Layers/constants";
export const LayersVisibility = () => { export const LayersVisibility = () => {
const { toggleVisibility, isVisible } = useLayersVisibility(); const { toggleVisibility, isVisible } = useLayersVisibility();
@ -22,17 +19,17 @@ export const LayersVisibility = () => {
{/* </Checkbox>*/} {/* </Checkbox>*/}
{/*)}*/} {/*)}*/}
{mode === MODES.WORKING && ( {/*{mode === MODES.WORKING && (*/}
<> {/* <>*/}
<Checkbox {/* <Checkbox*/}
className={"!ml-0"} {/* className={"!ml-0"}*/}
onChange={() => toggleVisibility(LAYER_IDS.working)} {/* onChange={() => toggleVisibility(LAYER_IDS.working)}*/}
checked={isVisible[LAYER_IDS.working]} {/* checked={isVisible[LAYER_IDS.working]}*/}
> {/* >*/}
Работает {/* Работает*/}
</Checkbox> {/* </Checkbox>*/}
</> {/* </>*/}
)} {/*)}*/}
</div> </div>
</div> </div>
); );

@ -33,16 +33,7 @@ export const MODE_TO_STATUS_MAPPER = {
}; };
export const MODE_TO_LAYER_VISIBILITY_MAPPER = { export const MODE_TO_LAYER_VISIBILITY_MAPPER = {
[MODES.INITIAL]: { [MODES.INITIAL]: [LAYER_IDS.initial],
visible: [LAYER_IDS.initial], [MODES.APPROVE_WORKING]: [LAYER_IDS.approve, LAYER_IDS.working],
invisible: [LAYER_IDS.approve, LAYER_IDS.working], [MODES.WORKING]: [LAYER_IDS.filteredWorking],
},
[MODES.APPROVE_WORKING]: {
visible: [LAYER_IDS.approve, LAYER_IDS.working],
invisible: [LAYER_IDS.initial],
},
[MODES.WORKING]: {
visible: [LAYER_IDS.working],
invisible: [LAYER_IDS.initial, LAYER_IDS.approve],
},
}; };

@ -6,6 +6,8 @@ const INITIAL_STATE = {
[LAYER_IDS.initial]: true, [LAYER_IDS.initial]: true,
[LAYER_IDS.approve]: false, [LAYER_IDS.approve]: false,
[LAYER_IDS.working]: false, [LAYER_IDS.working]: false,
[LAYER_IDS.filteredWorking]: false,
[LAYER_IDS.cancelled]: false,
}; };
const store = (set) => ({ const store = (set) => ({
@ -16,12 +18,15 @@ const store = (set) => ({
state.isVisible[layerId] = !state.isVisible[layerId]; state.isVisible[layerId] = !state.isVisible[layerId];
}), }),
setLayersVisibility: (config) => setLayersVisibility: (visibleLayerIds) =>
set((state) => { set((state) => {
config.visible.forEach((layerId) => { visibleLayerIds.forEach((layerId) => {
state.isVisible[layerId] = true; state.isVisible[layerId] = true;
}); });
config.invisible.forEach((layerId) => { const invisibleLayersIds = Object.keys(state.isVisible).filter(
(l) => !visibleLayerIds.includes(l)
);
invisibleLayersIds.forEach((layerId) => {
state.isVisible[layerId] = false; state.isVisible[layerId] = false;
}); });
}), }),

Loading…
Cancel
Save