RekHoto 3 years ago
parent ef4b6ca03d
commit f199d7e898

@ -74,8 +74,10 @@ const useFilterExpression = () => {
...predictionExpression,
categoryExpression,
regionExpression,
...staticKeyExpressions,
categoryExpression,
]
: ["all", ...predictionExpression, categoryExpression],
: ["all", ...predictionExpression, categoryExpression, ...staticKeyExpressions],
],
excludedExpression,
],

@ -61,7 +61,7 @@ export const workingPointSymbolLayer = {
type: "symbol",
layout: {
"icon-image": "logo",
"icon-size": ["interpolate", ["linear"], ["zoom"], 3, 0, 9, 0.1, 13, 0.7],
"icon-size": ["interpolate", ["linear"], ["zoom"], 3, 0, 9, 0.1, 13, 0.5],
},
paint: {
"icon-color": "#E63941",
@ -73,7 +73,7 @@ export const getPointSymbolLayer = (image) => {
type: "symbol",
layout: {
"icon-image": image,
"icon-size": ["interpolate", ["linear"], ["zoom"], 3, 0, 9, 0.2, 13, 1.4],
"icon-size": ["interpolate", ["linear"], ["zoom"], 3, 0, 9, 0.1, 13, 0.5],
},
};
}

@ -200,8 +200,8 @@ export const MapComponent = () => {
onLoad={() => {
mapIcons.map((icon) => {
const img = new Image(
icon.size?.width || 24,
icon.size?.height || 24
icon.size?.width || 64,
icon.size?.height || 64
);
img.onload = () =>
mapRef.current.addImage(icon.name, img);

@ -9,21 +9,65 @@ import { WorkingPointPopup } from "./mode-popup/WorkingPointPopup";
import { FeatureProperties } from "./mode-popup/FeatureProperties";
import { usePopup } from "../../stores/usePopup.js";
import { PanoramaIcon } from "../../icons/PanoramaIcon";
import {usePostamatesAndPvzGroups} from "../../api.js";
import {useOtherGroups, usePostamatesAndPvzGroups} from "../../api.js";
import {useMemo} from "react";
import {getFilteredGroups} from "../../utils.js";
const SingleFeaturePopup = ({ feature, groups, categories }) => {
const getRivalsName = (feature) => {
const { data: postamatesAndPvzGroups } = usePostamatesAndPvzGroups();
const { data: otherGroups } = useOtherGroups();
const filteredPostamatesCategories = useMemo(() => {
return getFilteredGroups(postamatesAndPvzGroups);
}, [postamatesAndPvzGroups]);
const filteredOtherCategories = useMemo(() => {
return getFilteredGroups(otherGroups);
}, [otherGroups]);
const filteredPostamatesGroups = useMemo(() => {
if (!filteredPostamatesCategories) return [];
return filteredPostamatesCategories
.map((category) => {
return [...category.groups]
}).flat();
}, [filteredPostamatesCategories]);
const filteredOtherGroups = useMemo(() => {
if (!filteredOtherCategories) return [];
return filteredOtherCategories
.map((category) => {
return [...category.groups]
}).flat();
}, [filteredOtherCategories]);
const isOther = feature.layer?.id.includes(LAYER_IDS.other);
const name = isOther ?
filteredOtherCategories.find(c => c.id === feature.properties.category_id)?.name :
filteredPostamatesCategories.find(c => c.id === feature.properties.category_id)?.name;
const groupName = isOther ?
filteredOtherGroups.find(c => c.id === feature.properties.group_id)?.name :
filteredPostamatesGroups.find(c => c.id === feature.properties.group_id)?.name;
return {
name,
groupName
}
}
const SingleFeaturePopup = ({ feature }) => {
const { mode } = useMode();
const isRivals =
feature.layer?.id === LAYER_IDS.pvz ||
feature.layer?.id === LAYER_IDS.other ||
feature.layer?.id.includes(LAYER_IDS.pvz);
feature.layer?.id.includes(LAYER_IDS.pvz) ||
feature.layer?.id.includes(LAYER_IDS.other);
const isPendingPoint = feature.properties.status === STATUSES.pending;
const isWorkingPoint = feature.properties.status === STATUSES.working;
console.log(feature)
if (isRivals) {
return <FeatureProperties feature={feature} groups={groups} categories={categories} />;
const { name, groupName } = getRivalsName(feature);
return <FeatureProperties feature={feature} name={name} groupName={groupName} />;
}
if (mode === MODES.ON_APPROVAL && !isPendingPoint) {
@ -40,7 +84,7 @@ const SingleFeaturePopup = ({ feature, groups, categories }) => {
return <FeatureProperties feature={feature} />;
};
const MultipleFeaturesPopup = ({ features, categories }) => {
const MultipleFeaturesPopup = ({ features }) => {
const { setPopup } = usePopup();
return (
@ -69,7 +113,7 @@ const MultipleFeaturesPopup = ({ features, categories }) => {
<div className="flex w-full">
<span className="truncate">
{feature.properties.name ?? feature.properties.category}
{feature.properties.category_id && categories.find(c => c.id === feature.properties.category_id).name}
{feature.properties.category_id && getRivalsName(feature).name}
</span>
</div>
)}
@ -92,26 +136,13 @@ const YandexPanoramaLink = ({ lat, lng }) => {
}
export const MapPopup = ({ features, lat, lng, onClose }) => {
const { data: postamatesAndPvzGroups } = usePostamatesAndPvzGroups();
const filteredPostamatesCategories = useMemo(() => {
return getFilteredGroups(postamatesAndPvzGroups);
}, [postamatesAndPvzGroups]);
const postamatesGroups = useMemo(() => {
if (!filteredPostamatesCategories) return [];
return filteredPostamatesCategories
.map((category) => {
return [...category.groups]
}).flat();
}, [filteredPostamatesCategories]);
const getContent = () => {
if (features.length === 1) {
return <SingleFeaturePopup feature={features[0]} groups={postamatesGroups} categories={filteredPostamatesCategories} />;
return <SingleFeaturePopup feature={features[0]} />;
}
return <MultipleFeaturesPopup features={features} categories={filteredPostamatesCategories} />;
return <MultipleFeaturesPopup features={features} />;
};
return (

@ -11,15 +11,14 @@ import { LAYER_IDS } from "../../Layers/constants";
import { isNil } from "../../../utils.js";
import { useGetRegions } from "../../../components/RegionSelect.jsx";
export const FeatureProperties = ({ feature, dynamicStatus, postamatId, groups, categories }) => {
export const FeatureProperties = ({ feature, dynamicStatus, postamatId, name, groupName }) => {
const { data } = useGetRegions();
const isResidential = feature.properties.category === CATEGORIES.residential;
const isWorking = feature.properties.status === STATUSES.working;
const isRivals =
feature.layer?.id === LAYER_IDS.pvz ||
feature.layer?.id === LAYER_IDS.other ||
feature.layer?.id.includes(LAYER_IDS.pvz);
feature.layer?.id.includes(LAYER_IDS.pvz) ||
feature.layer?.id.includes(LAYER_IDS.other);
const getConfig = () => {
if (isRivals) {
@ -34,13 +33,11 @@ export const FeatureProperties = ({ feature, dynamicStatus, postamatId, groups,
let value = feature.properties[field];
if (field === "category_id") {
const category = categories.find(category => category.id === value);
value = category.name;
value = name;
}
if (field === "group_id") {
const category = groups.find(group => group.id === value);
value = category.name;
value = groupName;
}
if (field === "status" && dynamicStatus) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

@ -1,3 +1,3 @@
import logo from "../assets/logo.svg";
import logo from "../assets/logopng.png";
export const icons = [{ name: "logo", url: logo }];

Loading…
Cancel
Save