@collabdt/core 0.0.56 → 0.2.0
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/README.md +4 -26
- package/dist/core/components/AppSidebarContent.d.ts +2 -1
- package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
- package/dist/core/components/AppSidebarContent.js +10 -7
- package/dist/core/components/AppSidebarContent.js.map +1 -1
- package/dist/core/components/Toolbar.d.ts +7 -1
- package/dist/core/components/Toolbar.d.ts.map +1 -1
- package/dist/core/components/Toolbar.js +3 -3
- package/dist/core/components/Toolbar.js.map +1 -1
- package/dist/core/components/TopNavigationBar.d.ts +6 -1
- package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
- package/dist/core/components/TopNavigationBar.js +2 -2
- package/dist/core/components/TopNavigationBar.js.map +1 -1
- package/dist/core/components/authentication/AuthPage.d.ts +2 -1
- package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
- package/dist/core/components/authentication/AuthPage.js +3 -5
- package/dist/core/components/authentication/AuthPage.js.map +1 -1
- package/dist/core/components/authentication/Signin.d.ts +2 -1
- package/dist/core/components/authentication/Signin.d.ts.map +1 -1
- package/dist/core/components/authentication/Signin.js +2 -2
- package/dist/core/components/authentication/Signin.js.map +1 -1
- package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -1
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js +109 -36
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
- package/dist/core/components/settings/index.d.ts +3 -1
- package/dist/core/components/settings/index.d.ts.map +1 -1
- package/dist/core/components/settings/index.js +2 -2
- package/dist/core/components/settings/index.js.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.js +9 -2
- package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts +5 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js +7 -5
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.d.ts +2 -1
- package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.js +2 -2
- package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
- package/dist/core/components/support/BugReportDialog.d.ts +3 -2
- package/dist/core/components/support/BugReportDialog.d.ts.map +1 -1
- package/dist/core/components/support/BugReportDialog.js +103 -25
- package/dist/core/components/support/BugReportDialog.js.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.d.ts +3 -1
- package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.js +39 -4
- package/dist/core/components/support/FeatureRequestDialog.js.map +1 -1
- package/dist/core/components/support/SupportMenu.d.ts.map +1 -1
- package/dist/core/components/support/SupportMenu.js +1 -4
- package/dist/core/components/support/SupportMenu.js.map +1 -1
- package/dist/core/components/ui/AnimatedBackground.d.ts +2 -1
- package/dist/core/components/ui/AnimatedBackground.d.ts.map +1 -1
- package/dist/core/components/ui/AnimatedBackground.js +2 -5
- package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.d.ts +3 -1
- package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.js +4 -2
- package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Header.d.ts +3 -2
- package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Header.js +5 -6
- package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts +7 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js +4 -4
- package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +2 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +3 -4
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts +3 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js +3 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
- package/dist/core/components/ui/Sidebar.d.ts +8 -0
- package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
- package/dist/core/components/ui/Sidebar.js +21 -7
- package/dist/core/components/ui/Sidebar.js.map +1 -1
- package/dist/core/components/ui/ToolbarButton.js +18 -1
- package/dist/core/components/ui/ToolbarButton.js.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts +5 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.js +15 -4
- package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts +3 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.js +11 -14
- package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.js +14 -27
- package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts +3 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js +4 -2
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js +13 -18
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts +3 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +3 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.d.ts +2 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.js +3 -5
- package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.js +13 -3
- package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts +2 -0
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +84 -3
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js +23 -2
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
- package/dist/core/components/viewers/Viewer.d.ts +7 -1
- package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
- package/dist/core/components/viewers/Viewer.js +6 -6
- package/dist/core/components/viewers/Viewer.js.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.d.ts +3 -1
- package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js +2 -2
- package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +3 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts +5 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +3 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts +3 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +3 -5
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts +3 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js +4 -2
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts +3 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.js +2 -2
- package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.d.ts +2 -1
- package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.js +5 -6
- package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts +5 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.js +15 -16
- package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.d.ts +3 -1
- package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.js +5 -1
- package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts +6 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.js +5 -3
- package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts +5 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +6 -10
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts +3 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +4 -6
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts +19 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js +163 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts +3 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js +310 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts +30 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js +122 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts +13 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js +58 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts +6 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.js +5 -4
- package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts +5 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js +5 -8
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +3 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts +3 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts +3 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js +4 -7
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +8 -8
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts +18 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js +102 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map +1 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js +243 -176
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts +24 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js +46 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js.map +1 -0
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts +8 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js +8 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts +11 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js +5 -3
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts +10 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.js +5 -3
- package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts +1 -0
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js +1 -0
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +14 -5
- package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/config.js +22 -11
- package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.js +2 -2
- package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.js +5 -4
- package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js +7 -5
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts +3 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +11 -14
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts +3 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js +37 -52
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts +3 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js +5 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts +2 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js +5 -6
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts +2 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js +15 -9
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts +5 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js +3 -2
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts +3 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts +2 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js +12 -23
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.js +0 -1
- package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
- package/dist/core/hooks/useCaptureScreenshot.d.ts +2 -0
- package/dist/core/hooks/useCaptureScreenshot.d.ts.map +1 -0
- package/dist/core/hooks/useCaptureScreenshot.js +110 -0
- package/dist/core/hooks/useCaptureScreenshot.js.map +1 -0
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts +3 -0
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts.map +1 -0
- package/dist/core/hooks/useGeocodingRuntimeConfig.js +17 -0
- package/dist/core/hooks/useGeocodingRuntimeConfig.js.map +1 -0
- package/dist/core/store/AppConfig/context.d.ts +5 -0
- package/dist/core/store/AppConfig/context.d.ts.map +1 -1
- package/dist/core/store/AppConfig/context.js.map +1 -1
- package/dist/core/store/CombineProviders.d.ts +6 -1
- package/dist/core/store/CombineProviders.d.ts.map +1 -1
- package/dist/core/store/CombineProviders.js +6 -3
- package/dist/core/store/CombineProviders.js.map +1 -1
- package/dist/core/store/MapSites/context.d.ts +16 -0
- package/dist/core/store/MapSites/context.d.ts.map +1 -0
- package/dist/core/store/MapSites/context.js +29 -0
- package/dist/core/store/MapSites/context.js.map +1 -0
- package/dist/core/store/MapSites/reducer.d.ts +52 -0
- package/dist/core/store/MapSites/reducer.d.ts.map +1 -0
- package/dist/core/store/MapSites/reducer.js +70 -0
- package/dist/core/store/MapSites/reducer.js.map +1 -0
- package/dist/core/store/index.d.ts +1 -0
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/index.js +1 -0
- package/dist/core/store/index.js.map +1 -1
- package/dist/core/types/tools.d.ts +2 -1
- package/dist/core/types/tools.d.ts.map +1 -1
- package/dist/core/utils/imageUtils.d.ts.map +1 -1
- package/dist/core/utils/imageUtils.js +2 -1
- package/dist/core/utils/imageUtils.js.map +1 -1
- package/package.json +1 -1
package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../../../../../ui/Select'\r\nimport { MapContext } from '../../../../../../../../store';\r\nimport { useAppConfigContext } from '../../../../../../../../store/AppConfig/context';\r\nimport { Input, CollapsibleSection } from '../../../../../../../ui/';\r\nimport { useState } from 'react';\r\n\r\nexport function LocationSettings() {\r\n // Municipality autocomplete state\r\n const [municipalityInput, setMunicipalityInput] = useState('');\r\n const [municipalitySuggestions, setMunicipalitySuggestions] = useState<Array<{ name: string, lat: number, lng: number }>>([]);\r\n const [showSuggestions, setShowSuggestions] = useState(false);\r\n // Translation\r\n const t = useTranslations('SettingsTab')\r\n const {dispatch: mapDispatch, state: mapState} = React.useContext(MapContext)\r\n const { currentLocation, map, countrySubdivisionsData } = mapState.map;\r\n const { state: appConfigState } = useAppConfigContext()\r\n const orgCountryCode = (appConfigState.appConfig.organization?.country || 'CA').toLowerCase()\r\n\r\n // Local input states for lat/lng/zoom\r\n const [currentLat, setCurrentLat] = React.useState<number>();\r\n const [currentLng, setCurrentLng] = React.useState<number>();\r\n const [currentZoom, setCurrentZoom] = React.useState<number>();\r\n const [countrySubdivision, setCountrySubdivision] = React.useState<string>('');\r\n const [municipality, setMunicipality] = React.useState<string>('');\r\n\r\n React.useEffect(() => {\r\n if (currentLocation) {\r\n setCurrentLat(currentLocation.lat);\r\n setCurrentLng(currentLocation.lng);\r\n setCurrentZoom(currentLocation.zoom);\r\n setCountrySubdivision(currentLocation.countrySubdivision || '');\r\n setMunicipality(currentLocation.municipality || '');\r\n }\r\n }, [currentLocation]);\r\n\r\n\r\n // Geocode helper\r\n const geocodeLocation = async (query: string) => {\r\n try {\r\n const response = await fetch(\r\n `https://nominatim.openstreetmap.org/search?` +\r\n `format=json&q=${encodeURIComponent(query)}&limit=1&countrycodes=${orgCountryCode}`\r\n );\r\n const data = await response.json();\r\n if (data && data.length > 0) {\r\n const result = data[0];\r\n return {\r\n lat: parseFloat(result.lat),\r\n lng: parseFloat(result.lon)\r\n };\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('Geocoding error:', error);\r\n return null;\r\n }\r\n };\r\n\r\n // Country subdivision change handler with geocoding\r\n const onCountrySubdivisionChange = async (value: string) => {\r\n // Clear municipality input and state\r\n setMunicipalityInput('');\r\n setMunicipalitySuggestions([]);\r\n setShowSuggestions(false);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n countrySubdivision: value,\r\n municipality: ''\r\n }\r\n }\r\n });\r\n\r\n // Geocode and navigate to country subdivision\r\n const location = await geocodeLocation(value);\r\n if (location && map) {\r\n map.flyTo({\r\n center: [location.lng, location.lat],\r\n zoom: 6,\r\n essential: true\r\n });\r\n }\r\n };\r\n\r\n // Municipality change handler with geocoding\r\n const onMunicipalityChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setMunicipalityInput(value);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n municipality: value\r\n }\r\n }\r\n });\r\n\r\n // Fetch municipality suggestions\r\n if (value.length > 2 && countrySubdivision) {\r\n const response = await fetch(\r\n `https://nominatim.openstreetmap.org/search?` +\r\n `format=json&q=${encodeURIComponent(value + ', ' + countrySubdivision)}&limit=5&countrycodes=${orgCountryCode}`\r\n );\r\n const data = await response.json();\r\n // Only show municipality results\r\n const filtered = data.filter((item: any) =>\r\n item.type === 'municipality' || item.class === 'boundary' && item.type === 'administrative'\r\n ).slice(0, 3);\r\n setMunicipalitySuggestions(filtered.map((item: any) => ({\r\n name: item.display_name.split(',')[0],\r\n lat: parseFloat(item.lat),\r\n lng: parseFloat(item.lon)\r\n })));\r\n setShowSuggestions(true);\r\n } else {\r\n setMunicipalitySuggestions([]);\r\n setShowSuggestions(false);\r\n }\r\n };\r\n\r\n // When a suggestion is selected, update and fly\r\n const onMunicipalitySuggestionSelect = (suggestion: { name: string, lat: number, lng: number }) => {\r\n setMunicipalityInput(suggestion.name);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n municipality: suggestion.name,\r\n lat: suggestion.lat,\r\n lng: suggestion.lng\r\n }\r\n }\r\n });\r\n setShowSuggestions(false);\r\n if (map) {\r\n map.flyTo({\r\n center: [suggestion.lng, suggestion.lat],\r\n zoom: 12,\r\n essential: true\r\n });\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!map) return;\r\n const handleMoveEnd = () => {\r\n const newCenter = map.getCenter();\r\n setCurrentLat(newCenter.lat);\r\n setCurrentLng(newCenter.lng);\r\n const newZoom = map.getZoom();\r\n setCurrentZoom(newZoom);\r\n };\r\n map.on('moveend', handleMoveEnd);\r\n return () => {\r\n map.off('moveend', handleMoveEnd);\r\n };\r\n }, [map]);\r\n\r\n // Early return if currentLocation is not yet initialized\r\n if (!currentLocation) {\r\n return null;\r\n }\r\n\r\n // Input change handlers (local state only)\r\n // If the input is changed by arrows (stepper), update instantly\r\n const onLatitudeInputChange = (e) => {\r\n setCurrentLat(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n // Do not update instantly when typing\r\n return;\r\n }\r\n // If value is a valid number, update instantly (arrows/stepper)\r\n const newLat = Number(e.target.value);\r\n if (!isNaN(newLat)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lat: newLat } } });\r\n map?.setCenter([currentLng || 0, newLat]);\r\n }\r\n };\r\n const onLongitudeInputChange = (e) => {\r\n setCurrentLng(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n return;\r\n }\r\n const newLng = Number(e.target.value);\r\n if (!isNaN(newLng)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lng: newLng } } });\r\n map?.setCenter([newLng, currentLat || 0]);\r\n }\r\n };\r\n const onZoomInputChange = (e) => {\r\n setCurrentZoom(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n return;\r\n }\r\n const newZoom = Number(e.target.value);\r\n if (!isNaN(newZoom)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, zoom: newZoom } } });\r\n map?.setZoom(newZoom);\r\n }\r\n };\r\n\r\n // Commit changes onBlur or Enter\r\n const commitLat = () => {\r\n const newLat = Number(currentLat);\r\n if (!isNaN(newLat)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lat: newLat } } });\r\n map?.setCenter([currentLng || 0, newLat]);\r\n }\r\n };\r\n const commitLng = () => {\r\n const newLng = Number(currentLng);\r\n if (!isNaN(newLng)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lng: newLng } } });\r\n map?.setCenter([newLng, currentLat || 0]);\r\n }\r\n };\r\n const commitZoom = () => {\r\n const newZoom = Number(currentZoom);\r\n if (!isNaN(newZoom)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, zoom: newZoom } } });\r\n map?.setZoom(newZoom);\r\n }\r\n };\r\n\r\n // Handle Enter key for inputs\r\n const handleLatKeyDown = (e) => { if (e.key === 'Enter') commitLat(); };\r\n const handleLngKeyDown = (e) => { if (e.key === 'Enter') commitLng(); };\r\n const handleZoomKeyDown = (e) => { if (e.key === 'Enter') commitZoom(); };\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('location')}\r\n chevronPosition=\"right\"\r\n defaultOpen={true}\r\n >\r\n\r\n {/* Latitude & Longitude Inputs in 2 columns */}\r\n <div className=\"flex gap-4\">\r\n <div className=\"flex-1 space-y-2\">\r\n <label className=\"text-sm font-medium\">Latitude</label>\r\n <Input\r\n type=\"number\"\r\n value={currentLat ?? ''}\r\n step={currentZoom ? currentZoom >= 10 ? 0.0001 : currentZoom >= 5 ? 0.001 : 0.01 : 0.0001}\r\n onChange={onLatitudeInputChange}\r\n onBlur={commitLat}\r\n onKeyDown={handleLatKeyDown}\r\n placeholder={t('enter') + ' latitude'}\r\n />\r\n </div>\r\n <div className=\"flex-1 space-y-2\">\r\n <label className=\"text-sm font-medium\">Longitude</label>\r\n <Input\r\n type=\"number\"\r\n value={currentLng ?? ''}\r\n step={currentZoom ? currentZoom >= 10 ? 0.0001 : currentZoom >= 5 ? 0.001 : 0.01 : 0.0001}\r\n onChange={onLongitudeInputChange}\r\n onBlur={commitLng}\r\n onKeyDown={handleLngKeyDown}\r\n placeholder={t('enter') + ' longitude'}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Zoom Input */}\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">Zoom</label>\r\n <Input\r\n type=\"number\"\r\n value={currentZoom ?? ''}\r\n step={0.1}\r\n onChange={onZoomInputChange}\r\n onBlur={commitZoom}\r\n onKeyDown={handleZoomKeyDown}\r\n placeholder={t('enter') + ' zoom'}\r\n />\r\n </div>\r\n\r\n {/* Country Subdivision Select */}\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('countrySubdivision')}</label>\r\n <Select\r\n value={countrySubdivision}\r\n onValueChange={onCountrySubdivisionChange}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder={t('selectCountrySubdivision')} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.entries(countrySubdivisionsData ?? {}).map(([code, sub]) => (\r\n <SelectItem key={code} value={code}>\r\n {(sub as any)?.name ?? code}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Municipality Input with suggestions */}\r\n <div className=\"space-y-2 relative\">\r\n <label className=\"text-sm font-medium\">{t('municipality')}</label>\r\n <Input\r\n type=\"text\"\r\n value={municipalityInput}\r\n onChange={onMunicipalityChange}\r\n placeholder={t('enter') + ' ' + t('municipality')}\r\n autoComplete=\"off\"\r\n />\r\n {showSuggestions && municipalitySuggestions.length > 0 && (\r\n <ul className=\"absolute z-10 bg-white border rounded shadow w-full mt-1 max-h-40 overflow-auto\">\r\n {municipalitySuggestions.map((suggestion, idx) => (\r\n <li\r\n key={suggestion.name + idx}\r\n className=\"px-3 py-2 cursor-pointer hover:bg-gray-100\"\r\n onClick={() => onMunicipalitySuggestionSelect(suggestion)}\r\n >\r\n {suggestion.name}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../../../../../ui/Select'\r\nimport { MapContext } from '../../../../../../../../store';\r\nimport { Input, CollapsibleSection } from '../../../../../../../ui/';\r\nimport { useState } from 'react';\r\n\r\nexport function LocationSettings({ countryCode }: { countryCode?: string }) {\r\n // Municipality autocomplete state\r\n const [municipalityInput, setMunicipalityInput] = useState('');\r\n const [municipalitySuggestions, setMunicipalitySuggestions] = useState<Array<{ name: string, lat: number, lng: number }>>([]);\r\n const [showSuggestions, setShowSuggestions] = useState(false);\r\n // Translation\r\n const t = useTranslations('SettingsTab')\r\n const {dispatch: mapDispatch, state: mapState} = React.useContext(MapContext)\r\n const { currentLocation, map, countrySubdivisionsData } = mapState.map;\r\n const orgCountryCode = (countryCode || 'CA').toLowerCase()\r\n\r\n // Local input states for lat/lng/zoom\r\n const [currentLat, setCurrentLat] = React.useState<number>();\r\n const [currentLng, setCurrentLng] = React.useState<number>();\r\n const [currentZoom, setCurrentZoom] = React.useState<number>();\r\n const [countrySubdivision, setCountrySubdivision] = React.useState<string>('');\r\n const [municipality, setMunicipality] = React.useState<string>('');\r\n\r\n React.useEffect(() => {\r\n if (currentLocation) {\r\n setCurrentLat(currentLocation.lat);\r\n setCurrentLng(currentLocation.lng);\r\n setCurrentZoom(currentLocation.zoom);\r\n setCountrySubdivision(currentLocation.countrySubdivision || '');\r\n setMunicipality(currentLocation.municipality || '');\r\n }\r\n }, [currentLocation]);\r\n\r\n\r\n // Geocode helper\r\n const geocodeLocation = async (query: string) => {\r\n try {\r\n const response = await fetch(\r\n `https://nominatim.openstreetmap.org/search?` +\r\n `format=json&q=${encodeURIComponent(query)}&limit=1&countrycodes=${orgCountryCode}`\r\n );\r\n const data = await response.json();\r\n if (data && data.length > 0) {\r\n const result = data[0];\r\n return {\r\n lat: parseFloat(result.lat),\r\n lng: parseFloat(result.lon)\r\n };\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('Geocoding error:', error);\r\n return null;\r\n }\r\n };\r\n\r\n // Country subdivision change handler with geocoding\r\n const onCountrySubdivisionChange = async (value: string) => {\r\n // Clear municipality input and state\r\n setMunicipalityInput('');\r\n setMunicipalitySuggestions([]);\r\n setShowSuggestions(false);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n countrySubdivision: value,\r\n municipality: ''\r\n }\r\n }\r\n });\r\n\r\n // Geocode and navigate to country subdivision\r\n const location = await geocodeLocation(value);\r\n if (location && map) {\r\n map.flyTo({\r\n center: [location.lng, location.lat],\r\n zoom: 6,\r\n essential: true\r\n });\r\n }\r\n };\r\n\r\n // Municipality change handler with geocoding\r\n const onMunicipalityChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setMunicipalityInput(value);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n municipality: value\r\n }\r\n }\r\n });\r\n\r\n // Fetch municipality suggestions\r\n if (value.length > 2 && countrySubdivision) {\r\n const response = await fetch(\r\n `https://nominatim.openstreetmap.org/search?` +\r\n `format=json&q=${encodeURIComponent(value + ', ' + countrySubdivision)}&limit=5&countrycodes=${orgCountryCode}`\r\n );\r\n const data = await response.json();\r\n // Only show municipality results\r\n const filtered = data.filter((item: any) =>\r\n item.type === 'municipality' || item.class === 'boundary' && item.type === 'administrative'\r\n ).slice(0, 3);\r\n setMunicipalitySuggestions(filtered.map((item: any) => ({\r\n name: item.display_name.split(',')[0],\r\n lat: parseFloat(item.lat),\r\n lng: parseFloat(item.lon)\r\n })));\r\n setShowSuggestions(true);\r\n } else {\r\n setMunicipalitySuggestions([]);\r\n setShowSuggestions(false);\r\n }\r\n };\r\n\r\n // When a suggestion is selected, update and fly\r\n const onMunicipalitySuggestionSelect = (suggestion: { name: string, lat: number, lng: number }) => {\r\n setMunicipalityInput(suggestion.name);\r\n mapDispatch({\r\n type: 'UPDATE_LOCATION',\r\n payload: {\r\n currentLocation: {\r\n ...currentLocation,\r\n municipality: suggestion.name,\r\n lat: suggestion.lat,\r\n lng: suggestion.lng\r\n }\r\n }\r\n });\r\n setShowSuggestions(false);\r\n if (map) {\r\n map.flyTo({\r\n center: [suggestion.lng, suggestion.lat],\r\n zoom: 12,\r\n essential: true\r\n });\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!map) return;\r\n const handleMoveEnd = () => {\r\n const newCenter = map.getCenter();\r\n setCurrentLat(newCenter.lat);\r\n setCurrentLng(newCenter.lng);\r\n const newZoom = map.getZoom();\r\n setCurrentZoom(newZoom);\r\n };\r\n map.on('moveend', handleMoveEnd);\r\n return () => {\r\n map.off('moveend', handleMoveEnd);\r\n };\r\n }, [map]);\r\n\r\n // Early return if currentLocation is not yet initialized\r\n if (!currentLocation) {\r\n return null;\r\n }\r\n\r\n // Input change handlers (local state only)\r\n // If the input is changed by arrows (stepper), update instantly\r\n const onLatitudeInputChange = (e) => {\r\n setCurrentLat(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n // Do not update instantly when typing\r\n return;\r\n }\r\n // If value is a valid number, update instantly (arrows/stepper)\r\n const newLat = Number(e.target.value);\r\n if (!isNaN(newLat)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lat: newLat } } });\r\n map?.setCenter([currentLng || 0, newLat]);\r\n }\r\n };\r\n const onLongitudeInputChange = (e) => {\r\n setCurrentLng(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n return;\r\n }\r\n const newLng = Number(e.target.value);\r\n if (!isNaN(newLng)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lng: newLng } } });\r\n map?.setCenter([newLng, currentLat || 0]);\r\n }\r\n };\r\n const onZoomInputChange = (e) => {\r\n setCurrentZoom(e.target.value);\r\n if (e.nativeEvent.inputType === 'insertReplacementText' || e.nativeEvent.inputType === 'deleteContentBackward' || e.nativeEvent.inputType === 'insertText') {\r\n return;\r\n }\r\n const newZoom = Number(e.target.value);\r\n if (!isNaN(newZoom)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, zoom: newZoom } } });\r\n map?.setZoom(newZoom);\r\n }\r\n };\r\n\r\n // Commit changes onBlur or Enter\r\n const commitLat = () => {\r\n const newLat = Number(currentLat);\r\n if (!isNaN(newLat)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lat: newLat } } });\r\n map?.setCenter([currentLng || 0, newLat]);\r\n }\r\n };\r\n const commitLng = () => {\r\n const newLng = Number(currentLng);\r\n if (!isNaN(newLng)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, lng: newLng } } });\r\n map?.setCenter([newLng, currentLat || 0]);\r\n }\r\n };\r\n const commitZoom = () => {\r\n const newZoom = Number(currentZoom);\r\n if (!isNaN(newZoom)) {\r\n mapDispatch({ type: 'UPDATE_LOCATION', payload: { currentLocation: { ...currentLocation, zoom: newZoom } } });\r\n map?.setZoom(newZoom);\r\n }\r\n };\r\n\r\n // Handle Enter key for inputs\r\n const handleLatKeyDown = (e) => { if (e.key === 'Enter') commitLat(); };\r\n const handleLngKeyDown = (e) => { if (e.key === 'Enter') commitLng(); };\r\n const handleZoomKeyDown = (e) => { if (e.key === 'Enter') commitZoom(); };\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('location')}\r\n chevronPosition=\"right\"\r\n defaultOpen={true}\r\n >\r\n\r\n {/* Latitude & Longitude Inputs in 2 columns */}\r\n <div className=\"flex gap-4\">\r\n <div className=\"flex-1 space-y-2\">\r\n <label className=\"text-sm font-medium\">Latitude</label>\r\n <Input\r\n type=\"number\"\r\n value={currentLat ?? ''}\r\n step={currentZoom ? currentZoom >= 10 ? 0.0001 : currentZoom >= 5 ? 0.001 : 0.01 : 0.0001}\r\n onChange={onLatitudeInputChange}\r\n onBlur={commitLat}\r\n onKeyDown={handleLatKeyDown}\r\n placeholder={t('enter') + ' latitude'}\r\n />\r\n </div>\r\n <div className=\"flex-1 space-y-2\">\r\n <label className=\"text-sm font-medium\">Longitude</label>\r\n <Input\r\n type=\"number\"\r\n value={currentLng ?? ''}\r\n step={currentZoom ? currentZoom >= 10 ? 0.0001 : currentZoom >= 5 ? 0.001 : 0.01 : 0.0001}\r\n onChange={onLongitudeInputChange}\r\n onBlur={commitLng}\r\n onKeyDown={handleLngKeyDown}\r\n placeholder={t('enter') + ' longitude'}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Zoom Input */}\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">Zoom</label>\r\n <Input\r\n type=\"number\"\r\n value={currentZoom ?? ''}\r\n step={0.1}\r\n onChange={onZoomInputChange}\r\n onBlur={commitZoom}\r\n onKeyDown={handleZoomKeyDown}\r\n placeholder={t('enter') + ' zoom'}\r\n />\r\n </div>\r\n\r\n {/* Country Subdivision Select */}\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('countrySubdivision')}</label>\r\n <Select\r\n value={countrySubdivision}\r\n onValueChange={onCountrySubdivisionChange}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder={t('selectCountrySubdivision')} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.entries(countrySubdivisionsData ?? {}).map(([code, sub]) => (\r\n <SelectItem key={code} value={code}>\r\n {(sub as any)?.name ?? code}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Municipality Input with suggestions */}\r\n <div className=\"space-y-2 relative\">\r\n <label className=\"text-sm font-medium\">{t('municipality')}</label>\r\n <Input\r\n type=\"text\"\r\n value={municipalityInput}\r\n onChange={onMunicipalityChange}\r\n placeholder={t('enter') + ' ' + t('municipality')}\r\n autoComplete=\"off\"\r\n />\r\n {showSuggestions && municipalitySuggestions.length > 0 && (\r\n <ul className=\"absolute z-10 bg-white border rounded shadow w-full mt-1 max-h-40 overflow-auto\">\r\n {municipalitySuggestions.map((suggestion, idx) => (\r\n <li\r\n key={suggestion.name + idx}\r\n className=\"px-3 py-2 cursor-pointer hover:bg-gray-100\"\r\n onClick={() => onMunicipalitySuggestionSelect(suggestion)}\r\n >\r\n {suggestion.name}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}"],"mappings":"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","names":[]}
|
package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainLevel.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"TerrainLevel.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,wBAAgB,YAAY,sBAsI3B"}
|
|
@@ -5,13 +5,13 @@ import { useTranslations } from "next-intl";
|
|
|
5
5
|
import * as LR from "lucide-react";
|
|
6
6
|
import { Tabs, TabsList, TabsTrigger } from "../../../../../../../ui/Tabs";
|
|
7
7
|
import { AppConfigContext, MapContext } from "../../../../../../../../store";
|
|
8
|
-
const MAPTILER_KEY = process.env.NEXT_PUBLIC_MAPTILER_KEY;
|
|
9
8
|
function TerrainLevel() {
|
|
10
9
|
var _a;
|
|
11
10
|
const tMap = useTranslations("MapCustomization");
|
|
12
11
|
const { state: appConfigState } = React.useContext(AppConfigContext);
|
|
13
12
|
const { dispatch: mapDispatch, state: mapState } = React.useContext(MapContext);
|
|
14
13
|
const { map, terrainLevel } = mapState.map;
|
|
14
|
+
const maptilerKey = appConfigState.runtimeConfig.maptilerKey;
|
|
15
15
|
const organizationCountry = (((_a = appConfigState.appConfig.organization) == null ? void 0 : _a.country) || "").toUpperCase();
|
|
16
16
|
const isCanadaOrg = organizationCountry === "CA";
|
|
17
17
|
React.useEffect(() => {
|
|
@@ -20,21 +20,21 @@ function TerrainLevel() {
|
|
|
20
20
|
}
|
|
21
21
|
}, [isCanadaOrg, terrainLevel, mapDispatch]);
|
|
22
22
|
React.useEffect(() => {
|
|
23
|
-
if (!
|
|
23
|
+
if (!maptilerKey && terrainLevel === "medium") {
|
|
24
24
|
mapDispatch({ type: "UPDATE_TERRAIN_LEVEL", payload: { terrainLevel: "disabled" } });
|
|
25
25
|
}
|
|
26
|
-
}, [terrainLevel, mapDispatch]);
|
|
26
|
+
}, [maptilerKey, terrainLevel, mapDispatch]);
|
|
27
27
|
React.useEffect(() => {
|
|
28
28
|
if (!map) return;
|
|
29
29
|
const updateTerrain = () => {
|
|
30
30
|
if (terrainLevel === "disabled") {
|
|
31
31
|
map.setTerrain(null);
|
|
32
|
-
} else if (terrainLevel === "medium" &&
|
|
32
|
+
} else if (terrainLevel === "medium" && maptilerKey) {
|
|
33
33
|
const terrainSourceExists = map.getSource("terrain-source");
|
|
34
34
|
if (!terrainSourceExists) {
|
|
35
35
|
map.addSource("terrain-source", {
|
|
36
36
|
type: "raster-dem",
|
|
37
|
-
url: `https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json?key=${
|
|
37
|
+
url: `https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json?key=${maptilerKey}`,
|
|
38
38
|
tileSize: 256
|
|
39
39
|
});
|
|
40
40
|
}
|
|
@@ -88,10 +88,10 @@ function TerrainLevel() {
|
|
|
88
88
|
} else {
|
|
89
89
|
map.once("load", updateTerrain);
|
|
90
90
|
}
|
|
91
|
-
}, [map, terrainLevel, isCanadaOrg]);
|
|
91
|
+
}, [map, terrainLevel, isCanadaOrg, maptilerKey]);
|
|
92
92
|
const handleTerrainLevel = (value) => {
|
|
93
93
|
if (!isCanadaOrg && value === "high") return;
|
|
94
|
-
if (!
|
|
94
|
+
if (!maptilerKey && value === "medium") return;
|
|
95
95
|
mapDispatch({ type: "UPDATE_TERRAIN_LEVEL", payload: { terrainLevel: value } });
|
|
96
96
|
};
|
|
97
97
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
@@ -101,7 +101,7 @@ function TerrainLevel() {
|
|
|
101
101
|
/* @__PURE__ */ jsx(LR.ArrowDownToLine, { className: "w-4 h-4 mr-2" }),
|
|
102
102
|
tMap("disabled")
|
|
103
103
|
] }),
|
|
104
|
-
/* @__PURE__ */ jsxs(TabsTrigger, { value: "medium", disabled: !
|
|
104
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "medium", disabled: !maptilerKey, children: [
|
|
105
105
|
/* @__PURE__ */ jsx(LR.Mountain, { className: "w-4 h-4 mr-2" }),
|
|
106
106
|
tMap("medium")
|
|
107
107
|
] }),
|
package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { AppConfigContext, MapContext } from '../../../../../../../../store'\r\nimport { TerrainLevel as TerrainLevelType } from '../../../../../../../../types/map'\r\n\r\
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { AppConfigContext, MapContext } from '../../../../../../../../store'\r\nimport { TerrainLevel as TerrainLevelType } from '../../../../../../../../types/map'\r\n\r\nexport function TerrainLevel() {\r\n const tMap = useTranslations('MapCustomization')\r\n const { state: appConfigState } = React.useContext(AppConfigContext)\r\n const { dispatch: mapDispatch, state: mapState } = React.useContext(MapContext)\r\n const { map, terrainLevel } = mapState.map\r\n const maptilerKey = appConfigState.runtimeConfig.maptilerKey\r\n const organizationCountry = (appConfigState.appConfig.organization?.country || '').toUpperCase()\r\n const isCanadaOrg = organizationCountry === 'CA'\r\n\r\n React.useEffect(() => {\r\n if (!isCanadaOrg && terrainLevel === 'high') {\r\n mapDispatch({ type: 'UPDATE_TERRAIN_LEVEL', payload: { terrainLevel: 'medium' } })\r\n }\r\n }, [isCanadaOrg, terrainLevel, mapDispatch])\r\n\r\n // Medium terrain relies on MapTiler; without a key, fall back to disabled.\r\n React.useEffect(() => {\r\n if (!maptilerKey && terrainLevel === 'medium') {\r\n mapDispatch({ type: 'UPDATE_TERRAIN_LEVEL', payload: { terrainLevel: 'disabled' } })\r\n }\r\n }, [maptilerKey, terrainLevel, mapDispatch])\r\n\r\n // Terrain control effect\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const updateTerrain = () => {\r\n if (terrainLevel === 'disabled') {\r\n // Disable terrain\r\n map.setTerrain(null)\r\n } else if (terrainLevel === 'medium' && maptilerKey) {\r\n // Check if terrain source already exists\r\n const terrainSourceExists = map.getSource('terrain-source')\r\n\r\n // Add terrain source if it doesn't exist\r\n if (!terrainSourceExists) {\r\n map.addSource('terrain-source', {\r\n type: 'raster-dem',\r\n url: `https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json?key=${maptilerKey}`,\r\n tileSize: 256,\r\n })\r\n }\r\n // Enable terrain with medium exaggeration\r\n map.setTerrain({\r\n source: 'terrain-source',\r\n exaggeration: 1,\r\n })\r\n } else if (terrainLevel === 'high' && isCanadaOrg) {\r\n // Check if NRCan terrain sources already exist\r\n const nrcanTerrainExists = map.getSource('hrdem-terrain')\r\n const nrcanHillshadeExists = map.getSource('hrdem-hillshade')\r\n \r\n // Add NRCan terrain source if it doesn't exist\r\n if (!nrcanTerrainExists) {\r\n map.addSource('hrdem-terrain', {\r\n type: 'raster-dem',\r\n tiles: [\r\n '/api/nrcan-hr-dem?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=false&LAYERS=dtm&CRS=EPSG:3857&STYLES=&WIDTH=256&HEIGHT=256&BBOX={bbox-epsg-3857}'\r\n ],\r\n tileSize: 256,\r\n maxzoom: 15,\r\n attribution: 'Contains information licensed under the Open Government Licence – Canada',\r\n })\r\n }\r\n \r\n // Add NRCan hillshade source and layer if they don't exist\r\n if (!nrcanHillshadeExists) {\r\n map.addSource('hrdem-hillshade', {\r\n type: 'raster',\r\n tiles: [\r\n '/api/nrcan-hr-hillshade?request=GetCapabilities&service=WMS&version=1.3.0&layers=dsm-hillshade&legend_format=image&png&feature_info_type=text&xml'\r\n ],\r\n tileSize: 256,\r\n maxzoom: 15,\r\n attribution: 'Contains information licensed under the Open Government Licence – Canada',\r\n })\r\n \r\n // Add hillshade layer if it doesn't exist\r\n if (!map.getLayer('nrcan-hillshade')) {\r\n map.addLayer({\r\n id: 'nrcan-hillshade',\r\n type: 'raster',\r\n source: 'hrdem-hillshade',\r\n paint: {\r\n 'raster-opacity': 0.15,\r\n },\r\n })\r\n }\r\n }\r\n \r\n // Enable high-resolution terrain with lower exaggeration\r\n map.setTerrain({\r\n source: 'hrdem-terrain',\r\n exaggeration: 0.0002,\r\n })\r\n }\r\n }\r\n\r\n // Wait for map to be loaded before updating terrain\r\n if (map.loaded()) {\r\n updateTerrain()\r\n } else {\r\n map.once('load', updateTerrain)\r\n }\r\n }, [map, terrainLevel, isCanadaOrg, maptilerKey])\r\n\r\n const handleTerrainLevel = (value: TerrainLevelType) => {\r\n if (!isCanadaOrg && value === 'high') return\r\n if (!maptilerKey && value === 'medium') return\r\n\r\n mapDispatch({ type: 'UPDATE_TERRAIN_LEVEL', payload: { terrainLevel: value } })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{tMap('terrain')}</label>\r\n <Tabs value={terrainLevel} onValueChange={handleTerrainLevel} variant=\"switch\">\r\n <TabsList className=\"grid w-full grid-cols-3\">\r\n <TabsTrigger value=\"disabled\">\r\n <LR.ArrowDownToLine className=\"w-4 h-4 mr-2\" />\r\n {tMap('disabled')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"medium\" disabled={!maptilerKey}>\r\n <LR.Mountain className=\"w-4 h-4 mr-2\" />\r\n {tMap('medium')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"high\" disabled={!isCanadaOrg}>\r\n <LR.MountainSnow className=\"w-4 h-4 mr-2\" />\r\n {tMap('high')}\r\n </TabsTrigger>\r\n </TabsList>\r\n </Tabs>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { Building } from '../../../../../../../types/dbTypes';
|
|
3
|
+
interface AssociateBuildingsDialogProps {
|
|
4
|
+
siteId: number;
|
|
5
|
+
siteName: string;
|
|
6
|
+
buildings: Building[];
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
/** Called with the associated buildings after a successful connect. */
|
|
9
|
+
onAssociated?: (buildings: Building[]) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Shown after a site polygon is drawn when database buildings are detected
|
|
13
|
+
* inside it. The user picks (multi-select) which buildings to associate with
|
|
14
|
+
* the new site; selected buildings are connected via `updateSite`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const AssociateBuildingsDialog: ({ siteId, siteName, buildings, onClose, onAssociated, }: AssociateBuildingsDialogProps) => React.JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=AssociateBuildingsDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssociateBuildingsDialog.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAElE,UAAU,6BAA6B;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAA;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAA;CAC/C;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,yDAEtC,6BAA6B,sBAsF/B,CAAA"}
|
package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { toast } from "sonner";
|
|
5
|
+
import { useTranslations } from "next-intl";
|
|
6
|
+
import { Building2 } from "lucide-react";
|
|
7
|
+
import { AddItemDialog } from "../../../../../../ui/AddItemDialog";
|
|
8
|
+
import { Button } from "../../../../../../ui/Button";
|
|
9
|
+
import { Checkbox } from "../../../../../../ui/Checkbox";
|
|
10
|
+
import { LoadingSpinner } from "../../../../../../ui/LoadingSpinner";
|
|
11
|
+
import { useSite } from "../../../../../../../hooks/sites/sites";
|
|
12
|
+
const AssociateBuildingsDialog = ({
|
|
13
|
+
siteId,
|
|
14
|
+
siteName,
|
|
15
|
+
buildings,
|
|
16
|
+
onClose,
|
|
17
|
+
onAssociated
|
|
18
|
+
}) => {
|
|
19
|
+
const t = useTranslations("AssociateBuildings");
|
|
20
|
+
const tf = (key, fallback, values) => t.has(key) ? t(key, values) : fallback;
|
|
21
|
+
const { updateSite } = useSite(String(siteId));
|
|
22
|
+
const [selected, setSelected] = React.useState(
|
|
23
|
+
() => new Set(buildings.map((b) => b.id))
|
|
24
|
+
);
|
|
25
|
+
const [isSaving, setIsSaving] = React.useState(false);
|
|
26
|
+
const toggle = (id) => setSelected((prev) => {
|
|
27
|
+
const next = new Set(prev);
|
|
28
|
+
if (next.has(id)) next.delete(id);
|
|
29
|
+
else next.add(id);
|
|
30
|
+
return next;
|
|
31
|
+
});
|
|
32
|
+
const allSelected = selected.size === buildings.length;
|
|
33
|
+
const toggleAll = () => setSelected(allSelected ? /* @__PURE__ */ new Set() : new Set(buildings.map((b) => b.id)));
|
|
34
|
+
const handleAssociate = async () => {
|
|
35
|
+
if (selected.size === 0) {
|
|
36
|
+
onClose();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setIsSaving(true);
|
|
40
|
+
try {
|
|
41
|
+
await updateSite({ siteBuildings: { connect: [...selected].map((id) => ({ id })) } });
|
|
42
|
+
toast.success(tf("associated", `${selected.size} building(s) associated with "${siteName}".`, {
|
|
43
|
+
count: selected.size,
|
|
44
|
+
name: siteName
|
|
45
|
+
}));
|
|
46
|
+
onAssociated == null ? void 0 : onAssociated(buildings.filter((b) => selected.has(b.id)));
|
|
47
|
+
onClose();
|
|
48
|
+
} catch (e) {
|
|
49
|
+
toast.error(tf("associateFailed", "Failed to associate the buildings. Please try again."));
|
|
50
|
+
setIsSaving(false);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
AddItemDialog,
|
|
55
|
+
{
|
|
56
|
+
open: true,
|
|
57
|
+
onOpenChange: (open) => !open && !isSaving && onClose(),
|
|
58
|
+
title: tf("title", "Buildings found inside this site"),
|
|
59
|
+
description: tf("subtitle", `These buildings fall within "${siteName}". Choose which to associate with it.`, { name: siteName }),
|
|
60
|
+
icon: Building2,
|
|
61
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 pointer-events-auto min-w-0", children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
"button",
|
|
64
|
+
{
|
|
65
|
+
type: "button",
|
|
66
|
+
onClick: toggleAll,
|
|
67
|
+
className: "self-start text-xs text-primary hover:underline",
|
|
68
|
+
children: allSelected ? tf("deselectAll", "Deselect all") : tf("selectAll", "Select all")
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto flex flex-col gap-1 rounded-md border p-1", children: buildings.map((b) => /* @__PURE__ */ jsxs(
|
|
72
|
+
"label",
|
|
73
|
+
{
|
|
74
|
+
className: "flex items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent cursor-pointer min-w-0",
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ jsx(Checkbox, { className: "shrink-0", checked: selected.has(b.id), onCheckedChange: () => toggle(b.id) }),
|
|
77
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col min-w-0", children: [
|
|
78
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm truncate", children: b.buildingName || tf("unnamed", "Unnamed building") }),
|
|
79
|
+
b.buildingAddress && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground truncate", children: b.buildingAddress })
|
|
80
|
+
] })
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
b.id
|
|
84
|
+
)) }),
|
|
85
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
86
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onClose, disabled: isSaving, children: tf("skip", "Skip") }),
|
|
87
|
+
/* @__PURE__ */ jsxs(Button, { onClick: handleAssociate, disabled: isSaving || selected.size === 0, children: [
|
|
88
|
+
isSaving && /* @__PURE__ */ jsx(LoadingSpinner, {}),
|
|
89
|
+
tf("associate", "Associate"),
|
|
90
|
+
" (",
|
|
91
|
+
selected.size,
|
|
92
|
+
")"
|
|
93
|
+
] })
|
|
94
|
+
] })
|
|
95
|
+
] })
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
export {
|
|
100
|
+
AssociateBuildingsDialog
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=AssociateBuildingsDialog.js.map
|
package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { toast } from 'sonner'\r\nimport { useTranslations } from 'next-intl'\r\nimport { Building2 } from 'lucide-react'\r\nimport { AddItemDialog } from '../../../../../../ui/AddItemDialog'\r\nimport { Button } from '../../../../../../ui/Button'\r\nimport { Checkbox } from '../../../../../../ui/Checkbox'\r\nimport { LoadingSpinner } from '../../../../../../ui/LoadingSpinner'\r\nimport { useSite } from '../../../../../../../hooks/sites/sites'\r\nimport type { Building } from '../../../../../../../types/dbTypes'\r\n\r\ninterface AssociateBuildingsDialogProps {\r\n siteId: number\r\n siteName: string\r\n buildings: Building[]\r\n onClose: () => void\r\n /** Called with the associated buildings after a successful connect. */\r\n onAssociated?: (buildings: Building[]) => void\r\n}\r\n\r\n/**\r\n * Shown after a site polygon is drawn when database buildings are detected\r\n * inside it. The user picks (multi-select) which buildings to associate with\r\n * the new site; selected buildings are connected via `updateSite`.\r\n */\r\nexport const AssociateBuildingsDialog = ({\r\n siteId, siteName, buildings, onClose, onAssociated,\r\n}: AssociateBuildingsDialogProps) => {\r\n const t = useTranslations('AssociateBuildings')\r\n const tf = (key: string, fallback: string, values?: Record<string, string | number>) =>\r\n (t.has(key) ? t(key, values) : fallback)\r\n\r\n const { updateSite } = useSite(String(siteId))\r\n const [selected, setSelected] = React.useState<Set<number>>(\r\n () => new Set(buildings.map(b => b.id)),\r\n )\r\n const [isSaving, setIsSaving] = React.useState(false)\r\n\r\n const toggle = (id: number) => setSelected((prev) => {\r\n const next = new Set(prev)\r\n if (next.has(id)) next.delete(id)\r\n else next.add(id)\r\n return next\r\n })\r\n\r\n const allSelected = selected.size === buildings.length\r\n const toggleAll = () =>\r\n setSelected(allSelected ? new Set() : new Set(buildings.map(b => b.id)))\r\n\r\n const handleAssociate = async () => {\r\n if (selected.size === 0) { onClose(); return }\r\n setIsSaving(true)\r\n try {\r\n await updateSite({ siteBuildings: { connect: [...selected].map(id => ({ id })) } })\r\n toast.success(tf('associated', `${selected.size} building(s) associated with \"${siteName}\".`, {\r\n count: selected.size,\r\n name: siteName,\r\n }))\r\n onAssociated?.(buildings.filter(b => selected.has(b.id)))\r\n onClose()\r\n }\r\n catch {\r\n toast.error(tf('associateFailed', 'Failed to associate the buildings. Please try again.'))\r\n setIsSaving(false)\r\n }\r\n }\r\n\r\n return (\r\n <AddItemDialog\r\n open\r\n onOpenChange={open => !open && !isSaving && onClose()}\r\n title={tf('title', 'Buildings found inside this site')}\r\n description={tf('subtitle', `These buildings fall within \"${siteName}\". Choose which to associate with it.`, { name: siteName })}\r\n icon={Building2}\r\n >\r\n <div className=\"flex flex-col gap-3 pointer-events-auto min-w-0\">\r\n <button\r\n type=\"button\"\r\n onClick={toggleAll}\r\n className=\"self-start text-xs text-primary hover:underline\"\r\n >\r\n {allSelected ? tf('deselectAll', 'Deselect all') : tf('selectAll', 'Select all')}\r\n </button>\r\n\r\n <div className=\"max-h-64 overflow-y-auto flex flex-col gap-1 rounded-md border p-1\">\r\n {buildings.map(b => (\r\n <label\r\n key={b.id}\r\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent cursor-pointer min-w-0\"\r\n >\r\n <Checkbox className=\"shrink-0\" checked={selected.has(b.id)} onCheckedChange={() => toggle(b.id)} />\r\n <div className=\"flex flex-col min-w-0\">\r\n <span className=\"text-sm truncate\">{b.buildingName || tf('unnamed', 'Unnamed building')}</span>\r\n {b.buildingAddress && (\r\n <span className=\"text-xs text-muted-foreground truncate\">{b.buildingAddress}</span>\r\n )}\r\n </div>\r\n </label>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2\">\r\n <Button variant=\"outline\" onClick={onClose} disabled={isSaving}>\r\n {tf('skip', 'Skip')}\r\n </Button>\r\n <Button onClick={handleAssociate} disabled={isSaving || selected.size === 0}>\r\n {isSaving && <LoadingSpinner />}\r\n {tf('associate', 'Associate')} ({selected.size})\r\n </Button>\r\n </div>\r\n </div>\r\n </AddItemDialog>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SiteAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAKD,eAAO,MAAM,SAAS,GAAI,sBAA8B,cAAc,sBA0crE,CAAA"}
|