stopped using working filters if not changed

dev
RekHoto 2 years ago
parent 853546b34e
commit 0c86da66a6

@ -23,7 +23,7 @@ if (import.meta.env.MODE === "development") {
mountStoreDevtool("PointSelection", usePointSelection); mountStoreDevtool("PointSelection", usePointSelection);
} }
const version = '0.0.8'; const version = '0.0.9';
function App() { function App() {

@ -6,6 +6,7 @@ import { useRegionFilterExpression } from "./useRegionFilterExpression";
import { LAYER_IDS } from "./constants"; import { LAYER_IDS } from "./constants";
import { useWorkingPointsFilters } from "../../stores/useWorkingPointsFilters"; import { useWorkingPointsFilters } from "../../stores/useWorkingPointsFilters";
import { useSourceLayerName } from "../../api.js"; import { useSourceLayerName } from "../../api.js";
import { workingFilterHasChanged } from "../../utils.js";
const statusExpression = ["==", ["get", "status"], STATUSES.working]; const statusExpression = ["==", ["get", "status"], STATUSES.working];
@ -14,23 +15,24 @@ export const FilteredWorkingPoints = () => {
const layerName = useSourceLayerName(); const layerName = useSourceLayerName();
const { const {
filters: { deltaTraffic, factTraffic, age, region }, filters: { deltaTraffic, factTraffic, age, region },
ranges
} = useWorkingPointsFilters(); } = useWorkingPointsFilters();
const regionFilterExpression = useRegionFilterExpression(region); const regionFilterExpression = useRegionFilterExpression(region);
const deltaExpression = [ const deltaExpression = workingFilterHasChanged(deltaTraffic, ranges, "deltaTraffic") ? [
[">=", ["get", "delta_current"], deltaTraffic[0]], [">=", ["get", "delta_current"], deltaTraffic[0]],
["<=", ["get", "delta_current"], deltaTraffic[1]], ["<=", ["get", "delta_current"], deltaTraffic[1]],
]; ] : [true];
const factExpression = [ const factExpression = workingFilterHasChanged(factTraffic, ranges, "factTraffic") ? [
[">=", ["get", "fact"], factTraffic[0]], [">=", ["get", "fact"], factTraffic[0]],
["<=", ["get", "fact"], factTraffic[1]], ["<=", ["get", "fact"], factTraffic[1]],
]; ] : [true];
const ageExpression = [ const ageExpression = workingFilterHasChanged(age, ranges, "age") ? [
[">=", ["get", "age_day"], age[0]], [">=", ["get", "age_day"], age[0]],
["<=", ["get", "age_day"], age[1]], ["<=", ["get", "age_day"], age[1]],
]; ] : [true];
const filter = regionFilterExpression const filter = regionFilterExpression
? [ ? [

@ -9,6 +9,8 @@ import { Spin } from "antd";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { api, useDbTableName } from "../../../api.js"; import { api, useDbTableName } from "../../../api.js";
import { STATUSES } from "../../../config.js"; import { STATUSES } from "../../../config.js";
import { useEffect } from "react";
import { workingFilterHasChanged } from "../../../utils.js";
const useGetDataRange = () => { const useGetDataRange = () => {
const dbTable = useDbTableName(); const dbTable = useDbTableName();
@ -34,11 +36,20 @@ const useGetDataRange = () => {
}; };
export const WorkingPointsFilters = () => { export const WorkingPointsFilters = () => {
const { filters, setRegion, clear } = useWorkingPointsFilters(); const { filters, ranges, setRegion, setAge, setDeltaTraffic, setRanges, setFactTraffic, clear } = useWorkingPointsFilters();
const { data: fullRange, isInitialLoading: isFullRangeLoading } = const { data: fullRange, isInitialLoading: isFullRangeLoading } =
useGetDataRange(); useGetDataRange();
useEffect(() => {
if (!fullRange) return;
const newRanges = fullRange;
if (workingFilterHasChanged(newRanges.deltaTraffic, ranges, "deltaTraffic")) setDeltaTraffic(fullRange.deltaTraffic);
if (workingFilterHasChanged(newRanges.factTraffic, ranges, "factTraffic")) setFactTraffic(fullRange.deltaTraffic);
if (workingFilterHasChanged(newRanges.age, ranges, "age")) setAge(fullRange.deltaTraffic);
setRanges({...newRanges});
}, [fullRange]);
const activeDynamicFilters = getDynamicActiveFilters(filters, fullRange, [ const activeDynamicFilters = getDynamicActiveFilters(filters, fullRange, [
"deltaTraffic", "deltaTraffic",
"factTraffic", "factTraffic",

@ -9,8 +9,16 @@ export const INITIAL = {
age: [-1, 0], age: [-1, 0],
}; };
export const INITIAL_RANGES = {
region: null,
deltaTraffic: [-10000, 10000],
factTraffic: [-100, 0],
age: [-1, 0],
};
const store = (set) => ({ const store = (set) => ({
filters: INITIAL, filters: INITIAL,
ranges: INITIAL_RANGES,
setDeltaTraffic: (value) => { setDeltaTraffic: (value) => {
set((state) => { set((state) => {
@ -35,6 +43,11 @@ const store = (set) => ({
state.filters.region = value; state.filters.region = value;
}), }),
setRanges: (value) =>
set((state) => {
state.ranges = value;
}),
clear: (fullRange) => clear: (fullRange) =>
set((state) => { set((state) => {
if (!fullRange) { if (!fullRange) {

@ -127,5 +127,13 @@ export const predictionHasChanged = (filters, ranges) => {
return gtChanged || ltChanged; return gtChanged || ltChanged;
} }
export const workingFilterHasChanged = (filter, ranges, fieldKey) => {
if (!ranges[fieldKey]) return false;
const gtChanged = ranges[fieldKey][0] !== filter[0];
const ltChanged = ranges[fieldKey][1] !== filter[1];
return gtChanged || ltChanged;
}
export const isNil = (value) => export const isNil = (value) =>
value === undefined || value === null || value === ""; value === undefined || value === null || value === "";

Loading…
Cancel
Save