@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
|
@@ -56,7 +56,7 @@ const FieldRenderer = ({
|
|
|
56
56
|
buildingId,
|
|
57
57
|
setActiveChanges
|
|
58
58
|
}) => {
|
|
59
|
-
var _a;
|
|
59
|
+
var _a, _b;
|
|
60
60
|
const t = useTranslations("BuildingFieldRenderer");
|
|
61
61
|
const { state: mapState } = useMapContext();
|
|
62
62
|
const countrySubdivisionsData = (_a = mapState.map.countrySubdivisionsData) != null ? _a : {};
|
|
@@ -265,12 +265,12 @@ const FieldRenderer = ({
|
|
|
265
265
|
}
|
|
266
266
|
if (enumType === "CountrySubdivisionData") {
|
|
267
267
|
const resolveSubdivisionName = (code) => {
|
|
268
|
-
var _a2,
|
|
268
|
+
var _a2, _b2, _c;
|
|
269
269
|
if (!code || !countrySubdivisionsData) return code;
|
|
270
270
|
const exact = countrySubdivisionsData[code];
|
|
271
271
|
if (exact) return ((_a2 = exact == null ? void 0 : exact.name) != null ? _a2 : exact) || code;
|
|
272
272
|
const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${code}`));
|
|
273
|
-
if (entry) return ((_c = (
|
|
273
|
+
if (entry) return ((_c = (_b2 = entry[1]) == null ? void 0 : _b2.name) != null ? _c : entry[1]) || code;
|
|
274
274
|
return code;
|
|
275
275
|
};
|
|
276
276
|
return /* @__PURE__ */ jsxs(
|
|
@@ -433,18 +433,17 @@ const FieldRenderer = ({
|
|
|
433
433
|
if (property === "buildingParentSiteId" && setActiveChanges) {
|
|
434
434
|
const { sites, isLoading } = useSites();
|
|
435
435
|
const [search, setSearch] = React.useState("");
|
|
436
|
-
const
|
|
436
|
+
const selectedId = Array.isArray(value) ? (_b = value[0]) != null ? _b : null : value != null ? value : null;
|
|
437
437
|
const filteredSites = React.useMemo(() => {
|
|
438
438
|
if (!sites) return [];
|
|
439
|
-
if (!search) return sites;
|
|
440
439
|
const lower = search.toLowerCase();
|
|
441
440
|
return sites.filter(
|
|
442
441
|
(site) => site.siteName && site.siteName.toLowerCase().includes(lower) || site.siteAddress && site.siteAddress.toLowerCase().includes(lower)
|
|
443
442
|
);
|
|
444
443
|
}, [sites, search]);
|
|
445
|
-
const
|
|
444
|
+
const selectedSite = (sites == null ? void 0 : sites.find((site) => site.id === selectedId)) || null;
|
|
446
445
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
447
|
-
/* @__PURE__ */ jsxs(Command, { children: [
|
|
446
|
+
/* @__PURE__ */ jsxs(Command, { shouldFilter: false, children: [
|
|
448
447
|
/* @__PURE__ */ jsx(
|
|
449
448
|
CommandInput,
|
|
450
449
|
{
|
|
@@ -454,7 +453,7 @@ const FieldRenderer = ({
|
|
|
454
453
|
disabled: isLoading
|
|
455
454
|
}
|
|
456
455
|
),
|
|
457
|
-
/* @__PURE__ */ jsxs(CommandList, { children: [
|
|
456
|
+
search.trim() !== "" && /* @__PURE__ */ jsxs(CommandList, { children: [
|
|
458
457
|
isLoading && /* @__PURE__ */ jsx(CommandEmpty, { children: /* @__PURE__ */ jsx(LoadingSpinner, {}) }),
|
|
459
458
|
!isLoading && filteredSites.length === 0 && /* @__PURE__ */ jsx(CommandEmpty, { children: t("empty") }),
|
|
460
459
|
/* @__PURE__ */ jsx(CommandGroup, { children: filteredSites.map((site) => /* @__PURE__ */ jsx(
|
|
@@ -462,11 +461,9 @@ const FieldRenderer = ({
|
|
|
462
461
|
{
|
|
463
462
|
value: site.id.toString(),
|
|
464
463
|
onSelect: () => {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
}
|
|
464
|
+
handleInputChange(property, site.id);
|
|
465
|
+
setSearch("");
|
|
468
466
|
},
|
|
469
|
-
disabled: selectedIds.includes(site.id),
|
|
470
467
|
children: /* @__PURE__ */ jsxs("div", { children: [
|
|
471
468
|
/* @__PURE__ */ jsx("div", { className: "font-medium", children: site.siteName }),
|
|
472
469
|
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: site.siteAddress })
|
|
@@ -476,22 +473,20 @@ const FieldRenderer = ({
|
|
|
476
473
|
)) })
|
|
477
474
|
] })
|
|
478
475
|
] }),
|
|
479
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children:
|
|
480
|
-
|
|
476
|
+
selectedSite && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: /* @__PURE__ */ jsxs(Badge, { className: "gap-1", variant: "secondary", children: [
|
|
477
|
+
selectedSite.siteName,
|
|
481
478
|
/* @__PURE__ */ jsx(
|
|
482
479
|
Button,
|
|
483
480
|
{
|
|
484
481
|
variant: "ghost",
|
|
485
482
|
size: "icon",
|
|
486
483
|
className: "p-0 hover:bg-transparent w-auto h-auto",
|
|
487
|
-
onClick: () =>
|
|
488
|
-
handleInputChange(property, selectedIds.filter((id) => id !== site.id));
|
|
489
|
-
},
|
|
484
|
+
onClick: () => handleInputChange(property, null),
|
|
490
485
|
disabled: !ability.can("update", "Building"),
|
|
491
486
|
children: /* @__PURE__ */ jsx(X, { className: "!w-3 !h-3", size: 8 })
|
|
492
487
|
}
|
|
493
488
|
)
|
|
494
|
-
] }
|
|
489
|
+
] }) })
|
|
495
490
|
] });
|
|
496
491
|
}
|
|
497
492
|
if (isTextAreaField(property)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/FieldRenderer.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 React from 'react'\r\nimport {\r\n BuildingAssessmentConditions,\r\n BuildingGeometryStyle,\r\n BuildingProjectPhase,\r\n BuildingProjectType,\r\n BuildingEnergySource,\r\n BuildingOccupantType,\r\n BuildingManagementType,\r\n BuildingHeatingEnergySource,\r\n BuildingCoolingEnergySource,\r\n BuildingHotWaterEnergySource,\r\n BuildingElectricityServiceSize,\r\n BuildingElectricityServiceLocation,\r\n} from '../../../../types/dbTypes'\r\n\r\nimport { useSites } from '../../../../hooks/sites/sites'\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions, useMapContext } from '../../../../store'\r\n\r\nimport { Checkbox } from '../../../ui/Checkbox'\r\nimport { Input } from '../../../ui/Input'\r\nimport { Textarea } from '../../../ui/Textarea'\r\nimport { Button } from '../../../ui/Button'\r\nimport { Badge } from '../../../ui/Badge'\r\nimport { DatePicker } from '../../../ui/DatePicker'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../../../ui/Select'\r\nimport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../../../ui/Command'\r\n\r\nimport FileUpload from '../details/FileUpload'\r\n\r\nimport { Plus, X } from 'lucide-react'\r\nimport { LoadingSpinner } from '../../../ui/LoadingSpinner'\r\n\r\nexport const BuildingTypeEnum = [\r\n 'Townhouses',\r\n '<4 Storey MURB',\r\n '4+ Storey MURB',\r\n 'Stacked Townhouses',\r\n 'Detached',\r\n 'Semi Detached',\r\n] as const\r\n\r\ninterface FieldRendererProps {\r\n property: string\r\n value: any\r\n handleInputChange: (property: string, value: any) => void\r\n isTextAreaField: (property: string) => boolean\r\n isFileField: (property: string) => boolean\r\n isDateField?: (property: string) => boolean\r\n isEnumField?: (property: string) => boolean\r\n isNumberField?: (property: string) => boolean\r\n isFullWidthField?: (property: string) => boolean\r\n getEnumType?: (property: string) => string | null\r\n buildingId?: number\r\n setActiveChanges?: (editing: boolean) => void\r\n}\r\n\r\nconst FieldRenderer = ({\r\n property,\r\n value,\r\n handleInputChange,\r\n isTextAreaField,\r\n isFileField,\r\n isDateField = () => false,\r\n isEnumField = () => false,\r\n isNumberField = () => false,\r\n isFullWidthField = () => false,\r\n getEnumType = () => null,\r\n buildingId,\r\n setActiveChanges,\r\n}: FieldRendererProps) => {\r\n const t = useTranslations('BuildingFieldRenderer')\r\n const { state: mapState } = useMapContext()\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData ?? {}\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const getFileTagFromProperty = (property: string): string => {\r\n const propertyToTagMap: Record<string, string> = {\r\n buildingMaintenanceRecords: 'maintenanceRecords',\r\n buildingSystemAssessment: 'systemAssessments',\r\n buildingFireSafety: 'fireSafety',\r\n buildingOccupancyCertificate: 'occupancyCertificate',\r\n buildingEnvironmentalCompliance: 'environmentalCompliance',\r\n buildingZoningCompliance: 'zoningCompliance',\r\n buildingPermitsIssued: 'permitsIssued',\r\n buildingCertificationsFile: 'certificationsFile',\r\n buildingRegionalEnergyTrends: 'regionalEnergyTrends',\r\n buildingEnergyCodeCompliance: 'energyCodeCompliance',\r\n buildingBuildingCodeCompliance: 'buildingCodeCompliance',\r\n buildingProximityToServices: 'proximityToServices',\r\n EnergyAssessmentReports: 'buildingEnergyAssessmentReports',\r\n AirQualityReports: 'buildingAirQualityReports',\r\n WaterQualityReports: 'buildingWaterQualityReports',\r\n DSRs: 'DSRs',\r\n BCAs: 'buildingBCAs',\r\n ContractorReports: 'buildingContractorReports',\r\n EngineeringAssessments: 'buildingEngineeringAssessments',\r\n }\r\n return propertyToTagMap[property] || property\r\n }\r\n\r\n // Special handling for energy source arrays\r\n if (property === 'buildingHeatingEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select heating source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingHeatingEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (property === 'buildingCoolingEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select cooling source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingCoolingEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (property === 'buildingHotWaterSystemsEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select hot water source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingHotWaterEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n if (isFileField(property)) {\r\n return (\r\n <FileUpload\r\n value={Array.isArray(value) ? value : []}\r\n property={property}\r\n tag={getFileTagFromProperty(property)}\r\n onChange={handleInputChange}\r\n editing={true}\r\n buildingId={buildingId}\r\n onFileUpload={() => setActiveChanges?.(true)}\r\n isFullWidthField={isFullWidthField(property)}\r\n />\r\n )\r\n }\r\n\r\n if (isDateField(property)) {\r\n return (\r\n <DatePicker\r\n date={value instanceof Date ? value : (value ? new Date(value) : undefined)}\r\n onSelect={date => handleInputChange(property, date)}\r\n />\r\n )\r\n }\r\n\r\n if (isEnumField(property)) {\r\n const enumType = getEnumType(property)\r\n\r\n // Multiselect for building type\r\n if (property === 'buildingType') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={(newType) => {\r\n if (!selectedValues.includes(newType)) {\r\n handleInputChange(property, [...selectedValues, newType])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select building type(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {BuildingTypeEnum\r\n .filter(type => !selectedValues.includes(type))\r\n .map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n if (enumType === 'CountrySubdivisionData') {\r\n // Resolve display name — handles both full (\"CA-ON\") and short (\"ON\") stored codes\r\n const resolveSubdivisionName = (code: string): string => {\r\n if (!code || !countrySubdivisionsData) return code\r\n const exact = countrySubdivisionsData[code] as any\r\n if (exact) return (exact?.name ?? exact) || code\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${code}`))\r\n if (entry) return ((entry[1] as any)?.name ?? entry[1]) || code\r\n return code\r\n }\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select subdivision\">\r\n {value ? resolveSubdivisionName(value) : undefined}\r\n </SelectValue>\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 )\r\n }\r\n\r\n if (enumType === 'BuildingAssessmentConditions') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select assessment condition\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingAssessmentConditions).map(condition => (\r\n <SelectItem key={condition} value={condition}>\r\n {condition.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingGeometryStyle') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select geometry style\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingGeometryStyle).map(style => (\r\n <SelectItem key={style} value={style}>\r\n {style}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingProjectPhase') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select project phase\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingProjectPhase).map(phase => (\r\n <SelectItem key={phase} value={phase}>\r\n {phase.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingProjectType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select project type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingProjectType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingOccupantType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select occupant type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingOccupantType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'buildingAssessmentRatingCondition') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select rating condition\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingAssessmentConditions).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingManagementType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingManagementType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {BuildingTypeEnum.map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingElectricityServiceSize') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingElectricityServiceSize).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+').replace('Size', '')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n if (enumType === 'BuildingElectricityServiceLocation') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingElectricityServiceLocation).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n }\r\n \r\n \r\n\r\n if (property === 'buildingParentSiteId' && setActiveChanges) {\r\n const { sites, isLoading } = useSites()\r\n const [search, setSearch] = React.useState('')\r\n const selectedIds = Array.isArray(value) ? value : (value ? [value] : [])\r\n const filteredSites = React.useMemo(() => {\r\n if (!sites) return []\r\n if (!search) return sites\r\n const lower = search.toLowerCase()\r\n return sites.filter(site =>\r\n (site.siteName && site.siteName.toLowerCase().includes(lower))\r\n || (site.siteAddress && site.siteAddress.toLowerCase().includes(lower)),\r\n )\r\n }, [sites, search])\r\n const selectedSites = sites?.filter(site => selectedIds.includes(site.id)) || []\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <Command>\r\n <CommandInput\r\n placeholder=\"Search for a site...\"\r\n value={search}\r\n onValueChange={setSearch}\r\n disabled={isLoading}\r\n />\r\n <CommandList>\r\n {isLoading && <CommandEmpty><LoadingSpinner /></CommandEmpty>}\r\n {!isLoading && filteredSites.length === 0 && (\r\n <CommandEmpty>{t('empty')}</CommandEmpty>\r\n )}\r\n <CommandGroup>\r\n {filteredSites.map(site => (\r\n <CommandItem\r\n key={site.id}\r\n value={site.id.toString()}\r\n onSelect={() => {\r\n if (!selectedIds.includes(site.id)) {\r\n handleInputChange(property, [...selectedIds, site.id])\r\n }\r\n }}\r\n disabled={selectedIds.includes(site.id)}\r\n >\r\n <div>\r\n <div className=\"font-medium\">{site.siteName}</div>\r\n <div className=\"text-xs text-muted-foreground\">{site.siteAddress}</div>\r\n </div>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedSites.map(site => (\r\n <Badge key={site.id} className=\"gap-1\" variant=\"secondary\">\r\n {site.siteName}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n handleInputChange(property, selectedIds.filter(id => id !== site.id))\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n if (isTextAreaField(property)) {\r\n return (\r\n <Textarea\r\n value={value || ''}\r\n onChange={e => handleInputChange(property, e.target.value)}\r\n rows={4}\r\n />\r\n )\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return (\r\n <>\r\n <div className=\"flex flex-row gap-2\">\r\n <Input\r\n type=\"text\"\r\n value=\"\"\r\n onChange={() => {}}\r\n placeholder=\"Add new item\"\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n <Button variant=\"outline\" size=\"icon\" disabled={!ability.can('update', 'Building')}><Plus /></Button>\r\n </div>\r\n {/* Render Existing values */}\r\n <div className=\"flex flex-row gap-2\">\r\n {(value || []).map((item: string, index: number) => (\r\n <Badge key={index} className=\"cursor-pointer inline-flex\" variant=\"secondary\">\r\n {item}\r\n </Badge>\r\n ))}\r\n </div>\r\n </>\r\n )\r\n }\r\n\r\n if (value === 'yes' || value === 'no') {\r\n const bool = value === 'yes'\r\n return (\r\n <Checkbox\r\n checked={bool}\r\n onCheckedChange={checked => handleInputChange(property, checked ? 'yes' : 'no')}\r\n />\r\n )\r\n }\r\n\r\n if (typeof value === 'number' || (value === null && isNumberField(property))) {\r\n return (\r\n <Input\r\n type=\"number\"\r\n value={value === null || value === undefined ? '' : value}\r\n onChange={(e) => {\r\n const stringValue = e.target.value\r\n const numValue = stringValue === '' ? null : Number(stringValue)\r\n handleInputChange(property, numValue)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <Input\r\n value={String(value || '')}\r\n onChange={e => handleInputChange(property, e.target.value)}\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n )\r\n}\r\n\r\nexport default FieldRenderer"],"mappings":"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","names":["property","t","_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/FieldRenderer.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 React from 'react'\r\nimport {\r\n BuildingAssessmentConditions,\r\n BuildingGeometryStyle,\r\n BuildingProjectPhase,\r\n BuildingProjectType,\r\n BuildingEnergySource,\r\n BuildingOccupantType,\r\n BuildingManagementType,\r\n BuildingHeatingEnergySource,\r\n BuildingCoolingEnergySource,\r\n BuildingHotWaterEnergySource,\r\n BuildingElectricityServiceSize,\r\n BuildingElectricityServiceLocation,\r\n} from '../../../../types/dbTypes'\r\n\r\nimport { useSites } from '../../../../hooks/sites/sites'\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions, useMapContext } from '../../../../store'\r\n\r\nimport { Checkbox } from '../../../ui/Checkbox'\r\nimport { Input } from '../../../ui/Input'\r\nimport { Textarea } from '../../../ui/Textarea'\r\nimport { Button } from '../../../ui/Button'\r\nimport { Badge } from '../../../ui/Badge'\r\nimport { DatePicker } from '../../../ui/DatePicker'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../../../ui/Select'\r\nimport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../../../ui/Command'\r\n\r\nimport FileUpload from '../details/FileUpload'\r\n\r\nimport { Plus, X } from 'lucide-react'\r\nimport { LoadingSpinner } from '../../../ui/LoadingSpinner'\r\n\r\nexport const BuildingTypeEnum = [\r\n 'Townhouses',\r\n '<4 Storey MURB',\r\n '4+ Storey MURB',\r\n 'Stacked Townhouses',\r\n 'Detached',\r\n 'Semi Detached',\r\n] as const\r\n\r\ninterface FieldRendererProps {\r\n property: string\r\n value: any\r\n handleInputChange: (property: string, value: any) => void\r\n isTextAreaField: (property: string) => boolean\r\n isFileField: (property: string) => boolean\r\n isDateField?: (property: string) => boolean\r\n isEnumField?: (property: string) => boolean\r\n isNumberField?: (property: string) => boolean\r\n isFullWidthField?: (property: string) => boolean\r\n getEnumType?: (property: string) => string | null\r\n buildingId?: number\r\n setActiveChanges?: (editing: boolean) => void\r\n}\r\n\r\nconst FieldRenderer = ({\r\n property,\r\n value,\r\n handleInputChange,\r\n isTextAreaField,\r\n isFileField,\r\n isDateField = () => false,\r\n isEnumField = () => false,\r\n isNumberField = () => false,\r\n isFullWidthField = () => false,\r\n getEnumType = () => null,\r\n buildingId,\r\n setActiveChanges,\r\n}: FieldRendererProps) => {\r\n const t = useTranslations('BuildingFieldRenderer')\r\n const { state: mapState } = useMapContext()\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData ?? {}\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const getFileTagFromProperty = (property: string): string => {\r\n const propertyToTagMap: Record<string, string> = {\r\n buildingMaintenanceRecords: 'maintenanceRecords',\r\n buildingSystemAssessment: 'systemAssessments',\r\n buildingFireSafety: 'fireSafety',\r\n buildingOccupancyCertificate: 'occupancyCertificate',\r\n buildingEnvironmentalCompliance: 'environmentalCompliance',\r\n buildingZoningCompliance: 'zoningCompliance',\r\n buildingPermitsIssued: 'permitsIssued',\r\n buildingCertificationsFile: 'certificationsFile',\r\n buildingRegionalEnergyTrends: 'regionalEnergyTrends',\r\n buildingEnergyCodeCompliance: 'energyCodeCompliance',\r\n buildingBuildingCodeCompliance: 'buildingCodeCompliance',\r\n buildingProximityToServices: 'proximityToServices',\r\n EnergyAssessmentReports: 'buildingEnergyAssessmentReports',\r\n AirQualityReports: 'buildingAirQualityReports',\r\n WaterQualityReports: 'buildingWaterQualityReports',\r\n DSRs: 'DSRs',\r\n BCAs: 'buildingBCAs',\r\n ContractorReports: 'buildingContractorReports',\r\n EngineeringAssessments: 'buildingEngineeringAssessments',\r\n }\r\n return propertyToTagMap[property] || property\r\n }\r\n\r\n // Special handling for energy source arrays\r\n if (property === 'buildingHeatingEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select heating source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingHeatingEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (property === 'buildingCoolingEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select cooling source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingCoolingEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (property === 'buildingHotWaterSystemsEnergySources') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={val => {\r\n if (!selectedValues.includes(val)) {\r\n handleInputChange(property, [...selectedValues, val])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select hot water source(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingHotWaterEnergySource).filter(type => !selectedValues.includes(type)).map(type => (\r\n <SelectItem key={type} value={type}>{type.replaceAll('_', ' ')}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type.replaceAll('_', ' ')}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n if (isFileField(property)) {\r\n return (\r\n <FileUpload\r\n value={Array.isArray(value) ? value : []}\r\n property={property}\r\n tag={getFileTagFromProperty(property)}\r\n onChange={handleInputChange}\r\n editing={true}\r\n buildingId={buildingId}\r\n onFileUpload={() => setActiveChanges?.(true)}\r\n isFullWidthField={isFullWidthField(property)}\r\n />\r\n )\r\n }\r\n\r\n if (isDateField(property)) {\r\n return (\r\n <DatePicker\r\n date={value instanceof Date ? value : (value ? new Date(value) : undefined)}\r\n onSelect={date => handleInputChange(property, date)}\r\n />\r\n )\r\n }\r\n\r\n if (isEnumField(property)) {\r\n const enumType = getEnumType(property)\r\n\r\n // Multiselect for building type\r\n if (property === 'buildingType') {\r\n const selectedValues = Array.isArray(value) ? value : []\r\n return (\r\n <div className=\"space-y-2\">\r\n <Select\r\n value=\"\"\r\n onValueChange={(newType) => {\r\n if (!selectedValues.includes(newType)) {\r\n handleInputChange(property, [...selectedValues, newType])\r\n }\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select building type(s)\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {BuildingTypeEnum\r\n .filter(type => !selectedValues.includes(type))\r\n .map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex flex-wrap gap-1\">\r\n {selectedValues.map(type => (\r\n <Badge key={type} className=\"gap-1\" variant=\"secondary\">\r\n {type}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => {\r\n const updated = selectedValues.filter(t => t !== type)\r\n handleInputChange(property, updated)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n if (enumType === 'CountrySubdivisionData') {\r\n // Resolve display name — handles both full (\"CA-ON\") and short (\"ON\") stored codes\r\n const resolveSubdivisionName = (code: string): string => {\r\n if (!code || !countrySubdivisionsData) return code\r\n const exact = countrySubdivisionsData[code] as any\r\n if (exact) return (exact?.name ?? exact) || code\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${code}`))\r\n if (entry) return ((entry[1] as any)?.name ?? entry[1]) || code\r\n return code\r\n }\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select subdivision\">\r\n {value ? resolveSubdivisionName(value) : undefined}\r\n </SelectValue>\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 )\r\n }\r\n\r\n if (enumType === 'BuildingAssessmentConditions') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select assessment condition\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingAssessmentConditions).map(condition => (\r\n <SelectItem key={condition} value={condition}>\r\n {condition.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingGeometryStyle') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select geometry style\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingGeometryStyle).map(style => (\r\n <SelectItem key={style} value={style}>\r\n {style}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingProjectPhase') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select project phase\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingProjectPhase).map(phase => (\r\n <SelectItem key={phase} value={phase}>\r\n {phase.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingProjectType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select project type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingProjectType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingOccupantType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select occupant type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingOccupantType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'buildingAssessmentRatingCondition') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select rating condition\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingAssessmentConditions).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingManagementType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingManagementType).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingType') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {BuildingTypeEnum.map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n if (enumType === 'BuildingElectricityServiceSize') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingElectricityServiceSize).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+').replace('Size', '')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n if (enumType === 'BuildingElectricityServiceLocation') {\r\n return (\r\n <Select\r\n value={value || ''}\r\n onValueChange={val => handleInputChange(property, val)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Select management type\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {Object.values(BuildingElectricityServiceLocation).map(type => (\r\n <SelectItem key={type} value={type}>\r\n {type.replaceAll('_', ' ').replace('Plus', '+')}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n }\r\n \r\n \r\n\r\n if (property === 'buildingParentSiteId' && setActiveChanges) {\r\n const { sites, isLoading } = useSites()\r\n const [search, setSearch] = React.useState('')\r\n // A building has a single parent site (buildingParentSiteId is a scalar FK),\r\n // so this is single-select: pick one, show it once, X clears it.\r\n const selectedId = Array.isArray(value) ? (value[0] ?? null) : (value ?? null)\r\n const filteredSites = React.useMemo(() => {\r\n if (!sites) return []\r\n const lower = search.toLowerCase()\r\n return sites.filter(site =>\r\n (site.siteName && site.siteName.toLowerCase().includes(lower))\r\n || (site.siteAddress && site.siteAddress.toLowerCase().includes(lower)),\r\n )\r\n }, [sites, search])\r\n const selectedSite = sites?.find(site => site.id === selectedId) || null\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <Command shouldFilter={false}>\r\n <CommandInput\r\n placeholder=\"Search for a site...\"\r\n value={search}\r\n onValueChange={setSearch}\r\n disabled={isLoading}\r\n />\r\n {search.trim() !== '' && (\r\n <CommandList>\r\n {isLoading && <CommandEmpty><LoadingSpinner /></CommandEmpty>}\r\n {!isLoading && filteredSites.length === 0 && (\r\n <CommandEmpty>{t('empty')}</CommandEmpty>\r\n )}\r\n <CommandGroup>\r\n {filteredSites.map(site => (\r\n <CommandItem\r\n key={site.id}\r\n value={site.id.toString()}\r\n onSelect={() => {\r\n handleInputChange(property, site.id)\r\n setSearch('')\r\n }}\r\n >\r\n <div>\r\n <div className=\"font-medium\">{site.siteName}</div>\r\n <div className=\"text-xs text-muted-foreground\">{site.siteAddress}</div>\r\n </div>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n )}\r\n </Command>\r\n {selectedSite && (\r\n <div className=\"flex flex-wrap gap-1\">\r\n <Badge className=\"gap-1\" variant=\"secondary\">\r\n {selectedSite.siteName}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"p-0 hover:bg-transparent w-auto h-auto\"\r\n onClick={() => handleInputChange(property, null)}\r\n disabled={!ability.can('update', 'Building')}\r\n >\r\n <X className=\"!w-3 !h-3\" size={8} />\r\n </Button>\r\n </Badge>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n if (isTextAreaField(property)) {\r\n return (\r\n <Textarea\r\n value={value || ''}\r\n onChange={e => handleInputChange(property, e.target.value)}\r\n rows={4}\r\n />\r\n )\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return (\r\n <>\r\n <div className=\"flex flex-row gap-2\">\r\n <Input\r\n type=\"text\"\r\n value=\"\"\r\n onChange={() => {}}\r\n placeholder=\"Add new item\"\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n <Button variant=\"outline\" size=\"icon\" disabled={!ability.can('update', 'Building')}><Plus /></Button>\r\n </div>\r\n {/* Render Existing values */}\r\n <div className=\"flex flex-row gap-2\">\r\n {(value || []).map((item: string, index: number) => (\r\n <Badge key={index} className=\"cursor-pointer inline-flex\" variant=\"secondary\">\r\n {item}\r\n </Badge>\r\n ))}\r\n </div>\r\n </>\r\n )\r\n }\r\n\r\n if (value === 'yes' || value === 'no') {\r\n const bool = value === 'yes'\r\n return (\r\n <Checkbox\r\n checked={bool}\r\n onCheckedChange={checked => handleInputChange(property, checked ? 'yes' : 'no')}\r\n />\r\n )\r\n }\r\n\r\n if (typeof value === 'number' || (value === null && isNumberField(property))) {\r\n return (\r\n <Input\r\n type=\"number\"\r\n value={value === null || value === undefined ? '' : value}\r\n onChange={(e) => {\r\n const stringValue = e.target.value\r\n const numValue = stringValue === '' ? null : Number(stringValue)\r\n handleInputChange(property, numValue)\r\n }}\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <Input\r\n value={String(value || '')}\r\n onChange={e => handleInputChange(property, e.target.value)}\r\n disabled={!ability.can('update', 'Building')}\r\n />\r\n )\r\n}\r\n\r\nexport default FieldRenderer"],"mappings":"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","names":["property","t","_a","_b"]}
|
|
@@ -9,7 +9,9 @@ interface GeocoderInputProps {
|
|
|
9
9
|
buildingMunicipality?: string;
|
|
10
10
|
buildingPostalCode?: string;
|
|
11
11
|
}) => void;
|
|
12
|
+
geocodeEarthApiKey?: string;
|
|
13
|
+
geocoderUrl?: string;
|
|
12
14
|
}
|
|
13
|
-
export default function GeocoderInput({ onSelect }: GeocoderInputProps): React.JSX.Element;
|
|
15
|
+
export default function GeocoderInput({ onSelect, geocodeEarthApiKey, geocoderUrl }: GeocoderInputProps): React.JSX.Element;
|
|
14
16
|
export {};
|
|
15
17
|
//# sourceMappingURL=GeocoderInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeocoderInput.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/GeocoderInput.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE;QACjB,eAAe,EAAE,MAAM,CAAA;QACvB,iBAAiB,EAAE,MAAM,CAAA;QACzB,gBAAgB,EAAE,MAAM,CAAA;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,0BAA0B,CAAC,EAAE,MAAM,CAAA;QACnC,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAC5B,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"GeocoderInput.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/GeocoderInput.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE;QACjB,eAAe,EAAE,MAAM,CAAA;QACvB,iBAAiB,EAAE,MAAM,CAAA;QACzB,gBAAgB,EAAE,MAAM,CAAA;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,0BAA0B,CAAC,EAAE,MAAM,CAAA;QACnC,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAC5B,KAAK,IAAI,CAAA;IACV,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,kBAAkB,qBAsBtG"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import Geocoder from "../../map/src/Geocoder";
|
|
3
|
-
function GeocoderInput({ onSelect }) {
|
|
3
|
+
function GeocoderInput({ onSelect, geocodeEarthApiKey, geocoderUrl }) {
|
|
4
4
|
return /* @__PURE__ */ jsx(
|
|
5
5
|
Geocoder,
|
|
6
6
|
{
|
|
7
7
|
showDatabaseBuildings: false,
|
|
8
8
|
alwaysExpanded: true,
|
|
9
|
+
geocodeEarthApiKey,
|
|
10
|
+
geocoderUrl,
|
|
9
11
|
onSelect: (addressData) => {
|
|
10
12
|
if (!addressData) return;
|
|
11
13
|
const { formatted_address, coordinates, properties } = addressData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/GeocoderInput.tsx"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport React from 'react'\r\nimport Geocoder from '../../map/src/Geocoder'\r\n\r\ninterface GeocoderInputProps {\r\n onSelect: (fields: {\r\n buildingAddress: string\r\n buildingLongitude: number\r\n buildingLatitude: number\r\n buildingStreetName?: string\r\n buildingCountrySubdivision?: string\r\n buildingMunicipality?: string\r\n buildingPostalCode?: string\r\n }) => void\r\n}\r\n\r\nexport default function GeocoderInput({ onSelect }: GeocoderInputProps) {\r\n return (\r\n <Geocoder\r\n showDatabaseBuildings={false}\r\n alwaysExpanded={true}\r\n onSelect={(addressData: any) => {\r\n if (!addressData) return\r\n const { formatted_address, coordinates, properties } = addressData\r\n onSelect({\r\n buildingAddress: formatted_address,\r\n buildingLongitude: coordinates[0],\r\n buildingLatitude: coordinates[1],\r\n buildingStreetName: properties?.street,\r\n buildingCountrySubdivision: properties?.region_a || properties?.region,\r\n buildingMunicipality: properties?.locality || properties?.county,\r\n buildingPostalCode: properties?.postalcode,\r\n })\r\n }}\r\n />\r\n )\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/buildingDetails/GeocoderInput.tsx"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport React from 'react'\r\nimport Geocoder from '../../map/src/Geocoder'\r\n\r\ninterface GeocoderInputProps {\r\n onSelect: (fields: {\r\n buildingAddress: string\r\n buildingLongitude: number\r\n buildingLatitude: number\r\n buildingStreetName?: string\r\n buildingCountrySubdivision?: string\r\n buildingMunicipality?: string\r\n buildingPostalCode?: string\r\n }) => void\r\n geocodeEarthApiKey?: string\r\n geocoderUrl?: string\r\n}\r\n\r\nexport default function GeocoderInput({ onSelect, geocodeEarthApiKey, geocoderUrl }: GeocoderInputProps) {\r\n return (\r\n <Geocoder\r\n showDatabaseBuildings={false}\r\n alwaysExpanded={true}\r\n geocodeEarthApiKey={geocodeEarthApiKey}\r\n geocoderUrl={geocoderUrl}\r\n onSelect={(addressData: any) => {\r\n if (!addressData) return\r\n const { formatted_address, coordinates, properties } = addressData\r\n onSelect({\r\n buildingAddress: formatted_address,\r\n buildingLongitude: coordinates[0],\r\n buildingLatitude: coordinates[1],\r\n buildingStreetName: properties?.street,\r\n buildingCountrySubdivision: properties?.region_a || properties?.region,\r\n buildingMunicipality: properties?.locality || properties?.county,\r\n buildingPostalCode: properties?.postalcode,\r\n })\r\n }}\r\n />\r\n )\r\n}\r\n"],"mappings":"AAsBI;AAlBJ,OAAO,cAAc;AAgBN,SAAR,cAA+B,EAAE,UAAU,oBAAoB,YAAY,GAAuB;AACvG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,uBAAuB;AAAA,MACvB,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,UAAU,CAAC,gBAAqB;AAC9B,YAAI,CAAC,YAAa;AAClB,cAAM,EAAE,mBAAmB,aAAa,WAAW,IAAI;AACvD,iBAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,mBAAmB,YAAY,CAAC;AAAA,UAChC,kBAAkB,YAAY,CAAC;AAAA,UAC/B,oBAAoB,yCAAY;AAAA,UAChC,6BAA4B,yCAAY,cAAY,yCAAY;AAAA,UAChE,uBAAsB,yCAAY,cAAY,yCAAY;AAAA,UAC1D,oBAAoB,yCAAY;AAAA,QAClC,CAAC;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -6,7 +6,8 @@ interface DetailHeaderProps {
|
|
|
6
6
|
selectedInfrastructure?: Infrastructure | null;
|
|
7
7
|
selectedFile?: FileRow | null;
|
|
8
8
|
selectedUser?: Partial<User> | null;
|
|
9
|
+
countryCode?: string | null;
|
|
9
10
|
}
|
|
10
|
-
export default function DetailHeader({ selectedItem, selectedSite, selectedInfrastructure, selectedFile, selectedUser, }: DetailHeaderProps): import("react").JSX.Element;
|
|
11
|
+
export default function DetailHeader({ selectedItem, selectedSite, selectedInfrastructure, selectedFile, selectedUser, countryCode, }: DetailHeaderProps): import("react").JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=DetailHeader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailHeader.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/details/DetailHeader.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"DetailHeader.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/details/DetailHeader.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAYtD,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1B,sBAAsB,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9C,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAoFD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,EAAE,iBAAiB,+BAkBnB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as LR from "lucide-react";
|
|
4
|
-
import { useAppConfigContext } from "../../../../store/AppConfig/context";
|
|
5
4
|
function getCountryName(code) {
|
|
6
5
|
var _a;
|
|
7
6
|
if (!code) return null;
|
|
@@ -70,11 +69,10 @@ function DetailHeader({
|
|
|
70
69
|
selectedSite,
|
|
71
70
|
selectedInfrastructure,
|
|
72
71
|
selectedFile,
|
|
73
|
-
selectedUser
|
|
72
|
+
selectedUser,
|
|
73
|
+
countryCode
|
|
74
74
|
}) {
|
|
75
|
-
|
|
76
|
-
const { state: appConfigState } = useAppConfigContext();
|
|
77
|
-
const countryName = getCountryName((_a = appConfigState.appConfig.organization) == null ? void 0 : _a.country);
|
|
75
|
+
const countryName = getCountryName(countryCode);
|
|
78
76
|
return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children: selectedItem ? /* @__PURE__ */ jsx(BuildingHeader, { building: selectedItem, countryName }) : selectedSite ? /* @__PURE__ */ jsx(SiteHeader, { site: selectedSite, countryName }) : selectedInfrastructure ? /* @__PURE__ */ jsx(InfrastructureHeader, { infrastructure: selectedInfrastructure, countryName }) : selectedFile ? /* @__PURE__ */ jsx(FileHeader, { file: selectedFile }) : selectedUser ? /* @__PURE__ */ jsx(UserHeader, { user: selectedUser }) : null });
|
|
79
77
|
}
|
|
80
78
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/details/DetailHeader.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 LR from 'lucide-react'\r\nimport type { Building, Infrastructure, Site, User } from '../../../../types/dbTypes'\r\nimport type { FileRow } from '../../../../types/files'\r\
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/details/DetailHeader.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 LR from 'lucide-react'\r\nimport type { Building, Infrastructure, Site, User } from '../../../../types/dbTypes'\r\nimport type { FileRow } from '../../../../types/files'\r\n\r\nfunction getCountryName(code: string | null | undefined): string | null {\r\n if (!code) return null\r\n try {\r\n return new Intl.DisplayNames(['en'], { type: 'region' }).of(code.toUpperCase()) ?? null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n// Types\r\ninterface DetailHeaderProps {\r\n selectedItem?: Building | null\r\n selectedSite?: Site | null\r\n selectedInfrastructure?: Infrastructure | null\r\n selectedFile?: FileRow | null\r\n selectedUser?: Partial<User> | null\r\n countryCode?: string | null\r\n}\r\n\r\n// Sub-components — one per entity type, all follow the same shape:\r\n// icon + primary title (name || fallback) + optional subtitle\r\n\r\nfunction BuildingHeader({ building, countryName }: { building: Building; countryName: string | null }) {\r\n const title = building.buildingName || building.buildingAddress\r\n const parts = [building.buildingCountrySubdivision, countryName].filter(Boolean)\r\n const subtitle = building.buildingName\r\n ? building.buildingAddress\r\n : parts.length ? parts.join(', ') : (building.buildingAddress ?? '')\r\n\r\n return (\r\n <>\r\n <LR.Building2 className=\"h-8 w-8 shrink-0\" />\r\n <div>\r\n <h1 className=\"text-2xl font-semibold\">{title}</h1>\r\n <p className=\"text-muted-foreground\">{subtitle}</p>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nfunction SiteHeader({ site, countryName }: { site: Site; countryName: string | null }) {\r\n const title = site.siteName || site.siteAddress\r\n const parts = [site.siteCountrySubdivision, countryName].filter(Boolean)\r\n const subtitle = site.siteName\r\n ? site.siteAddress\r\n : parts.length ? parts.join(', ') : (site.siteAddress ?? '')\r\n\r\n return (\r\n <>\r\n <LR.BoxSelect className=\"h-8 w-8 shrink-0\" />\r\n <div>\r\n <h1 className=\"text-2xl font-semibold\">{title}</h1>\r\n <p className=\"text-muted-foreground\">{subtitle}</p>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nfunction InfrastructureHeader({ infrastructure, countryName }: { infrastructure: Infrastructure; countryName: string | null }) {\r\n const title = infrastructure.infrastructureName || infrastructure.infrastructureType\r\n const parts = [infrastructure.infrastructureCountrySubdivision, countryName].filter(Boolean)\r\n const subtitle = infrastructure.infrastructureName\r\n ? infrastructure.infrastructureType\r\n : parts.length ? parts.join(', ') : (infrastructure.infrastructureType ?? '')\r\n\r\n return (\r\n <>\r\n <LR.TrainTrack className=\"h-8 w-8 shrink-0\" />\r\n <div>\r\n <h1 className=\"text-2xl font-semibold\">{title}</h1>\r\n <p className=\"text-muted-foreground\">{subtitle}</p>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nfunction FileHeader({ file }: { file: FileRow }) {\r\n return (\r\n <>\r\n <LR.File className=\"h-8 w-8 shrink-0\" />\r\n <div>\r\n <h1 className=\"text-2xl font-semibold\">{file.name}</h1>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nfunction UserHeader({ user }: { user: Partial<User> }) {\r\n return (\r\n <>\r\n <LR.Users className=\"h-8 w-8 shrink-0\" />\r\n <div>\r\n <h1 className=\"text-2xl font-semibold\">{user.name || 'New User'}</h1>\r\n {user.email && <p className=\"text-muted-foreground\">{user.email}</p>}\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n// DetailHeader — resolves which sub-component to render\r\n\r\nexport default function DetailHeader({\r\n selectedItem,\r\n selectedSite,\r\n selectedInfrastructure,\r\n selectedFile,\r\n selectedUser,\r\n countryCode,\r\n}: DetailHeaderProps) {\r\n const countryName = getCountryName(countryCode)\r\n\r\n return (\r\n <div className=\"flex items-center gap-4\">\r\n {selectedItem\r\n ? <BuildingHeader building={selectedItem} countryName={countryName} />\r\n : selectedSite\r\n ? <SiteHeader site={selectedSite} countryName={countryName} />\r\n : selectedInfrastructure\r\n ? <InfrastructureHeader infrastructure={selectedInfrastructure} countryName={countryName} />\r\n : selectedFile\r\n ? <FileHeader file={selectedFile} />\r\n : selectedUser\r\n ? <UserHeader user={selectedUser} />\r\n : null}\r\n </div>\r\n )\r\n}"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldValue.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/details/FieldValue.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"FieldValue.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/details/FieldValue.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,UAAU,eAAe;IACvB,KAAK,EAAE,GAAG,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IACjD,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAQD,QAAA,MAAM,UAAU,GAAI,uDAAuF,eAAe,sBAiLzH,CAAA;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Badge } from "../../../../components/ui/Badge";
|
|
3
3
|
import FileUpload from "./FileUpload";
|
|
4
4
|
import { useMapContext } from "../../../../store";
|
|
5
|
+
import { useSites } from "../../../../hooks/sites/sites";
|
|
5
6
|
const SUBDIVISION_PROPERTIES = [
|
|
6
7
|
"buildingCountrySubdivision",
|
|
7
8
|
"siteCountrySubdivision",
|
|
@@ -9,16 +10,25 @@ const SUBDIVISION_PROPERTIES = [
|
|
|
9
10
|
];
|
|
10
11
|
const FieldValue = ({ value, label, isFile = false, property = "", onChange = () => {
|
|
11
12
|
}, editing = false }) => {
|
|
12
|
-
var _a, _b, _c;
|
|
13
|
+
var _a, _b, _c, _d;
|
|
13
14
|
const { state: mapState } = useMapContext();
|
|
14
15
|
const countrySubdivisionsData = mapState.map.countrySubdivisionsData;
|
|
16
|
+
const { sites } = useSites();
|
|
17
|
+
if (property === "buildingParentSiteId" && value != null && value !== "") {
|
|
18
|
+
const ids = Array.isArray(value) ? value : [value];
|
|
19
|
+
const names = ids.map((id) => {
|
|
20
|
+
var _a2;
|
|
21
|
+
return ((_a2 = sites.find((s) => String(s.id) === String(id))) == null ? void 0 : _a2.siteName) || String(id);
|
|
22
|
+
});
|
|
23
|
+
value = names.length <= 1 ? (_a = names[0]) != null ? _a : value : names;
|
|
24
|
+
}
|
|
15
25
|
if (SUBDIVISION_PROPERTIES.includes(property) && typeof value === "string" && value) {
|
|
16
26
|
const exact = countrySubdivisionsData == null ? void 0 : countrySubdivisionsData[value];
|
|
17
27
|
if (exact) {
|
|
18
|
-
value = ((
|
|
28
|
+
value = ((_b = exact == null ? void 0 : exact.name) != null ? _b : exact) || value;
|
|
19
29
|
} else if (countrySubdivisionsData) {
|
|
20
30
|
const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${value}`));
|
|
21
|
-
if (entry) value = ((
|
|
31
|
+
if (entry) value = ((_d = (_c = entry[1]) == null ? void 0 : _c.name) != null ? _d : entry[1]) || value;
|
|
22
32
|
}
|
|
23
33
|
}
|
|
24
34
|
const isDateValue = (val) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/details/FieldValue.tsx"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Dependencies\r\nimport React from 'react'\r\n\r\n// Shadcn Components\r\nimport { Badge } from '../../../../components/ui/Badge'\r\n\r\n// Custom components\r\nimport FileUpload from './FileUpload'\r\nimport { useMapContext } from '../../../../store'\r\n\r\ninterface FieldValueProps {\r\n value: any\r\n label: string | React.JSX.Element\r\n isFile?: boolean\r\n property?: string\r\n onChange?: (property: string, value: any) => void\r\n editing?: boolean\r\n}\r\n\r\nconst SUBDIVISION_PROPERTIES = [\r\n 'buildingCountrySubdivision',\r\n 'siteCountrySubdivision',\r\n 'infrastructureCountrySubdivision',\r\n]\r\n\r\nconst FieldValue = ({ value, label, isFile = false, property = '', onChange = () => {}, editing = false }: FieldValueProps) => {\r\n const { state: mapState } = useMapContext()\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData\r\n\r\n // Resolve subdivision code → display name (handles \"CA-ON\" and short \"ON\" formats)\r\n if (SUBDIVISION_PROPERTIES.includes(property) && typeof value === 'string' && value) {\r\n const exact = countrySubdivisionsData?.[value] as any\r\n if (exact) {\r\n value = (exact?.name ?? exact) || value\r\n } else if (countrySubdivisionsData) {\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${value}`))\r\n if (entry) value = ((entry[1] as any)?.name ?? entry[1]) || value\r\n }\r\n }\r\n\r\n // Helper function to check if value is a date\r\n const isDateValue = (val: any): boolean => {\r\n // First check if property name indicates it's a date field\r\n if (property.toLowerCase().includes('date') || property.toLowerCase().includes('time')) {\r\n return true\r\n }\r\n\r\n // Check if value is actually a Date instance\r\n if (val instanceof Date) return true\r\n\r\n // For strings, only treat as date if it matches common date formats\r\n if (typeof val === 'string') {\r\n // Only check if it looks like an ISO date or timestamp format\r\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}/\r\n if (!isoDateRegex.test(val)) {\r\n return false\r\n }\r\n \r\n const date = new Date(val)\r\n return !isNaN(date.getTime())\r\n }\r\n\r\n return false\r\n }\r\n // Helper function to check if value is a URL\r\n const isUrl = (value: string): boolean => {\r\n // Check if it's a website property\r\n if (\r\n property.toLowerCase().includes('website')\r\n || property.toLowerCase().includes('url')\r\n ) {\r\n return true\r\n }\r\n\r\n // Additional check for URL pattern\r\n try {\r\n new URL(value)\r\n return true\r\n }\r\n catch {\r\n return false\r\n }\r\n }\r\n\r\n // Helper function to check if value is an email\r\n const isEmail = (value: string): boolean => {\r\n // Check if it's an email property\r\n if (property.toLowerCase().includes('email')) {\r\n return true\r\n }\r\n\r\n // Additional check for email pattern\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\r\n return emailRegex.test(value)\r\n }\r\n\r\n // Format URL with protocol if missing\r\n const formatUrl = (url: string): string => {\r\n if (!url) return ''\r\n if (url.startsWith('http://') || url.startsWith('https://')) {\r\n return url\r\n }\r\n return `https://${url}`\r\n }\r\n\r\n const formatEnumValue = (value: string, property: string): string => {\r\n if (property === 'buildingElectricityServiceSize') {\r\n return value.replace('Size_', '')\r\n }\r\n return value.replaceAll('_', ' ')\r\n }\r\n\r\n if (value === null || value === undefined || value === '' || value === 'null'\r\n || (Array.isArray(value) && value.length === 0)) {\r\n return <span className=\"italic\">---</span>\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n if (isFile) {\r\n return (\r\n <FileUpload\r\n value={value}\r\n property={property}\r\n onChange={onChange}\r\n editing={editing}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {value.map((item, index) => (\r\n <Badge key={index} variant=\"default\">\r\n {formatEnumValue(\r\n typeof item === 'object' && item !== null\r\n ? JSON.stringify(item)\r\n : String(item),\r\n property\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n )\r\n }\r\n\r\n // For yes/no values\r\n if (value === 'yes' || value === 'no') {\r\n return <span>{value === 'yes' ? 'Yes' : 'No'}</span>\r\n }\r\n\r\n // Add handling for URLs and emails\r\n if (typeof value === 'string') {\r\n // Render website links\r\n if (isUrl(value)) {\r\n const formattedUrl = formatUrl(value)\r\n return (\r\n <a\r\n href={formattedUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-primary underline\"\r\n >\r\n {value}\r\n </a>\r\n )\r\n }\r\n\r\n // Render email links\r\n if (isEmail(value)) {\r\n return (\r\n <a\r\n href={`mailto:${value}`}\r\n className=\"text-primary underline\"\r\n >\r\n {value}\r\n </a>\r\n )\r\n }\r\n\r\n if (isDateValue(value)) {\r\n try {\r\n const date = new Date(value)\r\n if (!isNaN(date.getTime())) {\r\n return <span>{date.toLocaleDateString()}</span>\r\n }\r\n }\r\n catch {\r\n // Fall through to default handling if date parsing fails\r\n }\r\n }\r\n }\r\n\r\n return <span>{formatEnumValue(String(value), property)}</span>\r\n}\r\n\r\nexport default FieldValue"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/Data/details/FieldValue.tsx"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Dependencies\r\nimport React from 'react'\r\n\r\n// Shadcn Components\r\nimport { Badge } from '../../../../components/ui/Badge'\r\n\r\n// Custom components\r\nimport FileUpload from './FileUpload'\r\nimport { useMapContext } from '../../../../store'\r\nimport { useSites } from '../../../../hooks/sites/sites'\r\n\r\ninterface FieldValueProps {\r\n value: any\r\n label: string | React.JSX.Element\r\n isFile?: boolean\r\n property?: string\r\n onChange?: (property: string, value: any) => void\r\n editing?: boolean\r\n}\r\n\r\nconst SUBDIVISION_PROPERTIES = [\r\n 'buildingCountrySubdivision',\r\n 'siteCountrySubdivision',\r\n 'infrastructureCountrySubdivision',\r\n]\r\n\r\nconst FieldValue = ({ value, label, isFile = false, property = '', onChange = () => {}, editing = false }: FieldValueProps) => {\r\n const { state: mapState } = useMapContext()\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData\r\n const { sites } = useSites()\r\n\r\n // Resolve the associated-site id(s) → site name(s); showing the raw id is\r\n // meaningless to the user.\r\n if (property === 'buildingParentSiteId' && value != null && value !== '') {\r\n const ids = Array.isArray(value) ? value : [value]\r\n const names = ids.map(id => sites.find(s => String(s.id) === String(id))?.siteName || String(id))\r\n value = names.length <= 1 ? (names[0] ?? value) : names\r\n }\r\n\r\n // Resolve subdivision code → display name (handles \"CA-ON\" and short \"ON\" formats)\r\n if (SUBDIVISION_PROPERTIES.includes(property) && typeof value === 'string' && value) {\r\n const exact = countrySubdivisionsData?.[value] as any\r\n if (exact) {\r\n value = (exact?.name ?? exact) || value\r\n } else if (countrySubdivisionsData) {\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${value}`))\r\n if (entry) value = ((entry[1] as any)?.name ?? entry[1]) || value\r\n }\r\n }\r\n\r\n // Helper function to check if value is a date\r\n const isDateValue = (val: any): boolean => {\r\n // First check if property name indicates it's a date field\r\n if (property.toLowerCase().includes('date') || property.toLowerCase().includes('time')) {\r\n return true\r\n }\r\n\r\n // Check if value is actually a Date instance\r\n if (val instanceof Date) return true\r\n\r\n // For strings, only treat as date if it matches common date formats\r\n if (typeof val === 'string') {\r\n // Only check if it looks like an ISO date or timestamp format\r\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}/\r\n if (!isoDateRegex.test(val)) {\r\n return false\r\n }\r\n \r\n const date = new Date(val)\r\n return !isNaN(date.getTime())\r\n }\r\n\r\n return false\r\n }\r\n // Helper function to check if value is a URL\r\n const isUrl = (value: string): boolean => {\r\n // Check if it's a website property\r\n if (\r\n property.toLowerCase().includes('website')\r\n || property.toLowerCase().includes('url')\r\n ) {\r\n return true\r\n }\r\n\r\n // Additional check for URL pattern\r\n try {\r\n new URL(value)\r\n return true\r\n }\r\n catch {\r\n return false\r\n }\r\n }\r\n\r\n // Helper function to check if value is an email\r\n const isEmail = (value: string): boolean => {\r\n // Check if it's an email property\r\n if (property.toLowerCase().includes('email')) {\r\n return true\r\n }\r\n\r\n // Additional check for email pattern\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\r\n return emailRegex.test(value)\r\n }\r\n\r\n // Format URL with protocol if missing\r\n const formatUrl = (url: string): string => {\r\n if (!url) return ''\r\n if (url.startsWith('http://') || url.startsWith('https://')) {\r\n return url\r\n }\r\n return `https://${url}`\r\n }\r\n\r\n const formatEnumValue = (value: string, property: string): string => {\r\n if (property === 'buildingElectricityServiceSize') {\r\n return value.replace('Size_', '')\r\n }\r\n return value.replaceAll('_', ' ')\r\n }\r\n\r\n if (value === null || value === undefined || value === '' || value === 'null'\r\n || (Array.isArray(value) && value.length === 0)) {\r\n return <span className=\"italic\">---</span>\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n if (isFile) {\r\n return (\r\n <FileUpload\r\n value={value}\r\n property={property}\r\n onChange={onChange}\r\n editing={editing}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {value.map((item, index) => (\r\n <Badge key={index} variant=\"default\">\r\n {formatEnumValue(\r\n typeof item === 'object' && item !== null\r\n ? JSON.stringify(item)\r\n : String(item),\r\n property\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n )\r\n }\r\n\r\n // For yes/no values\r\n if (value === 'yes' || value === 'no') {\r\n return <span>{value === 'yes' ? 'Yes' : 'No'}</span>\r\n }\r\n\r\n // Add handling for URLs and emails\r\n if (typeof value === 'string') {\r\n // Render website links\r\n if (isUrl(value)) {\r\n const formattedUrl = formatUrl(value)\r\n return (\r\n <a\r\n href={formattedUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-primary underline\"\r\n >\r\n {value}\r\n </a>\r\n )\r\n }\r\n\r\n // Render email links\r\n if (isEmail(value)) {\r\n return (\r\n <a\r\n href={`mailto:${value}`}\r\n className=\"text-primary underline\"\r\n >\r\n {value}\r\n </a>\r\n )\r\n }\r\n\r\n if (isDateValue(value)) {\r\n try {\r\n const date = new Date(value)\r\n if (!isNaN(date.getTime())) {\r\n return <span>{date.toLocaleDateString()}</span>\r\n }\r\n }\r\n catch {\r\n // Fall through to default handling if date parsing fails\r\n }\r\n }\r\n }\r\n\r\n return <span>{formatEnumValue(String(value), property)}</span>\r\n}\r\n\r\nexport default FieldValue"],"mappings":"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","names":["_a","value","property"]}
|
|
@@ -4,7 +4,9 @@ interface AssociatedBuildingsTableProps {
|
|
|
4
4
|
buildings: Building[];
|
|
5
5
|
onRowClick?: (building: Building) => void;
|
|
6
6
|
siteId?: number;
|
|
7
|
+
siteName?: string;
|
|
7
8
|
onAttachBuilding?: (building: Building) => void;
|
|
9
|
+
onDetachBuilding?: (building: Building) => void;
|
|
8
10
|
editing?: boolean;
|
|
9
11
|
setEditing?: (editing: boolean) => void;
|
|
10
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssociatedBuildings.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/siteDetails/AssociatedBuildings.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"AssociatedBuildings.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/Data/siteDetails/AssociatedBuildings.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAiCzD,UAAU,6BAA6B;IACrC,SAAS,EAAE,QAAQ,EAAE,CAAA;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACxC;AAED,QAAA,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAodrE,CAAA;AAED,eAAe,wBAAwB,CAAA"}
|