@twinmatrix/spatialverse-sdk-web 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +9 -9
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +213 -294
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +43 -45
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +241 -271
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +167 -215
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js +28 -30
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +876 -1188
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +173 -163
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js +6 -6
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +6 -6
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js +3 -3
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +546 -620
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +155 -160
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customStyles.js +2 -2
- package/lib/cjs/meta-atlas-sdk/customStyles.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customerLayer.js +15 -29
- package/lib/cjs/meta-atlas-sdk/customerLayer.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js +5 -5
- package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +832 -1060
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js +33 -50
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +18 -36
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js +6 -6
- package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-store.js +6 -6
- package/lib/cjs/meta-atlas-sdk/utils/routing-store.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +428 -556
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/cjs/react/MetaAtlasMap.js +127 -0
- package/lib/cjs/react/MetaAtlasMap.js.map +1 -0
- package/lib/cjs/react/hooks/useDrawing/index.js +17 -18
- package/lib/cjs/react/hooks/useDrawing/index.js.map +1 -1
- package/lib/cjs/react/hooks/useFocus/index.js +48 -55
- package/lib/cjs/react/hooks/useFocus/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMapEvents/index.js +40 -50
- package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMapOverlays/index.js +20 -21
- package/lib/cjs/react/hooks/useMapOverlays/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMetaAtlas/index.js +77 -95
- package/lib/cjs/react/hooks/useMetaAtlas/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMetaAtlas.js +78 -96
- package/lib/cjs/react/hooks/useMetaAtlas.js.map +1 -1
- package/lib/cjs/react/hooks/useRouting/index.js +21 -20
- package/lib/cjs/react/hooks/useRouting/index.js.map +1 -1
- package/lib/cjs/react/hooks/useSearch/index.js +35 -34
- package/lib/cjs/react/hooks/useSearch/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/index.js +30 -29
- package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js +2 -2
- package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/cjs/react/index.js +31 -31
- package/lib/cjs/react/index.js.map +1 -1
- package/lib/cjs/react/stores/useMapDataStore.js +53 -64
- package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
- package/lib/cjs/react/stores/useMetaAtlasStore.js +27 -40
- package/lib/cjs/react/stores/useMetaAtlasStore.js.map +1 -1
- package/lib/esm/index.js +3 -7
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +10 -9
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +2 -2
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js +4 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +22 -14
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +8 -8
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +3 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +18 -11
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +4 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/customerLayer.js +4 -1
- package/lib/esm/meta-atlas-sdk/customerLayer.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +80 -61
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js +3 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +19 -15
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/esm/react/MetaAtlasMap.js +120 -0
- package/lib/esm/react/MetaAtlasMap.js.map +1 -0
- package/lib/esm/react/hooks/useDrawing/index.js +2 -2
- package/lib/esm/react/hooks/useDrawing/index.js.map +1 -1
- package/lib/esm/react/hooks/useFocus/index.js +4 -3
- package/lib/esm/react/hooks/useFocus/index.js.map +1 -1
- package/lib/esm/react/hooks/useMapEvents/index.js +3 -3
- package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/esm/react/hooks/useMapOverlays/index.js +2 -2
- package/lib/esm/react/hooks/useMapOverlays/index.js.map +1 -1
- package/lib/esm/react/hooks/useMetaAtlas/index.js +162 -60
- package/lib/esm/react/hooks/useMetaAtlas/index.js.map +1 -1
- package/lib/esm/react/hooks/useMetaAtlas.js +162 -60
- package/lib/esm/react/hooks/useMetaAtlas.js.map +1 -1
- package/lib/esm/react/hooks/useRouting/index.js +2 -2
- package/lib/esm/react/hooks/useRouting/index.js.map +1 -1
- package/lib/esm/react/hooks/useSearch/index.js +2 -2
- package/lib/esm/react/hooks/useSearch/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/index.js +8 -7
- package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/esm/react/index.js +11 -15
- package/lib/esm/react/index.js.map +1 -1
- package/package.json +9 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-atlas-sdk-core.js","names":["focusTree","whatTaxonomies","length","feature","turfFeature","lineString","turfLine","point","turfPoint","polygon","turfPolygon","center","lineSliceAlong","booleanPointInPolygon","axios","LocalStorage","PublishedDataType","Status","getPublishedData","useMapObjectsDataStore","SortType","FilterType","MetaAtlasCore","defaultFocusedTaxonomy","searchableGeoJsonFeatures","currentFocus","token","empApi","atomsAPIAccessToken","apiRequestLimit","secretKeyForDecryption","routingStatus","Awaiting","searchStatus","storage","constructor","lastClicked","mapObjectId","coordinates","name","whatDimension","whereDimension","geometry","properties","clickEvent","init","apiServerURL","secretKey","onAuthenticationResponse","getAtomsAPIAccessToken","data","JSON","stringify","strategy","atomsSdkToken","clientEngine","clientOS","config","method","url","headers","then","response","accessToken","authenticated","catch","error","setupRouting","onRoutingStatusUpdateCallback","status","URL","publishedDataType","Routing","console","log","Ready","getRoutingStatus","setLastClickedFeature","featureData","getMapObjectById","res","mo","booth_info","getLastClickedFeature","clickedFeature","isClickableFeature","isSearchable","title","getMidPointOfFeature","lngLat","type","gjson","gjsonLength","splicedLine","getFocusTree","getWhatTaxonomies","getCurrentFocus","getCurrentFocusBuilding","bld","site","buildings","includes","taxonomyPath","getCurrentFocusFloor","currentBuilding","f","floors","getUserViewportBuilding","currentCenter","centerPoint","bIndex","b","hasOwnProperty","bounds","checkUserViewport","building","floor","undefined","bBounds","isViewingBuilding","fBounds","isViewingFloor","ignoredLayers","nonFloorLayers","filterBaseMapWhereDimension","layersData","whereTaxonomyPath","dimensionWhere","whereFilters","Array","isArray","push","index","layerID","id","filterLayer","filterLayersWhereDimension","layer","layerFilter","filter","filterFound","fieldIndex","field","getLocationNameFromWhereTaxonomyPath","splitstr","split","getFlyToLocation","isMobile","location","getConfigForNode","node","cameraConfigs","mobile","web","warn","zoom","bearing","filterLayersByCategories","filterType","filterValues","geomType","dimensionWhat","map","filterValue","splice","subField","layerStyle","paint","styleFilter","property","setPaintProperty","filterLayersByType","createFilterForStyle","defValue","value","setRowForField","defCopy","defClone","setRowForValue","i","newFilterValues","pushArray","originalArray","newArray","filteredArray","item","styleLayersByType","layerType","createFilterForClearStyle","forEach","indexOf","clearStyleLayersByType","normalize","string","trim","toLowerCase","relevanceSort","metaFeatures","query","isStrict","score","metaFeature","noMatch","lowerStr","lowerQuery","startsWith","some","word","sort","a","scoreA","scoreB","localeCompare","s","sortType","compare","Name","WhereDimension","whereComparison","Relevance","RelevanceStrict","setupMapObjectSearch","onSearchStatusUpdateCallback","MapObjects","mapObjects","getState","mapObject","coords","moJSON","mID","what","where","myMapObjectId","localRef","dimension_what","dimension_where","overview","images","videos","files","products","logos","metadata","parse","getMapObjectsByFilteredLocalRef","boothId","searchSubString","onResponseCallback","uniqueIds","Set","boothIdToSearch","String","has","add","objFeature","sortedFeatures","getMapObjectsByName","nameToSearch","idToSearch","getMapObjectByLocalRef","localRefToSearch","getMapObjectMatchingLocalRef","getMapObjectsMatchingLocalRefs","localRefsToSearch","localRefsArray","ref","getMapObjectsByWhatTaxonomy","whatTaxonomyPath","whatTaxonomy","getMapObjectsByWhereTaxonomy","whereTaxonomy","getMapObjectsByWhatAndWhereTaxonomy","getMapObjectsInWhatTaxonomy","whatTaxonomyPaths","getMapObjectsInWhereTaxonomy","whereTaxonomyPaths","getMapObjectsInWhatAndWhereTaxonomy","getMapObjectsApi","Promise","resolve","reject","Authorization","uniqueFeatures","getMapObjectsByWhatTaxonomyAPI"],"sources":["../../../../src/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.ts"],"sourcesContent":["import focusTree from './focustree.json';\nimport whatTaxonomies from './whatTaxonomies.json';\n\nimport length from '@turf/length';\nimport {\n feature as turfFeature,\n lineString as turfLine,\n point as turfPoint,\n polygon as turfPolygon,\n} from '@turf/helpers';\nimport center from '@turf/center';\nimport lineSliceAlong from '@turf/line-slice-along';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\n\nimport axios from 'axios';\nimport {Feature, Position} from 'geojson';\n\nimport {LocalStorage} from '../utils/local-storage';\n\nimport {\n PublishedDataType,\n Status,\n StatusUpdateCallbackType,\n getPublishedData,\n} from './fetch-published-json';\nimport useMapObjectsDataStore from '../utils/mapobjects-store';\n\nexport type MetaFeatureProperties = {\n myMapObjectId: string | number;\n title: string;\n localRef: string | number;\n dimension_what: string;\n dimension_where: string;\n booth_info?: {\n overview: string[] | null;\n images: string[] | null;\n videos: string[] | null;\n files: string[] | null;\n products: string[] | null;\n logos: [{\n assetId: string;\n fileName: string;\n presignedUrl: string;\n }] | null;\n } | null;\n metadata?: any | null;\n};\n\nexport type metaFeature = {\n mapObjectId: string | null;\n coordinates: number[] | null;\n name: string | null;\n whatDimension: string | null;\n whereDimension: string | null;\n geometry: any;\n properties: MetaFeatureProperties | null;\n};\n\n// Type for clicked features that includes both metaFeature data and raw click event\nexport type clickedMetaFeature = metaFeature & {\n clickEvent: any | null; // MapMouseEvent from maplibre-gl (using any to avoid direct dependency)\n};\n\nenum SortType {\n Name = 'Name',\n WhereDimension = 'WhereDimension',\n Relevance = 'Relevance',\n RelevanceStrict = 'RelevanceStrict',\n}\n\nexport enum FilterType {\n Name = 'title',\n LocalRef = 'localRef',\n WhatTaxonomy = 'dimension_what',\n}\n\nexport class MetaAtlasCore {\n defaultFocusedTaxonomy = 'where.changi';\n searchableGeoJsonFeatures: metaFeature[] = [];\n currentFocus = this.defaultFocusedTaxonomy;\n lastClicked: clickedMetaFeature;\n\n // For ATOMS API\n token: string = '';\n empApi: string = '';\n atomsAPIAccessToken = '';\n apiRequestLimit = 5000;\n\n // For Routing & Search\n secretKeyForDecryption = '';\n routingStatus = Status.Awaiting;\n searchStatus = Status.Awaiting;\n storage = new LocalStorage();\n\n constructor() {\n this.lastClicked = {\n mapObjectId: null,\n coordinates: null,\n name: null,\n whatDimension: null,\n whereDimension: null,\n geometry: null,\n properties: null,\n clickEvent: null,\n };\n }\n\n init(\n apiServerURL: string,\n token: string,\n secretKey: string,\n onAuthenticationResponse: (data: any) => void,\n ) {\n this.empApi = apiServerURL;\n this.token = token;\n this.secretKeyForDecryption = secretKey;\n this.getAtomsAPIAccessToken(onAuthenticationResponse);\n }\n\n getAtomsAPIAccessToken(onAuthenticationResponse: (data: any) => void) {\n const data = JSON.stringify({\n strategy: 'atomstoken',\n atomsSdkToken: this.token,\n clientEngine: 'API',\n clientOS: 'Linux',\n });\n\n const config = {\n method: 'post',\n url: `${this.empApi}/authentication`,\n headers: {'Content-Type': 'application/json'},\n data: data,\n };\n axios(config)\n .then(async response => {\n if (response?.data?.accessToken) {\n this.atomsAPIAccessToken = response.data.accessToken;\n onAuthenticationResponse({\n authenticated: true,\n });\n }\n })\n .catch(function (error) {\n onAuthenticationResponse({\n authenticated: false,\n error: error,\n });\n });\n }\n\n async setupRouting(onRoutingStatusUpdateCallback: StatusUpdateCallbackType) {\n const status = await getPublishedData(\n {\n URL: this.empApi,\n accessToken: this.atomsAPIAccessToken,\n secretKey: this.secretKeyForDecryption,\n publishedDataType: PublishedDataType.Routing,\n },\n this.storage,\n );\n\n this.routingStatus = status;\n console.log('routing status: ', status);\n if (onRoutingStatusUpdateCallback) {\n onRoutingStatusUpdateCallback(status === Status.Ready ? true : false);\n }\n }\n\n getRoutingStatus() {\n return this.routingStatus;\n }\n\n // last clicked related functionality\n setLastClickedFeature(featureData: clickedMetaFeature) {\n if (featureData.mapObjectId) {\n this.getMapObjectById(featureData.mapObjectId, (res) => { \n const mo = res?.[0];\n if (mo) {\n this.lastClicked = {\n ...featureData,\n properties: {\n ...featureData.properties,\n booth_info: mo.properties.booth_info\n }\n };\n }\n })\n } else {\n this.lastClicked = featureData;\n }\n }\n\n getLastClickedFeature(): clickedMetaFeature {\n let clickedFeature = this.lastClicked;\n if (\n !this.lastClicked ||\n (this.lastClicked &&\n (this.lastClicked.name === null ||\n this.lastClicked.whereDimension === null))\n ) {\n const feature: clickedMetaFeature = {\n mapObjectId: null,\n coordinates: null,\n name: null,\n whatDimension: null,\n whereDimension: null,\n geometry: null,\n properties: null,\n clickEvent: null,\n };\n this.setLastClickedFeature(feature);\n clickedFeature = feature;\n }\n return clickedFeature;\n }\n\n isClickableFeature(feature: any) {\n if (\n feature.properties.isSearchable &&\n feature.properties.title !== 'Transit' &&\n feature.properties.title !== 'Public'\n ) {\n return true;\n }\n\n return false;\n }\n\n getMidPointOfFeature(feature: Feature) {\n if (!feature) {\n return null;\n }\n\n if ((feature as any).lngLat) {\n return (feature as any).lngLat;\n }\n if (!feature.geometry) {\n return null;\n }\n if (feature.geometry.type === 'Point') {\n return feature.geometry.coordinates;\n }\n let gjson = turfFeature(feature.geometry);\n if (\n gjson.geometry.type === 'LineString' ||\n (gjson.geometry.type === 'MultiLineString' &&\n gjson.geometry.coordinates.length == 1)\n ) {\n gjson = turfLine((feature.geometry as any).coordinates);\n let gjsonLength = length(gjson);\n let splicedLine = lineSliceAlong(\n gjson as any,\n gjsonLength / 2,\n gjsonLength,\n );\n return splicedLine.geometry.coordinates[0];\n }\n return center(gjson as any).geometry.coordinates;\n }\n\n // focus control related methods\n getFocusTree() {\n return focusTree;\n }\n\n getWhatTaxonomies() {\n return whatTaxonomies;\n }\n\n getCurrentFocus() {\n return this.currentFocus;\n }\n\n getCurrentFocusBuilding() {\n for (let bld in focusTree.site.buildings) {\n if (\n this.currentFocus.includes(focusTree.site.buildings[bld].taxonomyPath)\n ) {\n return focusTree.site.buildings[bld];\n }\n }\n return null;\n }\n\n getCurrentFocusFloor() {\n let currentBuilding = this.getCurrentFocusBuilding();\n if (!currentBuilding) {\n return;\n }\n for (let f in currentBuilding.floors) {\n if (this.currentFocus === currentBuilding.floors[f].taxonomyPath) {\n return currentBuilding.floors[f];\n }\n }\n return null;\n }\n\n getUserViewportBuilding(currentCenter: Position) {\n let centerPoint = turfPoint(currentCenter);\n //get building bounds\n for (let bIndex in focusTree.site.buildings) {\n //check if center in building bounds\n let b = focusTree.site.buildings[bIndex];\n if (!b.hasOwnProperty('bounds')) {\n continue;\n }\n let bounds = turfPolygon(b.bounds as any);\n if (booleanPointInPolygon(centerPoint, bounds)) {\n return b;\n }\n }\n return null;\n }\n\n checkUserViewport(currentCenter: Position, building: any, floor?: any) {\n //get user center\n let centerPoint = turfPoint(currentCenter);\n //check building\n if (building === null || building === undefined ) {\n return false;\n }\n //check if user is viewing building\n if (!building.hasOwnProperty('bounds')) {\n return false;\n }\n let bBounds = turfPolygon(building.bounds);\n let isViewingBuilding = booleanPointInPolygon(centerPoint, bBounds);\n //check floor\n if (floor === null || floor === undefined) {\n return isViewingBuilding;\n }\n //check if user is viewing floor\n if (!floor.hasOwnProperty('bounds')) {\n return isViewingBuilding;\n }\n let fBounds = turfPolygon(floor.bounds);\n let isViewingFloor = booleanPointInPolygon(centerPoint, fBounds);\n return isViewingBuilding || isViewingFloor;\n }\n\n ignoredLayers = [\n 'Aerodrome',\n 'Aerodrome names',\n 'Aerobridge',\n 'Aerobridge gates',\n 'Airplanes',\n 'Airplanes outline',\n 'Building Extrusion',\n 'Building icon',\n 'Building overlay',\n 'Building overlay outline',\n 'Building underlay',\n 'Building underlay icon',\n 'Building underlay selected outline',\n 'building_outline',\n 'Changi Airport Connector',\n 'Changi Airport Connector Text',\n 'Changi Walkway Text',\n 'T2 overlay outline copy',\n 'Building overlay base',\n 'Skytrain track outdoor',\n ];\n\n nonFloorLayers = [\n 'where.changi',\n 'where.changi.tarmac',\n 'where.changi.tarmac.public',\n 'where.changi.tarmac.private',\n 'where.changi.terminals',\n 'where.changi.terminals.jewel',\n 'where.changi.terminals.t1',\n 'where.changi.terminals.t2',\n 'where.changi.terminals.t3',\n 'where.changi.terminals.t4',\n 'where.hkcec.main_bldg',\n 'where.gbtb.flower_dome',\n 'where.lima',\n 'where.lima.mahsuri_center',\n 'where.lima.maritime',\n 'where.malaysia',\n 'where.malaysia.bcck',\n 'where.malaysia.rmh',\n 'where.malaysia.pm',\n 'where.indonesia.fairmont_jakarta'\n ];\n\n filterBaseMapWhereDimension(layersData: any, whereTaxonomyPath: string) {\n let dimensionWhere = whereTaxonomyPath;\n if (!dimensionWhere) {\n return;\n }\n\n this.currentFocus = dimensionWhere;\n let whereFilters: string[] = [dimensionWhere];\n \n // Check if dimensionWhere matches the site taxonomyPath\n if (dimensionWhere === focusTree.site.taxonomyPath) {\n // If it equals site, add all floors of all buildings\n whereFilters = [];\n if (focusTree.site.buildings && Array.isArray(focusTree.site.buildings)) {\n for (const building of focusTree.site.buildings) {\n if (building.floors && Array.isArray(building.floors)) {\n for (const floor of building.floors) {\n if (floor.taxonomyPath) {\n whereFilters.push(floor.taxonomyPath);\n }\n }\n }\n }\n }\n else {\n // If it equals a site and has no buildings, add the site itself\n whereFilters = [focusTree.site.taxonomyPath];\n }\n } else {\n // Check if dimensionWhere matches any building's taxonomyPath\n for (const building of focusTree.site.buildings) {\n if (dimensionWhere === building.taxonomyPath) {\n // If it equals a building, add all floors of that building\n whereFilters = [];\n if (building.floors && Array.isArray(building.floors)) {\n for (const floor of building.floors) {\n if (floor.taxonomyPath) {\n whereFilters.push(floor.taxonomyPath);\n }\n }\n }\n // If it equals a building, but has no floors, add the building itself\n else {\n whereFilters = [building.taxonomyPath];\n }\n break;\n }\n }\n }\n\n console.log('whereFilters: ', whereFilters);\n if (layersData.length > 0) {\n for (let index = 0; index < layersData.length; index += 1) {\n const layerID = layersData[index].id;\n if (!this.ignoredLayers.includes(layerID)) {\n this.filterLayer(layersData[index], whereFilters);\n }\n }\n }\n\n return layersData;\n }\n\n filterLayersWhereDimension(layersData: any, whereTaxonomyPath: string) {\n let dimensionWhere = whereTaxonomyPath;\n if (!dimensionWhere) {\n return;\n }\n\n let whereFilters: string[] = [];\n whereFilters = [dimensionWhere];\n\n for (let index = 0; index < layersData.length; index += 1) {\n this.filterLayer(layersData[index], whereFilters);\n }\n\n return layersData;\n }\n\n filterLayer(layer: any, whereFilters: string[]) {\n const layerFilter = layer.filter;\n\n if (layerFilter) {\n let filterFound = false;\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n const field = layerFilter[fieldIndex];\n if (Array.isArray(field[1]) && field[1][1] === 'dimension_where') {\n //update already added where filter value\n field[0] = 'in';\n field[2] = ['literal', whereFilters];\n filterFound = true;\n break;\n }\n }\n if (!filterFound) {\n layerFilter.push([\n 'in',\n ['get', 'dimension_where'],\n ['literal', whereFilters],\n ]);\n }\n }\n }\n\n getLocationNameFromWhereTaxonomyPath(whereTaxonomyPath: string) {\n if (whereTaxonomyPath.includes('where.')) {\n const splitstr = whereTaxonomyPath.split('.');\n\n //if floor\n if (!this.nonFloorLayers.includes(whereTaxonomyPath)) {\n return splitstr[splitstr.length - 1];\n }\n\n return splitstr[splitstr.length - 1];\n }\n }\n\n getFlyToLocation(\n whereTaxonomyPath: string,\n isMobile = true,\n ): {\n center: [number, number];\n zoom: number;\n bearing: number;\n } {\n let location = this.getLocationNameFromWhereTaxonomyPath(whereTaxonomyPath);\n const getConfigForNode = (node: any) => {\n const cameraConfigs = isMobile ? node.mobile : node.web;\n return cameraConfigs;\n };\n if (\n this.getLocationNameFromWhereTaxonomyPath(focusTree.site.taxonomyPath) ===\n location\n ) {\n return getConfigForNode(focusTree.site.cameraConfigs);\n } else {\n for (let index = 0; index < focusTree.site.buildings.length; index++) {\n const building = focusTree.site.buildings[index];\n if (this.getLocationNameFromWhereTaxonomyPath(building.taxonomyPath) !== location) {\n for (let index = 0; index < building.floors.length; index++) {\n const floor = building.floors[index];\n if (this.getLocationNameFromWhereTaxonomyPath(floor.taxonomyPath) === location) {\n if (floor.cameraConfigs) {\n return getConfigForNode(floor.cameraConfigs);\n } else {\n return getConfigForNode(building.cameraConfigs);\n }\n }\n }\n } else {\n return getConfigForNode(building.cameraConfigs);\n }\n }\n }\n\n console.warn('Invalid whereTaxonomy passed to getFlyToLocation');\n return {\n center: undefined as any,\n zoom: undefined as any,\n bearing: undefined as any,\n };\n }\n\n filterLayersByCategories(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n geomType: string,\n dimensionWhat: string,\n map: maplibregl.Map,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n const layerID = layersData[index].id;\n const layer = layersData[index];\n let filter;\n const layerFilter = layer.filter;\n\n if (geomType) {\n filter = ['any', \n ['!', \n ['all', \n\n ['==', ['geometry-type'], geomType],\n ['==', ['get', 'dimension_what'], dimensionWhat]\n ]\n ]\n ];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n filter[1][1].splice(1, 0, ['!', ['in', filterValue, ['get', filterType]]]);\n }\n } else {\n filter = ['all'];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n filter.push(['all', ['in', filterValue, ['get', filterType]]]);\n }\n }\n\n if (layerFilter) {\n let filterFound = false;\n\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n let field = layerFilter[fieldIndex];\n\n if (geomType) {\n if (\n field[0] === 'any' &&\n Array.isArray(field[1]) &&\n Array.isArray(field[1][1]) &&\n // Array.isArray(field[3][1]) &&\n // Array.isArray(field[3][1]) &&\n // Array.isArray(field[3][1][1]) &&\n // Array.isArray(field[3][1][2]) &&\n // Array.isArray(field[3][2]) &&\n field[1][0] === '!' &&\n field[1][1][0] === 'all'\n ) {\n //update already added where filter value\n const subField = field[1][1];\n if (subField.length > 3) {\n // purge all previous entries\n subField.splice(1, subField.length - 3);\n }\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n field[1][1].splice(1, 0, ['!', ['in', filterValue, ['get', filterType]]]);\n }\n filterFound = true;\n break;\n }\n } else {\n if (\n Array.isArray(field[1]) &&\n Array.isArray(field[1][1]) &&\n field[0] === '!' &&\n field[1][1][1] === filterType\n ) {\n //update already added where filter value\n field[0] = '!';\n field[1][2] = ['literal', filterValues];\n filterFound = true;\n break;\n }\n }\n }\n if (!filterFound) {\n layerFilter.push(filter);\n }\n }\n \n if (layerID.includes('Retail')) {\n const layerStyle = layer.paint;\n const styleFilter : any = ['case'];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n styleFilter.push([\"boolean\", ['in', filterValue, ['get', filterType]], true]); // the category is enabled?\n styleFilter.push(0.99) // when enabled\n }\n styleFilter.push(0.25) // when disabled\n\n if (layer.type === 'fill') {\n const property = 'fill-opacity';\n layerStyle['fill-opacity'] = styleFilter;\n\n map.setPaintProperty(layerID, property, layerStyle[property]);\n }\n if (layer.type === 'line') {\n const property = 'line-opacity';\n layerStyle['line-opacity'] = styleFilter;\n\n map.setPaintProperty(layerID, property, layerStyle[property]);\n }\n }\n }\n\n return layersData;\n }\n \n filterLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n geomType: string,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n const layer = layersData[index];\n let filter;\n const layerFilter = layer.filter;\n\n if (geomType) {\n filter = [\n 'case',\n ['!', ['in', ['get', filterType], ['literal', filterValues]]],\n true,\n [\n 'all',\n ['in', ['get', filterType], ['literal', filterValues]],\n ['!=', ['geometry-type'], geomType],\n ],\n true,\n false,\n ];\n } else {\n filter = ['in', ['get', filterType], ['literal', filterValues]];\n }\n\n if (layerFilter) {\n let filterFound = false;\n\n console.log('layerFilter: ', layerFilter);\n\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n let field = layerFilter[fieldIndex];\n\n if (geomType) {\n if (\n field[0] === 'case' &&\n Array.isArray(field[1]) &&\n Array.isArray(field[3]) &&\n Array.isArray(field[3][1]) &&\n Array.isArray(field[3][1]) &&\n Array.isArray(field[3][1][1]) &&\n Array.isArray(field[3][1][2]) &&\n Array.isArray(field[3][2]) &&\n field[3][1][1][1] === filterType &&\n field[3][2][2] === geomType\n ) {\n //update already added where filter value\n field[1][1][2] = ['literal', filterValues];\n field[1][1][1] = ['get', filterType];\n field[3][1][2] = ['literal', filterValues];\n field[3][1][1] = ['get', filterType];\n field[3][2][2] = geomType;\n filterFound = true;\n break;\n }\n } else {\n if (\n Array.isArray(field[1]) &&\n field[0] === '!' &&\n field[1][1] === filterType\n ) {\n //update already added where filter value\n field[2] = ['literal', filterValues];\n filterFound = true;\n break;\n }\n }\n }\n if (!filterFound) {\n console.log('pushing: ', filterValues, filterType);\n layerFilter.push(filter);\n }\n }\n }\n\n return layersData;\n }\n\n\n createFilterForStyle(\n defValue: any,\n filterType: FilterType,\n filterValues: string[],\n value: string,\n ) {\n function setRowForField(defCopy: any) {\n if (Array.isArray(defCopy) && defCopy[0] === 'match') {\n let defClone = [...defCopy];\n if (Array.isArray(defClone[1]) && defClone[1][1] === filterType) {\n setRowForValue(defClone, defCopy);\n } else {\n defClone[defClone.length - 1] = setRowForField(\n defClone[defClone.length - 1],\n );\n }\n return defClone;\n } else {\n return ['match', ['get', filterType], filterValues, value, defCopy];\n }\n }\n\n function setRowForValue(defClone: any, defCopy: any) {\n for (let i = 3; i < defCopy.length; i += 2) {\n if (defClone[i] === value) {\n const newFilterValues = pushArray(defClone[i - 1], filterValues);\n defClone[i - 1] = newFilterValues;\n return;\n } else if (i + 2 === defCopy.length) {\n defClone.splice(i + 1, 0, filterValues, value);\n }\n }\n }\n\n function pushArray(originalArray: any[], newArray: any[]) {\n const filteredArray = newArray.filter(\n item => !originalArray.includes(item),\n );\n originalArray.push(...filteredArray);\n return originalArray;\n }\n\n return setRowForField(defValue);\n }\n\n styleLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n property: string,\n value: string,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n // if (layersData[index].isFireAlarmLayer) {\n const layer = layersData[index];\n const layerStyle = layer.paint;\n const layerType = layer.type;\n\n // TODO: add support for other layers later\n if ((layerType && layerType === 'fill') || layerType === 'line') {\n if (layerStyle[property]) {\n let defValue = layerStyle[property];\n\n if (defValue) {\n const filter = this.createFilterForStyle(\n defValue,\n filterType,\n filterValues,\n value,\n );\n\n layerStyle[property] = filter;\n }\n }\n }\n // }\n }\n\n return layersData;\n }\n\n createFilterForClearStyle(\n defValue: any,\n filterType: FilterType,\n filterValues: string[],\n ) {\n function setRowForField(defCopy: any) {\n if (Array.isArray(defCopy) && defCopy[0] === 'match') {\n let defClone = [...defCopy];\n if (Array.isArray(defClone[1]) && defClone[1][1] === filterType) {\n if (filterValues.length > 0) {\n setRowForValue(defClone, defCopy);\n } else {\n defClone = defClone[defClone.length - 1];\n }\n } else {\n defClone[defClone.length - 1] = setRowForField(\n defClone[defClone.length - 1],\n );\n }\n return defClone;\n }\n }\n\n function setRowForValue(defClone: any, defCopy: any) {\n for (let i = 2; i < defCopy.length; i += 2) {\n if (Array.isArray(defClone[i])) {\n filterValues.forEach(filterValue => {\n const index = defClone[i].indexOf(filterValue);\n if (index > -1) {\n if (defClone[i].length > 1) {\n defClone[i].splice(index, 1);\n } else {\n defClone[i] = [''];\n }\n }\n });\n }\n }\n }\n\n return setRowForField(defValue);\n }\n\n clearStyleLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n property: string,\n ) {\n for (let index = 0; index < layersData.length; index += 1) {\n // if (layersData[index].isFireAlarmLayer) {\n const layer = layersData[index];\n const layerStyle = layer.paint;\n const layerType = layer.type;\n\n // TODO: add support for other layers later\n if ((layerType && layerType === 'fill') || layerType === 'line') {\n if (layerStyle[property]) {\n let defValue = layerStyle[property];\n\n if (defValue) {\n const filter = this.createFilterForClearStyle(\n defValue,\n filterType,\n filterValues,\n );\n\n layerStyle[property] = filter;\n }\n }\n }\n // }\n }\n\n return layersData;\n }\n\n normalize(string: string) {\n return string.trim().toLowerCase();\n }\n\n relevanceSort(metaFeatures: metaFeature[], query: string, isStrict = false) {\n function score(metaFeature: metaFeature): any {\n const noMatch = [-1, 0, metaFeature.name];\n if (metaFeature.name) {\n const lowerStr = metaFeature.name.toLowerCase();\n const lowerQuery = query.toLowerCase();\n\n // 1. If the string is the same as the query\n if (lowerStr === lowerQuery) {\n return [1000, -metaFeature.name.length, lowerStr];\n }\n // 2. If the string starts with the query\n else if (lowerStr.startsWith(lowerQuery)) {\n return [500, -metaFeature.name.length, lowerStr];\n }\n // 3. If one of the words in the string starts with the query\n else if (\n lowerStr.split(' ').some(word => word.startsWith(lowerQuery))\n ) {\n return [200, -metaFeature.name.length, lowerStr];\n }\n // 4. The string contains the query\n else if (!isStrict) {\n if (lowerStr.includes(lowerQuery)) {\n return [0, -metaFeature.name.length, lowerStr];\n } else {\n return noMatch;\n }\n } else {\n return noMatch;\n }\n } else {\n return noMatch;\n }\n }\n return metaFeatures\n .sort((a, b) => {\n const scoreA = score(a);\n const scoreB = score(b);\n return (\n scoreB[0] - scoreA[0] ||\n scoreB[1] - scoreA[1] ||\n scoreA[2].localeCompare(scoreB[2])\n );\n })\n .filter(s => score(s)[0] >= 0);\n }\n\n sort(metaFeatures: metaFeature[], sortType: SortType, query = '') {\n const compare = (a: string, b: string) => {\n if (!a || !b) {\n return 0;\n }\n\n return a.localeCompare(b);\n };\n\n if (sortType === SortType.Name) {\n return metaFeatures.sort((a: metaFeature, b: metaFeature) => {\n return compare(a.name!, b.name!);\n });\n } else if (sortType === SortType.WhereDimension) {\n return metaFeatures.sort((a: metaFeature, b: metaFeature) => {\n const whereComparison = compare(a.whereDimension!, b.whereDimension!);\n if (whereComparison === 0) {\n return compare(a.name!, b.name!);\n } else {\n return whereComparison;\n }\n });\n } else if (sortType === SortType.Relevance) {\n return this.relevanceSort(metaFeatures as any, query);\n } else if (sortType === SortType.RelevanceStrict) {\n return this.relevanceSort(metaFeatures as any, query, true);\n }\n }\n\n async setupMapObjectSearch(\n onSearchStatusUpdateCallback: StatusUpdateCallbackType,\n ) {\n const status = await getPublishedData(\n {\n URL: this.empApi,\n accessToken: this.atomsAPIAccessToken,\n secretKey: this.secretKeyForDecryption,\n publishedDataType: PublishedDataType.MapObjects,\n },\n this.storage,\n );\n\n this.searchStatus = status;\n console.log('search status: ', status);\n\n const mapObjects = useMapObjectsDataStore.getState().data;\n for (let index = 0; index < mapObjects.length; index++) {\n const mapObject = mapObjects[index];\n if (mapObject) {\n // Decide geometry type based on coordinates format:\n // - Point: [lng, lat]\n // - LineString: [[lng, lat], [lng, lat], ...]\n const coords = mapObject.lngLat;\n const geometry =\n Array.isArray(coords) && Array.isArray(coords[0])\n ? {type: 'LineString', coordinates: coords}\n : {type: 'Point', coordinates: coords};\n\n // Re-create geojson\n const moJSON: metaFeature = {\n mapObjectId: mapObject.mID,\n coordinates: mapObject.lngLat,\n name: mapObject.name,\n whatDimension: mapObject.what,\n whereDimension: mapObject.where,\n geometry,\n properties: {\n myMapObjectId: mapObject.mID,\n title: mapObject.name,\n localRef: mapObject.localRef,\n dimension_what: mapObject.what,\n dimension_where: mapObject.where,\n booth_info: {\n overview: mapObject.overview,\n images: mapObject.images,\n videos: mapObject.videos,\n files: mapObject.files,\n products: mapObject.products,\n logos: mapObject.logos,\n } as MetaFeatureProperties['booth_info'],\n metadata: mapObject.metadata ? JSON.parse(mapObject.metadata) : null,\n },\n };\n this.searchableGeoJsonFeatures.push(moJSON);\n }\n }\n\n if (onSearchStatusUpdateCallback) {\n onSearchStatusUpdateCallback(status === Status.Ready ? true : false);\n }\n }\n\n getMapObjectsByFilteredLocalRef(\n boothId: string,\n searchSubString = false,\n sortType: SortType,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n const uniqueIds = new Set<string | number>();\n const metaFeatures = [];\n const boothIdToSearch = this.normalize(String(boothId));\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = feature.properties.myMapObjectId;\n const localRef = this.normalize(String(feature.properties.localRef));\n \n if (searchSubString && !localRef.includes(boothIdToSearch)) {\n continue;\n }\n if (!searchSubString && localRef !== boothIdToSearch) {\n continue;\n }\n if (uniqueIds.has(id)) {\n continue;\n }\n uniqueIds.add(id);\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: null,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n\n const sortedFeatures = this.sort(\n metaFeatures,\n sortType,\n boothId,\n ) as metaFeature[];\n onResponseCallback(sortedFeatures);\n }\n\n getMapObjectsByName(\n name: string,\n searchSubString = false,\n sortType: SortType,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n const uniqueIds = new Set<string | number>();\n const metaFeatures = [];\n const nameToSearch = this.normalize(String(name));\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = feature.properties.myMapObjectId;\n const title = this.normalize(String(feature.properties.title));\n if (searchSubString && !title.includes(nameToSearch)) {\n continue;\n }\n if (!searchSubString && title !== nameToSearch) {\n continue;\n }\n if (uniqueIds.has(id)) {\n continue;\n }\n uniqueIds.add(id);\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: null,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n\n const sortedFeatures = this.sort(\n metaFeatures,\n sortType,\n name,\n ) as metaFeature[];\n onResponseCallback(sortedFeatures);\n }\n\n getMapObjectById(\n idToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = String(feature.properties.myMapObjectId);\n if (id === String(idToSearch)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectByLocalRef(\n localRefToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n if (localRef === String(localRefToSearch)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectMatchingLocalRef(\n localRefToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n if (localRef.includes(String(localRefToSearch))) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsMatchingLocalRefs(\n localRefsToSearch: string | string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n \n const localRefsArray = Array.isArray(localRefsToSearch) ? localRefsToSearch : [localRefsToSearch];\n \n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n \n if (localRefsArray.some((ref) => localRef.includes(String(ref)))) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n \n onResponseCallback(metaFeatures);\n }\n \n\n getMapObjectsByWhatTaxonomy(\n whatTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (!whatTaxonomyPath || whatTaxonomy === String(whatTaxonomyPath)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsByWhereTaxonomy(\n whereTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n if (whereTaxonomy === String(whereTaxonomyPath)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsByWhatAndWhereTaxonomy(\n whatTaxonomyPath: string,\n whereTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (\n whereTaxonomy === String(whereTaxonomyPath) &&\n whatTaxonomy === String(whatTaxonomyPath)\n ) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhatTaxonomy(\n whatTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (whatTaxonomyPaths.includes(whatTaxonomy)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhereTaxonomy(\n whereTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n if (whereTaxonomyPaths.includes(whereTaxonomy)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhatAndWhereTaxonomy(\n whatTaxonomyPaths: string[],\n whereTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (\n whereTaxonomyPaths.includes(whereTaxonomy) &&\n whatTaxonomyPaths.includes(whatTaxonomy)\n ) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsApi(query = '') {\n return new Promise(\n (resolve: (metaFeatures: metaFeature[]) => void, reject) => {\n axios({\n url: `${this.empApi}/map-objects${query}`,\n headers: {Authorization: `Bearer ${this.atomsAPIAccessToken}`},\n method: 'get',\n })\n .then(response => {\n const data = response.data.data;\n let uniqueFeatures = data as metaFeature[];\n resolve(uniqueFeatures);\n })\n .catch(function (error) {\n reject(error);\n });\n },\n );\n }\n\n getMapObjectsByWhatTaxonomyAPI(\n whatTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let query = `?$limit=${this.apiRequestLimit}`;\n if(whatTaxonomyPath) query += `&taxonomy2Path=${whatTaxonomyPath}`;\n \n this.getMapObjectsApi(query)\n .then(onResponseCallback)\n .catch(onResponseCallback);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"meta-atlas-sdk-core.js","names":["focusTree","whatTaxonomies","length","feature","turfFeature","lineString","turfLine","point","turfPoint","polygon","turfPolygon","center","lineSliceAlong","booleanPointInPolygon","axios","LocalStorage","PublishedDataType","Status","getPublishedData","useMapObjectsDataStore","SortType","FilterType","MetaAtlasCore","defaultFocusedTaxonomy","searchableGeoJsonFeatures","currentFocus","token","empApi","atomsAPIAccessToken","apiRequestLimit","secretKeyForDecryption","routingStatus","Awaiting","searchStatus","storage","constructor","lastClicked","mapObjectId","coordinates","name","whatDimension","whereDimension","geometry","properties","clickEvent","init","apiServerURL","secretKey","onAuthenticationResponse","getAtomsAPIAccessToken","data","JSON","stringify","strategy","atomsSdkToken","clientEngine","clientOS","config","method","url","headers","then","response","accessToken","authenticated","catch","error","setupRouting","onRoutingStatusUpdateCallback","status","URL","publishedDataType","Routing","console","log","Ready","getRoutingStatus","setLastClickedFeature","featureData","getMapObjectById","res","mo","booth_info","getLastClickedFeature","clickedFeature","isClickableFeature","isSearchable","title","getMidPointOfFeature","lngLat","type","gjson","gjsonLength","splicedLine","getFocusTree","getWhatTaxonomies","getCurrentFocus","getCurrentFocusBuilding","bld","site","buildings","includes","taxonomyPath","getCurrentFocusFloor","currentBuilding","f","floors","getUserViewportBuilding","currentCenter","centerPoint","bIndex","b","hasOwnProperty","bounds","checkUserViewport","building","floor","undefined","bBounds","isViewingBuilding","fBounds","isViewingFloor","ignoredLayers","nonFloorLayers","filterBaseMapWhereDimension","layersData","whereTaxonomyPath","dimensionWhere","whereFilters","Array","isArray","push","index","layerID","id","filterLayer","filterLayersWhereDimension","layer","layerFilter","filter","filterFound","fieldIndex","field","getLocationNameFromWhereTaxonomyPath","splitstr","split","getFlyToLocation","isMobile","arguments","location","getConfigForNode","node","cameraConfigs","mobile","web","warn","zoom","bearing","filterLayersByCategories","filterType","filterValues","geomType","dimensionWhat","map","filterValue","splice","subField","layerStyle","paint","styleFilter","property","setPaintProperty","filterLayersByType","createFilterForStyle","defValue","value","setRowForField","defCopy","defClone","setRowForValue","i","newFilterValues","pushArray","originalArray","newArray","filteredArray","item","styleLayersByType","layerType","createFilterForClearStyle","forEach","indexOf","clearStyleLayersByType","normalize","string","trim","toLowerCase","relevanceSort","metaFeatures","query","isStrict","score","metaFeature","noMatch","lowerStr","lowerQuery","startsWith","some","word","sort","a","scoreA","scoreB","localeCompare","s","sortType","compare","Name","WhereDimension","whereComparison","Relevance","RelevanceStrict","setupMapObjectSearch","onSearchStatusUpdateCallback","MapObjects","mapObjects","getState","mapObject","coords","moJSON","mID","what","where","myMapObjectId","localRef","dimension_what","dimension_where","overview","images","videos","files","products","logos","metadata","parse","getMapObjectsByFilteredLocalRef","boothId","searchSubString","onResponseCallback","uniqueIds","Set","boothIdToSearch","String","has","add","objFeature","sortedFeatures","getMapObjectsByName","nameToSearch","idToSearch","getMapObjectByLocalRef","localRefToSearch","getMapObjectMatchingLocalRef","getMapObjectsMatchingLocalRefs","localRefsToSearch","localRefsArray","ref","getMapObjectsByWhatTaxonomy","whatTaxonomyPath","whatTaxonomy","getMapObjectsByWhereTaxonomy","whereTaxonomy","getMapObjectsByWhatAndWhereTaxonomy","getMapObjectsInWhatTaxonomy","whatTaxonomyPaths","getMapObjectsInWhereTaxonomy","whereTaxonomyPaths","getMapObjectsInWhatAndWhereTaxonomy","getMapObjectsApi","Promise","resolve","reject","Authorization","uniqueFeatures","getMapObjectsByWhatTaxonomyAPI"],"sources":["../../../../src/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.ts"],"sourcesContent":["import focusTree from './focustree.json';\nimport whatTaxonomies from './whatTaxonomies.json';\n\nimport length from '@turf/length';\nimport {\n feature as turfFeature,\n lineString as turfLine,\n point as turfPoint,\n polygon as turfPolygon,\n} from '@turf/helpers';\nimport center from '@turf/center';\nimport lineSliceAlong from '@turf/line-slice-along';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\n\nimport axios from 'axios';\nimport {Feature, Position} from 'geojson';\n\nimport {LocalStorage} from '../utils/local-storage';\n\nimport {\n PublishedDataType,\n Status,\n StatusUpdateCallbackType,\n getPublishedData,\n} from './fetch-published-json';\nimport useMapObjectsDataStore from '../utils/mapobjects-store';\n\nexport type MetaFeatureProperties = {\n myMapObjectId: string | number;\n title: string;\n localRef: string | number;\n dimension_what: string;\n dimension_where: string;\n booth_info?: {\n overview: string[] | null;\n images: string[] | null;\n videos: string[] | null;\n files: string[] | null;\n products: string[] | null;\n logos: [{\n assetId: string;\n fileName: string;\n presignedUrl: string;\n }] | null;\n } | null;\n metadata?: any | null;\n};\n\nexport type metaFeature = {\n mapObjectId: string | null;\n coordinates: number[] | null;\n name: string | null;\n whatDimension: string | null;\n whereDimension: string | null;\n geometry: any;\n properties: MetaFeatureProperties | null;\n};\n\n// Type for clicked features that includes both metaFeature data and raw click event\nexport type clickedMetaFeature = metaFeature & {\n clickEvent: any | null; // MapMouseEvent from maplibre-gl (using any to avoid direct dependency)\n};\n\nenum SortType {\n Name = 'Name',\n WhereDimension = 'WhereDimension',\n Relevance = 'Relevance',\n RelevanceStrict = 'RelevanceStrict',\n}\n\nexport enum FilterType {\n Name = 'title',\n LocalRef = 'localRef',\n WhatTaxonomy = 'dimension_what',\n}\n\nexport class MetaAtlasCore {\n defaultFocusedTaxonomy = 'where.changi';\n searchableGeoJsonFeatures: metaFeature[] = [];\n currentFocus = this.defaultFocusedTaxonomy;\n lastClicked: clickedMetaFeature;\n\n // For ATOMS API\n token: string = '';\n empApi: string = '';\n atomsAPIAccessToken = '';\n apiRequestLimit = 5000;\n\n // For Routing & Search\n secretKeyForDecryption = '';\n routingStatus = Status.Awaiting;\n searchStatus = Status.Awaiting;\n storage = new LocalStorage();\n\n constructor() {\n this.lastClicked = {\n mapObjectId: null,\n coordinates: null,\n name: null,\n whatDimension: null,\n whereDimension: null,\n geometry: null,\n properties: null,\n clickEvent: null,\n };\n }\n\n init(\n apiServerURL: string,\n token: string,\n secretKey: string,\n onAuthenticationResponse: (data: any) => void,\n ) {\n this.empApi = apiServerURL;\n this.token = token;\n this.secretKeyForDecryption = secretKey;\n this.getAtomsAPIAccessToken(onAuthenticationResponse);\n }\n\n getAtomsAPIAccessToken(onAuthenticationResponse: (data: any) => void) {\n const data = JSON.stringify({\n strategy: 'atomstoken',\n atomsSdkToken: this.token,\n clientEngine: 'API',\n clientOS: 'Linux',\n });\n\n const config = {\n method: 'post',\n url: `${this.empApi}/authentication`,\n headers: {'Content-Type': 'application/json'},\n data: data,\n };\n axios(config)\n .then(async response => {\n if (response?.data?.accessToken) {\n this.atomsAPIAccessToken = response.data.accessToken;\n onAuthenticationResponse({\n authenticated: true,\n });\n }\n })\n .catch(function (error) {\n onAuthenticationResponse({\n authenticated: false,\n error: error,\n });\n });\n }\n\n async setupRouting(onRoutingStatusUpdateCallback: StatusUpdateCallbackType) {\n const status = await getPublishedData(\n {\n URL: this.empApi,\n accessToken: this.atomsAPIAccessToken,\n secretKey: this.secretKeyForDecryption,\n publishedDataType: PublishedDataType.Routing,\n },\n this.storage,\n );\n\n this.routingStatus = status;\n console.log('routing status: ', status);\n if (onRoutingStatusUpdateCallback) {\n onRoutingStatusUpdateCallback(status === Status.Ready ? true : false);\n }\n }\n\n getRoutingStatus() {\n return this.routingStatus;\n }\n\n // last clicked related functionality\n setLastClickedFeature(featureData: clickedMetaFeature) {\n if (featureData.mapObjectId) {\n this.getMapObjectById(featureData.mapObjectId, (res) => { \n const mo = res?.[0];\n if (mo) {\n this.lastClicked = {\n ...featureData,\n properties: {\n ...featureData.properties,\n booth_info: mo.properties.booth_info\n }\n };\n }\n })\n } else {\n this.lastClicked = featureData;\n }\n }\n\n getLastClickedFeature(): clickedMetaFeature {\n let clickedFeature = this.lastClicked;\n if (\n !this.lastClicked ||\n (this.lastClicked &&\n (this.lastClicked.name === null ||\n this.lastClicked.whereDimension === null))\n ) {\n const feature: clickedMetaFeature = {\n mapObjectId: null,\n coordinates: null,\n name: null,\n whatDimension: null,\n whereDimension: null,\n geometry: null,\n properties: null,\n clickEvent: null,\n };\n this.setLastClickedFeature(feature);\n clickedFeature = feature;\n }\n return clickedFeature;\n }\n\n isClickableFeature(feature: any) {\n if (\n feature.properties.isSearchable &&\n feature.properties.title !== 'Transit' &&\n feature.properties.title !== 'Public'\n ) {\n return true;\n }\n\n return false;\n }\n\n getMidPointOfFeature(feature: Feature) {\n if (!feature) {\n return null;\n }\n\n if ((feature as any).lngLat) {\n return (feature as any).lngLat;\n }\n if (!feature.geometry) {\n return null;\n }\n if (feature.geometry.type === 'Point') {\n return feature.geometry.coordinates;\n }\n let gjson = turfFeature(feature.geometry);\n if (\n gjson.geometry.type === 'LineString' ||\n (gjson.geometry.type === 'MultiLineString' &&\n gjson.geometry.coordinates.length == 1)\n ) {\n gjson = turfLine((feature.geometry as any).coordinates);\n let gjsonLength = length(gjson);\n let splicedLine = lineSliceAlong(\n gjson as any,\n gjsonLength / 2,\n gjsonLength,\n );\n return splicedLine.geometry.coordinates[0];\n }\n return center(gjson as any).geometry.coordinates;\n }\n\n // focus control related methods\n getFocusTree() {\n return focusTree;\n }\n\n getWhatTaxonomies() {\n return whatTaxonomies;\n }\n\n getCurrentFocus() {\n return this.currentFocus;\n }\n\n getCurrentFocusBuilding() {\n for (let bld in focusTree.site.buildings) {\n if (\n this.currentFocus.includes(focusTree.site.buildings[bld].taxonomyPath)\n ) {\n return focusTree.site.buildings[bld];\n }\n }\n return null;\n }\n\n getCurrentFocusFloor() {\n let currentBuilding = this.getCurrentFocusBuilding();\n if (!currentBuilding) {\n return;\n }\n for (let f in currentBuilding.floors) {\n if (this.currentFocus === currentBuilding.floors[f].taxonomyPath) {\n return currentBuilding.floors[f];\n }\n }\n return null;\n }\n\n getUserViewportBuilding(currentCenter: Position) {\n let centerPoint = turfPoint(currentCenter);\n //get building bounds\n for (let bIndex in focusTree.site.buildings) {\n //check if center in building bounds\n let b = focusTree.site.buildings[bIndex];\n if (!b.hasOwnProperty('bounds')) {\n continue;\n }\n let bounds = turfPolygon(b.bounds as any);\n if (booleanPointInPolygon(centerPoint, bounds)) {\n return b;\n }\n }\n return null;\n }\n\n checkUserViewport(currentCenter: Position, building: any, floor?: any) {\n //get user center\n let centerPoint = turfPoint(currentCenter);\n //check building\n if (building === null || building === undefined ) {\n return false;\n }\n //check if user is viewing building\n if (!building.hasOwnProperty('bounds')) {\n return false;\n }\n let bBounds = turfPolygon(building.bounds);\n let isViewingBuilding = booleanPointInPolygon(centerPoint, bBounds);\n //check floor\n if (floor === null || floor === undefined) {\n return isViewingBuilding;\n }\n //check if user is viewing floor\n if (!floor.hasOwnProperty('bounds')) {\n return isViewingBuilding;\n }\n let fBounds = turfPolygon(floor.bounds);\n let isViewingFloor = booleanPointInPolygon(centerPoint, fBounds);\n return isViewingBuilding || isViewingFloor;\n }\n\n ignoredLayers = [\n 'Aerodrome',\n 'Aerodrome names',\n 'Aerobridge',\n 'Aerobridge gates',\n 'Airplanes',\n 'Airplanes outline',\n 'Building Extrusion',\n 'Building icon',\n 'Building overlay',\n 'Building overlay outline',\n 'Building underlay',\n 'Building underlay icon',\n 'Building underlay selected outline',\n 'building_outline',\n 'Changi Airport Connector',\n 'Changi Airport Connector Text',\n 'Changi Walkway Text',\n 'T2 overlay outline copy',\n 'Building overlay base',\n 'Skytrain track outdoor',\n ];\n\n nonFloorLayers = [\n 'where.changi',\n 'where.changi.tarmac',\n 'where.changi.tarmac.public',\n 'where.changi.tarmac.private',\n 'where.changi.terminals',\n 'where.changi.terminals.jewel',\n 'where.changi.terminals.t1',\n 'where.changi.terminals.t2',\n 'where.changi.terminals.t3',\n 'where.changi.terminals.t4',\n 'where.hkcec.main_bldg',\n 'where.gbtb.flower_dome',\n 'where.lima',\n 'where.lima.mahsuri_center',\n 'where.lima.maritime',\n 'where.malaysia',\n 'where.malaysia.bcck',\n 'where.malaysia.rmh',\n 'where.malaysia.pm',\n 'where.indonesia.fairmont_jakarta'\n ];\n\n filterBaseMapWhereDimension(layersData: any, whereTaxonomyPath: string) {\n let dimensionWhere = whereTaxonomyPath;\n if (!dimensionWhere) {\n return;\n }\n\n this.currentFocus = dimensionWhere;\n let whereFilters: string[] = [dimensionWhere];\n \n // Check if dimensionWhere matches the site taxonomyPath\n if (dimensionWhere === focusTree.site.taxonomyPath) {\n // If it equals site, add all floors of all buildings\n whereFilters = [];\n if (focusTree.site.buildings && Array.isArray(focusTree.site.buildings)) {\n for (const building of focusTree.site.buildings) {\n if (building.floors && Array.isArray(building.floors)) {\n for (const floor of building.floors) {\n if (floor.taxonomyPath) {\n whereFilters.push(floor.taxonomyPath);\n }\n }\n }\n }\n }\n else {\n // If it equals a site and has no buildings, add the site itself\n whereFilters = [focusTree.site.taxonomyPath];\n }\n } else {\n // Check if dimensionWhere matches any building's taxonomyPath\n for (const building of focusTree.site.buildings) {\n if (dimensionWhere === building.taxonomyPath) {\n // If it equals a building, add all floors of that building\n whereFilters = [];\n if (building.floors && Array.isArray(building.floors)) {\n for (const floor of building.floors) {\n if (floor.taxonomyPath) {\n whereFilters.push(floor.taxonomyPath);\n }\n }\n }\n // If it equals a building, but has no floors, add the building itself\n else {\n whereFilters = [building.taxonomyPath];\n }\n break;\n }\n }\n }\n\n console.log('whereFilters: ', whereFilters);\n if (layersData.length > 0) {\n for (let index = 0; index < layersData.length; index += 1) {\n const layerID = layersData[index].id;\n if (!this.ignoredLayers.includes(layerID)) {\n this.filterLayer(layersData[index], whereFilters);\n }\n }\n }\n\n return layersData;\n }\n\n filterLayersWhereDimension(layersData: any, whereTaxonomyPath: string) {\n let dimensionWhere = whereTaxonomyPath;\n if (!dimensionWhere) {\n return;\n }\n\n let whereFilters: string[] = [];\n whereFilters = [dimensionWhere];\n\n for (let index = 0; index < layersData.length; index += 1) {\n this.filterLayer(layersData[index], whereFilters);\n }\n\n return layersData;\n }\n\n filterLayer(layer: any, whereFilters: string[]) {\n const layerFilter = layer.filter;\n\n if (layerFilter) {\n let filterFound = false;\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n const field = layerFilter[fieldIndex];\n if (Array.isArray(field[1]) && field[1][1] === 'dimension_where') {\n //update already added where filter value\n field[0] = 'in';\n field[2] = ['literal', whereFilters];\n filterFound = true;\n break;\n }\n }\n if (!filterFound) {\n layerFilter.push([\n 'in',\n ['get', 'dimension_where'],\n ['literal', whereFilters],\n ]);\n }\n }\n }\n\n getLocationNameFromWhereTaxonomyPath(whereTaxonomyPath: string) {\n if (whereTaxonomyPath.includes('where.')) {\n const splitstr = whereTaxonomyPath.split('.');\n\n //if floor\n if (!this.nonFloorLayers.includes(whereTaxonomyPath)) {\n return splitstr[splitstr.length - 1];\n }\n\n return splitstr[splitstr.length - 1];\n }\n }\n\n getFlyToLocation(\n whereTaxonomyPath: string,\n isMobile = true,\n ): {\n center: [number, number];\n zoom: number;\n bearing: number;\n } {\n let location = this.getLocationNameFromWhereTaxonomyPath(whereTaxonomyPath);\n const getConfigForNode = (node: any) => {\n const cameraConfigs = isMobile ? node.mobile : node.web;\n return cameraConfigs;\n };\n if (\n this.getLocationNameFromWhereTaxonomyPath(focusTree.site.taxonomyPath) ===\n location\n ) {\n return getConfigForNode(focusTree.site.cameraConfigs);\n } else {\n for (let index = 0; index < focusTree.site.buildings.length; index++) {\n const building = focusTree.site.buildings[index];\n if (this.getLocationNameFromWhereTaxonomyPath(building.taxonomyPath) !== location) {\n for (let index = 0; index < building.floors.length; index++) {\n const floor = building.floors[index];\n if (this.getLocationNameFromWhereTaxonomyPath(floor.taxonomyPath) === location) {\n if (floor.cameraConfigs) {\n return getConfigForNode(floor.cameraConfigs);\n } else {\n return getConfigForNode(building.cameraConfigs);\n }\n }\n }\n } else {\n return getConfigForNode(building.cameraConfigs);\n }\n }\n }\n\n console.warn('Invalid whereTaxonomy passed to getFlyToLocation');\n return {\n center: undefined as any,\n zoom: undefined as any,\n bearing: undefined as any,\n };\n }\n\n filterLayersByCategories(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n geomType: string,\n dimensionWhat: string,\n map: maplibregl.Map,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n const layerID = layersData[index].id;\n const layer = layersData[index];\n let filter;\n const layerFilter = layer.filter;\n\n if (geomType) {\n filter = ['any', \n ['!', \n ['all', \n\n ['==', ['geometry-type'], geomType],\n ['==', ['get', 'dimension_what'], dimensionWhat]\n ]\n ]\n ];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n filter[1][1].splice(1, 0, ['!', ['in', filterValue, ['get', filterType]]]);\n }\n } else {\n filter = ['all'];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n filter.push(['all', ['in', filterValue, ['get', filterType]]]);\n }\n }\n\n if (layerFilter) {\n let filterFound = false;\n\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n let field = layerFilter[fieldIndex];\n\n if (geomType) {\n if (\n field[0] === 'any' &&\n Array.isArray(field[1]) &&\n Array.isArray(field[1][1]) &&\n // Array.isArray(field[3][1]) &&\n // Array.isArray(field[3][1]) &&\n // Array.isArray(field[3][1][1]) &&\n // Array.isArray(field[3][1][2]) &&\n // Array.isArray(field[3][2]) &&\n field[1][0] === '!' &&\n field[1][1][0] === 'all'\n ) {\n //update already added where filter value\n const subField = field[1][1];\n if (subField.length > 3) {\n // purge all previous entries\n subField.splice(1, subField.length - 3);\n }\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n field[1][1].splice(1, 0, ['!', ['in', filterValue, ['get', filterType]]]);\n }\n filterFound = true;\n break;\n }\n } else {\n if (\n Array.isArray(field[1]) &&\n Array.isArray(field[1][1]) &&\n field[0] === '!' &&\n field[1][1][1] === filterType\n ) {\n //update already added where filter value\n field[0] = '!';\n field[1][2] = ['literal', filterValues];\n filterFound = true;\n break;\n }\n }\n }\n if (!filterFound) {\n layerFilter.push(filter);\n }\n }\n \n if (layerID.includes('Retail')) {\n const layerStyle = layer.paint;\n const styleFilter : any = ['case'];\n for (let index = 0; index < filterValues.length; index++) {\n const filterValue = filterValues[index];\n styleFilter.push([\"boolean\", ['in', filterValue, ['get', filterType]], true]); // the category is enabled?\n styleFilter.push(0.99) // when enabled\n }\n styleFilter.push(0.25) // when disabled\n\n if (layer.type === 'fill') {\n const property = 'fill-opacity';\n layerStyle['fill-opacity'] = styleFilter;\n\n map.setPaintProperty(layerID, property, layerStyle[property]);\n }\n if (layer.type === 'line') {\n const property = 'line-opacity';\n layerStyle['line-opacity'] = styleFilter;\n\n map.setPaintProperty(layerID, property, layerStyle[property]);\n }\n }\n }\n\n return layersData;\n }\n \n filterLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n geomType: string,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n const layer = layersData[index];\n let filter;\n const layerFilter = layer.filter;\n\n if (geomType) {\n filter = [\n 'case',\n ['!', ['in', ['get', filterType], ['literal', filterValues]]],\n true,\n [\n 'all',\n ['in', ['get', filterType], ['literal', filterValues]],\n ['!=', ['geometry-type'], geomType],\n ],\n true,\n false,\n ];\n } else {\n filter = ['in', ['get', filterType], ['literal', filterValues]];\n }\n\n if (layerFilter) {\n let filterFound = false;\n\n console.log('layerFilter: ', layerFilter);\n\n for (\n let fieldIndex = 0;\n fieldIndex < layerFilter.length;\n fieldIndex += 1\n ) {\n let field = layerFilter[fieldIndex];\n\n if (geomType) {\n if (\n field[0] === 'case' &&\n Array.isArray(field[1]) &&\n Array.isArray(field[3]) &&\n Array.isArray(field[3][1]) &&\n Array.isArray(field[3][1]) &&\n Array.isArray(field[3][1][1]) &&\n Array.isArray(field[3][1][2]) &&\n Array.isArray(field[3][2]) &&\n field[3][1][1][1] === filterType &&\n field[3][2][2] === geomType\n ) {\n //update already added where filter value\n field[1][1][2] = ['literal', filterValues];\n field[1][1][1] = ['get', filterType];\n field[3][1][2] = ['literal', filterValues];\n field[3][1][1] = ['get', filterType];\n field[3][2][2] = geomType;\n filterFound = true;\n break;\n }\n } else {\n if (\n Array.isArray(field[1]) &&\n field[0] === '!' &&\n field[1][1] === filterType\n ) {\n //update already added where filter value\n field[2] = ['literal', filterValues];\n filterFound = true;\n break;\n }\n }\n }\n if (!filterFound) {\n console.log('pushing: ', filterValues, filterType);\n layerFilter.push(filter);\n }\n }\n }\n\n return layersData;\n }\n\n\n createFilterForStyle(\n defValue: any,\n filterType: FilterType,\n filterValues: string[],\n value: string,\n ) {\n function setRowForField(defCopy: any) {\n if (Array.isArray(defCopy) && defCopy[0] === 'match') {\n let defClone = [...defCopy];\n if (Array.isArray(defClone[1]) && defClone[1][1] === filterType) {\n setRowForValue(defClone, defCopy);\n } else {\n defClone[defClone.length - 1] = setRowForField(\n defClone[defClone.length - 1],\n );\n }\n return defClone;\n } else {\n return ['match', ['get', filterType], filterValues, value, defCopy];\n }\n }\n\n function setRowForValue(defClone: any, defCopy: any) {\n for (let i = 3; i < defCopy.length; i += 2) {\n if (defClone[i] === value) {\n const newFilterValues = pushArray(defClone[i - 1], filterValues);\n defClone[i - 1] = newFilterValues;\n return;\n } else if (i + 2 === defCopy.length) {\n defClone.splice(i + 1, 0, filterValues, value);\n }\n }\n }\n\n function pushArray(originalArray: any[], newArray: any[]) {\n const filteredArray = newArray.filter(\n item => !originalArray.includes(item),\n );\n originalArray.push(...filteredArray);\n return originalArray;\n }\n\n return setRowForField(defValue);\n }\n\n styleLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n property: string,\n value: string,\n ) {\n if (!filterValues) {\n return;\n }\n\n for (let index = 0; index < layersData.length; index += 1) {\n // if (layersData[index].isFireAlarmLayer) {\n const layer = layersData[index];\n const layerStyle = layer.paint;\n const layerType = layer.type;\n\n // TODO: add support for other layers later\n if ((layerType && layerType === 'fill') || layerType === 'line') {\n if (layerStyle[property]) {\n let defValue = layerStyle[property];\n\n if (defValue) {\n const filter = this.createFilterForStyle(\n defValue,\n filterType,\n filterValues,\n value,\n );\n\n layerStyle[property] = filter;\n }\n }\n }\n // }\n }\n\n return layersData;\n }\n\n createFilterForClearStyle(\n defValue: any,\n filterType: FilterType,\n filterValues: string[],\n ) {\n function setRowForField(defCopy: any) {\n if (Array.isArray(defCopy) && defCopy[0] === 'match') {\n let defClone = [...defCopy];\n if (Array.isArray(defClone[1]) && defClone[1][1] === filterType) {\n if (filterValues.length > 0) {\n setRowForValue(defClone, defCopy);\n } else {\n defClone = defClone[defClone.length - 1];\n }\n } else {\n defClone[defClone.length - 1] = setRowForField(\n defClone[defClone.length - 1],\n );\n }\n return defClone;\n }\n }\n\n function setRowForValue(defClone: any, defCopy: any) {\n for (let i = 2; i < defCopy.length; i += 2) {\n if (Array.isArray(defClone[i])) {\n filterValues.forEach(filterValue => {\n const index = defClone[i].indexOf(filterValue);\n if (index > -1) {\n if (defClone[i].length > 1) {\n defClone[i].splice(index, 1);\n } else {\n defClone[i] = [''];\n }\n }\n });\n }\n }\n }\n\n return setRowForField(defValue);\n }\n\n clearStyleLayersByType(\n layersData: any,\n filterType: FilterType,\n filterValues: string[],\n property: string,\n ) {\n for (let index = 0; index < layersData.length; index += 1) {\n // if (layersData[index].isFireAlarmLayer) {\n const layer = layersData[index];\n const layerStyle = layer.paint;\n const layerType = layer.type;\n\n // TODO: add support for other layers later\n if ((layerType && layerType === 'fill') || layerType === 'line') {\n if (layerStyle[property]) {\n let defValue = layerStyle[property];\n\n if (defValue) {\n const filter = this.createFilterForClearStyle(\n defValue,\n filterType,\n filterValues,\n );\n\n layerStyle[property] = filter;\n }\n }\n }\n // }\n }\n\n return layersData;\n }\n\n normalize(string: string) {\n return string.trim().toLowerCase();\n }\n\n relevanceSort(metaFeatures: metaFeature[], query: string, isStrict = false) {\n function score(metaFeature: metaFeature): any {\n const noMatch = [-1, 0, metaFeature.name];\n if (metaFeature.name) {\n const lowerStr = metaFeature.name.toLowerCase();\n const lowerQuery = query.toLowerCase();\n\n // 1. If the string is the same as the query\n if (lowerStr === lowerQuery) {\n return [1000, -metaFeature.name.length, lowerStr];\n }\n // 2. If the string starts with the query\n else if (lowerStr.startsWith(lowerQuery)) {\n return [500, -metaFeature.name.length, lowerStr];\n }\n // 3. If one of the words in the string starts with the query\n else if (\n lowerStr.split(' ').some(word => word.startsWith(lowerQuery))\n ) {\n return [200, -metaFeature.name.length, lowerStr];\n }\n // 4. The string contains the query\n else if (!isStrict) {\n if (lowerStr.includes(lowerQuery)) {\n return [0, -metaFeature.name.length, lowerStr];\n } else {\n return noMatch;\n }\n } else {\n return noMatch;\n }\n } else {\n return noMatch;\n }\n }\n return metaFeatures\n .sort((a, b) => {\n const scoreA = score(a);\n const scoreB = score(b);\n return (\n scoreB[0] - scoreA[0] ||\n scoreB[1] - scoreA[1] ||\n scoreA[2].localeCompare(scoreB[2])\n );\n })\n .filter(s => score(s)[0] >= 0);\n }\n\n sort(metaFeatures: metaFeature[], sortType: SortType, query = '') {\n const compare = (a: string, b: string) => {\n if (!a || !b) {\n return 0;\n }\n\n return a.localeCompare(b);\n };\n\n if (sortType === SortType.Name) {\n return metaFeatures.sort((a: metaFeature, b: metaFeature) => {\n return compare(a.name!, b.name!);\n });\n } else if (sortType === SortType.WhereDimension) {\n return metaFeatures.sort((a: metaFeature, b: metaFeature) => {\n const whereComparison = compare(a.whereDimension!, b.whereDimension!);\n if (whereComparison === 0) {\n return compare(a.name!, b.name!);\n } else {\n return whereComparison;\n }\n });\n } else if (sortType === SortType.Relevance) {\n return this.relevanceSort(metaFeatures as any, query);\n } else if (sortType === SortType.RelevanceStrict) {\n return this.relevanceSort(metaFeatures as any, query, true);\n }\n }\n\n async setupMapObjectSearch(\n onSearchStatusUpdateCallback: StatusUpdateCallbackType,\n ) {\n const status = await getPublishedData(\n {\n URL: this.empApi,\n accessToken: this.atomsAPIAccessToken,\n secretKey: this.secretKeyForDecryption,\n publishedDataType: PublishedDataType.MapObjects,\n },\n this.storage,\n );\n\n this.searchStatus = status;\n console.log('search status: ', status);\n\n const mapObjects = useMapObjectsDataStore.getState().data;\n for (let index = 0; index < mapObjects.length; index++) {\n const mapObject = mapObjects[index];\n if (mapObject) {\n // Decide geometry type based on coordinates format:\n // - Point: [lng, lat]\n // - LineString: [[lng, lat], [lng, lat], ...]\n const coords = mapObject.lngLat;\n const geometry =\n Array.isArray(coords) && Array.isArray(coords[0])\n ? {type: 'LineString', coordinates: coords}\n : {type: 'Point', coordinates: coords};\n\n // Re-create geojson\n const moJSON: metaFeature = {\n mapObjectId: mapObject.mID,\n coordinates: mapObject.lngLat,\n name: mapObject.name,\n whatDimension: mapObject.what,\n whereDimension: mapObject.where,\n geometry,\n properties: {\n myMapObjectId: mapObject.mID,\n title: mapObject.name,\n localRef: mapObject.localRef,\n dimension_what: mapObject.what,\n dimension_where: mapObject.where,\n booth_info: {\n overview: mapObject.overview,\n images: mapObject.images,\n videos: mapObject.videos,\n files: mapObject.files,\n products: mapObject.products,\n logos: mapObject.logos,\n } as MetaFeatureProperties['booth_info'],\n metadata: mapObject.metadata ? JSON.parse(mapObject.metadata) : null,\n },\n };\n this.searchableGeoJsonFeatures.push(moJSON);\n }\n }\n\n if (onSearchStatusUpdateCallback) {\n onSearchStatusUpdateCallback(status === Status.Ready ? true : false);\n }\n }\n\n getMapObjectsByFilteredLocalRef(\n boothId: string,\n searchSubString = false,\n sortType: SortType,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n const uniqueIds = new Set<string | number>();\n const metaFeatures = [];\n const boothIdToSearch = this.normalize(String(boothId));\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = feature.properties.myMapObjectId;\n const localRef = this.normalize(String(feature.properties.localRef));\n \n if (searchSubString && !localRef.includes(boothIdToSearch)) {\n continue;\n }\n if (!searchSubString && localRef !== boothIdToSearch) {\n continue;\n }\n if (uniqueIds.has(id)) {\n continue;\n }\n uniqueIds.add(id);\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: null,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n\n const sortedFeatures = this.sort(\n metaFeatures,\n sortType,\n boothId,\n ) as metaFeature[];\n onResponseCallback(sortedFeatures);\n }\n\n getMapObjectsByName(\n name: string,\n searchSubString = false,\n sortType: SortType,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n const uniqueIds = new Set<string | number>();\n const metaFeatures = [];\n const nameToSearch = this.normalize(String(name));\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = feature.properties.myMapObjectId;\n const title = this.normalize(String(feature.properties.title));\n if (searchSubString && !title.includes(nameToSearch)) {\n continue;\n }\n if (!searchSubString && title !== nameToSearch) {\n continue;\n }\n if (uniqueIds.has(id)) {\n continue;\n }\n uniqueIds.add(id);\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: null,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n\n const sortedFeatures = this.sort(\n metaFeatures,\n sortType,\n name,\n ) as metaFeature[];\n onResponseCallback(sortedFeatures);\n }\n\n getMapObjectById(\n idToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const id = String(feature.properties.myMapObjectId);\n if (id === String(idToSearch)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectByLocalRef(\n localRefToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n if (localRef === String(localRefToSearch)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectMatchingLocalRef(\n localRefToSearch: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n if (localRef.includes(String(localRefToSearch))) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsMatchingLocalRefs(\n localRefsToSearch: string | string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n \n const localRefsArray = Array.isArray(localRefsToSearch) ? localRefsToSearch : [localRefsToSearch];\n \n for (const feature of this.searchableGeoJsonFeatures) {\n const localRef = String(feature.properties.localRef);\n \n if (localRefsArray.some((ref) => localRef.includes(String(ref)))) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n \n onResponseCallback(metaFeatures);\n }\n \n\n getMapObjectsByWhatTaxonomy(\n whatTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (!whatTaxonomyPath || whatTaxonomy === String(whatTaxonomyPath)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsByWhereTaxonomy(\n whereTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n if (whereTaxonomy === String(whereTaxonomyPath)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsByWhatAndWhereTaxonomy(\n whatTaxonomyPath: string,\n whereTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (\n whereTaxonomy === String(whereTaxonomyPath) &&\n whatTaxonomy === String(whatTaxonomyPath)\n ) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhatTaxonomy(\n whatTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (whatTaxonomyPaths.includes(whatTaxonomy)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhereTaxonomy(\n whereTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n if (whereTaxonomyPaths.includes(whereTaxonomy)) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsInWhatAndWhereTaxonomy(\n whatTaxonomyPaths: string[],\n whereTaxonomyPaths: string[],\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let metaFeatures = [];\n for (const feature of this.searchableGeoJsonFeatures) {\n const whereTaxonomy = String(feature.properties.dimension_where);\n const whatTaxonomy = String(feature.properties.dimension_what);\n if (\n whereTaxonomyPaths.includes(whereTaxonomy) &&\n whatTaxonomyPaths.includes(whatTaxonomy)\n ) {\n const objFeature: metaFeature = {\n mapObjectId: String(feature.properties.myMapObjectId),\n coordinates: feature.coordinates,\n name: feature.properties.title,\n whatDimension: feature.properties.dimension_what,\n whereDimension: feature.properties.dimension_where,\n geometry: feature.geometry,\n properties: feature.properties,\n };\n metaFeatures.push(objFeature);\n }\n }\n onResponseCallback(metaFeatures);\n }\n\n getMapObjectsApi(query = '') {\n return new Promise(\n (resolve: (metaFeatures: metaFeature[]) => void, reject) => {\n axios({\n url: `${this.empApi}/map-objects${query}`,\n headers: {Authorization: `Bearer ${this.atomsAPIAccessToken}`},\n method: 'get',\n })\n .then(response => {\n const data = response.data.data;\n let uniqueFeatures = data as metaFeature[];\n resolve(uniqueFeatures);\n })\n .catch(function (error) {\n reject(error);\n });\n },\n );\n }\n\n getMapObjectsByWhatTaxonomyAPI(\n whatTaxonomyPath: string,\n onResponseCallback: (metaFeatures: metaFeature[]) => void,\n ) {\n let query = `?$limit=${this.apiRequestLimit}`;\n if(whatTaxonomyPath) query += `&taxonomy2Path=${whatTaxonomyPath}`;\n \n this.getMapObjectsApi(query)\n .then(onResponseCallback)\n .catch(onResponseCallback);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,13 +6,11 @@ import { point, multiPoint } from '@turf/helpers';
|
|
|
6
6
|
// import turfDistance from '@turf/distance';
|
|
7
7
|
import * as turf from '@turf/turf';
|
|
8
8
|
import { cloneDeep, isEmpty, toInteger } from 'lodash';
|
|
9
|
-
import { LineDirection, RouteDimension, WALK_SPEED } from
|
|
10
|
-
import { getNetworkFeatures, getEdge, getPortalDataForDimension } from
|
|
11
|
-
import { isMovingPortalTaxonomy, isPortalTaxonomy } from
|
|
12
|
-
import { DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, optimized } from
|
|
13
|
-
|
|
9
|
+
import { LineDirection, RouteDimension, WALK_SPEED } from "./interfaces.js";
|
|
10
|
+
import { getNetworkFeatures, getEdge, getPortalDataForDimension } from "./mapObjectsHelper.js";
|
|
11
|
+
import { isMovingPortalTaxonomy, isPortalTaxonomy } from "./routing-helpers.js";
|
|
12
|
+
import { DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, optimized } from "./utils.js";
|
|
14
13
|
/* eslint-disable @typescript-eslint/no-shadow */
|
|
15
|
-
|
|
16
14
|
const RoutingCore = function () {
|
|
17
15
|
let wheelChairAccessibleRouteOnly = true;
|
|
18
16
|
let startNode;
|
|
@@ -23,7 +21,8 @@ const RoutingCore = function () {
|
|
|
23
21
|
edgeData: {},
|
|
24
22
|
lines: []
|
|
25
23
|
};
|
|
26
|
-
function addVertex(graph, coords, mapObjectId, where, what, zone
|
|
24
|
+
function addVertex(graph, coords, mapObjectId, where, what, zone) {
|
|
25
|
+
let updateMapObjectId = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
|
|
27
26
|
const vertexName = `${coords.toString()},${where}`;
|
|
28
27
|
let vertex = graph.getNode(vertexName);
|
|
29
28
|
if (vertex === undefined) {
|
|
@@ -232,7 +231,8 @@ const RoutingCore = function () {
|
|
|
232
231
|
// check if portal path is available to visualize
|
|
233
232
|
let portalPath;
|
|
234
233
|
if (isMovingPortalTaxonomy(prevVertex.data.what)) {
|
|
235
|
-
const getPortalPath = (portalEdgeData, curVertex, prevVertex
|
|
234
|
+
const getPortalPath = function (portalEdgeData, curVertex, prevVertex) {
|
|
235
|
+
let invertStart = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
236
236
|
const prevVertexMapObjId = prevVertex.data.mapObjectId;
|
|
237
237
|
const set = new Set().add(prevVertexMapObjId);
|
|
238
238
|
const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);
|