import { Layer } from "react-map-gl";
import {
matchInitialPointLayer,
unmatchInitialPointLayer,
} from "./layers-config";
import { useLayersVisibility } from "../../stores/useLayersVisibility";
import { usePointSelection } from "../../stores/usePointSelection";
import { STATUSES } from "../../config";
import { useRegionFilterExpression } from "./useRegionFilterExpression";
import { LAYER_IDS } from "./constants";
import { RANGE_FILTERS_KEYS, usePendingPointsFilters } from "../../stores/usePendingPointsFilters";
import { fieldHasChanged } from "../../utils.js";
import { useSourceLayerName } from "../../api.js";
const statusExpression = ["==", ["get", "status"], STATUSES.pending];
const useFilterExpression = () => {
const { filters, ranges } = usePendingPointsFilters();
const { prediction, categories, region } = filters;
const { selection } = usePointSelection();
const includedArr = [...selection.included];
const excludedArr = [...selection.excluded];
const regionExpression = useRegionFilterExpression(region);
const includedExpression = ["in", ["get", "id"], ["literal", includedArr]];
const excludedExpression = ["in", ["get", "id"], ["literal", excludedArr]];
const predictionExpression = [
[">=", ["get", "prediction_current"], prediction[0]],
["<=", ["get", "prediction_current"], prediction[1]],
];
const staticKeyFiltersExpressions = RANGE_FILTERS_KEYS.map((key) => {
return [
[">=", ["get", key], filters[`${key}__gt`]],
["<=", ["get", key], filters[`${key}__lt`]],
];
});
const staticKeyExpressions = staticKeyFiltersExpressions.filter((expression) => {
const filterKey = expression[0][1][1];
return fieldHasChanged(filters, ranges, filterKey).result;
}).flat();
const categoryExpression =
categories.length > 0
? ["in", ["get", "category"], ["literal", categories]]
: true;
const matchFilterExpression = [
"all",
statusExpression,
["!", excludedExpression],
[
"any",
regionExpression
? ["all", ...predictionExpression, ...staticKeyExpressions, categoryExpression, regionExpression]
: ["all", ...predictionExpression, ...staticKeyExpressions, categoryExpression],
includedExpression,
],
];
const unmatchFilterExpression = [
"all",
statusExpression,
["!", includedExpression],
[
"any",
[
"!",
regionExpression
? [
"all",
...predictionExpression,
categoryExpression,
regionExpression,
...staticKeyExpressions,
categoryExpression,
]
: ["all", ...predictionExpression, categoryExpression, ...staticKeyExpressions],
],
excludedExpression,
],
];
return { match: matchFilterExpression, unmatch: unmatchFilterExpression };
};
export const PendingPoints = () => {
const { isVisible } = useLayersVisibility();
const layerName = useSourceLayerName();
const { match: matchFilterExpression, unmatch: unmatchFilterExpression } =
useFilterExpression();
return (
<>
>
);
};