diff --git a/packages/graphic-walker/src/components/dataBoard.tsx b/packages/graphic-walker/src/components/dataBoard.tsx index dafa630fb..77f39533e 100644 --- a/packages/graphic-walker/src/components/dataBoard.tsx +++ b/packages/graphic-walker/src/components/dataBoard.tsx @@ -26,23 +26,27 @@ const DataBoard = observer(function DataBoardModal() { const computedFileds = useMemo(() => allFields.filter((x) => x.fid !== COUNT_FIELD_ID && x.computed && x.expression && x.aggName !== 'expr'), [allFields]); const filteredComputation = useMemo((): IComputationFunction => { + const transformFilters = (viewFilters: IVisFilter[]) => + viewFilters + .map((f) => ({ fid: f.fid, rule: f.rule })) + .filter((x): x is IVisFilter => !!x.rule); + + const transformedFilters = transformFilters(viewFilters); + return (query) => computation( addTransformForQuery( addFilterForQuery( query, - viewFilters - .map((f) => ({ fid: f.fid, rule: f.rule })) - .filter((x): x is IVisFilter => !!x.rule) - .concat(filters) + transformedFilters.concat(filters ?? []) ), computedFileds.map((x) => ({ - expression: processExpression(x.expression!, allFields, config), + expression: processExpression(x.expression ?? '', allFields, config), key: x.fid!, })) ) ); - }, [computation, filters, computedFileds, allFields, config]); + }, [computation, filters, computedFileds, allFields, config, viewFilters]); const metas = useMemo(() => { return allFields.filter((x) => x.aggName !== 'expr').filter((x) => ![MEA_KEY_ID, MEA_VAL_ID, COUNT_FIELD_ID].includes(x.fid)); diff --git a/packages/graphic-walker/src/components/leafletRenderer/geoConfigPanel.tsx b/packages/graphic-walker/src/components/leafletRenderer/geoConfigPanel.tsx index 46375cddd..1df30ad69 100644 --- a/packages/graphic-walker/src/components/leafletRenderer/geoConfigPanel.tsx +++ b/packages/graphic-walker/src/components/leafletRenderer/geoConfigPanel.tsx @@ -44,10 +44,10 @@ const GeoConfigPanel = ({ geoList = emptyList }: { geoList?: IGeoDataItem[] }) = () => [{ label: 'Select a Geographic Data', value: '-1' }] .concat( - geoList.map((x, i) => ({ + geoList?.map((x, i) => ({ label: x.name, value: `${i}`, - })) + })) || [] ) .concat({ label: 'Manual Configuration', value: '-2' }), [geoList] diff --git a/packages/graphic-walker/src/components/leafletRenderer/geojsonRenderer.tsx b/packages/graphic-walker/src/components/leafletRenderer/geojsonRenderer.tsx index d9f26992f..55cc19f20 100644 --- a/packages/graphic-walker/src/components/leafletRenderer/geojsonRenderer.tsx +++ b/packages/graphic-walker/src/components/leafletRenderer/geojsonRenderer.tsx @@ -8,34 +8,38 @@ import { canvas } from 'leaflet'; import { useTranslation } from 'react-i18next'; const resolveCoords = (featureGeom: Geometry): [lat: number, lng: number][][] => { + if (!featureGeom) return []; + switch (featureGeom.type) { case 'Polygon': { - const coords = featureGeom.coordinates[0]; - return [coords.map<[lat: number, lng: number]>((c) => [c[1], c[0]])]; + const coords = featureGeom.coordinates?.[0]; + return coords ? [coords.map((c) => [c[1], c[0]])] : []; } case 'Point': { const coords = featureGeom.coordinates; return [[[coords[1], coords[0]]]]; } case 'GeometryCollection': { - const coords = featureGeom.geometries.map<[lat: number, lng: number][][]>(resolveCoords); + const coords = featureGeom.geometries?.map(resolveCoords) || []; return coords.flat(); } case 'LineString': { const coords = featureGeom.coordinates; - return [coords.map<[lat: number, lng: number]>((c) => [c[1], c[0]])]; + return [coords.map((c) => [c[1], c[0]])]; } case 'MultiLineString': { const coords = featureGeom.coordinates; - return coords.map<[lat: number, lng: number][]>((c) => c.map((c) => [c[1], c[0]])); + return coords.map((c) => c.map((c) => [c[1], c[0]])); } case 'MultiPoint': { const coords = featureGeom.coordinates; - return [coords.map<[lat: number, lng: number]>((c) => [c[1], c[0]])]; + return [coords.map((c) => [c[1], c[0]])]; } case 'MultiPolygon': { const coords = featureGeom.coordinates; - return coords.map<[lat: number, lng: number][]>((c) => c[0].map((c) => [c[1], c[0]])); + return coords.map((polygon) => + polygon[0].map((c: any[]): [lat: number, lng: number] => [c[1], c[0]]) + ); } default: { return [];