@collabdt/core 0.0.47 → 0.0.48

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.
@@ -16,7 +16,8 @@ function GridManagement() {
16
16
  return (_b = (_a = grid == null ? void 0 : grid.config) == null ? void 0 : _a.visible) != null ? _b : true;
17
17
  });
18
18
  const [gridColor, setGridColor] = React.useState(() => {
19
- return grid.config.color ? `#${grid.config.color.getHexString()}` : "#bbbbbb";
19
+ var _a;
20
+ return ((_a = grid == null ? void 0 : grid.config) == null ? void 0 : _a.color) ? `#${grid.config.color.getHexString()}` : "#bbbbbb";
20
21
  });
21
22
  const [primarySize, setPrimarySize] = React.useState(() => {
22
23
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SliderWithInput } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport * as THREE from 'three'\r\n\r\nexport function GridManagement() {\r\n // Translation\r\n const t = useTranslations('GridManagement')\r\n\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext)\r\n const { grid } = bimState.bim\r\n\r\n // Use lazy initialization to get values from grid\r\n const [gridVisible, setGridVisible] = React.useState(() => {\r\n return grid?.config?.visible ?? true\r\n })\r\n const [gridColor, setGridColor] = React.useState(() => {\r\n return grid.config.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n })\r\n const [primarySize, setPrimarySize] = React.useState(() => {\r\n return [grid?.config?.primarySize ?? 1]\r\n })\r\n const [secondarySize, setSecondarySize] = React.useState(() => {\r\n return [grid?.config?.secondarySize ?? 10]\r\n })\r\n const [elevation, setElevation] = React.useState(() => {\r\n return [grid?.three?.position?.y ?? 0]\r\n })\r\n const [rotationY, setRotationZ] = React.useState(() => {\r\n const rotationDegrees = grid?.three?.rotation?.y ? (grid.three.rotation.y * 180) / Math.PI : 0\r\n return [rotationDegrees]\r\n })\r\n\r\n // Track if we've initialized to prevent re-initialization\r\n const [initialized, setInitialized] = React.useState(false)\r\n\r\n // Initialize state with current grid values (only once)\r\n React.useEffect(() => {\r\n if (!grid || initialized) return\r\n\r\n // Load all values from grid in one go\r\n if (grid.config) {\r\n setGridVisible(grid.config.visible ?? true)\r\n setPrimarySize([grid.config.primarySize ?? 1])\r\n setSecondarySize([grid.config.secondarySize ?? 10])\r\n if (grid.config.color) {\r\n setGridColor(`#${grid.config.color.getHexString()}`)\r\n }\r\n }\r\n\r\n if (grid.three) {\r\n if (grid.three.position) {\r\n setElevation([grid.three.position.y ?? 0])\r\n }\r\n if (grid.three.rotation) {\r\n const rotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n setRotationZ([rotationDegrees ?? 0])\r\n }\r\n }\r\n\r\n setInitialized(true)\r\n }, [grid, initialized])\r\n\r\n // Update grid visibility when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentVisible = grid.config.visible ?? true\r\n if (currentVisible !== gridVisible) {\r\n grid.config.visible = gridVisible\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridVisible, grid, initialized, bimDispatch])\r\n\r\n // Update grid color when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentColor = grid.config.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n if (currentColor !== gridColor) {\r\n grid.config.color = new THREE.Color(gridColor)\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridColor, grid, initialized, bimDispatch])\r\n\r\n // Update grid primary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentPrimarySize = grid.config.primarySize ?? 1\r\n if (currentPrimarySize !== primarySize[0]) {\r\n grid.config.primarySize = primarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [primarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid secondary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentSecondarySize = grid.config.secondarySize ?? 10\r\n if (currentSecondarySize !== secondarySize[0]) {\r\n grid.config.secondarySize = secondarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [secondarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid elevation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.position || !initialized) return\r\n\r\n const currentElevation = grid.three.position.y ?? 0\r\n if (currentElevation !== elevation[0]) {\r\n grid.three.position.y = elevation[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [elevation, grid, initialized, bimDispatch])\r\n\r\n // Update grid rotation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.rotation || !initialized) return\r\n\r\n const currentRotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n if (Math.abs(currentRotationDegrees - rotationY[0]) > 0.001) { // Use small tolerance for floating point comparison\r\n grid.three.rotation.y = (rotationY[0] * Math.PI) / 180\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [rotationY, grid, initialized, bimDispatch])\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('gridTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: gridVisible,\r\n onCheckedChange: setGridVisible,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Grid Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${gridVisible ? '' : 'text-gray-400'}`}>Grid Color</label>\r\n <div className={`p-2 border rounded-md ${gridVisible ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={gridColor}\r\n onChange={e => setGridColor(e.target.value)}\r\n disabled={!gridVisible}\r\n defaultColor=\"#bbbbbb\"\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Grid Primary Size */}\r\n <SliderWithInput\r\n label={t('primaryLabel')}\r\n value={primarySize}\r\n onValueChange={setPrimarySize}\r\n min={0}\r\n max={10}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Secondary Size */}\r\n <SliderWithInput\r\n label={t('secondaryLabel')}\r\n value={secondarySize}\r\n onValueChange={setSecondarySize}\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Elevation */}\r\n <SliderWithInput\r\n label={t('elevationLabel')}\r\n value={elevation}\r\n onValueChange={setElevation}\r\n min={-50}\r\n max={50}\r\n step={0.5}\r\n unit=\"m\"\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Rotation */}\r\n <SliderWithInput\r\n label={t('rotationLabel')}\r\n value={rotationY}\r\n onValueChange={setRotationZ}\r\n min={-360}\r\n max={360}\r\n step={1}\r\n unit=\"°\"\r\n disabled={!gridVisible}\r\n />\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SliderWithInput } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport * as THREE from 'three'\r\n\r\nexport function GridManagement() {\r\n // Translation\r\n const t = useTranslations('GridManagement')\r\n\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext)\r\n const { grid } = bimState.bim\r\n\r\n // Use lazy initialization to get values from grid\r\n const [gridVisible, setGridVisible] = React.useState(() => {\r\n return grid?.config?.visible ?? true\r\n })\r\n const [gridColor, setGridColor] = React.useState(() => {\r\n return grid?.config?.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n })\r\n const [primarySize, setPrimarySize] = React.useState(() => {\r\n return [grid?.config?.primarySize ?? 1]\r\n })\r\n const [secondarySize, setSecondarySize] = React.useState(() => {\r\n return [grid?.config?.secondarySize ?? 10]\r\n })\r\n const [elevation, setElevation] = React.useState(() => {\r\n return [grid?.three?.position?.y ?? 0]\r\n })\r\n const [rotationY, setRotationZ] = React.useState(() => {\r\n const rotationDegrees = grid?.three?.rotation?.y ? (grid.three.rotation.y * 180) / Math.PI : 0\r\n return [rotationDegrees]\r\n })\r\n\r\n // Track if we've initialized to prevent re-initialization\r\n const [initialized, setInitialized] = React.useState(false)\r\n\r\n // Initialize state with current grid values (only once)\r\n React.useEffect(() => {\r\n if (!grid || initialized) return\r\n\r\n // Load all values from grid in one go\r\n if (grid.config) {\r\n setGridVisible(grid.config.visible ?? true)\r\n setPrimarySize([grid.config.primarySize ?? 1])\r\n setSecondarySize([grid.config.secondarySize ?? 10])\r\n if (grid.config.color) {\r\n setGridColor(`#${grid.config.color.getHexString()}`)\r\n }\r\n }\r\n\r\n if (grid.three) {\r\n if (grid.three.position) {\r\n setElevation([grid.three.position.y ?? 0])\r\n }\r\n if (grid.three.rotation) {\r\n const rotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n setRotationZ([rotationDegrees ?? 0])\r\n }\r\n }\r\n\r\n setInitialized(true)\r\n }, [grid, initialized])\r\n\r\n // Update grid visibility when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentVisible = grid.config.visible ?? true\r\n if (currentVisible !== gridVisible) {\r\n grid.config.visible = gridVisible\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridVisible, grid, initialized, bimDispatch])\r\n\r\n // Update grid color when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentColor = grid.config.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n if (currentColor !== gridColor) {\r\n grid.config.color = new THREE.Color(gridColor)\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridColor, grid, initialized, bimDispatch])\r\n\r\n // Update grid primary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentPrimarySize = grid.config.primarySize ?? 1\r\n if (currentPrimarySize !== primarySize[0]) {\r\n grid.config.primarySize = primarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [primarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid secondary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentSecondarySize = grid.config.secondarySize ?? 10\r\n if (currentSecondarySize !== secondarySize[0]) {\r\n grid.config.secondarySize = secondarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [secondarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid elevation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.position || !initialized) return\r\n\r\n const currentElevation = grid.three.position.y ?? 0\r\n if (currentElevation !== elevation[0]) {\r\n grid.three.position.y = elevation[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [elevation, grid, initialized, bimDispatch])\r\n\r\n // Update grid rotation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.rotation || !initialized) return\r\n\r\n const currentRotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n if (Math.abs(currentRotationDegrees - rotationY[0]) > 0.001) { // Use small tolerance for floating point comparison\r\n grid.three.rotation.y = (rotationY[0] * Math.PI) / 180\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [rotationY, grid, initialized, bimDispatch])\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('gridTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: gridVisible,\r\n onCheckedChange: setGridVisible,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Grid Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${gridVisible ? '' : 'text-gray-400'}`}>Grid Color</label>\r\n <div className={`p-2 border rounded-md ${gridVisible ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={gridColor}\r\n onChange={e => setGridColor(e.target.value)}\r\n disabled={!gridVisible}\r\n defaultColor=\"#bbbbbb\"\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Grid Primary Size */}\r\n <SliderWithInput\r\n label={t('primaryLabel')}\r\n value={primarySize}\r\n onValueChange={setPrimarySize}\r\n min={0}\r\n max={10}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Secondary Size */}\r\n <SliderWithInput\r\n label={t('secondaryLabel')}\r\n value={secondarySize}\r\n onValueChange={setSecondarySize}\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Elevation */}\r\n <SliderWithInput\r\n label={t('elevationLabel')}\r\n value={elevation}\r\n onValueChange={setElevation}\r\n min={-50}\r\n max={50}\r\n step={0.5}\r\n unit=\"m\"\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Rotation */}\r\n <SliderWithInput\r\n label={t('rotationLabel')}\r\n value={rotationY}\r\n onValueChange={setRotationZ}\r\n min={-360}\r\n max={360}\r\n step={1}\r\n unit=\"°\"\r\n disabled={!gridVisible}\r\n />\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}\r\n"],"mappings":";AAqKQ,SACE,KADF;AAnKR,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AACnC,SAAS,kBAAkB;AAC3B,YAAY,WAAW;AAEhB,SAAS,iBAAiB;AAE/B,QAAM,IAAI,gBAAgB,gBAAgB;AAE1C,QAAM,EAAE,UAAU,aAAa,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AAC9E,QAAM,EAAE,KAAK,IAAI,SAAS;AAG1B,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,MAAM;AAlB7D;AAmBI,YAAO,wCAAM,WAAN,mBAAc,YAAd,YAAyB;AAAA,EAClC,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AArBzD;AAsBI,aAAO,kCAAM,WAAN,mBAAc,SAAQ,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,KAAK;AAAA,EACxE,CAAC;AACD,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,MAAM;AAxB7D;AAyBI,WAAO,EAAC,wCAAM,WAAN,mBAAc,gBAAd,YAA6B,CAAC;AAAA,EACxC,CAAC;AACD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,MAAM;AA3BjE;AA4BI,WAAO,EAAC,wCAAM,WAAN,mBAAc,kBAAd,YAA+B,EAAE;AAAA,EAC3C,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AA9BzD;AA+BI,WAAO,EAAC,8CAAM,UAAN,mBAAa,aAAb,mBAAuB,MAAvB,YAA4B,CAAC;AAAA,EACvC,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AAjCzD;AAkCI,UAAM,oBAAkB,wCAAM,UAAN,mBAAa,aAAb,mBAAuB,KAAK,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK,KAAK;AAC7F,WAAO,CAAC,eAAe;AAAA,EACzB,CAAC;AAGD,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,KAAK;AAG1D,QAAM,UAAU,MAAM;AA1CxB;AA2CI,QAAI,CAAC,QAAQ,YAAa;AAG1B,QAAI,KAAK,QAAQ;AACf,sBAAe,UAAK,OAAO,YAAZ,YAAuB,IAAI;AAC1C,qBAAe,EAAC,UAAK,OAAO,gBAAZ,YAA2B,CAAC,CAAC;AAC7C,uBAAiB,EAAC,UAAK,OAAO,kBAAZ,YAA6B,EAAE,CAAC;AAClD,UAAI,KAAK,OAAO,OAAO;AACrB,qBAAa,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,EAAE;AAAA,MACrD;AAAA,IACF;AAEA,QAAI,KAAK,OAAO;AACd,UAAI,KAAK,MAAM,UAAU;AACvB,qBAAa,EAAC,UAAK,MAAM,SAAS,MAApB,YAAyB,CAAC,CAAC;AAAA,MAC3C;AACA,UAAI,KAAK,MAAM,UAAU;AACvB,cAAM,kBAAmB,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK;AAC7D,qBAAa,CAAC,4CAAmB,CAAC,CAAC;AAAA,MACrC;AAAA,IACF;AAEA,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,MAAM,WAAW,CAAC;AAGtB,QAAM,UAAU,MAAM;AArExB;AAsEI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,kBAAiB,UAAK,OAAO,YAAZ,YAAuB;AAC9C,QAAI,mBAAmB,aAAa;AAClC,WAAK,OAAO,UAAU;AACtB,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,aAAa,WAAW,CAAC;AAGhD,QAAM,UAAU,MAAM;AACpB,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,eAAe,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,KAAK;AAClF,QAAI,iBAAiB,WAAW;AAC9B,WAAK,OAAO,QAAQ,IAAI,MAAM,MAAM,SAAS;AAC7C,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAG9C,QAAM,UAAU,MAAM;AAjGxB;AAkGI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,sBAAqB,UAAK,OAAO,gBAAZ,YAA2B;AACtD,QAAI,uBAAuB,YAAY,CAAC,GAAG;AACzC,WAAK,OAAO,cAAc,YAAY,CAAC;AACvC,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,aAAa,WAAW,CAAC;AAGhD,QAAM,UAAU,MAAM;AA/GxB;AAgHI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,wBAAuB,UAAK,OAAO,kBAAZ,YAA6B;AAC1D,QAAI,yBAAyB,cAAc,CAAC,GAAG;AAC7C,WAAK,OAAO,gBAAgB,cAAc,CAAC;AAC3C,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,eAAe,MAAM,aAAa,WAAW,CAAC;AAGlD,QAAM,UAAU,MAAM;AA7HxB;AA8HI,QAAI,GAAC,kCAAM,UAAN,mBAAa,aAAY,CAAC,YAAa;AAE5C,UAAM,oBAAmB,UAAK,MAAM,SAAS,MAApB,YAAyB;AAClD,QAAI,qBAAqB,UAAU,CAAC,GAAG;AACrC,WAAK,MAAM,SAAS,IAAI,UAAU,CAAC;AACnC,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAG9C,QAAM,UAAU,MAAM;AA3IxB;AA4II,QAAI,GAAC,kCAAM,UAAN,mBAAa,aAAY,CAAC,YAAa;AAE5C,UAAM,yBAA0B,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK;AACpE,QAAI,KAAK,IAAI,yBAAyB,UAAU,CAAC,CAAC,IAAI,MAAO;AAC3D,WAAK,MAAM,SAAS,IAAK,UAAU,CAAC,IAAI,KAAK,KAAM;AACnD,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,WAAW;AAAA,MACpB,iBAAgB;AAAA,MAChB,eAAe;AAAA,QACb,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,MAEb,+BAAC,SAAI,WAAU,aAEb;AAAA,6BAAC,SAAI,WAAU,aACb;AAAA,8BAAC,WAAM,WAAW,uBAAuB,cAAc,KAAK,eAAe,IAAI,wBAAU;AAAA,UACzF,oBAAC,SAAI,WAAW,yBAAyB,cAAc,aAAa,aAAa,IAC/E;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,UAAU,OAAK,aAAa,EAAE,OAAO,KAAK;AAAA,cAC1C,UAAU,CAAC;AAAA,cACX,cAAa;AAAA;AAAA,UACf,GACF;AAAA,WACF;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,cAAc;AAAA,YACvB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,gBAAgB;AAAA,YACzB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,gBAAgB;AAAA,YACzB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAK;AAAA,YACL,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,eAAe;AAAA,YACxB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAK;AAAA,YACL,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BuildingsTools.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,uCAAuC,CAAC;AAe9E,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,SAAS,EACT,OAAO,EACP,QAAQ,EACR,OAAO,EACP,aAAa,EACd,EAAE,kBAAkB,qBA4WpB"}
1
+ {"version":3,"file":"BuildingsTools.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,uCAAuC,CAAC;AAe9E,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,SAAS,EACT,OAAO,EACP,QAAQ,EACR,OAAO,EACP,aAAa,EACd,EAAE,kBAAkB,qBA0WpB"}
@@ -114,14 +114,12 @@ function BuildingTools({
114
114
  );
115
115
  const bimFiles = React.useMemo(
116
116
  () => buildingFiles.filter(
117
- (file) => file.name.toLowerCase().endsWith(".frag")
117
+ (file) => file.type === "bim-file" || file.extension === "frag"
118
118
  ),
119
119
  [buildingFiles]
120
120
  );
121
121
  const pcFiles = React.useMemo(
122
- () => buildingFiles.filter(
123
- (file) => file.name.toLowerCase().endsWith(".laz") || file.name.toLowerCase().endsWith(".las")
124
- ),
122
+ () => buildingFiles.filter((file) => file.type === "point-cloud-file" || ["laz", "las"].includes(file.extension || "")),
125
123
  [buildingFiles]
126
124
  );
127
125
  const buildingButtons = React.useMemo(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\";\r\nimport type { MapGeoJSONFeature } from \"maplibre-gl\";\r\nimport * as LR from \"lucide-react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { usePermissions } from '../../../../../../../../store'\r\n\r\nimport { ViewerNames } from \"../../../../../../../../types/\";\r\nimport type { Tool } from \"../../../../../../../../types/tools\";\r\nimport type { Building, DbFile } from \"../../../../../../../../types/dbTypes\";\r\n\r\nimport { useFilesByBuildingId, useUploadFileToBuilding } from \"../../../../../../../../hooks/files/files\";\r\nimport { BuildingsContext, BimContext, MapContext, MenusContext, useMenusContext } from \"../../../../../../../../store\";\r\nimport { Button, Label, Skeleton, Switch, Checkbox } from \"../../../../../../../../components/ui/\";\r\nimport { useFileUploadHandler } from \"../../../../../../../../components/ui/FilesManager/src/useFileUploadHandler\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from \"../../../../../../../../components/ui/DropdownMenu\";\r\nimport Compare from '../../../../compare';\r\nimport { toggleBimToMap as dispatchToggleBimToMap } from '../../../../../utils/toggleBimToMap';\r\n\r\ninterface BuildingToolsProps {\r\n isLoading: boolean;\r\n isError: boolean;\r\n building: Building | null;\r\n feature: MapGeoJSONFeature;\r\n onCloseAction: () => void;\r\n}\r\n\r\nexport default function BuildingTools({\r\n isLoading,\r\n isError,\r\n building,\r\n feature,\r\n onCloseAction\r\n}: BuildingToolsProps) {\r\n\r\n const t = useTranslations('BuildingTools')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { dispatch: menusDispatch } = React.useContext(MenusContext);\r\n const { state: mapState, } = React.useContext(MapContext);\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext);\r\n const { bimModelsAddedToMap } = bimState.bim;\r\n const { dispatch: buildingsDispatch } = React.useContext(BuildingsContext);\r\n\r\n const fileInputRef = React.useRef<HTMLInputElement>(null);\r\n const { setView } = useMenusContext();\r\n const { setSelectedItem } = useMenusContext();\r\n\r\n const buildingId = React.useMemo(\r\n () => {\r\n\r\n const featureProps = feature?.properties || {};\r\n const id = Number(featureProps.dbId);\r\n return isNaN(id)\r\n ? null\r\n : id;\r\n\r\n },\r\n [feature?.properties],\r\n );\r\n\r\n const { files } = useFilesByBuildingId(buildingId);\r\n\r\n const bimAdded = React.useMemo(\r\n () => (buildingId\r\n ? mapState.map.bimModelsAddedToMap.includes(buildingId)\r\n : false),\r\n [\r\n mapState.map.bimModelsAddedToMap,\r\n buildingId,\r\n ],\r\n );\r\n\r\n const { uploadFile, isMutating: isUploadingFromHook } = useUploadFileToBuilding(building?.id || null);\r\n\r\n // Local state to track the entire upload process from file selection to completion\r\n const [\r\n isLocallyUploading,\r\n setIsLocallyUploading,\r\n ] = React.useState(false);\r\n\r\n // Combined uploading state\r\n const isUploading = isLocallyUploading || isUploadingFromHook;\r\n\r\n // Use the reusable upload handler without passing bimComponents\r\n const { handleFileUpload } = useFileUploadHandler({\r\n buildingId: buildingId || -1,\r\n uploadFile,\r\n onUploadStart: () => setIsLocallyUploading(true),\r\n onUploadEnd: () => setIsLocallyUploading(false),\r\n customMessages: {\r\n success: t('toastFIleUploadSuccess'),\r\n errorPrefix: t('toastFIleUploadError'),\r\n errorSuffix: t('toastUnknownError'),\r\n noIdError: t('buildingIdRequired')\r\n }\r\n });\r\n\r\n const changeViewer = React.useCallback(\r\n (viewer: ViewerNames) => {\r\n\r\n menusDispatch({\r\n type: \"SET_VIEWER\",\r\n payload: { \"currentViewer\": viewer },\r\n });\r\n\r\n buildingsDispatch({\r\n type: \"SET-CURRENT-BUILDING\",\r\n payload: { building },\r\n });\r\n onCloseAction();\r\n\r\n },\r\n [\r\n menusDispatch,\r\n buildingsDispatch,\r\n building,\r\n onCloseAction\r\n ]\r\n );\r\n\r\n const triggerFileInput = React.useCallback(\r\n () => {\r\n\r\n fileInputRef.current?.click();\r\n\r\n },\r\n [],\r\n );\r\n\r\n const toggleBimToMap = React.useCallback(\r\n (bimFile: DbFile) => {\r\n dispatchToggleBimToMap(bimDispatch, bimFile, building);\r\n\r\n },\r\n [\r\n building,\r\n bimDispatch\r\n ]\r\n );\r\n\r\n const onOpenBimViewer = () => {\r\n buildingsDispatch({type: \"SET-CURRENT-BUILDING\", payload: { building }});\r\n changeViewer(ViewerNames.bim);\r\n setSelectedItem(building);\r\n }\r\n\r\n const buildingFiles = React.useMemo(\r\n () => files || [],\r\n [files],\r\n );\r\n \r\n const bimFiles = React.useMemo(\r\n () => buildingFiles.filter((file: DbFile) => file.name.toLowerCase().endsWith(\".frag\")\r\n ),\r\n [buildingFiles],\r\n )\r\n\r\n const pcFiles = React.useMemo(\r\n () => buildingFiles.filter((file: DbFile) => file.name.toLowerCase().endsWith(\".laz\") ||\r\n file.name.toLowerCase().endsWith(\".las\")\r\n ),\r\n [buildingFiles],\r\n )\r\n\r\n const buildingButtons: Tool[] = React.useMemo(\r\n () => [\r\n {\r\n id: \"map-compare-buildings\",\r\n icon: LR.Columns3,\r\n title: t('compareTitle'),\r\n component: Compare,\r\n disabled: !ability.can('read', 'Building')\r\n },\r\n {\r\n id: \"open-building-page\",\r\n icon: LR.Building2,\r\n title: t('openBIMTitle'),\r\n onClick: () => {\r\n\r\n changeViewer(ViewerNames.buildings);\r\n setSelectedItem(building);\r\n setView(\"detail\");\r\n\r\n },\r\n disabled: !ability.can('read', 'Building')\r\n },\r\n {\r\n id: \"open-bim-viewer\",\r\n icon: LR.Box,\r\n title: t('OpenBIMViewerTitle'),\r\n onClick: onOpenBimViewer,\r\n disabled: !ability.can('read', 'File')\r\n },\r\n {\r\n id: 'open-pointcloud',\r\n title: t('openPointCloudTitle'),\r\n icon: LR.Grip,\r\n onClick: () => changeViewer(ViewerNames.pointcloud),\r\n disabled: pcFiles.length === 0 || !ability.can('read', 'File')\r\n },\r\n {\r\n id: \"map-add-file\",\r\n icon: isUploading\r\n ? LR.Loader\r\n : LR.FilePlus,\r\n title: t('addFileTitle'),\r\n onClick: triggerFileInput,\r\n disabled: !ability.can('create', 'File')\r\n },\r\n ],\r\n [\r\n changeViewer,\r\n building,\r\n setSelectedItem,\r\n setView,\r\n isUploading,\r\n triggerFileInput\r\n ]\r\n );\r\n\r\n const onLoadBIM = React.useCallback(\r\n (file: DbFile = null) => {\r\n if (bimFiles.length === 0) return;\r\n toggleBimToMap(bimFiles[0]);\r\n },\r\n [\r\n bimFiles,\r\n toggleBimToMap\r\n ]\r\n );\r\n\r\n const handleEditClick = (fileName: string) => {\r\n bimDispatch({\r\n type: \"EDIT_BIM_MODEL_BY_NAME\",\r\n payload: { editingBimModel: fileName }\r\n });\r\n\r\n onCloseAction();\r\n }\r\n\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Hidden file input */}\r\n <input\r\n onChange={(e) => handleFileUpload(e.target.files?.[0] || null)}\r\n ref={fileInputRef}\r\n style={{ \"display\": \"none\" }}\r\n type=\"file\"\r\n />\r\n\r\n {/* BIM Controls */}\r\n {!isError &&\r\n <div className=\"flex items-center space-x-2\">\r\n {isLoading\r\n ? <>\r\n <Skeleton className=\"h-4 w-20\" />\r\n\r\n <Skeleton className=\"h-6 w-10\" />\r\n </>\r\n : (\r\n <div className=\"flex items-center justify-between w-full\">\r\n {bimFiles.length > 1 ? (\r\n <div className=\"flex items-center space-x-2\">\r\n <Label className=\"font-semibold\" htmlFor=\"bim-file-dropdown\">\r\n {t('selectBimLabel')}\r\n </Label>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" id=\"bim-file-dropdown\">\r\n {bimModelsAddedToMap.length > 0\r\n ? `${bimModelsAddedToMap.filter(model => model.bimFile.attachedFilesBuildingId === buildingId).length} ${t('filesSelected')}`\r\n : t('selectFiles')\r\n }\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent>\r\n {bimFiles.map((file: DbFile) => {\r\n const isSelected = bimModelsAddedToMap.some(model => model.bimFile.name === file.name);\r\n return (\r\n <DropdownMenuItem\r\n key={file.name}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n toggleBimToMap(file);\r\n }}\r\n className=\"flex items-center justify-between cursor-pointer\"\r\n >\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={isSelected}\r\n onClick={(e) => e.stopPropagation()}\r\n onCheckedChange={() => {\r\n toggleBimToMap(file);\r\n }}\r\n />\r\n <span>{file.name}</span>\r\n </div>\r\n {isSelected && (\r\n <Button \r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleEditClick(file.name);\r\n }} \r\n variant=\"ghost\" \r\n size=\"sm\"\r\n className=\"h-6 w-6 p-0\"\r\n title={t('editBimButton')}\r\n >\r\n <LR.LocationEdit className=\"h-3 w-3\" />\r\n </Button>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center space-x-2\">\r\n <Label\r\n className={`font-semibold ${bimFiles.length === 0 ? 'text-muted-foreground' : ''}`}\r\n htmlFor=\"show-bim\"\r\n >\r\n {bimAdded ? t('hideBIM') : t('showBIM')}\r\n </Label>\r\n <Switch\r\n id=\"show-bim\"\r\n checked={bimFiles.length === 1 && bimModelsAddedToMap.some(model => model.bimFile.name === bimFiles[0]?.name)}\r\n disabled={bimFiles.length === 0 || !ability.can('read', 'File')}\r\n onCheckedChange={() => onLoadBIM()}\r\n />\r\n </div>\r\n )}\r\n {bimFiles.length === 1 && bimModelsAddedToMap.some(model => model.building.id === buildingId) && (() => {\r\n const selectedModel = bimModelsAddedToMap.find(model => model.building.id === buildingId);\r\n console.log('selectedModel', selectedModel);\r\n return true ? (\r\n <Button \r\n onClick={() => handleEditClick(selectedModel.bimFile.name)} \r\n variant=\"ghost\" \r\n size=\"sm\"\r\n title={t('editBimButton')}\r\n disabled={!ability.can('update', 'File')}\r\n >\r\n <LR.LocationEdit className=\"h-4 w-4\" />\r\n </Button>\r\n ) : null;\r\n })()}\r\n </div>\r\n ) \r\n }\r\n </div>}\r\n\r\n {/* Tool Buttons */}\r\n <div className=\"flex items-center gap-3\">\r\n {isLoading\r\n ? Array.from({ \"length\": 4 }).map((_, index) => (<Skeleton\r\n key={index}\r\n className=\"w-8 h-8 rounded-sm\"\r\n />),)\r\n : (!isError && building ? (\r\n buildingButtons.map((button) => {\r\n if (button.component) {\r\n const ButtonComponent = button.component\r\n const shouldAnimateSpin = button.id === 'map-add-file' && isUploading\r\n return (\r\n <div\r\n key={button.id}\r\n className={`w-8 h-8 rounded-sm border-2 border-gray-200 inline-flex justify-center items-center ${shouldAnimateSpin ? 'animate-spin' : ''}`}\r\n >\r\n <ButtonComponent tool={button} building={building} />\r\n </div>\r\n )\r\n }\r\n return (\r\n <Button\r\n key={button.id}\r\n variant=\"ghost\"\r\n className=\"w-8 h-8 rounded-sm border-2 border-gray-200 inline-flex justify-center items-center\"\r\n aria-label={button.title}\r\n onClick={button.onClick}\r\n title={button.title}\r\n disabled={button.disabled}\r\n >\r\n <button.icon className={`w-6 h-6 ${button.id === 'map-add-file' && isUploading ? 'animate-spin' : ''}`} />\r\n </Button>\r\n )\r\n })\r\n ) : null)}\r\n </div>\r\n </div>\r\n );\r\n\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\";\r\nimport type { MapGeoJSONFeature } from \"maplibre-gl\";\r\nimport * as LR from \"lucide-react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { usePermissions } from '../../../../../../../../store'\r\n\r\nimport { ViewerNames } from \"../../../../../../../../types/\";\r\nimport type { Tool } from \"../../../../../../../../types/tools\";\r\nimport type { Building, DbFile } from \"../../../../../../../../types/dbTypes\";\r\n\r\nimport { useFilesByBuildingId, useUploadFileToBuilding } from \"../../../../../../../../hooks/files/files\";\r\nimport { BuildingsContext, BimContext, MapContext, MenusContext, useMenusContext } from \"../../../../../../../../store\";\r\nimport { Button, Label, Skeleton, Switch, Checkbox } from \"../../../../../../../../components/ui/\";\r\nimport { useFileUploadHandler } from \"../../../../../../../../components/ui/FilesManager/src/useFileUploadHandler\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from \"../../../../../../../../components/ui/DropdownMenu\";\r\nimport Compare from '../../../../compare';\r\nimport { toggleBimToMap as dispatchToggleBimToMap } from '../../../../../utils/toggleBimToMap';\r\n\r\ninterface BuildingToolsProps {\r\n isLoading: boolean;\r\n isError: boolean;\r\n building: Building | null;\r\n feature: MapGeoJSONFeature;\r\n onCloseAction: () => void;\r\n}\r\n\r\nexport default function BuildingTools({\r\n isLoading,\r\n isError,\r\n building,\r\n feature,\r\n onCloseAction\r\n}: BuildingToolsProps) {\r\n\r\n const t = useTranslations('BuildingTools')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { dispatch: menusDispatch } = React.useContext(MenusContext);\r\n const { state: mapState, } = React.useContext(MapContext);\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext);\r\n const { bimModelsAddedToMap } = bimState.bim;\r\n const { dispatch: buildingsDispatch } = React.useContext(BuildingsContext);\r\n\r\n const fileInputRef = React.useRef<HTMLInputElement>(null);\r\n const { setView } = useMenusContext();\r\n const { setSelectedItem } = useMenusContext();\r\n\r\n const buildingId = React.useMemo(\r\n () => {\r\n\r\n const featureProps = feature?.properties || {};\r\n const id = Number(featureProps.dbId);\r\n return isNaN(id)\r\n ? null\r\n : id;\r\n\r\n },\r\n [feature?.properties],\r\n );\r\n\r\n const { files } = useFilesByBuildingId(buildingId);\r\n\r\n const bimAdded = React.useMemo(\r\n () => (buildingId\r\n ? mapState.map.bimModelsAddedToMap.includes(buildingId)\r\n : false),\r\n [\r\n mapState.map.bimModelsAddedToMap,\r\n buildingId,\r\n ],\r\n );\r\n\r\n const { uploadFile, isMutating: isUploadingFromHook } = useUploadFileToBuilding(building?.id || null);\r\n\r\n // Local state to track the entire upload process from file selection to completion\r\n const [\r\n isLocallyUploading,\r\n setIsLocallyUploading,\r\n ] = React.useState(false);\r\n\r\n // Combined uploading state\r\n const isUploading = isLocallyUploading || isUploadingFromHook;\r\n\r\n // Use the reusable upload handler without passing bimComponents\r\n const { handleFileUpload } = useFileUploadHandler({\r\n buildingId: buildingId || -1,\r\n uploadFile,\r\n onUploadStart: () => setIsLocallyUploading(true),\r\n onUploadEnd: () => setIsLocallyUploading(false),\r\n customMessages: {\r\n success: t('toastFIleUploadSuccess'),\r\n errorPrefix: t('toastFIleUploadError'),\r\n errorSuffix: t('toastUnknownError'),\r\n noIdError: t('buildingIdRequired')\r\n }\r\n });\r\n\r\n const changeViewer = React.useCallback(\r\n (viewer: ViewerNames) => {\r\n\r\n menusDispatch({\r\n type: \"SET_VIEWER\",\r\n payload: { \"currentViewer\": viewer },\r\n });\r\n\r\n buildingsDispatch({\r\n type: \"SET-CURRENT-BUILDING\",\r\n payload: { building },\r\n });\r\n onCloseAction();\r\n\r\n },\r\n [\r\n menusDispatch,\r\n buildingsDispatch,\r\n building,\r\n onCloseAction\r\n ]\r\n );\r\n\r\n const triggerFileInput = React.useCallback(\r\n () => {\r\n\r\n fileInputRef.current?.click();\r\n\r\n },\r\n [],\r\n );\r\n\r\n const toggleBimToMap = React.useCallback(\r\n (bimFile: DbFile) => {\r\n dispatchToggleBimToMap(bimDispatch, bimFile, building);\r\n\r\n },\r\n [\r\n building,\r\n bimDispatch\r\n ]\r\n );\r\n\r\n const onOpenBimViewer = () => {\r\n buildingsDispatch({ type: \"SET-CURRENT-BUILDING\", payload: { building } });\r\n changeViewer(ViewerNames.bim);\r\n setSelectedItem(building);\r\n }\r\n\r\n const buildingFiles = React.useMemo(\r\n () => files || [],\r\n [files],\r\n );\r\n\r\n const bimFiles = React.useMemo(\r\n () => buildingFiles.filter((file: DbFile) => file.type === \"bim-file\" || file.extension === \"frag\"\r\n ),\r\n [buildingFiles],\r\n )\r\n\r\n const pcFiles = React.useMemo(\r\n () => buildingFiles.filter((file: DbFile) => file.type === 'point-cloud-file' || ['laz', 'las'].includes(file.extension || '')),\r\n [buildingFiles],\r\n )\r\n\r\n const buildingButtons: Tool[] = React.useMemo(\r\n () => [\r\n {\r\n id: \"map-compare-buildings\",\r\n icon: LR.Columns3,\r\n title: t('compareTitle'),\r\n component: Compare,\r\n disabled: !ability.can('read', 'Building')\r\n },\r\n {\r\n id: \"open-building-page\",\r\n icon: LR.Building2,\r\n title: t('openBIMTitle'),\r\n onClick: () => {\r\n\r\n changeViewer(ViewerNames.buildings);\r\n setSelectedItem(building);\r\n setView(\"detail\");\r\n\r\n },\r\n disabled: !ability.can('read', 'Building')\r\n },\r\n {\r\n id: \"open-bim-viewer\",\r\n icon: LR.Box,\r\n title: t('OpenBIMViewerTitle'),\r\n onClick: onOpenBimViewer,\r\n disabled: !ability.can('read', 'File')\r\n },\r\n {\r\n id: 'open-pointcloud',\r\n title: t('openPointCloudTitle'),\r\n icon: LR.Grip,\r\n onClick: () => changeViewer(ViewerNames.pointcloud),\r\n disabled: pcFiles.length === 0 || !ability.can('read', 'File')\r\n },\r\n {\r\n id: \"map-add-file\",\r\n icon: isUploading\r\n ? LR.Loader\r\n : LR.FilePlus,\r\n title: t('addFileTitle'),\r\n onClick: triggerFileInput,\r\n disabled: !ability.can('create', 'File')\r\n },\r\n ],\r\n [\r\n changeViewer,\r\n building,\r\n setSelectedItem,\r\n setView,\r\n isUploading,\r\n triggerFileInput\r\n ]\r\n );\r\n\r\n const onLoadBIM = React.useCallback(\r\n (file: DbFile = null) => {\r\n if (bimFiles.length === 0) return;\r\n toggleBimToMap(bimFiles[0]);\r\n },\r\n [\r\n bimFiles,\r\n toggleBimToMap\r\n ]\r\n );\r\n\r\n const handleEditClick = (fileName: string) => {\r\n bimDispatch({\r\n type: \"EDIT_BIM_MODEL_BY_NAME\",\r\n payload: { editingBimModel: fileName }\r\n });\r\n\r\n onCloseAction();\r\n }\r\n\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Hidden file input */}\r\n <input\r\n onChange={(e) => handleFileUpload(e.target.files?.[0] || null)}\r\n ref={fileInputRef}\r\n style={{ \"display\": \"none\" }}\r\n type=\"file\"\r\n />\r\n\r\n {/* BIM Controls */}\r\n {!isError &&\r\n <div className=\"flex items-center space-x-2\">\r\n {isLoading\r\n ? <>\r\n <Skeleton className=\"h-4 w-20\" />\r\n\r\n <Skeleton className=\"h-6 w-10\" />\r\n </>\r\n : (\r\n <div className=\"flex items-center justify-between w-full\">\r\n {bimFiles.length > 1 ? (\r\n <div className=\"flex items-center space-x-2\">\r\n <Label className=\"font-semibold\" htmlFor=\"bim-file-dropdown\">\r\n {t('selectBimLabel')}\r\n </Label>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" id=\"bim-file-dropdown\">\r\n {bimModelsAddedToMap.length > 0\r\n ? `${bimModelsAddedToMap.filter(model => model.bimFile.attachedFilesBuildingId === buildingId).length} ${t('filesSelected')}`\r\n : t('selectFiles')\r\n }\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent>\r\n {bimFiles.map((file: DbFile) => {\r\n const isSelected = bimModelsAddedToMap.some(model => model.bimFile.name === file.name);\r\n return (\r\n <DropdownMenuItem\r\n key={file.name}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n toggleBimToMap(file);\r\n }}\r\n className=\"flex items-center justify-between cursor-pointer\"\r\n >\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={isSelected}\r\n onClick={(e) => e.stopPropagation()}\r\n onCheckedChange={() => {\r\n toggleBimToMap(file);\r\n }}\r\n />\r\n <span>{file.name}</span>\r\n </div>\r\n {isSelected && (\r\n <Button\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleEditClick(file.name);\r\n }}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 w-6 p-0\"\r\n title={t('editBimButton')}\r\n >\r\n <LR.LocationEdit className=\"h-3 w-3\" />\r\n </Button>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center space-x-2\">\r\n <Label\r\n className={`font-semibold ${bimFiles.length === 0 ? 'text-muted-foreground' : ''}`}\r\n htmlFor=\"show-bim\"\r\n >\r\n {bimAdded ? t('hideBIM') : t('showBIM')}\r\n </Label>\r\n <Switch\r\n id=\"show-bim\"\r\n checked={bimFiles.length === 1 && bimModelsAddedToMap.some(model => model.bimFile.name === bimFiles[0]?.name)}\r\n disabled={bimFiles.length === 0 || !ability.can('read', 'File')}\r\n onCheckedChange={() => onLoadBIM()}\r\n />\r\n </div>\r\n )}\r\n {bimFiles.length === 1 && bimModelsAddedToMap.some(model => model.building.id === buildingId) && (() => {\r\n const selectedModel = bimModelsAddedToMap.find(model => model.building.id === buildingId);\r\n console.log('selectedModel', selectedModel);\r\n return true ? (\r\n <Button\r\n onClick={() => handleEditClick(selectedModel.bimFile.name)}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n title={t('editBimButton')}\r\n disabled={!ability.can('update', 'File')}\r\n >\r\n <LR.LocationEdit className=\"h-4 w-4\" />\r\n </Button>\r\n ) : null;\r\n })()}\r\n </div>\r\n )\r\n }\r\n </div>}\r\n\r\n {/* Tool Buttons */}\r\n <div className=\"flex items-center gap-3\">\r\n {isLoading\r\n ? Array.from({ \"length\": 4 }).map((_, index) => (<Skeleton\r\n key={index}\r\n className=\"w-8 h-8 rounded-sm\"\r\n />),)\r\n : (!isError && building ? (\r\n buildingButtons.map((button) => {\r\n if (button.component) {\r\n const ButtonComponent = button.component\r\n const shouldAnimateSpin = button.id === 'map-add-file' && isUploading\r\n return (\r\n <div\r\n key={button.id}\r\n className={`w-8 h-8 rounded-sm border-2 border-gray-200 inline-flex justify-center items-center ${shouldAnimateSpin ? 'animate-spin' : ''}`}\r\n >\r\n <ButtonComponent tool={button} building={building} />\r\n </div>\r\n )\r\n }\r\n return (\r\n <Button\r\n key={button.id}\r\n variant=\"ghost\"\r\n className=\"w-8 h-8 rounded-sm border-2 border-gray-200 inline-flex justify-center items-center\"\r\n aria-label={button.title}\r\n onClick={button.onClick}\r\n title={button.title}\r\n disabled={button.disabled}\r\n >\r\n <button.icon className={`w-6 h-6 ${button.id === 'map-add-file' && isUploading ? 'animate-spin' : ''}`} />\r\n </Button>\r\n )\r\n })\r\n ) : null)}\r\n </div>\r\n </div>\r\n );\r\n\r\n}\r\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@collabdt/core",
3
- "version": "0.0.47",
3
+ "version": "0.0.48",
4
4
  "description": "CDT Core contains all the core technology for your CDT platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",