@collabdt/core 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
  2. package/dist/core/components/authentication/ForgotPassword.js +0 -1
  3. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  4. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts +12 -2
  5. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  6. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +137 -139
  7. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  8. package/dist/core/components/ui/Comments/Comment.d.ts +18 -1
  9. package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
  10. package/dist/core/components/ui/Comments/Comment.js +94 -23
  11. package/dist/core/components/ui/Comments/Comment.js.map +1 -1
  12. package/dist/core/components/ui/Comments/CommentActionButtons.d.ts +38 -0
  13. package/dist/core/components/ui/Comments/CommentActionButtons.d.ts.map +1 -0
  14. package/dist/core/components/ui/Comments/CommentActionButtons.js +134 -0
  15. package/dist/core/components/ui/Comments/CommentActionButtons.js.map +1 -0
  16. package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
  17. package/dist/core/components/ui/Comments/CommentInput.js +5 -2
  18. package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
  19. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  20. package/dist/core/components/ui/Comments/CommentsSection.js +86 -42
  21. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  22. package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
  23. package/dist/core/components/ui/Comments/commentUtils.js +2 -1
  24. package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
  25. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
  26. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js +0 -1
  27. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
  28. package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
  29. package/dist/core/components/ui/InfoSidebar/Container.js +16 -12
  30. package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
  31. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +1 -2
  32. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  33. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +66 -94
  34. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  35. package/dist/core/components/ui/Sensors/Sensor.d.ts +16 -3
  36. package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
  37. package/dist/core/components/ui/Sensors/Sensor.js +76 -37
  38. package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
  39. package/dist/core/components/ui/Sensors/SensorChart.d.ts +12 -2
  40. package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
  41. package/dist/core/components/ui/Sensors/SensorChart.js +49 -12
  42. package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
  43. package/dist/core/components/ui/Sensors/SensorDetailDialog.d.ts +9 -0
  44. package/dist/core/components/ui/Sensors/SensorDetailDialog.d.ts.map +1 -0
  45. package/dist/core/components/ui/Sensors/SensorDetailDialog.js +128 -0
  46. package/dist/core/components/ui/Sensors/SensorDetailDialog.js.map +1 -0
  47. package/dist/core/components/ui/Sensors/SensorInput.d.ts +6 -1
  48. package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
  49. package/dist/core/components/ui/Sensors/SensorInput.js +94 -9
  50. package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
  51. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts +3 -1
  52. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  53. package/dist/core/components/ui/Sensors/SensorTagsSection.js +4 -1
  54. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  55. package/dist/core/components/ui/Sensors/SensorsSection.d.ts +1 -3
  56. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  57. package/dist/core/components/ui/Sensors/SensorsSection.js +33 -10
  58. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  59. package/dist/core/components/ui/Sensors/TimeZoneSelect.d.ts +7 -0
  60. package/dist/core/components/ui/Sensors/TimeZoneSelect.d.ts.map +1 -0
  61. package/dist/core/components/ui/Sensors/TimeZoneSelect.js +56 -0
  62. package/dist/core/components/ui/Sensors/TimeZoneSelect.js.map +1 -0
  63. package/dist/core/components/ui/Sensors/sensorData.d.ts +42 -0
  64. package/dist/core/components/ui/Sensors/sensorData.d.ts.map +1 -0
  65. package/dist/core/components/ui/Sensors/sensorData.js +118 -0
  66. package/dist/core/components/ui/Sensors/sensorData.js.map +1 -0
  67. package/dist/core/components/ui/Sensors/sensorRange.d.ts +24 -0
  68. package/dist/core/components/ui/Sensors/sensorRange.d.ts.map +1 -0
  69. package/dist/core/components/ui/Sensors/sensorRange.js +34 -0
  70. package/dist/core/components/ui/Sensors/sensorRange.js.map +1 -0
  71. package/dist/core/components/ui/Sensors/useSensorSeries.d.ts +15 -0
  72. package/dist/core/components/ui/Sensors/useSensorSeries.d.ts.map +1 -0
  73. package/dist/core/components/ui/Sensors/useSensorSeries.js +63 -0
  74. package/dist/core/components/ui/Sensors/useSensorSeries.js.map +1 -0
  75. package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
  76. package/dist/core/components/ui/Sidebar.js +27 -4
  77. package/dist/core/components/ui/Sidebar.js.map +1 -1
  78. package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
  79. package/dist/core/components/ui/ToolbarButton.js +0 -1
  80. package/dist/core/components/ui/ToolbarButton.js.map +1 -1
  81. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
  82. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js +0 -2
  83. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
  84. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
  85. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js +0 -10
  86. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
  87. package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
  88. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js +0 -1
  89. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
  90. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
  91. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js +0 -1
  92. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.map +1 -1
  93. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
  94. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js +0 -1
  95. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
  96. package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
  97. package/dist/core/components/viewers/Data/utils/filterHelper.js +0 -2
  98. package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
  99. package/dist/core/components/viewers/Viewer.js +1 -1
  100. package/dist/core/components/viewers/Viewer.js.map +1 -1
  101. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
  102. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js +0 -3
  103. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
  104. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  105. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +1 -7
  106. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  107. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  108. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js +1 -9
  109. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  110. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +1 -3
  111. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
  112. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js +2 -2
  113. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
  114. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
  115. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js +4 -3
  116. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
  117. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +1 -1
  118. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
  119. package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
  120. package/dist/core/components/viewers/bim/src/ClippingPlane.js +0 -1
  121. package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
  122. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts +1 -2
  123. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  124. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +25 -2
  125. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  126. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts +16 -10
  127. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
  128. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js +26 -6
  129. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
  130. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts +2 -0
  131. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts.map +1 -0
  132. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js +5 -0
  133. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js.map +1 -0
  134. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts +8 -1
  135. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
  136. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +15 -3
  137. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  138. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts +44 -0
  139. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts.map +1 -0
  140. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js +77 -0
  141. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js.map +1 -0
  142. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts +3 -0
  143. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts.map +1 -0
  144. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js +5 -0
  145. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js.map +1 -0
  146. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.d.ts +33 -0
  147. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.d.ts.map +1 -0
  148. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.js +90 -0
  149. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.js.map +1 -0
  150. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
  151. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js +2 -2
  152. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
  153. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts +7 -1
  154. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
  155. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js +50 -73
  156. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
  157. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts +7 -1
  158. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
  159. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +39 -11
  160. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
  161. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
  162. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js +1 -5
  163. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
  164. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
  165. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js +0 -1
  166. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
  167. package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
  168. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js +1 -2
  169. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
  170. package/dist/core/components/viewers/map/MapViewer.d.ts +1 -2
  171. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  172. package/dist/core/components/viewers/map/MapViewer.js +2 -2
  173. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  174. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
  175. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js +11 -14
  176. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
  177. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
  178. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js +2 -5
  179. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
  180. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  181. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +0 -3
  182. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  183. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
  184. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js +0 -11
  185. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
  186. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
  187. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js +0 -1
  188. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
  189. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  190. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +0 -1
  191. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  192. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
  193. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js +0 -1
  194. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
  195. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts +1 -2
  196. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  197. package/dist/core/components/viewers/map/src/MapLayers/index.js +2 -2
  198. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  199. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
  200. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js +174 -53
  201. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
  202. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
  203. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js +2 -1
  204. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
  205. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts +1 -3
  206. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
  207. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +74 -42
  208. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
  209. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
  210. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js +4 -3
  211. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
  212. package/dist/core/components/viewers/map/src/MapSidebar/index.js +1 -1
  213. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  214. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  215. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js +0 -1
  216. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  217. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  218. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js +1 -5
  219. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  220. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +1 -3
  221. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
  222. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js +2 -2
  223. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
  224. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
  225. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js +1 -3
  226. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.map +1 -1
  227. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
  228. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js +0 -1
  229. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
  230. package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
  231. package/dist/core/components/viewers/map/utils/flyToEach.js +0 -1
  232. package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
  233. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
  234. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js +0 -2
  235. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
  236. package/dist/core/components/viewers/shared/markers/BimMarkerCluster.d.ts +19 -0
  237. package/dist/core/components/viewers/shared/markers/BimMarkerCluster.d.ts.map +1 -0
  238. package/dist/core/components/viewers/shared/markers/BimMarkerCluster.js +108 -0
  239. package/dist/core/components/viewers/shared/markers/BimMarkerCluster.js.map +1 -0
  240. package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.d.ts +24 -0
  241. package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.d.ts.map +1 -0
  242. package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.js +27 -0
  243. package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.js.map +1 -0
  244. package/dist/core/components/viewers/shared/markers/types.d.ts +66 -0
  245. package/dist/core/components/viewers/shared/markers/types.d.ts.map +1 -0
  246. package/dist/core/components/viewers/shared/markers/types.js +1 -0
  247. package/dist/core/components/viewers/shared/markers/types.js.map +1 -0
  248. package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.d.ts +22 -0
  249. package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.d.ts.map +1 -0
  250. package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.js +233 -0
  251. package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.js.map +1 -0
  252. package/dist/core/hooks/comments/comments.d.ts +11 -0
  253. package/dist/core/hooks/comments/comments.d.ts.map +1 -1
  254. package/dist/core/hooks/comments/comments.js +3 -1
  255. package/dist/core/hooks/comments/comments.js.map +1 -1
  256. package/dist/core/hooks/comments/createCommentHooks.d.ts +11 -0
  257. package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
  258. package/dist/core/hooks/comments/createCommentHooks.js +30 -1
  259. package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
  260. package/dist/core/hooks/files/files.d.ts.map +1 -1
  261. package/dist/core/hooks/files/files.js +0 -1
  262. package/dist/core/hooks/files/files.js.map +1 -1
  263. package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts +30 -0
  264. package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts.map +1 -0
  265. package/dist/core/hooks/ui/useResizableSidebarWidth.js +75 -0
  266. package/dist/core/hooks/ui/useResizableSidebarWidth.js.map +1 -0
  267. package/dist/core/i18n/messages/en.json +10 -1
  268. package/dist/core/i18n/messages/es.json +11 -2
  269. package/dist/core/i18n/messages/fr.json +11 -2
  270. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  271. package/dist/core/store/AppConfig/context.js +4 -1
  272. package/dist/core/store/AppConfig/context.js.map +1 -1
  273. package/dist/core/store/AppConfig/reducer.d.ts +10 -0
  274. package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
  275. package/dist/core/store/AppConfig/reducer.js +10 -0
  276. package/dist/core/store/AppConfig/reducer.js.map +1 -1
  277. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  278. package/dist/core/store/Datasets/reducer.js +0 -2
  279. package/dist/core/store/Datasets/reducer.js.map +1 -1
  280. package/dist/core/store/Files/reducer.js +0 -1
  281. package/dist/core/store/Files/reducer.js.map +1 -1
  282. package/dist/core/store/Menus/context.d.ts.map +1 -1
  283. package/dist/core/store/Menus/context.js +8 -2
  284. package/dist/core/store/Menus/context.js.map +1 -1
  285. package/dist/core/store/Menus/reducer.d.ts +65 -1
  286. package/dist/core/store/Menus/reducer.d.ts.map +1 -1
  287. package/dist/core/store/Menus/reducer.js +39 -3
  288. package/dist/core/store/Menus/reducer.js.map +1 -1
  289. package/dist/core/utils/markerUtils.d.ts +10 -0
  290. package/dist/core/utils/markerUtils.d.ts.map +1 -1
  291. package/dist/core/utils/markerUtils.js +9 -1
  292. package/dist/core/utils/markerUtils.js.map +1 -1
  293. package/dist/core/utils/memcache.d.ts.map +1 -1
  294. package/dist/core/utils/memcache.js +0 -7
  295. package/dist/core/utils/memcache.js.map +1 -1
  296. package/dist/core/utils/timeUtils.d.ts +24 -1
  297. package/dist/core/utils/timeUtils.d.ts.map +1 -1
  298. package/dist/core/utils/timeUtils.js +52 -3
  299. package/dist/core/utils/timeUtils.js.map +1 -1
  300. package/package.json +4 -1
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { useIsMobile } from "./use-mobile";
4
+ const MIN_SIDEBAR_WIDTH = 410;
5
+ const MAX_SIDEBAR_WIDTH = 720;
6
+ const DEFAULT_SIDEBAR_WIDTH = MIN_SIDEBAR_WIDTH;
7
+ const SIDEBAR_WIDTH_STORAGE_KEY = "cdt:sidebar-width";
8
+ function clampSidebarWidth(width) {
9
+ if (Number.isNaN(width)) return DEFAULT_SIDEBAR_WIDTH;
10
+ return Math.min(MAX_SIDEBAR_WIDTH, Math.max(MIN_SIDEBAR_WIDTH, width));
11
+ }
12
+ function readStoredSidebarWidth() {
13
+ if (typeof window === "undefined") return DEFAULT_SIDEBAR_WIDTH;
14
+ try {
15
+ const raw = window.localStorage.getItem(SIDEBAR_WIDTH_STORAGE_KEY);
16
+ if (raw === null) return DEFAULT_SIDEBAR_WIDTH;
17
+ const parsed = Number.parseFloat(raw);
18
+ if (!Number.isFinite(parsed)) return DEFAULT_SIDEBAR_WIDTH;
19
+ return clampSidebarWidth(parsed);
20
+ } catch (e) {
21
+ return DEFAULT_SIDEBAR_WIDTH;
22
+ }
23
+ }
24
+ function writeStoredSidebarWidth(width) {
25
+ if (typeof window === "undefined") return;
26
+ try {
27
+ window.localStorage.setItem(SIDEBAR_WIDTH_STORAGE_KEY, String(clampSidebarWidth(width)));
28
+ } catch (e) {
29
+ }
30
+ }
31
+ function useResizableSidebarWidth() {
32
+ const isMobile = useIsMobile();
33
+ const canResize = !isMobile;
34
+ const [width, setWidth] = React.useState(DEFAULT_SIDEBAR_WIDTH);
35
+ const [isResizing, setIsResizing] = React.useState(false);
36
+ React.useEffect(() => {
37
+ setWidth(readStoredSidebarWidth());
38
+ }, []);
39
+ const startResize = React.useCallback(
40
+ (e) => {
41
+ if (!canResize) return;
42
+ e.preventDefault();
43
+ setIsResizing(true);
44
+ const startX = e.clientX;
45
+ const startWidth = width;
46
+ const onMove = (ev) => {
47
+ setWidth(clampSidebarWidth(startWidth + (ev.clientX - startX)));
48
+ };
49
+ const onUp = () => {
50
+ setIsResizing(false);
51
+ window.removeEventListener("pointermove", onMove);
52
+ window.removeEventListener("pointerup", onUp);
53
+ setWidth((current) => {
54
+ writeStoredSidebarWidth(current);
55
+ return current;
56
+ });
57
+ };
58
+ window.addEventListener("pointermove", onMove);
59
+ window.addEventListener("pointerup", onUp);
60
+ },
61
+ [canResize, width]
62
+ );
63
+ return { width, isResizing, canResize, startResize };
64
+ }
65
+ export {
66
+ DEFAULT_SIDEBAR_WIDTH,
67
+ MAX_SIDEBAR_WIDTH,
68
+ MIN_SIDEBAR_WIDTH,
69
+ SIDEBAR_WIDTH_STORAGE_KEY,
70
+ clampSidebarWidth,
71
+ readStoredSidebarWidth,
72
+ useResizableSidebarWidth,
73
+ writeStoredSidebarWidth
74
+ };
75
+ //# sourceMappingURL=useResizableSidebarWidth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/hooks/ui/useResizableSidebarWidth.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\nimport { useIsMobile } from './use-mobile'\r\n\r\n/** Minimum sidebar width. Equal to the previous fixed width, so it never shrinks below the old default. */\r\nexport const MIN_SIDEBAR_WIDTH = 410\r\n/** Maximum sidebar width, roughly half a laptop viewport. */\r\nexport const MAX_SIDEBAR_WIDTH = 720\r\nexport const DEFAULT_SIDEBAR_WIDTH = MIN_SIDEBAR_WIDTH\r\nexport const SIDEBAR_WIDTH_STORAGE_KEY = 'cdt:sidebar-width'\r\n\r\n/** Clamp to [MIN, MAX]. NaN falls back to the default; ±Infinity clamps to the bounds. */\r\nexport function clampSidebarWidth(width: number): number {\r\n if (Number.isNaN(width)) return DEFAULT_SIDEBAR_WIDTH\r\n return Math.min(MAX_SIDEBAR_WIDTH, Math.max(MIN_SIDEBAR_WIDTH, width))\r\n}\r\n\r\n/** SSR-safe read of the persisted width, clamped; falls back to the default on missing/corrupt values. */\r\nexport function readStoredSidebarWidth(): number {\r\n if (typeof window === 'undefined') return DEFAULT_SIDEBAR_WIDTH\r\n try {\r\n const raw = window.localStorage.getItem(SIDEBAR_WIDTH_STORAGE_KEY)\r\n if (raw === null) return DEFAULT_SIDEBAR_WIDTH\r\n const parsed = Number.parseFloat(raw)\r\n if (!Number.isFinite(parsed)) return DEFAULT_SIDEBAR_WIDTH\r\n return clampSidebarWidth(parsed)\r\n } catch {\r\n return DEFAULT_SIDEBAR_WIDTH\r\n }\r\n}\r\n\r\n/** SSR-safe persist of a clamped width. Swallows storage errors (private mode, quota). */\r\nexport function writeStoredSidebarWidth(width: number): void {\r\n if (typeof window === 'undefined') return\r\n try {\r\n window.localStorage.setItem(SIDEBAR_WIDTH_STORAGE_KEY, String(clampSidebarWidth(width)))\r\n } catch {\r\n // ignore: storage may be unavailable (private mode / quota)\r\n }\r\n}\r\n\r\nexport interface ResizableSidebarWidth {\r\n /** Current width in px. Only meaningful when `canResize` is true; mobile stays full-width via CSS. */\r\n width: number\r\n /** True while a drag is in progress (for cursor / no-select styling). */\r\n isResizing: boolean\r\n /** True on desktop only. Mobile is full-width and not resizable. */\r\n canResize: boolean\r\n /** Attach to the drag handle's onPointerDown. */\r\n startResize: (e: React.PointerEvent) => void\r\n}\r\n\r\n/**\r\n * Drives a user-resizable sidebar width on desktop. Width is restored from and persisted to\r\n * localStorage, clamped to [MIN_SIDEBAR_WIDTH, MAX_SIDEBAR_WIDTH]. On mobile (`useIsMobile`)\r\n * resizing is disabled and the sidebar is expected to render full-width via CSS.\r\n */\r\nexport function useResizableSidebarWidth(): ResizableSidebarWidth {\r\n const isMobile = useIsMobile()\r\n const canResize = !isMobile\r\n\r\n const [width, setWidth] = React.useState<number>(DEFAULT_SIDEBAR_WIDTH)\r\n const [isResizing, setIsResizing] = React.useState(false)\r\n\r\n // Hydrate from storage after mount (avoids SSR/client mismatch on first paint).\r\n React.useEffect(() => {\r\n setWidth(readStoredSidebarWidth())\r\n }, [])\r\n\r\n const startResize = React.useCallback(\r\n (e: React.PointerEvent) => {\r\n if (!canResize) return\r\n e.preventDefault()\r\n setIsResizing(true)\r\n\r\n const startX = e.clientX\r\n const startWidth = width\r\n\r\n const onMove = (ev: PointerEvent) => {\r\n setWidth(clampSidebarWidth(startWidth + (ev.clientX - startX)))\r\n }\r\n const onUp = () => {\r\n setIsResizing(false)\r\n window.removeEventListener('pointermove', onMove)\r\n window.removeEventListener('pointerup', onUp)\r\n // Persist the final width; read the latest via the functional updater.\r\n setWidth(current => {\r\n writeStoredSidebarWidth(current)\r\n return current\r\n })\r\n }\r\n\r\n window.addEventListener('pointermove', onMove)\r\n window.addEventListener('pointerup', onUp)\r\n },\r\n [canResize, width]\r\n )\r\n\r\n return { width, isResizing, canResize, startResize }\r\n}\r\n"],"mappings":";AAKA,YAAY,WAAW;AAEvB,SAAS,mBAAmB;AAGrB,MAAM,oBAAoB;AAE1B,MAAM,oBAAoB;AAC1B,MAAM,wBAAwB;AAC9B,MAAM,4BAA4B;AAGlC,SAAS,kBAAkB,OAAuB;AACvD,MAAI,OAAO,MAAM,KAAK,EAAG,QAAO;AAChC,SAAO,KAAK,IAAI,mBAAmB,KAAK,IAAI,mBAAmB,KAAK,CAAC;AACvE;AAGO,SAAS,yBAAiC;AAC/C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,yBAAyB;AACjE,QAAI,QAAQ,KAAM,QAAO;AACzB,UAAM,SAAS,OAAO,WAAW,GAAG;AACpC,QAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,WAAO,kBAAkB,MAAM;AAAA,EACjC,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,wBAAwB,OAAqB;AAC3D,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,WAAO,aAAa,QAAQ,2BAA2B,OAAO,kBAAkB,KAAK,CAAC,CAAC;AAAA,EACzF,SAAQ;AAAA,EAER;AACF;AAkBO,SAAS,2BAAkD;AAChE,QAAM,WAAW,YAAY;AAC7B,QAAM,YAAY,CAAC;AAEnB,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAiB,qBAAqB;AACtE,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AAGxD,QAAM,UAAU,MAAM;AACpB,aAAS,uBAAuB,CAAC;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,MAA0B;AACzB,UAAI,CAAC,UAAW;AAChB,QAAE,eAAe;AACjB,oBAAc,IAAI;AAElB,YAAM,SAAS,EAAE;AACjB,YAAM,aAAa;AAEnB,YAAM,SAAS,CAAC,OAAqB;AACnC,iBAAS,kBAAkB,cAAc,GAAG,UAAU,OAAO,CAAC;AAAA,MAChE;AACA,YAAM,OAAO,MAAM;AACjB,sBAAc,KAAK;AACnB,eAAO,oBAAoB,eAAe,MAAM;AAChD,eAAO,oBAAoB,aAAa,IAAI;AAE5C,iBAAS,aAAW;AAClB,kCAAwB,OAAO;AAC/B,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,aAAO,iBAAiB,eAAe,MAAM;AAC7C,aAAO,iBAAiB,aAAa,IAAI;AAAA,IAC3C;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AAEA,SAAO,EAAE,OAAO,YAAY,WAAW,YAAY;AACrD;","names":[]}
@@ -239,6 +239,7 @@
239
239
  "label": "Write a comment",
240
240
  "placeholder": "Enter your comment here...",
241
241
  "close": "Close",
242
+ "clickPlusHint": "Click the + to place your comment",
242
243
  "placeHelpTextMap": "Double click anywhere on the map to add comment",
243
244
  "placeHelpTextBim": "Double click anywhere on the model to add comment"
244
245
  },
@@ -261,6 +262,7 @@
261
262
  "attachments": "Attachments",
262
263
  "addAttachment": "Add attachment",
263
264
  "writeReply": "Write a reply...",
265
+ "doubleClickZoom": "Double click to zoom to comment",
264
266
  "position": "Position",
265
267
  "lastUpdated": "Last updated"
266
268
  },
@@ -1041,7 +1043,10 @@
1041
1043
  "placeSensorTooltipBim": "Double-click on the model to place the sensor",
1042
1044
  "selectType": "Select type",
1043
1045
  "selectFormat": "Select format",
1044
- "tags": "Tags"
1046
+ "tags": "Tags",
1047
+ "previewPoints": "data points",
1048
+ "previewNoData": "No data at this URL",
1049
+ "previewError": "Could not reach this URL"
1045
1050
  },
1046
1051
  "SensorLayers": {
1047
1052
  "sensorEdited": "Sensor edited",
@@ -1052,6 +1057,7 @@
1052
1057
  "addSensorTitle": "Add Sensor",
1053
1058
  "searchSensors": "Search sensors...",
1054
1059
  "editSensor": "Edit sensor",
1060
+ "expandSensor": "Expand",
1055
1061
  "sensorEdited": "Sensor edited",
1056
1062
  "deleteSensor": "Delete sensor",
1057
1063
  "sensorDeleted": "Sensor deleted",
@@ -1175,6 +1181,9 @@
1175
1181
  "toastSuccessUpdate": "Site updated successfully",
1176
1182
  "toastErrorUpdate": "Failed to update Site"
1177
1183
  },
1184
+ "InfoSidebar": {
1185
+ "resizeHandleLabel": "Resize sidebar"
1186
+ },
1178
1187
  "TabSelector": {
1179
1188
  "fileLabel": "File",
1180
1189
  "layersTitle": "Layers",
@@ -239,6 +239,7 @@
239
239
  "label": "Escribir un comentario",
240
240
  "placeholder": "Ingrese su comentario aquí...",
241
241
  "close": "Cerrar",
242
+ "clickPlusHint": "Haga clic en + para colocar su comentario",
242
243
  "placeHelpTextMap": "Haga doble clic en cualquier lugar del mapa para añadir un comentario",
243
244
  "placeHelpTextBim": "Haga doble clic en cualquier lugar del modelo para añadir un comentario"
244
245
  },
@@ -261,6 +262,7 @@
261
262
  "attachments": "Adjuntos",
262
263
  "addAttachment": "Añadir adjunto",
263
264
  "writeReply": "Escribir una respuesta...",
265
+ "doubleClickZoom": "Doble clic para acercar al comentario",
264
266
  "position": "Posición",
265
267
  "lastUpdated": "Última actualización"
266
268
  },
@@ -1041,7 +1043,10 @@
1041
1043
  "placeSensorTooltipBim": "Haga doble clic en el modelo para colocar el sensor",
1042
1044
  "selectType": "Seleccionar tipo",
1043
1045
  "selectFormat": "Seleccionar formato",
1044
- "tags": "Etiquetas"
1046
+ "tags": "Etiquetas",
1047
+ "previewPoints": "puntos de datos",
1048
+ "previewNoData": "No hay datos en esta URL",
1049
+ "previewError": "No se pudo acceder a esta URL"
1045
1050
  },
1046
1051
  "SensorLayers": {
1047
1052
  "sensorEdited": "Sensor editado",
@@ -1052,6 +1057,7 @@
1052
1057
  "addSensorTitle": "Añadir sensor",
1053
1058
  "searchSensors": "Buscar sensores...",
1054
1059
  "editSensor": "Editar sensor",
1060
+ "expandSensor": "Ampliar",
1055
1061
  "sensorEdited": "Sensor editado",
1056
1062
  "deleteSensor": "Eliminar sensor",
1057
1063
  "sensorDeleted": "Sensor eliminado",
@@ -1174,6 +1180,9 @@
1174
1180
  "toastSuccessUpdate": "Sitio actualizado con éxito",
1175
1181
  "toastErrorUpdate": "Error al actualizar el sitio"
1176
1182
  },
1183
+ "InfoSidebar": {
1184
+ "resizeHandleLabel": "Redimensionar la barra lateral"
1185
+ },
1177
1186
  "TabSelector": {
1178
1187
  "fileLabel": "Archivo",
1179
1188
  "layersTitle": "Capas",
@@ -1867,4 +1876,4 @@
1867
1876
  "uploadError": "Error al subir el archivo:",
1868
1877
  "unknownError": "Ocurrió un error desconocido"
1869
1878
  }
1870
- }
1879
+ }
@@ -239,6 +239,7 @@
239
239
  "label": "Écrire un commentaire",
240
240
  "placeholder": "Saisissez votre commentaire ici...",
241
241
  "close": "Fermer",
242
+ "clickPlusHint": "Cliquez sur + pour placer votre commentaire",
242
243
  "placeHelpTextMap": "Double-cliquez n’importe où sur la carte pour ajouter un commentaire",
243
244
  "placeHelpTextBim": "Double-cliquez sur le modèle pour ajouter un commentaire"
244
245
  },
@@ -261,6 +262,7 @@
261
262
  "attachments": "Pièces jointes",
262
263
  "addAttachment": "Ajouter une pièce jointe",
263
264
  "writeReply": "Écrire une réponse...",
265
+ "doubleClickZoom": "Double-cliquez pour zoomer sur le commentaire",
264
266
  "position": "Position",
265
267
  "lastUpdated": "Dernière mise à jour"
266
268
  },
@@ -1041,7 +1043,10 @@
1041
1043
  "placeSensorTooltipBim": "Double-cliquez sur le modèle pour placer le capteur",
1042
1044
  "selectType": "Sélectionner le type",
1043
1045
  "selectFormat": "Sélectionner le format",
1044
- "tags": "Étiquettes"
1046
+ "tags": "Étiquettes",
1047
+ "previewPoints": "points de données",
1048
+ "previewNoData": "Aucune donnée à cette URL",
1049
+ "previewError": "Impossible d'accéder à cette URL"
1045
1050
  },
1046
1051
  "SensorLayers": {
1047
1052
  "sensorEdited": "Capteur modifié",
@@ -1052,6 +1057,7 @@
1052
1057
  "addSensorTitle": "Ajouter un capteur",
1053
1058
  "searchSensors": "Rechercher des capteurs...",
1054
1059
  "editSensor": "Modifier le capteur",
1060
+ "expandSensor": "Agrandir",
1055
1061
  "sensorEdited": "Capteur modifié",
1056
1062
  "deleteSensor": "Supprimer le capteur",
1057
1063
  "sensorDeleted": "Capteur supprimé",
@@ -1174,6 +1180,9 @@
1174
1180
  "toastSuccessUpdate": "Site mis à jour avec succès",
1175
1181
  "toastErrorUpdate": "Échec de la mise à jour du site"
1176
1182
  },
1183
+ "InfoSidebar": {
1184
+ "resizeHandleLabel": "Redimensionner la barre latérale"
1185
+ },
1177
1186
  "TabSelector": {
1178
1187
  "fileLabel": "Fichier",
1179
1188
  "layersTitle": "Couches",
@@ -1867,4 +1876,4 @@
1867
1876
  "uploadError": "Erreur lors du téléversement du fichier :",
1868
1877
  "unknownError": "Erreur inconnue s'est produite"
1869
1878
  }
1870
- }
1879
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/core/store/AppConfig/context.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,cAAc,CAAA;IACzB,aAAa,EAAE,aAAa,CAAA;CAC7B,CAAA;AAkBD,eAAO,MAAM,gBAAgB;WACpB,gBAAgB;cACb,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;EAI1C,CAAA;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAAE,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAQlG,CAAA;AAED,eAAO,MAAM,mBAAmB;WAjBvB,gBAAgB;cACb,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAgB+B,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/core/store/AppConfig/context.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,cAAc,CAAA;IACzB,aAAa,EAAE,aAAa,CAAA;CAC7B,CAAA;AAoBD,eAAO,MAAM,gBAAgB;WACpB,gBAAgB;cACb,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;EAI1C,CAAA;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAAE,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAQlG,CAAA;AAED,eAAO,MAAM,mBAAmB;WAjBvB,gBAAgB;cACb,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAgB+B,CAAA"}
@@ -20,11 +20,14 @@ var __spreadValues = (a, b) => {
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
21
  import { jsx } from "react/jsx-runtime";
22
22
  import * as React from "react";
23
+ import { detectTimeZone } from "../../utils/timeUtils";
23
24
  import { AppConfigReducer } from "./reducer";
24
25
  const initialState = {
25
26
  appConfig: {
26
27
  organization: null,
27
- user: null
28
+ user: null,
29
+ displayTimeZone: detectTimeZone(),
30
+ displayTimeZoneUserSet: false
28
31
  },
29
32
  runtimeConfig: {}
30
33
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/store/AppConfig/context.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { AppConfigReducer } from './reducer'\r\n\r\nimport type { AppConfigActions, AppConfigState } from './reducer';\r\n\r\nexport type RuntimeConfig = {\r\n minioUrl?: string\r\n martinUrl?: string\r\n recaptchaSiteKey?: string\r\n pointcloudApiUrl?: string\r\n geocodeEarthApiKey?: string\r\n geocoderUrl?: string\r\n photonUrl?: string\r\n nominatimUrl?: string\r\n maptilerKey?: string\r\n}\r\n\r\ntype InitialStateType = {\r\n appConfig: AppConfigState\r\n runtimeConfig: RuntimeConfig\r\n}\r\n\r\nconst initialState: InitialStateType = {\r\n appConfig: {\r\n organization: null,\r\n user: null,\r\n },\r\n runtimeConfig: {},\r\n}\r\n\r\nconst reducer = (\r\n { appConfig, runtimeConfig }: InitialStateType,\r\n action: AppConfigActions,\r\n): InitialStateType => ({\r\n appConfig: AppConfigReducer(appConfig, action),\r\n runtimeConfig,\r\n})\r\n\r\nexport const AppConfigContext = React.createContext<{\r\n state: InitialStateType\r\n dispatch: React.Dispatch<AppConfigActions>\r\n}>({\r\n state: initialState,\r\n dispatch: () => null,\r\n})\r\n\r\nexport const AppConfigProvider: React.FC<React.PropsWithChildren<{ runtimeConfig?: RuntimeConfig }>> = ({ children, runtimeConfig = {} }) => {\r\n const [state, dispatch] = React.useReducer(reducer, { ...initialState, runtimeConfig })\r\n const value = React.useMemo(() => ({ state, dispatch }), [state])\r\n return (\r\n <AppConfigContext.Provider value={value}>\r\n {children}\r\n </AppConfigContext.Provider>\r\n )\r\n}\r\n\r\nexport const useAppConfigContext = () => React.useContext(AppConfigContext)"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwDI;AAnDJ,YAAY,WAAW;AAEvB,SAAS,wBAAwB;AAqBjC,MAAM,eAAiC;AAAA,EACrC,WAAW;AAAA,IACT,cAAc;AAAA,IACd,MAAM;AAAA,EACR;AAAA,EACA,eAAe,CAAC;AAClB;AAEA,MAAM,UAAU,CACd,EAAE,WAAW,cAAc,GAC3B,YACsB;AAAA,EACtB,WAAW,iBAAiB,WAAW,MAAM;AAAA,EAC7C;AACF;AAEO,MAAM,mBAAmB,MAAM,cAGnC;AAAA,EACD,OAAO;AAAA,EACP,UAAU,MAAM;AAClB,CAAC;AAEM,MAAM,oBAA0F,CAAC,EAAE,UAAU,gBAAgB,CAAC,EAAE,MAAM;AAC3I,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAAW,SAAS,iCAAK,eAAL,EAAmB,cAAc,EAAC;AACtF,QAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC;AAChE,SACE,oBAAC,iBAAiB,UAAjB,EAA0B,OACxB,UACH;AAEJ;AAEO,MAAM,sBAAsB,MAAM,MAAM,WAAW,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/store/AppConfig/context.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { detectTimeZone } from '../../utils/timeUtils'\r\n\r\nimport { AppConfigReducer } from './reducer'\r\n\r\nimport type { AppConfigActions, AppConfigState } from './reducer';\r\n\r\nexport type RuntimeConfig = {\r\n minioUrl?: string\r\n martinUrl?: string\r\n recaptchaSiteKey?: string\r\n pointcloudApiUrl?: string\r\n geocodeEarthApiKey?: string\r\n geocoderUrl?: string\r\n photonUrl?: string\r\n nominatimUrl?: string\r\n maptilerKey?: string\r\n}\r\n\r\ntype InitialStateType = {\r\n appConfig: AppConfigState\r\n runtimeConfig: RuntimeConfig\r\n}\r\n\r\nconst initialState: InitialStateType = {\r\n appConfig: {\r\n organization: null,\r\n user: null,\r\n displayTimeZone: detectTimeZone(),\r\n displayTimeZoneUserSet: false,\r\n },\r\n runtimeConfig: {},\r\n}\r\n\r\nconst reducer = (\r\n { appConfig, runtimeConfig }: InitialStateType,\r\n action: AppConfigActions,\r\n): InitialStateType => ({\r\n appConfig: AppConfigReducer(appConfig, action),\r\n runtimeConfig,\r\n})\r\n\r\nexport const AppConfigContext = React.createContext<{\r\n state: InitialStateType\r\n dispatch: React.Dispatch<AppConfigActions>\r\n}>({\r\n state: initialState,\r\n dispatch: () => null,\r\n})\r\n\r\nexport const AppConfigProvider: React.FC<React.PropsWithChildren<{ runtimeConfig?: RuntimeConfig }>> = ({ children, runtimeConfig = {} }) => {\r\n const [state, dispatch] = React.useReducer(reducer, { ...initialState, runtimeConfig })\r\n const value = React.useMemo(() => ({ state, dispatch }), [state])\r\n return (\r\n <AppConfigContext.Provider value={value}>\r\n {children}\r\n </AppConfigContext.Provider>\r\n )\r\n}\r\n\r\nexport const useAppConfigContext = () => React.useContext(AppConfigContext)"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4DI;AAvDJ,YAAY,WAAW;AAEvB,SAAS,sBAAsB;AAE/B,SAAS,wBAAwB;AAqBjC,MAAM,eAAiC;AAAA,EACrC,WAAW;AAAA,IACT,cAAc;AAAA,IACd,MAAM;AAAA,IACN,iBAAiB,eAAe;AAAA,IAChC,wBAAwB;AAAA,EAC1B;AAAA,EACA,eAAe,CAAC;AAClB;AAEA,MAAM,UAAU,CACd,EAAE,WAAW,cAAc,GAC3B,YACsB;AAAA,EACtB,WAAW,iBAAiB,WAAW,MAAM;AAAA,EAC7C;AACF;AAEO,MAAM,mBAAmB,MAAM,cAGnC;AAAA,EACD,OAAO;AAAA,EACP,UAAU,MAAM;AAClB,CAAC;AAEM,MAAM,oBAA0F,CAAC,EAAE,UAAU,gBAAgB,CAAC,EAAE,MAAM;AAC3I,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAAW,SAAS,iCAAK,eAAL,EAAmB,cAAc,EAAC;AACtF,QAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC;AAChE,SACE,oBAAC,iBAAiB,UAAjB,EAA0B,OACxB,UACH;AAEJ;AAEO,MAAM,sBAAsB,MAAM,MAAM,WAAW,gBAAgB;","names":[]}
@@ -3,11 +3,21 @@ import type { ActionMap } from '../ActionMap';
3
3
  interface AppConfigTypes {
4
4
  organization: Organization | null;
5
5
  user: User | null;
6
+ /** Display timezone for sensor time rendering (non-persisted). */
7
+ displayTimeZone: string;
8
+ /** True once the user picked a zone, so location defaults stop overriding it. */
9
+ displayTimeZoneUserSet: boolean;
6
10
  }
7
11
  export type AppConfigState = AppConfigTypes;
8
12
  export type AppConfigPayload = {
9
13
  ['SET_ORGANIZATION']: Pick<AppConfigTypes, 'organization'>;
10
14
  ['SET_USER']: Pick<AppConfigTypes, 'user'>;
15
+ ['SET_DISPLAY_TIME_ZONE']: {
16
+ displayTimeZone: string;
17
+ };
18
+ ['SET_DEFAULT_TIME_ZONE']: {
19
+ displayTimeZone: string;
20
+ };
11
21
  };
12
22
  export type AppConfigActions = ActionMap<AppConfigPayload>[keyof ActionMap<AppConfigPayload>];
13
23
  export declare const AppConfigReducer: (state: AppConfigState, action: AppConfigActions) => AppConfigTypes;
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/core/store/AppConfig/reducer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,UAAU,cAAc;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,kBAAkB,CAAC,EAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;IAC3D,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAElE,eAAO,MAAM,gBAAgB,GAAI,OAAO,cAAc,EAAE,QAAQ,gBAAgB,mBAkB/E,CAAA"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/core/store/AppConfig/reducer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,UAAU,cAAc;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,sBAAsB,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,kBAAkB,CAAC,EAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;IAC3D,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC,uBAAuB,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD,CAAC,uBAAuB,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAElE,eAAO,MAAM,gBAAgB,GAAI,OAAO,cAAc,EAAE,QAAQ,gBAAgB,mBA+B/E,CAAA"}
@@ -29,6 +29,16 @@ const AppConfigReducer = (state, action) => {
29
29
  return __spreadProps(__spreadValues({}, state), {
30
30
  user
31
31
  });
32
+ case "SET_DISPLAY_TIME_ZONE":
33
+ return __spreadProps(__spreadValues({}, state), {
34
+ displayTimeZone: action.payload.displayTimeZone,
35
+ displayTimeZoneUserSet: true
36
+ });
37
+ case "SET_DEFAULT_TIME_ZONE":
38
+ if (state.displayTimeZoneUserSet) return state;
39
+ return __spreadProps(__spreadValues({}, state), {
40
+ displayTimeZone: action.payload.displayTimeZone
41
+ });
32
42
  default:
33
43
  return state;
34
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/store/AppConfig/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Organization, User } from '../../types/dbTypes'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface AppConfigTypes {\r\n organization: Organization | null\r\n user: User | null\r\n}\r\n\r\nexport type AppConfigState = AppConfigTypes\r\n\r\nexport type AppConfigPayload = {\r\n ['SET_ORGANIZATION']: Pick<AppConfigTypes, 'organization'>\r\n ['SET_USER']: Pick<AppConfigTypes, 'user'>\r\n}\r\n\r\nexport type AppConfigActions\r\n = ActionMap<AppConfigPayload>[keyof ActionMap<AppConfigPayload>]\r\n\r\nexport const AppConfigReducer = (state: AppConfigState, action: AppConfigActions) => {\r\n switch (action.type) {\r\n case 'SET_ORGANIZATION':\r\n const { organization } = action.payload\r\n return {\r\n ...state,\r\n organization,\r\n }\r\n case 'SET_USER':\r\n const { user } = action.payload\r\n return {\r\n ...state,\r\n user,\r\n }\r\n default:\r\n\r\n return state\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBO,MAAM,mBAAmB,CAAC,OAAuB,WAA6B;AACnF,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,YAAM,EAAE,aAAa,IAAI,OAAO;AAChC,aAAO,iCACF,QADE;AAAA,QAEL;AAAA,MACF;AAAA,IACF,KAAK;AACH,YAAM,EAAE,KAAK,IAAI,OAAO;AACxB,aAAO,iCACF,QADE;AAAA,QAEL;AAAA,MACF;AAAA,IACF;AAEE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/store/AppConfig/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Organization, User } from '../../types/dbTypes'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface AppConfigTypes {\r\n organization: Organization | null\r\n user: User | null\r\n /** Display timezone for sensor time rendering (non-persisted). */\r\n displayTimeZone: string\r\n /** True once the user picked a zone, so location defaults stop overriding it. */\r\n displayTimeZoneUserSet: boolean\r\n}\r\n\r\nexport type AppConfigState = AppConfigTypes\r\n\r\nexport type AppConfigPayload = {\r\n ['SET_ORGANIZATION']: Pick<AppConfigTypes, 'organization'>\r\n ['SET_USER']: Pick<AppConfigTypes, 'user'>\r\n ['SET_DISPLAY_TIME_ZONE']: { displayTimeZone: string }\r\n ['SET_DEFAULT_TIME_ZONE']: { displayTimeZone: string }\r\n}\r\n\r\nexport type AppConfigActions\r\n = ActionMap<AppConfigPayload>[keyof ActionMap<AppConfigPayload>]\r\n\r\nexport const AppConfigReducer = (state: AppConfigState, action: AppConfigActions) => {\r\n switch (action.type) {\r\n case 'SET_ORGANIZATION':\r\n const { organization } = action.payload\r\n return {\r\n ...state,\r\n organization,\r\n }\r\n case 'SET_USER':\r\n const { user } = action.payload\r\n return {\r\n ...state,\r\n user,\r\n }\r\n case 'SET_DISPLAY_TIME_ZONE':\r\n return {\r\n ...state,\r\n displayTimeZone: action.payload.displayTimeZone,\r\n displayTimeZoneUserSet: true,\r\n }\r\n case 'SET_DEFAULT_TIME_ZONE':\r\n // Location-derived default: apply only until the user makes an explicit choice.\r\n if (state.displayTimeZoneUserSet) return state\r\n return {\r\n ...state,\r\n displayTimeZone: action.payload.displayTimeZone,\r\n }\r\n default:\r\n\r\n return state\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA2BO,MAAM,mBAAmB,CAAC,OAAuB,WAA6B;AACnF,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,YAAM,EAAE,aAAa,IAAI,OAAO;AAChC,aAAO,iCACF,QADE;AAAA,QAEL;AAAA,MACF;AAAA,IACF,KAAK;AACH,YAAM,EAAE,KAAK,IAAI,OAAO;AACxB,aAAO,iCACF,QADE;AAAA,QAEL;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,iCACF,QADE;AAAA,QAEL,iBAAiB,OAAO,QAAQ;AAAA,QAChC,wBAAwB;AAAA,MAC1B;AAAA,IACF,KAAK;AAEH,UAAI,MAAM,uBAAwB,QAAO;AACzC,aAAO,iCACF,QADE;AAAA,QAEL,iBAAiB,OAAO,QAAQ;AAAA,MAClC;AAAA,IACF;AAEE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/core/store/Datasets/reducer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,YAAY,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAE9C,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IACvD,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAEzD,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAE5D,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAA;IAC7B,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAA;IAC9B,CAAC,2BAA2B,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAE9D,CAAC,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,WAAW,CAAA;KAAG,CAAA;IAElE,CAAC,oBAAoB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAC,CAAA;IAC7E,CAAC,oBAAoB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAClE,CAAC,iBAAiB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,WAAW,CAAA;KAAE,CAAA;IAExF,CAAC,kBAAkB,CAAC,EAAE;QAAE,iBAAiB,EAAE,OAAO,EAAE,CAAA;KAAE,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,cAAc,GACtB,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;AAE9D,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,EAAE,QAAQ,cAAc,iBAoLzE,CAAA"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/core/store/Datasets/reducer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,YAAY,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAE9C,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IACvD,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAEzD,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAE5D,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAA;IAC7B,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAA;IAC9B,CAAC,2BAA2B,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAE9D,CAAC,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,WAAW,CAAA;KAAG,CAAA;IAElE,CAAC,oBAAoB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAC,CAAA;IAC7E,CAAC,oBAAoB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAClE,CAAC,iBAAiB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,WAAW,CAAA;KAAE,CAAA;IAExF,CAAC,kBAAkB,CAAC,EAAE;QAAE,iBAAiB,EAAE,OAAO,EAAE,CAAA;KAAE,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,cAAc,GACtB,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;AAE9D,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,EAAE,QAAQ,cAAc,iBAmLzE,CAAA"}
@@ -139,7 +139,6 @@ const DatasetReducer = (state, action) => {
139
139
  });
140
140
  case "SET_FIELD_COLOR":
141
141
  const { datasetName: dName, fieldName: fName, layerColor: lColor } = action.payload;
142
- console.log("SETTING FIELD COLOR IN REDUCER FOR DATASET:", dName, "FIELD:", fName, "TO COLOR:", lColor);
143
142
  return __spreadProps(__spreadValues({}, state), {
144
143
  addedDatasets: state.addedDatasets.map((dataset2) => {
145
144
  if (dataset2.name === dName) {
@@ -163,7 +162,6 @@ const DatasetReducer = (state, action) => {
163
162
  addedDatasets: reorderedDatasets
164
163
  });
165
164
  default:
166
- console.log("THIS FILE ACTION HASN'T BEEN IMPLEMENTED YET.");
167
165
  return state;
168
166
  }
169
167
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/store/Datasets/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Dataset, DatasetField, LayerColors } from '../../types/datasetTypes'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface DatasetsType {\r\n dataset: Dataset | null\r\n datasetId: string | null\r\n datasets: Dataset[]\r\n addedDatasets: Dataset[]\r\n orgRefreshNonce: number\r\n}\r\n\r\nexport type DatasetState = DatasetsType\r\n\r\nexport type DatasetPayload = {\r\n ['SET_DATASETS']: Pick<DatasetState, 'datasets'>\r\n ['ADD_DATASET']: Pick<DatasetState, 'dataset'>\r\n\r\n ['HIDE_DATASET_BY_ID']: Pick<DatasetState, 'datasetId'>\r\n ['UNHIDE_DATASET_BY_ID']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['ADD_DATASET_TO_MAP']: Pick<DatasetState, 'dataset'>\r\n ['REMOVE_DATASET_FROM_MAP']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['REMOVE_ALL_DATASETS']: void\r\n ['REFRESH_ORG_DATASETS']: void\r\n ['TOGGLE_DATASET_VISIBILITY']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['DATASET_COLOR']: { datasetId: string, layerColor: LayerColors }\r\n\r\n ['SET_DATASET_FIELDS']: { datasetName: string, datasetFields: DatasetField[]}\r\n ['SET_SELECTED_FIELD']: { datasetName: string, fieldName: string }\r\n ['SET_FIELD_COLOR']: { datasetName: string, fieldName: string, layerColor: LayerColors }\r\n\r\n ['REORDER_DATASETS']: { reorderedDatasets: Dataset[] }\r\n}\r\n\r\nexport type DatasetActions\r\n = ActionMap<DatasetPayload>[keyof ActionMap<DatasetPayload>]\r\n\r\nexport const DatasetReducer = (state: DatasetState, action: DatasetActions) => {\r\n switch (action.type) {\r\n // system or map or bim viewer file action\r\n case 'SET_DATASETS':\r\n const { datasets } = action.payload\r\n return {\r\n ...state,\r\n datasets: datasets,\r\n }\r\n case 'ADD_DATASET':\r\n const { dataset } = action.payload\r\n return {\r\n ...state,\r\n datasets: [...state.datasets, dataset],\r\n }\r\n case 'HIDE_DATASET_BY_ID':\r\n const { datasetId: datasetIdToHide } = action.payload\r\n return {\r\n ...state,\r\n datasets: state.datasets.map((dataset) => {\r\n return dataset.id == datasetIdToHide\r\n ? {\r\n ...dataset,\r\n visible: false,\r\n }\r\n : dataset\r\n }),\r\n }\r\n case 'UNHIDE_DATASET_BY_ID':\r\n const { datasetId: datasetIdToShow } = action.payload\r\n return {\r\n ...state,\r\n datasets: state.datasets.map((dataset) => {\r\n return dataset.id == datasetIdToShow\r\n ? {\r\n ...dataset,\r\n visible: true,\r\n }\r\n : dataset\r\n }),\r\n }\r\n\r\n case 'ADD_DATASET_TO_MAP':\r\n const { dataset: datasetToAdd } = action.payload\r\n const datasetAlreadyAdded = state.addedDatasets.some(\r\n d => d?.name === datasetToAdd.name,\r\n )\r\n\r\n const addedDatasets = datasetAlreadyAdded\r\n ? state.addedDatasets\r\n : (() => {\r\n const maxOrder = state.addedDatasets.reduce<number>((max, current) => {\r\n const order = current.order ?? -1\r\n return order > max ? order : max\r\n }, -1)\r\n\r\n const nextOrder = maxOrder + 1\r\n\r\n return [...state.addedDatasets, { ...datasetToAdd, order: nextOrder }]\r\n })()\r\n return {\r\n ...state,\r\n dataset: datasetToAdd,\r\n addedDatasets,\r\n }\r\n case 'REMOVE_DATASET_FROM_MAP':\r\n const datasetIdToRemove = action.payload.datasetId\r\n const remaining = state.addedDatasets.filter(dataset => dataset.id !== datasetIdToRemove)\r\n const sorted = remaining.sort((a, b) => (b.order ?? 0) - (a.order ?? 0))\r\n const maxOrder = sorted.length - 1\r\n const updatedAddedDatasets = sorted.map((dataset, index) => ({\r\n ...dataset,\r\n order: maxOrder - index\r\n }))\r\n return {\r\n ...state,\r\n addedDatasets: updatedAddedDatasets,\r\n }\r\n case 'REMOVE_ALL_DATASETS':\r\n return {\r\n ...state,\r\n addedDatasets: [],\r\n }\r\n case 'REFRESH_ORG_DATASETS':\r\n return {\r\n ...state,\r\n orgRefreshNonce: (state.orgRefreshNonce ?? 0) + 1,\r\n }\r\n case 'TOGGLE_DATASET_VISIBILITY': {\r\n const datasetId = action.payload.datasetId\r\n const updatedDatasets = state.addedDatasets.map((dataset) => {\r\n if (dataset.id === datasetId) {\r\n return { ...dataset, visible: dataset.visible === false ? true : false }\r\n }\r\n return dataset\r\n })\r\n return {\r\n ...state,\r\n addedDatasets: updatedDatasets,\r\n }\r\n }\r\n\r\n case 'DATASET_COLOR':\r\n const { datasetId, layerColor } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map((dataset) => {\r\n if (dataset.id === datasetId) {\r\n return {\r\n ...dataset,\r\n layerColor,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n\r\n case 'SET_DATASET_FIELDS':\r\n const { datasetName, datasetFields } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === datasetName) {\r\n return {\r\n ...dataset,\r\n fields: datasetFields,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n case 'SET_SELECTED_FIELD':\r\n const { datasetName: dsName, fieldName } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === dsName) {\r\n return {\r\n ...dataset,\r\n selectedFieldName: fieldName,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n case 'SET_FIELD_COLOR':\r\n const { datasetName: dName, fieldName: fName, layerColor: lColor } = action.payload\r\n console.log('SETTING FIELD COLOR IN REDUCER FOR DATASET:', dName, 'FIELD:', fName, 'TO COLOR:', lColor)\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === dName) {\r\n return {\r\n ...dataset,\r\n fields: dataset.fields.map(field => {\r\n if (field.name === fName) {\r\n return {\r\n ...field,\r\n layerColor: lColor,\r\n }\r\n }\r\n return field\r\n }),\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n\r\n case 'REORDER_DATASETS':\r\n const { reorderedDatasets } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: reorderedDatasets,\r\n }\r\n\r\n default:\r\n console.log('THIS FILE ACTION HASN\\'T BEEN IMPLEMENTED YET.')\r\n return state\r\n }\r\n}\r\n"],"mappings":"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","names":["dataset","maxOrder","_a","datasetId"]}
1
+ {"version":3,"sources":["../../../../src/core/store/Datasets/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Dataset, DatasetField, LayerColors } from '../../types/datasetTypes'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface DatasetsType {\r\n dataset: Dataset | null\r\n datasetId: string | null\r\n datasets: Dataset[]\r\n addedDatasets: Dataset[]\r\n orgRefreshNonce: number\r\n}\r\n\r\nexport type DatasetState = DatasetsType\r\n\r\nexport type DatasetPayload = {\r\n ['SET_DATASETS']: Pick<DatasetState, 'datasets'>\r\n ['ADD_DATASET']: Pick<DatasetState, 'dataset'>\r\n\r\n ['HIDE_DATASET_BY_ID']: Pick<DatasetState, 'datasetId'>\r\n ['UNHIDE_DATASET_BY_ID']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['ADD_DATASET_TO_MAP']: Pick<DatasetState, 'dataset'>\r\n ['REMOVE_DATASET_FROM_MAP']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['REMOVE_ALL_DATASETS']: void\r\n ['REFRESH_ORG_DATASETS']: void\r\n ['TOGGLE_DATASET_VISIBILITY']: Pick<DatasetState, 'datasetId'>\r\n\r\n ['DATASET_COLOR']: { datasetId: string, layerColor: LayerColors }\r\n\r\n ['SET_DATASET_FIELDS']: { datasetName: string, datasetFields: DatasetField[]}\r\n ['SET_SELECTED_FIELD']: { datasetName: string, fieldName: string }\r\n ['SET_FIELD_COLOR']: { datasetName: string, fieldName: string, layerColor: LayerColors }\r\n\r\n ['REORDER_DATASETS']: { reorderedDatasets: Dataset[] }\r\n}\r\n\r\nexport type DatasetActions\r\n = ActionMap<DatasetPayload>[keyof ActionMap<DatasetPayload>]\r\n\r\nexport const DatasetReducer = (state: DatasetState, action: DatasetActions) => {\r\n switch (action.type) {\r\n // system or map or bim viewer file action\r\n case 'SET_DATASETS':\r\n const { datasets } = action.payload\r\n return {\r\n ...state,\r\n datasets: datasets,\r\n }\r\n case 'ADD_DATASET':\r\n const { dataset } = action.payload\r\n return {\r\n ...state,\r\n datasets: [...state.datasets, dataset],\r\n }\r\n case 'HIDE_DATASET_BY_ID':\r\n const { datasetId: datasetIdToHide } = action.payload\r\n return {\r\n ...state,\r\n datasets: state.datasets.map((dataset) => {\r\n return dataset.id == datasetIdToHide\r\n ? {\r\n ...dataset,\r\n visible: false,\r\n }\r\n : dataset\r\n }),\r\n }\r\n case 'UNHIDE_DATASET_BY_ID':\r\n const { datasetId: datasetIdToShow } = action.payload\r\n return {\r\n ...state,\r\n datasets: state.datasets.map((dataset) => {\r\n return dataset.id == datasetIdToShow\r\n ? {\r\n ...dataset,\r\n visible: true,\r\n }\r\n : dataset\r\n }),\r\n }\r\n\r\n case 'ADD_DATASET_TO_MAP':\r\n const { dataset: datasetToAdd } = action.payload\r\n const datasetAlreadyAdded = state.addedDatasets.some(\r\n d => d?.name === datasetToAdd.name,\r\n )\r\n\r\n const addedDatasets = datasetAlreadyAdded\r\n ? state.addedDatasets\r\n : (() => {\r\n const maxOrder = state.addedDatasets.reduce<number>((max, current) => {\r\n const order = current.order ?? -1\r\n return order > max ? order : max\r\n }, -1)\r\n\r\n const nextOrder = maxOrder + 1\r\n\r\n return [...state.addedDatasets, { ...datasetToAdd, order: nextOrder }]\r\n })()\r\n return {\r\n ...state,\r\n dataset: datasetToAdd,\r\n addedDatasets,\r\n }\r\n case 'REMOVE_DATASET_FROM_MAP':\r\n const datasetIdToRemove = action.payload.datasetId\r\n const remaining = state.addedDatasets.filter(dataset => dataset.id !== datasetIdToRemove)\r\n const sorted = remaining.sort((a, b) => (b.order ?? 0) - (a.order ?? 0))\r\n const maxOrder = sorted.length - 1\r\n const updatedAddedDatasets = sorted.map((dataset, index) => ({\r\n ...dataset,\r\n order: maxOrder - index\r\n }))\r\n return {\r\n ...state,\r\n addedDatasets: updatedAddedDatasets,\r\n }\r\n case 'REMOVE_ALL_DATASETS':\r\n return {\r\n ...state,\r\n addedDatasets: [],\r\n }\r\n case 'REFRESH_ORG_DATASETS':\r\n return {\r\n ...state,\r\n orgRefreshNonce: (state.orgRefreshNonce ?? 0) + 1,\r\n }\r\n case 'TOGGLE_DATASET_VISIBILITY': {\r\n const datasetId = action.payload.datasetId\r\n const updatedDatasets = state.addedDatasets.map((dataset) => {\r\n if (dataset.id === datasetId) {\r\n return { ...dataset, visible: dataset.visible === false ? true : false }\r\n }\r\n return dataset\r\n })\r\n return {\r\n ...state,\r\n addedDatasets: updatedDatasets,\r\n }\r\n }\r\n\r\n case 'DATASET_COLOR':\r\n const { datasetId, layerColor } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map((dataset) => {\r\n if (dataset.id === datasetId) {\r\n return {\r\n ...dataset,\r\n layerColor,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n\r\n case 'SET_DATASET_FIELDS':\r\n const { datasetName, datasetFields } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === datasetName) {\r\n return {\r\n ...dataset,\r\n fields: datasetFields,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n case 'SET_SELECTED_FIELD':\r\n const { datasetName: dsName, fieldName } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === dsName) {\r\n return {\r\n ...dataset,\r\n selectedFieldName: fieldName,\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n case 'SET_FIELD_COLOR':\r\n const { datasetName: dName, fieldName: fName, layerColor: lColor } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: state.addedDatasets.map(dataset => {\r\n if (dataset.name === dName) {\r\n return {\r\n ...dataset,\r\n fields: dataset.fields.map(field => {\r\n if (field.name === fName) {\r\n return {\r\n ...field,\r\n layerColor: lColor,\r\n }\r\n }\r\n return field\r\n }),\r\n }\r\n }\r\n return dataset\r\n }),\r\n }\r\n\r\n case 'REORDER_DATASETS':\r\n const { reorderedDatasets } = action.payload\r\n return {\r\n ...state,\r\n addedDatasets: reorderedDatasets,\r\n }\r\n\r\n default:\r\n // ⚠️ Unhandled dataset action type is silently ignored (was logged as \"not implemented yet\")\r\n return state\r\n }\r\n}\r\n"],"mappings":"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","names":["dataset","maxOrder","_a","datasetId"]}
@@ -92,7 +92,6 @@ const FilesReducer = (state, action) => {
92
92
  )
93
93
  });
94
94
  default:
95
- console.log("THIS FILE ACTION HASN'T BEEN IMPLEMENTED YET.");
96
95
  return state;
97
96
  }
98
97
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/store/Files/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { FileType } from '../../types/files'\r\n\r\nimport type { DbFile } from '../../types/dbTypes'\r\nimport type { FileAction } from '../../types/global'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface FilesTypes {\r\n files: DbFile[]\r\n currentFile: DbFile | null\r\n mapFileIds: number[]\r\n isMapFileManagerOpen: boolean\r\n actionMode: FileAction | null\r\n editingFile: DbFile | null\r\n}\r\n\r\nexport type FilesState = FilesTypes\r\n\r\nexport type FilesPayload = {\r\n // system/map/model file action\r\n ['SET_FILES']: { files: DbFile[] }\r\n ['ADD_FILE']: { file: DbFile }\r\n ['ADD_FILES']: { files: DbFile[] }\r\n ['REMOVE_FILE']: { id: number }\r\n ['REMOVE_ALL_FILE']: { id: number }\r\n ['SET_CURRENT_FILE']: { currentFile: DbFile | null }\r\n ['SE_CURRENT_FILE']: { currentFile: DbFile | null }\r\n\r\n // map visibility — which files are currently shown on the map\r\n ['ADD_TO_MAP']: { id: number }\r\n ['REMOVE_FROM_MAP']: { id: number }\r\n ['ADD_ALL_TO_MAP']: { ids: number[] }\r\n ['REMOVE_ALL_FROM_MAP']: void\r\n\r\n // kept for legacy callers outside the map viewer\r\n ['HIDE_FILE_BY_ID']: { id: number }\r\n ['UNHIDE_FILE_BY_ID']: { id: number }\r\n ['TOGGLE_FILE_BY_ID']: { id: number }\r\n\r\n // file manager\r\n ['HIDE_MAP_FILE_MANAGER']: void\r\n ['SHOW_MAP_FILE_MANAGER']: void\r\n\r\n // map specific action (legacy)\r\n ['HIDE_ALL_MAP_FILES']: void\r\n ['UNHIDE_ALL_MAP_FILES']: void\r\n\r\n // model specific action\r\n ['HIDE_ALL_MODEL_FILES']: void\r\n ['UNHIDE_ALL_MODEL_FILES']: void\r\n\r\n ['SET_ACTION_MODE']: { actionMode: FileAction | null }\r\n ['EDIT_FILE']: { file: DbFile | null }\r\n ['UPDATE_FILE_COORDS']: { id: number; lat: number; lng: number; elevation?: number; rotation?: number; type?: string }\r\n}\r\n\r\nexport type FilesActions\r\n = ActionMap<FilesPayload>[keyof ActionMap<FilesPayload>]\r\n\r\nexport const FilesReducer = (state: FilesState, action: FilesActions) => {\r\n switch (action.type) {\r\n case 'SET_FILES': {\r\n // Also prune mapFileIds for any file that no longer exists (e.g. deleted via API)\r\n const incomingIds = new Set(action.payload.files.map(f => f.id))\r\n return {\r\n ...state,\r\n files: action.payload.files,\r\n mapFileIds: state.mapFileIds.filter(id => incomingIds.has(id)),\r\n }\r\n }\r\n\r\n case 'ADD_FILE':\r\n return { ...state, files: [...state.files, action.payload.file] }\r\n\r\n case 'ADD_FILES':\r\n return { ...state, files: [...state.files, ...action.payload.files] }\r\n\r\n case 'SET_CURRENT_FILE':\r\n case 'SE_CURRENT_FILE':\r\n return { ...state, currentFile: action.payload.currentFile }\r\n\r\n case 'REMOVE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.filter(f => f.id !== action.payload.id),\r\n currentFile: state.currentFile?.id === action.payload.id ? null : state.currentFile,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n // ── Map visibility ────────────────────────────────────────────────────────\r\n case 'ADD_TO_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.includes(action.payload.id)\r\n ? state.mapFileIds\r\n : [...state.mapFileIds, action.payload.id],\r\n }\r\n\r\n case 'REMOVE_FROM_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n case 'ADD_ALL_TO_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: [...new Set([...state.mapFileIds, ...action.payload.ids])],\r\n }\r\n\r\n case 'REMOVE_ALL_FROM_MAP':\r\n return { ...state, mapFileIds: [] }\r\n\r\n // ── Legacy visibility (kept for non-map callers) ──────────────────────────\r\n case 'HIDE_FILE_BY_ID':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n case 'UNHIDE_FILE_BY_ID':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.includes(action.payload.id)\r\n ? state.mapFileIds\r\n : [...state.mapFileIds, action.payload.id],\r\n }\r\n\r\n case 'HIDE_ALL_MAP_FILES':\r\n return { ...state, mapFileIds: [] }\r\n\r\n case 'UNHIDE_ALL_MAP_FILES':\r\n return {\r\n ...state,\r\n mapFileIds: [...new Set([\r\n ...state.mapFileIds,\r\n ...state.files.filter(f => f.type === 'map-file').map(f => f.id),\r\n ])],\r\n }\r\n\r\n // ── File manager ──────────────────────────────────────────────────────────\r\n case 'HIDE_MAP_FILE_MANAGER':\r\n return { ...state, isMapFileManagerOpen: false }\r\n\r\n case 'SHOW_MAP_FILE_MANAGER':\r\n return { ...state, isMapFileManagerOpen: true }\r\n\r\n case 'SET_ACTION_MODE':\r\n return { ...state, actionMode: action.payload.actionMode }\r\n\r\n case 'EDIT_FILE':\r\n return { ...state, editingFile: action.payload.file }\r\n\r\n case 'UPDATE_FILE_COORDS':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.id\r\n ? {\r\n ...f,\r\n lat: action.payload.lat,\r\n lng: action.payload.lng,\r\n ...(action.payload.elevation !== undefined && { elevation: action.payload.elevation }),\r\n ...(action.payload.rotation !== undefined && { rotation: action.payload.rotation }),\r\n ...(action.payload.type !== undefined && { type: action.payload.type }),\r\n }\r\n : f\r\n ),\r\n }\r\n\r\n default:\r\n console.log('THIS FILE ACTION HASN\\'T BEEN IMPLEMENTED YET.')\r\n return state\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/store/Files/reducer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { FileType } from '../../types/files'\r\n\r\nimport type { DbFile } from '../../types/dbTypes'\r\nimport type { FileAction } from '../../types/global'\r\nimport type { ActionMap } from '../ActionMap'\r\n\r\ninterface FilesTypes {\r\n files: DbFile[]\r\n currentFile: DbFile | null\r\n mapFileIds: number[]\r\n isMapFileManagerOpen: boolean\r\n actionMode: FileAction | null\r\n editingFile: DbFile | null\r\n}\r\n\r\nexport type FilesState = FilesTypes\r\n\r\nexport type FilesPayload = {\r\n // system/map/model file action\r\n ['SET_FILES']: { files: DbFile[] }\r\n ['ADD_FILE']: { file: DbFile }\r\n ['ADD_FILES']: { files: DbFile[] }\r\n ['REMOVE_FILE']: { id: number }\r\n ['REMOVE_ALL_FILE']: { id: number }\r\n ['SET_CURRENT_FILE']: { currentFile: DbFile | null }\r\n ['SE_CURRENT_FILE']: { currentFile: DbFile | null }\r\n\r\n // map visibility — which files are currently shown on the map\r\n ['ADD_TO_MAP']: { id: number }\r\n ['REMOVE_FROM_MAP']: { id: number }\r\n ['ADD_ALL_TO_MAP']: { ids: number[] }\r\n ['REMOVE_ALL_FROM_MAP']: void\r\n\r\n // kept for legacy callers outside the map viewer\r\n ['HIDE_FILE_BY_ID']: { id: number }\r\n ['UNHIDE_FILE_BY_ID']: { id: number }\r\n ['TOGGLE_FILE_BY_ID']: { id: number }\r\n\r\n // file manager\r\n ['HIDE_MAP_FILE_MANAGER']: void\r\n ['SHOW_MAP_FILE_MANAGER']: void\r\n\r\n // map specific action (legacy)\r\n ['HIDE_ALL_MAP_FILES']: void\r\n ['UNHIDE_ALL_MAP_FILES']: void\r\n\r\n // model specific action\r\n ['HIDE_ALL_MODEL_FILES']: void\r\n ['UNHIDE_ALL_MODEL_FILES']: void\r\n\r\n ['SET_ACTION_MODE']: { actionMode: FileAction | null }\r\n ['EDIT_FILE']: { file: DbFile | null }\r\n ['UPDATE_FILE_COORDS']: { id: number; lat: number; lng: number; elevation?: number; rotation?: number; type?: string }\r\n}\r\n\r\nexport type FilesActions\r\n = ActionMap<FilesPayload>[keyof ActionMap<FilesPayload>]\r\n\r\nexport const FilesReducer = (state: FilesState, action: FilesActions) => {\r\n switch (action.type) {\r\n case 'SET_FILES': {\r\n // Also prune mapFileIds for any file that no longer exists (e.g. deleted via API)\r\n const incomingIds = new Set(action.payload.files.map(f => f.id))\r\n return {\r\n ...state,\r\n files: action.payload.files,\r\n mapFileIds: state.mapFileIds.filter(id => incomingIds.has(id)),\r\n }\r\n }\r\n\r\n case 'ADD_FILE':\r\n return { ...state, files: [...state.files, action.payload.file] }\r\n\r\n case 'ADD_FILES':\r\n return { ...state, files: [...state.files, ...action.payload.files] }\r\n\r\n case 'SET_CURRENT_FILE':\r\n case 'SE_CURRENT_FILE':\r\n return { ...state, currentFile: action.payload.currentFile }\r\n\r\n case 'REMOVE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.filter(f => f.id !== action.payload.id),\r\n currentFile: state.currentFile?.id === action.payload.id ? null : state.currentFile,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n // ── Map visibility ────────────────────────────────────────────────────────\r\n case 'ADD_TO_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.includes(action.payload.id)\r\n ? state.mapFileIds\r\n : [...state.mapFileIds, action.payload.id],\r\n }\r\n\r\n case 'REMOVE_FROM_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n case 'ADD_ALL_TO_MAP':\r\n return {\r\n ...state,\r\n mapFileIds: [...new Set([...state.mapFileIds, ...action.payload.ids])],\r\n }\r\n\r\n case 'REMOVE_ALL_FROM_MAP':\r\n return { ...state, mapFileIds: [] }\r\n\r\n // ── Legacy visibility (kept for non-map callers) ──────────────────────────\r\n case 'HIDE_FILE_BY_ID':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.filter(id => id !== action.payload.id),\r\n }\r\n\r\n case 'UNHIDE_FILE_BY_ID':\r\n return {\r\n ...state,\r\n mapFileIds: state.mapFileIds.includes(action.payload.id)\r\n ? state.mapFileIds\r\n : [...state.mapFileIds, action.payload.id],\r\n }\r\n\r\n case 'HIDE_ALL_MAP_FILES':\r\n return { ...state, mapFileIds: [] }\r\n\r\n case 'UNHIDE_ALL_MAP_FILES':\r\n return {\r\n ...state,\r\n mapFileIds: [...new Set([\r\n ...state.mapFileIds,\r\n ...state.files.filter(f => f.type === 'map-file').map(f => f.id),\r\n ])],\r\n }\r\n\r\n // ── File manager ──────────────────────────────────────────────────────────\r\n case 'HIDE_MAP_FILE_MANAGER':\r\n return { ...state, isMapFileManagerOpen: false }\r\n\r\n case 'SHOW_MAP_FILE_MANAGER':\r\n return { ...state, isMapFileManagerOpen: true }\r\n\r\n case 'SET_ACTION_MODE':\r\n return { ...state, actionMode: action.payload.actionMode }\r\n\r\n case 'EDIT_FILE':\r\n return { ...state, editingFile: action.payload.file }\r\n\r\n case 'UPDATE_FILE_COORDS':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.id\r\n ? {\r\n ...f,\r\n lat: action.payload.lat,\r\n lng: action.payload.lng,\r\n ...(action.payload.elevation !== undefined && { elevation: action.payload.elevation }),\r\n ...(action.payload.rotation !== undefined && { rotation: action.payload.rotation }),\r\n ...(action.payload.type !== undefined && { type: action.payload.type }),\r\n }\r\n : f\r\n ),\r\n }\r\n\r\n default:\r\n // ⚠️ Unhandled file action type is silently ignored (was logged as \"not implemented yet\")\r\n return state\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/core/store/Menus/context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/core/store/Menus/context.tsx"],"names":[],"mappings":"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"}
@@ -18,11 +18,17 @@ const getInitialState = (pathname) => {
18
18
  selectedTab: "file",
19
19
  commentsVisibleInViewer: [],
20
20
  currentCommentId: null,
21
+ focusedCommentId: null,
22
+ focusRequestId: 0,
23
+ pendingCommentAction: null,
21
24
  sensorsVisibleInViewer: [],
22
25
  visibleSensorTypes: {},
23
26
  visibleSensorTags: {},
24
27
  currentSensorId: null,
25
- currentSensorTypeId: null
28
+ currentSensorTypeId: null,
29
+ focusedSensorId: null,
30
+ sensorFocusRequestId: 0,
31
+ pendingSensorAction: null
26
32
  }
27
33
  };
28
34
  };
@@ -30,7 +36,7 @@ const reducer = ({ menus }, action) => ({
30
36
  menus: MenusReducer(menus, action)
31
37
  });
32
38
  const MenusContext = React.createContext({
33
- state: { menus: { currentViewer: ViewerNames.map, rowsPerPage: 10, selectedTab: "file", commentsVisibleInViewer: [], currentCommentId: null, sensorsVisibleInViewer: [], visibleSensorTypes: {}, visibleSensorTags: {}, currentSensorId: null, currentSensorTypeId: null } },
39
+ state: { menus: { currentViewer: ViewerNames.map, rowsPerPage: 10, selectedTab: "file", commentsVisibleInViewer: [], currentCommentId: null, focusedCommentId: null, focusRequestId: 0, pendingCommentAction: null, sensorsVisibleInViewer: [], visibleSensorTypes: {}, visibleSensorTags: {}, currentSensorId: null, currentSensorTypeId: null, focusedSensorId: null, sensorFocusRequestId: 0, pendingSensorAction: null } },
34
40
  dispatch: () => null,
35
41
  isSidebarOpen: false,
36
42
  setIsSidebarOpen: () => null,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/store/Menus/context.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 { usePathname } from 'next/navigation'\r\nimport * as React from \"react\";\r\n\r\nimport { ViewerNames } from '../../types/dbTypes'\r\n\r\nimport { MenusReducer } from './reducer'\r\n\r\nimport type { MenusActions, MenusState } from './reducer';\r\nimport type { Building, Site, User, Infrastructure } from '../../types/dbTypes'\r\nimport type { FileRow } from '../../types/files'\r\n\r\ntype InitialStateType = {\r\n menus: MenusState\r\n}\r\n\r\n// Function to determine if path is an auth page\r\nconst isAuthPath = (pathname?: string): boolean => {\r\n if (!pathname) return false\r\n return pathname.includes('/auth/')\r\n}\r\n\r\n// Get initial state based on current path\r\nconst getInitialState = (pathname?: string): InitialStateType => {\r\n const isAuth = isAuthPath(pathname)\r\n return {\r\n menus: {\r\n currentViewer: isAuth ? ViewerNames.auth : ViewerNames.map,\r\n rowsPerPage: 10, // Default rows per page\r\n selectedTab: 'file',\r\n commentsVisibleInViewer: [],\r\n currentCommentId: null,\r\n sensorsVisibleInViewer: [],\r\n visibleSensorTypes: {},\r\n visibleSensorTags: {},\r\n currentSensorId: null,\r\n currentSensorTypeId: null,\r\n },\r\n }\r\n}\r\n\r\nconst reducer = ({ menus }: InitialStateType, action: MenusActions) => ({\r\n menus: MenusReducer(menus, action),\r\n})\r\n\r\nexport const MenusContext = React.createContext<{\r\n state: InitialStateType\r\n dispatch: React.Dispatch<MenusActions>\r\n isSidebarOpen: boolean\r\n setIsSidebarOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n view: 'table' | 'detail'\r\n setView: React.Dispatch<React.SetStateAction<'table' | 'detail'>>\r\n selectedItem: Building | null\r\n setSelectedItem: React.Dispatch<React.SetStateAction<Building | null>>\r\n selectedSite: Site | null\r\n setSelectedSite: React.Dispatch<React.SetStateAction<Site | null>>\r\n selectedInfrastructure: Infrastructure | null\r\n setSelectedInfrastructure: React.Dispatch<React.SetStateAction<Infrastructure | null>>\r\n selectedFile: FileRow | null\r\n setSelectedFile: React.Dispatch<React.SetStateAction<FileRow | null>>\r\n selectedUser: Partial<User> | null\r\n setSelectedUser: React.Dispatch<React.SetStateAction<Partial<User> | null>>\r\n isDatasetMenuOpen: boolean\r\n setIsDatasetMenuOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n isAuthPage?: boolean\r\n}>({\r\n state: { menus: { currentViewer: ViewerNames.map, rowsPerPage: 10, selectedTab: 'file', commentsVisibleInViewer: [], currentCommentId: null, sensorsVisibleInViewer: [], visibleSensorTypes: {}, visibleSensorTags: {}, currentSensorId: null, currentSensorTypeId: null } },\r\n dispatch: () => null,\r\n isSidebarOpen: false,\r\n setIsSidebarOpen: () => null,\r\n view: 'table',\r\n setView: () => null,\r\n selectedItem: null,\r\n setSelectedItem: () => null,\r\n selectedSite: null,\r\n setSelectedSite: () => null,\r\n selectedInfrastructure: null,\r\n setSelectedInfrastructure: () => null,\r\n selectedFile: null,\r\n setSelectedFile: () => null,\r\n selectedUser: null,\r\n setSelectedUser: () => null,\r\n isDatasetMenuOpen: false,\r\n setIsDatasetMenuOpen: () => null,\r\n isAuthPage: true,\r\n})\r\n\r\nexport const MenusProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\r\n const pathname = usePathname()\r\n const [state, dispatch] = React.useReducer(reducer, getInitialState(pathname))\r\n\r\n const [isSidebarOpen, setIsSidebarOpen] = React.useState(false)\r\n const [view, setView] = React.useState<'table' | 'detail'>('table')\r\n const [selectedItem, setSelectedItem] = React.useState<Building | null>(null)\r\n const [selectedSite, setSelectedSite] = React.useState<Site | null>(null)\r\n const [selectedInfrastructure, setSelectedInfrastructure] = React.useState<Infrastructure | null>(null)\r\n const [selectedFile, setSelectedFile] = React.useState<FileRow | null>(null)\r\n const [selectedUser, setSelectedUser] = React.useState<Partial<User> | null>(null)\r\n const [isDatasetMenuOpen, setIsDatasetMenuOpen] = React.useState(false)\r\n // Check if current path is an authentication page\r\n const isAuthPage = isAuthPath(pathname)\r\n\r\n // Update state if pathname changes and auth state changes\r\n React.useEffect(() => {\r\n if (isAuthPage && state.menus.currentViewer !== ViewerNames.auth) {\r\n dispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: ViewerNames.auth },\r\n })\r\n setIsSidebarOpen(false)\r\n }\r\n else if (!isAuthPage && state.menus.currentViewer === ViewerNames.auth) {\r\n dispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: ViewerNames.map },\r\n })\r\n }\r\n }, [pathname, isAuthPage, state.menus.currentViewer])\r\n\r\n const value = React.useMemo(() => ({\r\n state,\r\n dispatch,\r\n isSidebarOpen,\r\n setIsSidebarOpen,\r\n view,\r\n setView,\r\n selectedItem,\r\n setSelectedItem,\r\n selectedSite,\r\n setSelectedSite,\r\n selectedInfrastructure,\r\n setSelectedInfrastructure,\r\n selectedFile,\r\n setSelectedFile,\r\n selectedUser,\r\n setSelectedUser,\r\n isDatasetMenuOpen,\r\n setIsDatasetMenuOpen,\r\n }), [\r\n state, isSidebarOpen, view, selectedItem, selectedSite,\r\n selectedInfrastructure, selectedFile, selectedUser, isDatasetMenuOpen,\r\n ])\r\n\r\n return (\r\n <MenusContext.Provider value={value}>\r\n { children }\r\n </MenusContext.Provider>\r\n )\r\n}\r\n\r\nexport const useMenusContext = () => React.useContext(MenusContext)\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/store/Menus/context.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 { usePathname } from 'next/navigation'\r\nimport * as React from \"react\";\r\n\r\nimport { ViewerNames } from '../../types/dbTypes'\r\n\r\nimport { MenusReducer } from './reducer'\r\n\r\nimport type { MenusActions, MenusState } from './reducer';\r\nimport type { Building, Site, User, Infrastructure } from '../../types/dbTypes'\r\nimport type { FileRow } from '../../types/files'\r\n\r\ntype InitialStateType = {\r\n menus: MenusState\r\n}\r\n\r\n// Function to determine if path is an auth page\r\nconst isAuthPath = (pathname?: string): boolean => {\r\n if (!pathname) return false\r\n return pathname.includes('/auth/')\r\n}\r\n\r\n// Get initial state based on current path\r\nconst getInitialState = (pathname?: string): InitialStateType => {\r\n const isAuth = isAuthPath(pathname)\r\n return {\r\n menus: {\r\n currentViewer: isAuth ? ViewerNames.auth : ViewerNames.map,\r\n rowsPerPage: 10, // Default rows per page\r\n selectedTab: 'file',\r\n commentsVisibleInViewer: [],\r\n currentCommentId: null,\r\n focusedCommentId: null,\r\n focusRequestId: 0,\r\n pendingCommentAction: null,\r\n sensorsVisibleInViewer: [],\r\n visibleSensorTypes: {},\r\n visibleSensorTags: {},\r\n currentSensorId: null,\r\n currentSensorTypeId: null,\r\n focusedSensorId: null,\r\n sensorFocusRequestId: 0,\r\n pendingSensorAction: null,\r\n },\r\n }\r\n}\r\n\r\nconst reducer = ({ menus }: InitialStateType, action: MenusActions) => ({\r\n menus: MenusReducer(menus, action),\r\n})\r\n\r\nexport const MenusContext = React.createContext<{\r\n state: InitialStateType\r\n dispatch: React.Dispatch<MenusActions>\r\n isSidebarOpen: boolean\r\n setIsSidebarOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n view: 'table' | 'detail'\r\n setView: React.Dispatch<React.SetStateAction<'table' | 'detail'>>\r\n selectedItem: Building | null\r\n setSelectedItem: React.Dispatch<React.SetStateAction<Building | null>>\r\n selectedSite: Site | null\r\n setSelectedSite: React.Dispatch<React.SetStateAction<Site | null>>\r\n selectedInfrastructure: Infrastructure | null\r\n setSelectedInfrastructure: React.Dispatch<React.SetStateAction<Infrastructure | null>>\r\n selectedFile: FileRow | null\r\n setSelectedFile: React.Dispatch<React.SetStateAction<FileRow | null>>\r\n selectedUser: Partial<User> | null\r\n setSelectedUser: React.Dispatch<React.SetStateAction<Partial<User> | null>>\r\n isDatasetMenuOpen: boolean\r\n setIsDatasetMenuOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n isAuthPage?: boolean\r\n}>({\r\n state: { menus: { currentViewer: ViewerNames.map, rowsPerPage: 10, selectedTab: 'file', commentsVisibleInViewer: [], currentCommentId: null, focusedCommentId: null, focusRequestId: 0, pendingCommentAction: null, sensorsVisibleInViewer: [], visibleSensorTypes: {}, visibleSensorTags: {}, currentSensorId: null, currentSensorTypeId: null, focusedSensorId: null, sensorFocusRequestId: 0, pendingSensorAction: null } },\r\n dispatch: () => null,\r\n isSidebarOpen: false,\r\n setIsSidebarOpen: () => null,\r\n view: 'table',\r\n setView: () => null,\r\n selectedItem: null,\r\n setSelectedItem: () => null,\r\n selectedSite: null,\r\n setSelectedSite: () => null,\r\n selectedInfrastructure: null,\r\n setSelectedInfrastructure: () => null,\r\n selectedFile: null,\r\n setSelectedFile: () => null,\r\n selectedUser: null,\r\n setSelectedUser: () => null,\r\n isDatasetMenuOpen: false,\r\n setIsDatasetMenuOpen: () => null,\r\n isAuthPage: true,\r\n})\r\n\r\nexport const MenusProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\r\n const pathname = usePathname()\r\n const [state, dispatch] = React.useReducer(reducer, getInitialState(pathname))\r\n\r\n const [isSidebarOpen, setIsSidebarOpen] = React.useState(false)\r\n const [view, setView] = React.useState<'table' | 'detail'>('table')\r\n const [selectedItem, setSelectedItem] = React.useState<Building | null>(null)\r\n const [selectedSite, setSelectedSite] = React.useState<Site | null>(null)\r\n const [selectedInfrastructure, setSelectedInfrastructure] = React.useState<Infrastructure | null>(null)\r\n const [selectedFile, setSelectedFile] = React.useState<FileRow | null>(null)\r\n const [selectedUser, setSelectedUser] = React.useState<Partial<User> | null>(null)\r\n const [isDatasetMenuOpen, setIsDatasetMenuOpen] = React.useState(false)\r\n // Check if current path is an authentication page\r\n const isAuthPage = isAuthPath(pathname)\r\n\r\n // Update state if pathname changes and auth state changes\r\n React.useEffect(() => {\r\n if (isAuthPage && state.menus.currentViewer !== ViewerNames.auth) {\r\n dispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: ViewerNames.auth },\r\n })\r\n setIsSidebarOpen(false)\r\n }\r\n else if (!isAuthPage && state.menus.currentViewer === ViewerNames.auth) {\r\n dispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: ViewerNames.map },\r\n })\r\n }\r\n }, [pathname, isAuthPage, state.menus.currentViewer])\r\n\r\n const value = React.useMemo(() => ({\r\n state,\r\n dispatch,\r\n isSidebarOpen,\r\n setIsSidebarOpen,\r\n view,\r\n setView,\r\n selectedItem,\r\n setSelectedItem,\r\n selectedSite,\r\n setSelectedSite,\r\n selectedInfrastructure,\r\n setSelectedInfrastructure,\r\n selectedFile,\r\n setSelectedFile,\r\n selectedUser,\r\n setSelectedUser,\r\n isDatasetMenuOpen,\r\n setIsDatasetMenuOpen,\r\n }), [\r\n state, isSidebarOpen, view, selectedItem, selectedSite,\r\n selectedInfrastructure, selectedFile, selectedUser, isDatasetMenuOpen,\r\n ])\r\n\r\n return (\r\n <MenusContext.Provider value={value}>\r\n { children }\r\n </MenusContext.Provider>\r\n )\r\n}\r\n\r\nexport const useMenusContext = () => React.useContext(MenusContext)\r\n"],"mappings":";AA0JQ;AArJR,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAEvB,SAAS,mBAAmB;AAE5B,SAAS,oBAAoB;AAW7B,MAAM,aAAa,CAAC,aAA+B;AAC/C,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,SAAS,SAAS,QAAQ;AACrC;AAGA,MAAM,kBAAkB,CAAC,aAAwC;AAC7D,QAAM,SAAS,WAAW,QAAQ;AAClC,SAAO;AAAA,IACH,OAAO;AAAA,MACH,eAAe,SAAS,YAAY,OAAO,YAAY;AAAA,MACvD,aAAa;AAAA;AAAA,MACb,aAAa;AAAA,MACb,yBAAyB,CAAC;AAAA,MAC1B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,MACtB,wBAAwB,CAAC;AAAA,MACzB,oBAAoB,CAAC;AAAA,MACrB,mBAAmB,CAAC;AAAA,MACpB,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,IACzB;AAAA,EACJ;AACJ;AAEA,MAAM,UAAU,CAAC,EAAE,MAAM,GAAqB,YAA0B;AAAA,EACpE,OAAO,aAAa,OAAO,MAAM;AACrC;AAEO,MAAM,eAAe,MAAM,cAoB/B;AAAA,EACC,OAAO,EAAE,OAAO,EAAE,eAAe,YAAY,KAAK,aAAa,IAAI,aAAa,QAAQ,yBAAyB,CAAC,GAAG,kBAAkB,MAAM,kBAAkB,MAAM,gBAAgB,GAAG,sBAAsB,MAAM,wBAAwB,CAAC,GAAG,oBAAoB,CAAC,GAAG,mBAAmB,CAAC,GAAG,iBAAiB,MAAM,qBAAqB,MAAM,iBAAiB,MAAM,sBAAsB,GAAG,qBAAqB,KAAK,EAAE;AAAA,EAC7Z,UAAU,MAAM;AAAA,EAChB,eAAe;AAAA,EACf,kBAAkB,MAAM;AAAA,EACxB,MAAM;AAAA,EACN,SAAS,MAAM;AAAA,EACf,cAAc;AAAA,EACd,iBAAiB,MAAM;AAAA,EACvB,cAAc;AAAA,EACd,iBAAiB,MAAM;AAAA,EACvB,wBAAwB;AAAA,EACxB,2BAA2B,MAAM;AAAA,EACjC,cAAc;AAAA,EACd,iBAAiB,MAAM;AAAA,EACvB,cAAc;AAAA,EACd,iBAAiB,MAAM;AAAA,EACvB,mBAAmB;AAAA,EACnB,sBAAsB,MAAM;AAAA,EAC5B,YAAY;AAChB,CAAC;AAEM,MAAM,gBAAmD,CAAC,EAAE,SAAS,MAAM;AAC9E,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAAW,SAAS,gBAAgB,QAAQ,CAAC;AAE7E,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,KAAK;AAC9D,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAA6B,OAAO;AAClE,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAA0B,IAAI;AAC5E,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAsB,IAAI;AACxE,QAAM,CAAC,wBAAwB,yBAAyB,IAAI,MAAM,SAAgC,IAAI;AACtG,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAyB,IAAI;AAC3E,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAA+B,IAAI;AACjF,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,MAAM,SAAS,KAAK;AAEtE,QAAM,aAAa,WAAW,QAAQ;AAGtC,QAAM,UAAU,MAAM;AAClB,QAAI,cAAc,MAAM,MAAM,kBAAkB,YAAY,MAAM;AAC9D,eAAS;AAAA,QACL,MAAM;AAAA,QACN,SAAS,EAAE,eAAe,YAAY,KAAK;AAAA,MAC/C,CAAC;AACD,uBAAiB,KAAK;AAAA,IAC1B,WACS,CAAC,cAAc,MAAM,MAAM,kBAAkB,YAAY,MAAM;AACpE,eAAS;AAAA,QACL,MAAM;AAAA,QACN,SAAS,EAAE,eAAe,YAAY,IAAI;AAAA,MAC9C,CAAC;AAAA,IACL;AAAA,EACJ,GAAG,CAAC,UAAU,YAAY,MAAM,MAAM,aAAa,CAAC;AAEpD,QAAM,QAAQ,MAAM,QAAQ,OAAO;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAAA,IACA;AAAA,IAAO;AAAA,IAAe;AAAA,IAAM;AAAA,IAAc;AAAA,IAC1C;AAAA,IAAwB;AAAA,IAAc;AAAA,IAAc;AAAA,EACxD,CAAC;AAED,SACI,oBAAC,aAAa,UAAb,EAAsB,OACzB,UACF;AAEJ;AAEO,MAAM,kBAAkB,MAAM,MAAM,WAAW,YAAY;","names":[]}