@jmruthers/pace-core 0.6.2 → 0.6.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 (299) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/cursor-rules/00-pace-core-compliance.mdc +34 -2
  3. package/dist/{AuthService-BPvc3Ka0.d.ts → AuthService-Cb34EQs3.d.ts} +9 -1
  4. package/dist/{DataTable-TPTKCX4D.js → DataTable-THFPBKTP.js} +9 -8
  5. package/dist/{PublicPageProvider-DC6kCaqf.d.ts → PublicPageProvider-DEMpysFR.d.ts} +45 -67
  6. package/dist/{UnifiedAuthProvider-CVcTjx-d.d.ts → UnifiedAuthProvider-CKvHP1MK.d.ts} +1 -8
  7. package/dist/{UnifiedAuthProvider-CH6Z342H.js → UnifiedAuthProvider-KAGUYQ4J.js} +5 -4
  8. package/dist/{api-MVVQZLJI.js → api-IAGWF3ZG.js} +10 -10
  9. package/dist/{audit-B5P6FFIR.js → audit-V53FV5AG.js} +2 -2
  10. package/dist/{chunk-SFZUDBL5.js → chunk-2T2IG7T7.js} +70 -56
  11. package/dist/chunk-2T2IG7T7.js.map +1 -0
  12. package/dist/{chunk-MMZ7JXPU.js → chunk-6Z7LTB3D.js} +13 -21
  13. package/dist/{chunk-MMZ7JXPU.js.map → chunk-6Z7LTB3D.js.map} +1 -1
  14. package/dist/{chunk-6J4GEEJR.js → chunk-CNCQDFLN.js} +53 -27
  15. package/dist/chunk-CNCQDFLN.js.map +1 -0
  16. package/dist/chunk-DGUM43GV.js +11 -0
  17. package/dist/{chunk-EHMR7VYL.js → chunk-DWUBLJJM.js} +361 -187
  18. package/dist/chunk-DWUBLJJM.js.map +1 -0
  19. package/dist/{chunk-2UOI2FG5.js → chunk-HFZBI76P.js} +4 -4
  20. package/dist/{chunk-F2IMUDXZ.js → chunk-M7MPQISP.js} +2 -2
  21. package/dist/{chunk-3XC4CPTD.js → chunk-PQBSKX33.js} +244 -5727
  22. package/dist/chunk-PQBSKX33.js.map +1 -0
  23. package/dist/chunk-QRPVRXYT.js +226 -0
  24. package/dist/chunk-QRPVRXYT.js.map +1 -0
  25. package/dist/{chunk-24UVZUZG.js → chunk-RWEBCB47.js} +129 -387
  26. package/dist/chunk-RWEBCB47.js.map +1 -0
  27. package/dist/{chunk-XWQCNGTQ.js → chunk-YDQHOZNA.js} +173 -79
  28. package/dist/chunk-YDQHOZNA.js.map +1 -0
  29. package/dist/{chunk-NECFR5MM.js → chunk-ZNIWI3UC.js} +562 -644
  30. package/dist/chunk-ZNIWI3UC.js.map +1 -0
  31. package/dist/components.d.ts +2 -2
  32. package/dist/components.js +12 -13
  33. package/dist/contextValidator-3JNZKUTX.js +9 -0
  34. package/dist/contextValidator-3JNZKUTX.js.map +1 -0
  35. package/dist/eslint-rules/pace-core-compliance.cjs +106 -0
  36. package/dist/hooks.d.ts +2 -2
  37. package/dist/hooks.js +7 -6
  38. package/dist/hooks.js.map +1 -1
  39. package/dist/index.d.ts +7 -7
  40. package/dist/index.js +21 -16
  41. package/dist/index.js.map +1 -1
  42. package/dist/providers.d.ts +3 -3
  43. package/dist/providers.js +4 -3
  44. package/dist/rbac/index.d.ts +67 -27
  45. package/dist/rbac/index.js +15 -8
  46. package/dist/styles/index.js +1 -1
  47. package/dist/theming/runtime.js +1 -1
  48. package/dist/types.js +1 -1
  49. package/dist/{usePublicRouteParams-1oMokgLF.d.ts → usePublicRouteParams-i3qtoBgg.d.ts} +7 -16
  50. package/dist/utils.js +5 -7
  51. package/dist/utils.js.map +1 -1
  52. package/docs/api/README.md +14 -16
  53. package/docs/api/modules.md +3796 -2513
  54. package/docs/components/context-selector.md +126 -0
  55. package/docs/migration/RBAC_SCOPE_MIGRATION.md +385 -0
  56. package/docs/pace-mint-fix-auto-selection.md +218 -0
  57. package/docs/pace-mint-rbac-setup.md +391 -0
  58. package/docs/rbac/secure-client-protection.md +330 -0
  59. package/package.json +3 -3
  60. package/scripts/audit/core/checks/compliance.cjs +72 -0
  61. package/scripts/audit/core/checks/dependencies.cjs +559 -28
  62. package/scripts/audit/core/checks/documentation.cjs +68 -3
  63. package/scripts/audit/core/checks/environment.cjs +2 -14
  64. package/scripts/audit/core/checks/error-handling.cjs +47 -6
  65. package/src/components/ContextSelector/ContextSelector.tsx +384 -0
  66. package/src/components/ContextSelector/index.ts +3 -0
  67. package/src/components/DataTable/components/RowComponent.tsx +19 -19
  68. package/src/components/DataTable/components/UnifiedTableBody.tsx +2 -2
  69. package/src/components/DataTable/hooks/useDataTablePermissions.ts +8 -6
  70. package/src/components/Dialog/Dialog.tsx +29 -1
  71. package/src/components/FileDisplay/FileDisplay.tsx +42 -10
  72. package/src/components/Header/Header.test.tsx +43 -73
  73. package/src/components/Header/Header.tsx +44 -45
  74. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +10 -19
  75. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +2 -2
  76. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +5 -5
  77. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +9 -9
  78. package/src/components/PaceAppLayout/PaceAppLayout.tsx +135 -33
  79. package/src/components/PaceAppLayout/README.md +14 -17
  80. package/src/components/PaceAppLayout/test-setup.tsx +2 -2
  81. package/src/components/index.ts +5 -5
  82. package/src/eslint-rules/pace-core-compliance.cjs +106 -0
  83. package/src/hooks/__tests__/useAppConfig.unit.test.ts +4 -98
  84. package/src/hooks/useAppConfig.ts +15 -30
  85. package/src/hooks/useFileDisplay.ts +77 -50
  86. package/src/index.ts +4 -5
  87. package/src/providers/services/AuthServiceProvider.tsx +17 -7
  88. package/src/providers/services/EventServiceProvider.tsx +33 -5
  89. package/src/providers/services/UnifiedAuthProvider.tsx +90 -134
  90. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +1 -1
  91. package/src/rbac/adapters.tsx +2 -2
  92. package/src/rbac/api.test.ts +59 -51
  93. package/src/rbac/api.ts +178 -132
  94. package/src/rbac/components/PagePermissionGuard.tsx +38 -10
  95. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +32 -21
  96. package/src/rbac/hooks/permissions/useAccessLevel.ts +1 -1
  97. package/src/rbac/hooks/permissions/useCan.ts +41 -11
  98. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +1 -1
  99. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +1 -1
  100. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +1 -1
  101. package/src/rbac/hooks/useCan.test.ts +0 -9
  102. package/src/rbac/hooks/useRBAC.test.ts +1 -5
  103. package/src/rbac/hooks/useRBAC.ts +36 -37
  104. package/src/rbac/hooks/useResolvedScope.test.ts +120 -35
  105. package/src/rbac/hooks/useResolvedScope.ts +35 -40
  106. package/src/rbac/hooks/useSecureSupabase.ts +7 -7
  107. package/src/rbac/index.ts +7 -0
  108. package/src/rbac/secureClient.test.ts +22 -18
  109. package/src/rbac/secureClient.ts +103 -16
  110. package/src/rbac/security.ts +0 -17
  111. package/src/rbac/types.ts +1 -0
  112. package/src/rbac/utils/__tests__/contextValidator.test.ts +64 -86
  113. package/src/rbac/utils/clientSecurity.ts +93 -0
  114. package/src/rbac/utils/contextValidator.ts +77 -168
  115. package/src/services/AuthService.ts +39 -7
  116. package/src/services/EventService.ts +186 -54
  117. package/src/services/OrganisationService.ts +81 -14
  118. package/src/services/__tests__/EventService.test.ts +1 -2
  119. package/src/services/base/BaseService.ts +3 -0
  120. package/src/utils/dynamic/dynamicUtils.ts +7 -4
  121. package/dist/chunk-24UVZUZG.js.map +0 -1
  122. package/dist/chunk-3XC4CPTD.js.map +0 -1
  123. package/dist/chunk-6J4GEEJR.js.map +0 -1
  124. package/dist/chunk-7D4SUZUM.js +0 -38
  125. package/dist/chunk-EHMR7VYL.js.map +0 -1
  126. package/dist/chunk-NECFR5MM.js.map +0 -1
  127. package/dist/chunk-SFZUDBL5.js.map +0 -1
  128. package/dist/chunk-XWQCNGTQ.js.map +0 -1
  129. package/docs/api/classes/ColumnFactory.md +0 -243
  130. package/docs/api/classes/InvalidScopeError.md +0 -73
  131. package/docs/api/classes/Logger.md +0 -178
  132. package/docs/api/classes/MissingUserContextError.md +0 -66
  133. package/docs/api/classes/OrganisationContextRequiredError.md +0 -66
  134. package/docs/api/classes/PermissionDeniedError.md +0 -73
  135. package/docs/api/classes/RBACAuditManager.md +0 -297
  136. package/docs/api/classes/RBACCache.md +0 -322
  137. package/docs/api/classes/RBACEngine.md +0 -171
  138. package/docs/api/classes/RBACError.md +0 -76
  139. package/docs/api/classes/RBACNotInitializedError.md +0 -66
  140. package/docs/api/classes/SecureSupabaseClient.md +0 -163
  141. package/docs/api/classes/StorageUtils.md +0 -328
  142. package/docs/api/enums/FileCategory.md +0 -184
  143. package/docs/api/enums/LogLevel.md +0 -54
  144. package/docs/api/enums/RBACErrorCode.md +0 -228
  145. package/docs/api/enums/RPCFunction.md +0 -118
  146. package/docs/api/interfaces/AddressFieldProps.md +0 -241
  147. package/docs/api/interfaces/AddressFieldRef.md +0 -94
  148. package/docs/api/interfaces/AggregateConfig.md +0 -43
  149. package/docs/api/interfaces/AutocompleteOptions.md +0 -75
  150. package/docs/api/interfaces/AvatarProps.md +0 -128
  151. package/docs/api/interfaces/BadgeProps.md +0 -34
  152. package/docs/api/interfaces/ButtonProps.md +0 -56
  153. package/docs/api/interfaces/CalendarProps.md +0 -73
  154. package/docs/api/interfaces/CardProps.md +0 -69
  155. package/docs/api/interfaces/ColorPalette.md +0 -7
  156. package/docs/api/interfaces/ColorShade.md +0 -66
  157. package/docs/api/interfaces/ComplianceResult.md +0 -30
  158. package/docs/api/interfaces/DataAccessRecord.md +0 -96
  159. package/docs/api/interfaces/DataRecord.md +0 -11
  160. package/docs/api/interfaces/DataTableAction.md +0 -252
  161. package/docs/api/interfaces/DataTableColumn.md +0 -504
  162. package/docs/api/interfaces/DataTableProps.md +0 -625
  163. package/docs/api/interfaces/DataTableToolbarButton.md +0 -96
  164. package/docs/api/interfaces/DatabaseComplianceResult.md +0 -85
  165. package/docs/api/interfaces/DatabaseIssue.md +0 -41
  166. package/docs/api/interfaces/EmptyStateConfig.md +0 -61
  167. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +0 -235
  168. package/docs/api/interfaces/ErrorBoundaryProps.md +0 -147
  169. package/docs/api/interfaces/ErrorBoundaryProviderProps.md +0 -36
  170. package/docs/api/interfaces/ErrorBoundaryState.md +0 -75
  171. package/docs/api/interfaces/EventAppRoleData.md +0 -71
  172. package/docs/api/interfaces/ExportColumn.md +0 -90
  173. package/docs/api/interfaces/ExportOptions.md +0 -126
  174. package/docs/api/interfaces/FileDisplayProps.md +0 -249
  175. package/docs/api/interfaces/FileMetadata.md +0 -129
  176. package/docs/api/interfaces/FileReference.md +0 -118
  177. package/docs/api/interfaces/FileSizeLimits.md +0 -7
  178. package/docs/api/interfaces/FileUploadOptions.md +0 -139
  179. package/docs/api/interfaces/FileUploadProps.md +0 -296
  180. package/docs/api/interfaces/FooterProps.md +0 -107
  181. package/docs/api/interfaces/FormFieldProps.md +0 -166
  182. package/docs/api/interfaces/FormProps.md +0 -113
  183. package/docs/api/interfaces/GrantEventAppRoleParams.md +0 -122
  184. package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
  185. package/docs/api/interfaces/InputProps.md +0 -56
  186. package/docs/api/interfaces/LabelProps.md +0 -107
  187. package/docs/api/interfaces/LoggerConfig.md +0 -62
  188. package/docs/api/interfaces/LoginFormProps.md +0 -187
  189. package/docs/api/interfaces/NavigationAccessRecord.md +0 -107
  190. package/docs/api/interfaces/NavigationContextType.md +0 -164
  191. package/docs/api/interfaces/NavigationGuardProps.md +0 -139
  192. package/docs/api/interfaces/NavigationItem.md +0 -120
  193. package/docs/api/interfaces/NavigationMenuProps.md +0 -221
  194. package/docs/api/interfaces/NavigationProviderProps.md +0 -117
  195. package/docs/api/interfaces/Organisation.md +0 -140
  196. package/docs/api/interfaces/OrganisationContextType.md +0 -388
  197. package/docs/api/interfaces/OrganisationMembership.md +0 -140
  198. package/docs/api/interfaces/OrganisationProviderProps.md +0 -76
  199. package/docs/api/interfaces/OrganisationSecurityError.md +0 -62
  200. package/docs/api/interfaces/PaceAppLayoutProps.md +0 -409
  201. package/docs/api/interfaces/PaceLoginPageProps.md +0 -49
  202. package/docs/api/interfaces/PageAccessRecord.md +0 -85
  203. package/docs/api/interfaces/PagePermissionContextType.md +0 -140
  204. package/docs/api/interfaces/PagePermissionGuardProps.md +0 -153
  205. package/docs/api/interfaces/PagePermissionProviderProps.md +0 -119
  206. package/docs/api/interfaces/PaletteData.md +0 -41
  207. package/docs/api/interfaces/ParsedAddress.md +0 -120
  208. package/docs/api/interfaces/PermissionEnforcerProps.md +0 -153
  209. package/docs/api/interfaces/ProgressProps.md +0 -42
  210. package/docs/api/interfaces/ProtectedRouteProps.md +0 -78
  211. package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
  212. package/docs/api/interfaces/PublicPageHeaderProps.md +0 -125
  213. package/docs/api/interfaces/PublicPageLayoutProps.md +0 -185
  214. package/docs/api/interfaces/QuickFix.md +0 -52
  215. package/docs/api/interfaces/RBACAccessValidateParams.md +0 -52
  216. package/docs/api/interfaces/RBACAccessValidateResult.md +0 -41
  217. package/docs/api/interfaces/RBACAuditLogParams.md +0 -85
  218. package/docs/api/interfaces/RBACAuditLogResult.md +0 -52
  219. package/docs/api/interfaces/RBACConfig.md +0 -133
  220. package/docs/api/interfaces/RBACContext.md +0 -52
  221. package/docs/api/interfaces/RBACLogger.md +0 -112
  222. package/docs/api/interfaces/RBACPageAccessCheckParams.md +0 -74
  223. package/docs/api/interfaces/RBACPerformanceMetrics.md +0 -138
  224. package/docs/api/interfaces/RBACPermissionCheckParams.md +0 -74
  225. package/docs/api/interfaces/RBACPermissionCheckResult.md +0 -52
  226. package/docs/api/interfaces/RBACPermissionsGetParams.md +0 -63
  227. package/docs/api/interfaces/RBACPermissionsGetResult.md +0 -63
  228. package/docs/api/interfaces/RBACResult.md +0 -58
  229. package/docs/api/interfaces/RBACRoleGrantParams.md +0 -63
  230. package/docs/api/interfaces/RBACRoleGrantResult.md +0 -52
  231. package/docs/api/interfaces/RBACRoleRevokeParams.md +0 -63
  232. package/docs/api/interfaces/RBACRoleRevokeResult.md +0 -52
  233. package/docs/api/interfaces/RBACRoleValidateParams.md +0 -52
  234. package/docs/api/interfaces/RBACRoleValidateResult.md +0 -63
  235. package/docs/api/interfaces/RBACRolesListParams.md +0 -52
  236. package/docs/api/interfaces/RBACRolesListResult.md +0 -74
  237. package/docs/api/interfaces/RBACSessionTrackParams.md +0 -74
  238. package/docs/api/interfaces/RBACSessionTrackResult.md +0 -52
  239. package/docs/api/interfaces/ResourcePermissions.md +0 -155
  240. package/docs/api/interfaces/RevokeEventAppRoleParams.md +0 -100
  241. package/docs/api/interfaces/RoleBasedRouterContextType.md +0 -151
  242. package/docs/api/interfaces/RoleBasedRouterProps.md +0 -156
  243. package/docs/api/interfaces/RoleManagementResult.md +0 -52
  244. package/docs/api/interfaces/RouteAccessRecord.md +0 -107
  245. package/docs/api/interfaces/RouteConfig.md +0 -134
  246. package/docs/api/interfaces/RuntimeComplianceResult.md +0 -55
  247. package/docs/api/interfaces/SecureDataContextType.md +0 -168
  248. package/docs/api/interfaces/SecureDataProviderProps.md +0 -132
  249. package/docs/api/interfaces/SessionRestorationLoaderProps.md +0 -34
  250. package/docs/api/interfaces/SetupIssue.md +0 -41
  251. package/docs/api/interfaces/StorageConfig.md +0 -41
  252. package/docs/api/interfaces/StorageFileInfo.md +0 -74
  253. package/docs/api/interfaces/StorageFileMetadata.md +0 -151
  254. package/docs/api/interfaces/StorageListOptions.md +0 -99
  255. package/docs/api/interfaces/StorageListResult.md +0 -41
  256. package/docs/api/interfaces/StorageUploadOptions.md +0 -101
  257. package/docs/api/interfaces/StorageUploadResult.md +0 -63
  258. package/docs/api/interfaces/StorageUrlOptions.md +0 -60
  259. package/docs/api/interfaces/StyleImport.md +0 -19
  260. package/docs/api/interfaces/SwitchProps.md +0 -34
  261. package/docs/api/interfaces/TabsContentProps.md +0 -9
  262. package/docs/api/interfaces/TabsListProps.md +0 -9
  263. package/docs/api/interfaces/TabsProps.md +0 -9
  264. package/docs/api/interfaces/TabsTriggerProps.md +0 -50
  265. package/docs/api/interfaces/TextareaProps.md +0 -53
  266. package/docs/api/interfaces/ToastActionElement.md +0 -12
  267. package/docs/api/interfaces/ToastProps.md +0 -9
  268. package/docs/api/interfaces/UnifiedAuthContextType.md +0 -823
  269. package/docs/api/interfaces/UnifiedAuthProviderProps.md +0 -173
  270. package/docs/api/interfaces/UseFormDialogOptions.md +0 -62
  271. package/docs/api/interfaces/UseFormDialogReturn.md +0 -117
  272. package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -138
  273. package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
  274. package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
  275. package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -84
  276. package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
  277. package/docs/api/interfaces/UsePublicEventReturn.md +0 -71
  278. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +0 -47
  279. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +0 -123
  280. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -97
  281. package/docs/api/interfaces/UseResolvedScopeOptions.md +0 -47
  282. package/docs/api/interfaces/UseResolvedScopeReturn.md +0 -47
  283. package/docs/api/interfaces/UseResourcePermissionsOptions.md +0 -34
  284. package/docs/api/interfaces/UserEventAccess.md +0 -121
  285. package/docs/api/interfaces/UserMenuProps.md +0 -88
  286. package/docs/api/interfaces/UserProfile.md +0 -63
  287. package/src/components/EventSelector/EventSelector.test.tsx +0 -720
  288. package/src/components/EventSelector/EventSelector.tsx +0 -423
  289. package/src/components/EventSelector/index.ts +0 -3
  290. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +0 -784
  291. package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -327
  292. package/src/components/OrganisationSelector/index.ts +0 -9
  293. /package/dist/{DataTable-TPTKCX4D.js.map → DataTable-THFPBKTP.js.map} +0 -0
  294. /package/dist/{UnifiedAuthProvider-CH6Z342H.js.map → UnifiedAuthProvider-KAGUYQ4J.js.map} +0 -0
  295. /package/dist/{api-MVVQZLJI.js.map → api-IAGWF3ZG.js.map} +0 -0
  296. /package/dist/{audit-B5P6FFIR.js.map → audit-V53FV5AG.js.map} +0 -0
  297. /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.js.map} +0 -0
  298. /package/dist/{chunk-2UOI2FG5.js.map → chunk-HFZBI76P.js.map} +0 -0
  299. /package/dist/{chunk-F2IMUDXZ.js.map → chunk-M7MPQISP.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useEvents
3
- } from "./chunk-MMZ7JXPU.js";
3
+ } from "./chunk-6Z7LTB3D.js";
4
4
  import {
5
5
  isSuperAdmin
6
- } from "./chunk-24UVZUZG.js";
6
+ } from "./chunk-RWEBCB47.js";
7
7
  import {
8
8
  assertAppId
9
9
  } from "./chunk-QXHPKYJV.js";
@@ -1210,7 +1210,7 @@ function getPublicFileDisplayCacheStats() {
1210
1210
  }
1211
1211
 
1212
1212
  // src/hooks/useFileDisplay.ts
1213
- import { useState as useState4, useEffect as useEffect5, useCallback as useCallback4 } from "react";
1213
+ import { useState as useState4, useEffect as useEffect5, useCallback as useCallback4, useRef as useRef3 } from "react";
1214
1214
 
1215
1215
  // src/utils/file-reference/index.ts
1216
1216
  var log3 = createLogger("FileReferenceService");
@@ -1691,14 +1691,20 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1691
1691
  const [fileCount, setFileCount] = useState4(0);
1692
1692
  const [isLoading, setIsLoading] = useState4(false);
1693
1693
  const [error, setError] = useState4(null);
1694
+ const isMountedRef = useRef3(true);
1695
+ const safeSetState = (setter, value) => {
1696
+ if (isMountedRef.current) {
1697
+ setter(value);
1698
+ }
1699
+ };
1694
1700
  const fetchFiles = useCallback4(async () => {
1695
1701
  if (!table_name || !record_id || !supabase) {
1696
- setFileUrl(null);
1697
- setFileReference(null);
1698
- setFileReferences([]);
1699
- setFileUrls(/* @__PURE__ */ new Map());
1700
- setFileCount(0);
1701
- setIsLoading(false);
1702
+ safeSetState(setFileUrl, null);
1703
+ safeSetState(setFileReference, null);
1704
+ safeSetState(setFileReferences, []);
1705
+ safeSetState(setFileUrls, /* @__PURE__ */ new Map());
1706
+ safeSetState(setFileCount, 0);
1707
+ safeSetState(setIsLoading, false);
1702
1708
  return;
1703
1709
  }
1704
1710
  if (organisation_id) {
@@ -1721,31 +1727,31 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1721
1727
  expiresIn: 3600
1722
1728
  });
1723
1729
  const regeneratedUrl = signedUrlResult?.url || null;
1724
- setFileUrl(regeneratedUrl);
1725
- setFileReference(cachedData.fileReference);
1726
- setFileReferences(cachedData.fileReferences || []);
1727
- setFileUrls(cachedData.fileUrls || /* @__PURE__ */ new Map());
1728
- setFileCount(cachedData.fileCount || 0);
1729
- setIsLoading(false);
1730
- setError(null);
1730
+ safeSetState(setFileUrl, regeneratedUrl);
1731
+ safeSetState(setFileReference, cachedData.fileReference);
1732
+ safeSetState(setFileReferences, cachedData.fileReferences || []);
1733
+ safeSetState(setFileUrls, cachedData.fileUrls || /* @__PURE__ */ new Map());
1734
+ safeSetState(setFileCount, cachedData.fileCount || 0);
1735
+ safeSetState(setIsLoading, false);
1736
+ safeSetState(setError, null);
1731
1737
  return;
1732
1738
  } catch (err) {
1733
1739
  logger.warn("useFileDisplay", "Failed to regenerate signed URL from cache, falling back to fetch:", err);
1734
1740
  }
1735
1741
  }
1736
- setFileUrl(cachedData.fileUrl || null);
1737
- setFileReference(cachedData.fileReference || null);
1738
- setFileReferences(cachedData.fileReferences || []);
1739
- setFileUrls(cachedData.fileUrls || /* @__PURE__ */ new Map());
1740
- setFileCount(cachedData.fileCount || 0);
1741
- setIsLoading(false);
1742
- setError(null);
1742
+ safeSetState(setFileUrl, cachedData.fileUrl || null);
1743
+ safeSetState(setFileReference, cachedData.fileReference || null);
1744
+ safeSetState(setFileReferences, cachedData.fileReferences || []);
1745
+ safeSetState(setFileUrls, cachedData.fileUrls || /* @__PURE__ */ new Map());
1746
+ safeSetState(setFileCount, cachedData.fileCount || 0);
1747
+ safeSetState(setIsLoading, false);
1748
+ safeSetState(setError, null);
1743
1749
  return;
1744
1750
  }
1745
1751
  }
1746
1752
  try {
1747
- setIsLoading(true);
1748
- setError(null);
1753
+ safeSetState(setIsLoading, true);
1754
+ safeSetState(setError, null);
1749
1755
  const service = createFileReferenceService(supabase);
1750
1756
  let files = [];
1751
1757
  const shouldSearchBothScopes = organisation_id === void 0;
@@ -1943,11 +1949,11 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1943
1949
  }
1944
1950
  }
1945
1951
  if (files.length === 0) {
1946
- setFileUrl(null);
1947
- setFileReference(null);
1948
- setFileReferences([]);
1949
- setFileUrls(/* @__PURE__ */ new Map());
1950
- setFileCount(0);
1952
+ safeSetState(setFileUrl, null);
1953
+ safeSetState(setFileReference, null);
1954
+ safeSetState(setFileReferences, []);
1955
+ safeSetState(setFileUrls, /* @__PURE__ */ new Map());
1956
+ safeSetState(setFileCount, 0);
1951
1957
  if (enableCache) {
1952
1958
  authenticatedFileCache.set(cacheKey, {
1953
1959
  data: { fileUrl: null, fileReference: null, fileReferences: [], fileUrls: /* @__PURE__ */ new Map(), fileCount: 0 },
@@ -1958,11 +1964,11 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1958
1964
  }
1959
1965
  return;
1960
1966
  }
1961
- setFileReferences(files);
1962
- setFileCount(files.length);
1967
+ safeSetState(setFileReferences, files);
1968
+ safeSetState(setFileCount, files.length);
1963
1969
  if (category && files.length > 0) {
1964
1970
  const firstFile = files[0];
1965
- setFileReference(firstFile);
1971
+ safeSetState(setFileReference, firstFile);
1966
1972
  let url = null;
1967
1973
  if (firstFile.is_public) {
1968
1974
  url = getPublicUrl(supabase, firstFile.file_path, true);
@@ -1982,7 +1988,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1982
1988
  });
1983
1989
  }
1984
1990
  }
1985
- setFileUrl(url);
1991
+ safeSetState(setFileUrl, url);
1986
1992
  } else {
1987
1993
  const urlMap = await generateFileUrlsBatch(supabase, files, {
1988
1994
  appName: "pace-core",
@@ -1990,9 +1996,9 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1990
1996
  userId: organisation_id ? void 0 : record_id,
1991
1997
  expiresIn: 3600
1992
1998
  });
1993
- setFileUrls(urlMap);
1994
- setFileReference(null);
1995
- setFileUrl(null);
1999
+ safeSetState(setFileUrls, urlMap);
2000
+ safeSetState(setFileReference, null);
2001
+ safeSetState(setFileUrl, null);
1996
2002
  }
1997
2003
  if (enableCache) {
1998
2004
  let cacheData = {
@@ -2030,28 +2036,36 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
2030
2036
  } catch (err) {
2031
2037
  logger.error("useFileDisplay", "Error fetching files:", err);
2032
2038
  const error2 = err instanceof Error ? err : new Error("Unknown error occurred");
2033
- setError(error2);
2034
- setFileUrl(null);
2035
- setFileReference(null);
2036
- setFileReferences([]);
2037
- setFileUrls(/* @__PURE__ */ new Map());
2038
- setFileCount(0);
2039
+ safeSetState(setError, error2);
2040
+ safeSetState(setFileUrl, null);
2041
+ safeSetState(setFileReference, null);
2042
+ safeSetState(setFileReferences, []);
2043
+ safeSetState(setFileUrls, /* @__PURE__ */ new Map());
2044
+ safeSetState(setFileCount, 0);
2039
2045
  } finally {
2040
- setIsLoading(false);
2046
+ safeSetState(setIsLoading, false);
2041
2047
  }
2042
2048
  }, [table_name, record_id, organisation_id, category, supabase, cacheTtl, enableCache]);
2043
2049
  useEffect5(() => {
2050
+ isMountedRef.current = true;
2044
2051
  if (table_name && record_id && supabase) {
2045
- fetchFiles();
2052
+ fetchFiles().catch((err) => {
2053
+ if (isMountedRef.current) {
2054
+ safeSetState(setError, err instanceof Error ? err : new Error("Unknown error"));
2055
+ }
2056
+ });
2046
2057
  } else {
2047
- setFileUrl(null);
2048
- setFileReference(null);
2049
- setFileReferences([]);
2050
- setFileUrls(/* @__PURE__ */ new Map());
2051
- setFileCount(0);
2052
- setIsLoading(false);
2053
- setError(null);
2058
+ safeSetState(setFileUrl, null);
2059
+ safeSetState(setFileReference, null);
2060
+ safeSetState(setFileReferences, []);
2061
+ safeSetState(setFileUrls, /* @__PURE__ */ new Map());
2062
+ safeSetState(setFileCount, 0);
2063
+ safeSetState(setIsLoading, false);
2064
+ safeSetState(setError, null);
2054
2065
  }
2066
+ return () => {
2067
+ isMountedRef.current = false;
2068
+ };
2055
2069
  }, [table_name, record_id, organisation_id, supabase]);
2056
2070
  const refetch = useCallback4(async () => {
2057
2071
  if (!table_name || !record_id || !supabase) return;
@@ -2143,11 +2157,11 @@ function useEventTheme(event) {
2143
2157
  }
2144
2158
 
2145
2159
  // src/hooks/usePreventTabReload.ts
2146
- import { useEffect as useEffect7, useRef as useRef3 } from "react";
2160
+ import { useEffect as useEffect7, useRef as useRef4 } from "react";
2147
2161
  function usePreventTabReload(options = {}) {
2148
2162
  const { enabled = true, gracePeriodMs = 2e3 } = options;
2149
- const isRestoringFromCacheRef = useRef3(false);
2150
- const gracePeriodTimeoutRef = useRef3(null);
2163
+ const isRestoringFromCacheRef = useRef4(false);
2164
+ const gracePeriodTimeoutRef = useRef4(null);
2151
2165
  useEffect7(() => {
2152
2166
  if (!enabled || typeof window === "undefined") return;
2153
2167
  const handlePageShow = (event) => {
@@ -2220,4 +2234,4 @@ export {
2220
2234
  useEventTheme,
2221
2235
  usePreventTabReload
2222
2236
  };
2223
- //# sourceMappingURL=chunk-SFZUDBL5.js.map
2237
+ //# sourceMappingURL=chunk-2T2IG7T7.js.map