@jmruthers/pace-core 0.5.181 → 0.5.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +16 -2
- package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
- package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
- package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
- package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
- package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
- package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
- package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
- package/dist/auth-BZOJqrdd.d.ts +49 -0
- package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
- package/dist/chunk-5DRSZLL2.js.map +1 -0
- package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
- package/dist/chunk-6C4YBBJM.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
- package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
- package/dist/chunk-CSOFYHAG.js.map +1 -0
- package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
- package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
- package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
- package/dist/chunk-FSFQFJCU.js.map +1 -0
- package/dist/chunk-FUEYYMX5.js +2296 -0
- package/dist/chunk-FUEYYMX5.js.map +1 -0
- package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
- package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
- package/dist/chunk-KQCRWDSA.js +1 -0
- package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
- package/dist/chunk-KUEN3HFB.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
- package/dist/chunk-M7W4CP3M.js.map +1 -0
- package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
- package/dist/chunk-PWAHJW4G.js.map +1 -0
- package/dist/chunk-PWLANIRT.js +127 -0
- package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
- package/dist/chunk-QCDXODCA.js +75 -0
- package/dist/chunk-QCDXODCA.js.map +1 -0
- package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
- package/dist/chunk-QUVSNGIP.js.map +1 -0
- package/dist/chunk-QXHPKYJV.js +113 -0
- package/dist/chunk-QXHPKYJV.js.map +1 -0
- package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
- package/dist/chunk-R77UEZ4E.js.map +1 -0
- package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
- package/dist/chunk-RA3JUFMW.js.map +1 -0
- package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
- package/dist/chunk-SQGMNID3.js.map +1 -0
- package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
- package/dist/chunk-UHNYIBXL.js.map +1 -0
- package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
- package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
- package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
- package/dist/components.d.ts +12 -93
- package/dist/components.js +23 -106
- package/dist/components.js.map +1 -1
- package/dist/core-CUElvH_C.d.ts +164 -0
- package/dist/database.generated-CBmg2950.d.ts +8284 -0
- package/dist/event-CW5YB_2p.d.ts +239 -0
- package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
- package/dist/functions-D_kgHktt.d.ts +208 -0
- package/dist/hooks.d.ts +54 -7
- package/dist/hooks.js +204 -17
- package/dist/hooks.js.map +1 -1
- package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
- package/dist/index.d.ts +94 -261
- package/dist/index.js +314 -126
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +7 -8
- package/dist/providers.js +6 -13
- package/dist/rbac/index.d.ts +171 -101
- package/dist/rbac/index.js +23 -17
- package/dist/styles/index.d.ts +1 -3
- package/dist/styles/index.js +2 -17
- package/dist/theming/runtime.js +3 -3
- package/dist/types-UU913iLA.d.ts +102 -0
- package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
- package/dist/types.d.ts +88 -227
- package/dist/types.js +64 -112
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
- package/dist/utils.d.ts +299 -13
- package/dist/utils.js +481 -55
- package/dist/utils.js.map +1 -1
- package/dist/validation-643vUDZW.d.ts +177 -0
- package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
- package/docs/README.md +9 -8
- package/docs/api/README.md +16 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +14 -14
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +29 -9
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +17 -17
- package/docs/api/enums/RBACErrorCode.md +228 -0
- package/docs/api/enums/RPCFunction.md +118 -0
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +29 -3
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +2 -2
- package/docs/api/interfaces/DataTableColumn.md +6 -6
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +5 -5
- package/docs/api/interfaces/ExportOptions.md +4 -4
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +13 -13
- package/docs/api/interfaces/FileReference.md +12 -12
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +10 -10
- package/docs/api/interfaces/FileUploadProps.md +19 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +166 -0
- package/docs/api/interfaces/FormProps.md +113 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +8 -8
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +17 -73
- package/docs/api/interfaces/NavigationMenuProps.md +38 -53
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +13 -13
- package/docs/api/interfaces/OrganisationContextType.md +21 -21
- package/docs/api/interfaces/OrganisationMembership.md +15 -15
- package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
- package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +50 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
- package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
- package/docs/api/interfaces/RBACConfig.md +2 -2
- package/docs/api/interfaces/RBACContext.md +52 -0
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
- package/docs/api/interfaces/RBACResult.md +58 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
- package/docs/api/interfaces/RBACRolesListParams.md +52 -0
- package/docs/api/interfaces/RBACRolesListResult.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +43 -2
- package/docs/api/interfaces/TextareaProps.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +4 -4
- package/docs/api/interfaces/UserProfile.md +7 -7
- package/docs/api/modules.md +484 -462
- package/docs/api-reference/components.md +186 -15
- package/docs/api-reference/deprecated.md +376 -0
- package/docs/api-reference/hooks.md +149 -19
- package/docs/api-reference/providers.md +61 -6
- package/docs/api-reference/rpc-functions.md +397 -0
- package/docs/api-reference/types.md +135 -78
- package/docs/api-reference/utilities.md +51 -380
- package/docs/architecture/README.md +49 -3
- package/docs/architecture/database-schema-requirements.md +40 -3
- package/docs/architecture/rbac-security-architecture.md +41 -4
- package/docs/architecture/services.md +127 -42
- package/docs/best-practices/README.md +51 -5
- package/docs/best-practices/accessibility.md +32 -3
- package/docs/best-practices/common-patterns.md +50 -3
- package/docs/best-practices/deployment.md +50 -4
- package/docs/best-practices/performance.md +50 -3
- package/docs/best-practices/security.md +94 -41
- package/docs/best-practices/testing.md +33 -4
- package/docs/core-concepts/authentication.md +5 -5
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +3 -3
- package/docs/core-concepts/permissions.md +3 -3
- package/docs/core-concepts/rbac-system.md +5 -5
- package/docs/documentation-index.md +30 -8
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +7 -5
- package/docs/getting-started/examples/basic-auth-app.md +3 -0
- package/docs/getting-started/examples/full-featured-app.md +5 -3
- package/docs/getting-started/faq.md +6 -6
- package/docs/getting-started/installation-guide.md +192 -13
- package/docs/getting-started/local-development.md +303 -0
- package/docs/getting-started/quick-reference.md +3 -3
- package/docs/getting-started/quick-start.md +517 -0
- package/docs/implementation-guides/app-layout.md +45 -3
- package/docs/implementation-guides/authentication.md +66 -7
- package/docs/implementation-guides/component-styling.md +53 -3
- package/docs/implementation-guides/data-tables.md +76 -7
- package/docs/implementation-guides/datatable-filtering.md +1 -2
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
- package/docs/implementation-guides/dynamic-colors.md +155 -4
- package/docs/implementation-guides/file-reference-system.md +72 -3
- package/docs/implementation-guides/file-upload-storage.md +72 -3
- package/docs/implementation-guides/forms.md +53 -3
- package/docs/implementation-guides/inactivity-tracking.md +53 -3
- package/docs/implementation-guides/large-datasets.md +1 -1
- package/docs/implementation-guides/navigation.md +55 -5
- package/docs/implementation-guides/organisation-security.md +72 -3
- package/docs/implementation-guides/performance.md +57 -1
- package/docs/implementation-guides/permission-enforcement.md +81 -8
- package/docs/implementation-guides/public-pages.md +560 -14
- package/docs/migration/MIGRATION_GUIDE.md +409 -50
- package/docs/migration/README.md +37 -3
- package/docs/migration/organisation-context-timing-fix.md +39 -4
- package/docs/migration/quick-migration-guide.md +41 -5
- package/docs/migration/rbac-migration.md +59 -3
- package/docs/migration/service-architecture.md +77 -14
- package/docs/rbac/README.md +79 -3
- package/docs/rbac/advanced-patterns.md +47 -3
- package/docs/rbac/api-reference.md +77 -8
- package/docs/rbac/event-based-apps.md +50 -5
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/examples.md +39 -3
- package/docs/rbac/getting-started.md +63 -4
- package/docs/rbac/quick-start.md +57 -5
- package/docs/rbac/rbac-rls-integration.md +68 -6
- package/docs/rbac/super-admin-guide.md +47 -3
- package/docs/rbac/troubleshooting.md +3 -3
- package/docs/security/README.md +68 -3
- package/docs/security/checklist.md +50 -3
- package/docs/standards/01-architecture-standard.md +39 -0
- package/docs/standards/02-api-and-rpc-standard.md +39 -0
- package/docs/standards/03-component-standard.md +32 -0
- package/docs/standards/04-code-style-standard.md +32 -0
- package/docs/standards/05-security-standard.md +30 -0
- package/docs/standards/06-testing-and-docs-standard.md +29 -0
- package/docs/standards/README.md +35 -0
- package/docs/styles/README.md +89 -8
- package/docs/testing/README.md +175 -24
- package/docs/troubleshooting/README.md +50 -3
- package/docs/troubleshooting/common-issues.md +271 -5
- package/docs/troubleshooting/debugging.md +54 -1
- package/docs/troubleshooting/migration.md +54 -1
- package/docs/troubleshooting/organisation-context-setup.md +29 -3
- package/docs/troubleshooting/styling-issues.md +246 -4
- package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
- package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
- package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
- package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
- package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
- package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
- package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
- package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
- package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
- package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
- package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
- package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
- package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
- package/examples/README.md +81 -33
- package/examples/index.ts +14 -12
- package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
- package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
- package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
- package/package.json +21 -27
- package/src/__tests__/helpers/test-utils.tsx +29 -3
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
- package/src/components/Alert/Alert.test.tsx +2 -2
- package/src/components/Alert/Alert.tsx +4 -4
- package/src/components/Avatar/Avatar.test.tsx +17 -6
- package/src/components/Badge/Badge.test.tsx +1 -1
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.test.tsx +2 -2
- package/src/components/Button/Button.tsx +11 -7
- package/src/components/Calendar/Calendar.test.tsx +41 -8
- package/src/components/Calendar/Calendar.tsx +39 -36
- package/src/components/Card/Card.tsx +51 -13
- package/src/components/Checkbox/Checkbox.test.tsx +36 -12
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
- package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
- package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +10 -25
- package/src/components/DataTable/components/DataTableCore.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +3 -1
- package/src/components/DataTable/components/ImportModal.tsx +1 -1
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
- package/src/components/DataTable/core/ColumnFactory.ts +6 -6
- package/src/components/DataTable/core/DataTableContext.tsx +14 -10
- package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
- package/src/components/DataTable/core/PluginRegistry.ts +3 -3
- package/src/components/DataTable/core/StateManager.ts +12 -11
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
- package/src/components/DataTable/core/interfaces.ts +17 -17
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
- package/src/components/DataTable/types.ts +5 -5
- package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
- package/src/components/DataTable/utils/columnUtils.ts +3 -2
- package/src/components/DataTable/utils/debugTools.ts +1 -1
- package/src/components/DataTable/utils/exportUtils.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +9 -4
- package/src/components/Dialog/Dialog.test.tsx +49 -27
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
- package/src/components/EventSelector/EventSelector.test.tsx +60 -12
- package/src/components/EventSelector/EventSelector.tsx +38 -15
- package/src/components/EventSelector/index.ts +2 -2
- package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
- package/src/components/FileDisplay/FileDisplay.tsx +1 -0
- package/src/components/FileUpload/FileUpload.test.tsx +532 -152
- package/src/components/FileUpload/FileUpload.tsx +43 -8
- package/src/components/Footer/Footer.test.tsx +19 -14
- package/src/components/Form/Form.test.tsx +96 -14
- package/src/components/Form/Form.tsx +210 -1
- package/src/components/Form/index.ts +3 -7
- package/src/components/Header/Header.test.tsx +24 -17
- package/src/components/Header/Header.tsx +3 -1
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
- package/src/components/Input/Input.test.tsx +61 -36
- package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
- package/src/components/Label/Label.tsx +2 -3
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
- package/src/components/LoginForm/LoginForm.test.tsx +14 -13
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/LoginForm/index.ts +7 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
- package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
- package/src/components/NavigationMenu/index.ts +1 -1
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
- package/src/components/PaceAppLayout/test-setup.tsx +192 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
- package/src/components/PasswordChange/index.ts +2 -0
- package/src/components/Progress/Progress.test.tsx +11 -0
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/Progress/index.ts +10 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
- package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
- package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
- package/src/components/PublicLayout/index.ts +10 -28
- package/src/components/Select/Select.test.tsx +7 -7
- package/src/components/Select/Select.tsx +277 -11
- package/src/components/Select/index.ts +1 -2
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
- package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
- package/src/components/Tabs/Tabs.test.tsx +10 -9
- package/src/components/Tabs/Tabs.tsx +61 -33
- package/src/components/Textarea/Textarea.test.tsx +31 -18
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +7 -6
- package/src/components/UserMenu/UserMenu.tsx +2 -2
- package/src/components/index.ts +5 -4
- package/src/constants/performance.ts +19 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
- package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
- package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
- package/src/hooks/index.ts +4 -0
- package/src/hooks/public/index.ts +2 -0
- package/src/hooks/public/usePublicEvent.ts +4 -6
- package/src/hooks/public/usePublicEventLogo.test.ts +147 -0
- package/src/hooks/public/usePublicRouteParams.ts +1 -1
- package/src/hooks/services/useAuth.ts +2 -4
- package/src/hooks/services/useCurrentEvent.ts +1 -1
- package/src/hooks/useAppConfig.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +2 -2
- package/src/hooks/useEventTheme.ts +1 -1
- package/src/hooks/useEvents.ts +51 -10
- package/src/hooks/useOrganisationPermissions.test.ts +3 -3
- package/src/hooks/useOrganisationPermissions.ts +1 -1
- package/src/hooks/useOrganisationSecurity.ts +2 -2
- package/src/hooks/usePermissionCache.test.ts +9 -9
- package/src/hooks/usePermissionCache.ts +2 -2
- package/src/index.ts +19 -12
- package/src/providers/OrganisationProvider.tsx +73 -9
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
- package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
- package/src/providers/__tests__/EventProvider.test.tsx +24 -15
- package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
- package/src/providers/index.ts +0 -3
- package/src/providers/services/AuthServiceProvider.tsx +2 -17
- package/src/providers/services/EventServiceProvider.tsx +11 -16
- package/src/providers/services/InactivityServiceProvider.tsx +9 -12
- package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
- package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
- package/src/rbac/adapters.tsx +1 -1
- package/src/rbac/api.ts +20 -4
- package/src/rbac/audit-enhanced.ts +47 -2
- package/src/rbac/audit.ts +47 -2
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.test.tsx +7 -6
- package/src/rbac/components/NavigationProvider.tsx +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +1 -1
- package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +1 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
- package/src/rbac/components/SecureDataProvider.tsx +1 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/usePermissions.ts +31 -85
- package/src/rbac/hooks/useRBAC.test.ts +13 -1
- package/src/rbac/hooks/useRBAC.ts +13 -67
- package/src/rbac/hooks/useResolvedScope.ts +11 -0
- package/src/rbac/hooks/useSecureSupabase.ts +308 -0
- package/src/rbac/index.ts +3 -0
- package/src/rbac/secureClient.ts +53 -6
- package/src/rbac/security.ts +37 -1
- package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
- package/src/rbac/types.ts +3 -2
- package/src/services/AuthService.ts +33 -25
- package/src/services/EventService.ts +56 -44
- package/src/services/InactivityService.ts +33 -53
- package/src/services/OrganisationService.ts +36 -40
- package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
- package/src/services/__tests__/EventService.test.ts +67 -33
- package/src/services/interfaces/IEventService.ts +1 -1
- package/src/styles/core.css +2 -2
- package/src/styles/index.test.ts +21 -0
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/organisation.roles.test.ts +55 -0
- package/src/types/__tests__/type-validation.test.ts +0 -1
- package/src/types/auth.ts +42 -2
- package/src/types/core.ts +251 -0
- package/src/types/database.ts +11 -496
- package/src/types/event.ts +102 -0
- package/src/types/file-reference.ts +6 -4
- package/src/types/guards.ts +2 -1
- package/src/types/index.ts +48 -14
- package/src/types/lodash.debounce.d.ts +15 -0
- package/src/types/organisation.ts +14 -10
- package/src/types/supabase.ts +15 -17
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
- package/src/utils/app/appNameResolver.ts +1 -1
- package/src/utils/audit/audit.test.ts +65 -0
- package/src/utils/device/deviceFingerprint.test.ts +171 -0
- package/src/utils/dynamic/dynamicUtils.ts +3 -2
- package/src/utils/file-reference/index.ts +25 -6
- package/src/utils/security/secureErrors.ts +1 -1
- package/src/utils/validation/__tests__/validationUtils.test.ts +72 -0
- package/src/utils/validation/index.ts +6 -12
- package/src/utils/validation/validationUtils.ts +0 -13
- package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-3JI76CYK.js +0 -2444
- package/dist/chunk-3JI76CYK.js.map +0 -1
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-5MT24GKJ.js.map +0 -1
- package/dist/chunk-7QCC6MCP.js +0 -288
- package/dist/chunk-BESYRHQM.js.map +0 -1
- package/dist/chunk-BJPBT3CU.js +0 -21
- package/dist/chunk-BJPBT3CU.js.map +0 -1
- package/dist/chunk-BVYWGZVV.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-D7LCGMVS.js.map +0 -1
- package/dist/chunk-EGI6MUL6.js +0 -27
- package/dist/chunk-EGI6MUL6.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-HRO5HWN2.js.map +0 -1
- package/dist/chunk-HZLDFOE4.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-LIMSTKYD.js +0 -61
- package/dist/chunk-LIMSTKYD.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-PPMP5J6T.js.map +0 -1
- package/dist/chunk-Q5QRDWKI.js.map +0 -1
- package/dist/chunk-S5OFRT4M.js.map +0 -1
- package/dist/chunk-SBVILCCA.js.map +0 -1
- package/dist/chunk-TUMEWN34.js +0 -15
- package/dist/chunk-TUMEWN34.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.js.map +0 -1
- package/dist/chunk-ZYTYSTO5.js.map +0 -1
- package/dist/chunk-ZZ2SS7NI.js +0 -237
- package/dist/chunk-ZZ2SS7NI.js.map +0 -1
- package/dist/database-C6jy7EOu.d.ts +0 -500
- package/dist/organisation-D6qRDtbF.d.ts +0 -93
- package/dist/schema-DTDZQe2u.d.ts +0 -28
- package/dist/unified-DQ4VcT7H.d.ts +0 -198
- package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
- package/dist/validation.d.ts +0 -47
- package/dist/validation.js +0 -24
- package/dist/validation.js.map +0 -1
- package/docs/DOCUMENTATION_AUDIT.md +0 -172
- package/docs/DOCUMENTATION_STANDARD.md +0 -137
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/architecture/rpc-function-standards.md +0 -1106
- package/docs/getting-started/consuming-app-vite-config.md +0 -239
- package/docs/implementation-guides/event-theming-summary.md +0 -226
- package/docs/implementation-guides/public-pages-advanced.md +0 -1038
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
- package/docs/migration/v0.4.16-css-first-approach.md +0 -312
- package/docs/migration/v0.4.17-source-path-fix.md +0 -235
- package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
- package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
- package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
- package/docs/rbac/README-rbac-rls-integration.md +0 -374
- package/docs/styles/usage.md +0 -227
- package/docs/testing/visual-testing.md +0 -120
- package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
- package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
- package/docs/troubleshooting/database-view-compatibility.md +0 -125
- package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
- package/examples/RBAC/EventBasedApp.tsx +0 -239
- package/examples/RBAC/PermissionExample.tsx +0 -151
- package/examples/STRUCTURE.md +0 -125
- package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
- package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
- package/examples/components 2/index.ts +0 -11
- package/examples/features/index.ts +0 -12
- package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
- package/examples/features/rbac/index.ts +0 -13
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
- package/examples/public-pages/PublicEventPage.tsx +0 -274
- package/examples/public-pages/PublicPageApp.tsx +0 -308
- package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
- package/examples/public-pages/index.ts +0 -14
- package/src/__tests__/TEST_STANDARD.md +0 -1008
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
- package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
- package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
- package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/ProtectedRoute/README.md +0 -164
- package/src/components/PublicLayout/EventLogo.tsx +0 -175
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
- package/src/components/Select/hooks.ts +0 -289
- package/src/hooks/useCounter.test.ts +0 -131
- package/src/hooks/useDebounce.test.ts +0 -375
- package/src/providers/AuthProvider.tsx +0 -15
- package/src/providers/EventProvider.tsx +0 -16
- package/src/providers/InactivityProvider.tsx +0 -15
- package/src/providers/OrganisationProvider.context.test.tsx +0 -169
- package/src/providers/UnifiedAuthProvider.tsx +0 -15
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -265
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.test.ts +0 -499
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.simple.test.ts +0 -212
- package/src/utils/appNameResolver.test.ts +0 -121
- package/src/utils/appNameResolver.ts +0 -191
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/debugLogger.ts +0 -67
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/file-reference.test.ts +0 -788
- package/src/utils/file-reference.ts +0 -519
- package/src/utils/formatDate.test.ts +0 -237
- package/src/utils/formatting.ts +0 -170
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/logger.ts +0 -179
- package/src/utils/organisationContext.test.ts +0 -322
- package/src/utils/organisationContext.ts +0 -153
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -110
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.test.ts +0 -393
- package/src/utils/permissionUtils.ts +0 -34
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.test.ts +0 -711
- package/src/utils/secureDataAccess.ts +0 -377
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -126
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/index.ts +0 -12
- /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
- /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
- /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
- /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
- /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
- /package/examples/{RBAC → rbac}/index.ts +0 -0
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# Debugging NetworkError / CORS Error
|
|
2
|
-
|
|
3
|
-
## The Real Issue
|
|
4
|
-
|
|
5
|
-
If pace-cake works fine with the same Supabase instance, then **CORS is already configured correctly**. The "CORS request did not succeed" error message is often misleading - it usually means the request failed for another reason, not necessarily CORS policy.
|
|
6
|
-
|
|
7
|
-
## How to Debug
|
|
8
|
-
|
|
9
|
-
### Step 1: Check Network Tab in Browser DevTools
|
|
10
|
-
|
|
11
|
-
1. Open browser DevTools (F12 or Cmd+Option+I)
|
|
12
|
-
2. Go to **Network** tab
|
|
13
|
-
3. Clear the network log
|
|
14
|
-
4. Try to log in
|
|
15
|
-
5. Look for the failed request to `/auth/v1/token`
|
|
16
|
-
|
|
17
|
-
**What to check:**
|
|
18
|
-
- **Status code**: What HTTP status code is returned? (200, 401, 500, etc.)
|
|
19
|
-
- **Request headers**: Are the headers correct?
|
|
20
|
-
- **Response**: What does the response say?
|
|
21
|
-
- **Timing**: Does the request timeout or fail immediately?
|
|
22
|
-
|
|
23
|
-
### Step 2: Check Console for Real Error
|
|
24
|
-
|
|
25
|
-
The browser console might show the actual error. Look for:
|
|
26
|
-
- Network timeout
|
|
27
|
-
- Connection refused
|
|
28
|
-
- SSL/TLS errors
|
|
29
|
-
- Proxy errors
|
|
30
|
-
- Request cancelled
|
|
31
|
-
|
|
32
|
-
### Step 3: Compare with pace-cake
|
|
33
|
-
|
|
34
|
-
Since pace-cake works:
|
|
35
|
-
1. **Check pace-cake's network tab** - What does a successful login request look like?
|
|
36
|
-
2. **Compare request headers** - Are they the same?
|
|
37
|
-
3. **Compare Supabase client setup** - Is it identical?
|
|
38
|
-
|
|
39
|
-
### Step 4: Check for Differences
|
|
40
|
-
|
|
41
|
-
**Compare pace-trac vs pace-cake:**
|
|
42
|
-
|
|
43
|
-
1. **Supabase client creation**:
|
|
44
|
-
```typescript
|
|
45
|
-
// pace-trac - check this matches pace-cake
|
|
46
|
-
const supabase = createClient(url, key, {
|
|
47
|
-
auth: {
|
|
48
|
-
autoRefreshToken: true,
|
|
49
|
-
persistSession: true,
|
|
50
|
-
detectSessionInUrl: true
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
2. **setupRBAC call**:
|
|
56
|
-
```typescript
|
|
57
|
-
// Should be identical
|
|
58
|
-
setupRBAC(supabase);
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
3. **Provider setup**:
|
|
62
|
-
```typescript
|
|
63
|
-
// Should match pace-cake exactly
|
|
64
|
-
<UnifiedAuthProvider supabaseClient={supabase} appName={APP_NAME}>
|
|
65
|
-
<OrganisationProvider>
|
|
66
|
-
<App />
|
|
67
|
-
</OrganisationProvider>
|
|
68
|
-
</UnifiedAuthProvider>
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Step 5: Check Browser/Network Issues
|
|
72
|
-
|
|
73
|
-
**Common causes of "CORS request did not succeed":**
|
|
74
|
-
|
|
75
|
-
1. **Browser extension blocking requests**
|
|
76
|
-
- Try incognito/private mode
|
|
77
|
-
- Disable extensions one by one
|
|
78
|
-
|
|
79
|
-
2. **Network/proxy issues**
|
|
80
|
-
- Check if corporate proxy is blocking
|
|
81
|
-
- Try different network (mobile hotspot)
|
|
82
|
-
- Check firewall settings
|
|
83
|
-
|
|
84
|
-
3. **DNS issues**
|
|
85
|
-
- Can you reach `srqhjwivpohjcjqikjry.supabase.co`?
|
|
86
|
-
- Try pinging the domain
|
|
87
|
-
|
|
88
|
-
4. **SSL/TLS issues**
|
|
89
|
-
- Check browser console for SSL errors
|
|
90
|
-
- Verify certificate is valid
|
|
91
|
-
|
|
92
|
-
### Step 6: Check pace-trac Specific Issues
|
|
93
|
-
|
|
94
|
-
**Things that might be different in pace-trac:**
|
|
95
|
-
|
|
96
|
-
1. **Port number**: Are you using a different port than pace-cake?
|
|
97
|
-
- pace-cake might use `localhost:3000`
|
|
98
|
-
- pace-trac uses `localhost:8087`
|
|
99
|
-
- But if CORS is configured with wildcard, this shouldn't matter
|
|
100
|
-
|
|
101
|
-
2. **Environment variables**: Are they correct?
|
|
102
|
-
```bash
|
|
103
|
-
# Check these match pace-cake
|
|
104
|
-
VITE_SUPABASE_URL=...
|
|
105
|
-
VITE_SUPABASE_ANON_KEY=...
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
3. **Vite configuration**: Any proxy or network settings?
|
|
109
|
-
```typescript
|
|
110
|
-
// vite.config.ts - check for any proxy settings
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Most Likely Causes
|
|
114
|
-
|
|
115
|
-
Based on "pace-cake works but pace-trac doesn't":
|
|
116
|
-
|
|
117
|
-
1. **Different port** - But CORS should allow both if configured correctly
|
|
118
|
-
2. **Browser session issue** - Try clearing cache/cookies
|
|
119
|
-
3. **Network timing** - Something interfering with the request
|
|
120
|
-
4. **Code difference** - Something in pace-trac setup is different
|
|
121
|
-
|
|
122
|
-
## Quick Fixes to Try
|
|
123
|
-
|
|
124
|
-
1. **Clear browser cache and cookies**
|
|
125
|
-
2. **Try incognito/private mode**
|
|
126
|
-
3. **Try different browser**
|
|
127
|
-
4. **Restart dev server**
|
|
128
|
-
5. **Check if pace-cake still works** (verify Supabase is up)
|
|
129
|
-
|
|
130
|
-
## If Still Failing
|
|
131
|
-
|
|
132
|
-
**Check the actual network request details:**
|
|
133
|
-
- Right-click the failed request in Network tab
|
|
134
|
-
- Select "Copy" → "Copy as cURL"
|
|
135
|
-
- Compare with pace-cake's successful request
|
|
136
|
-
- Look for differences in headers, URL, or body
|
|
137
|
-
|
|
138
|
-
**Check console for actual error:**
|
|
139
|
-
- The "CORS request did not succeed" might be masking the real error
|
|
140
|
-
- Look for other error messages before/after
|
|
141
|
-
- Check if there are multiple failed requests
|
|
142
|
-
|
|
143
|
-
## Summary
|
|
144
|
-
|
|
145
|
-
Since pace-cake works, this is likely:
|
|
146
|
-
- ✅ **NOT a CORS configuration issue** (already configured)
|
|
147
|
-
- ✅ **NOT an RBAC issue** (RBAC doesn't interfere with auth)
|
|
148
|
-
- ⚠️ **Likely a network/browser issue** specific to pace-trac
|
|
149
|
-
- ⚠️ **Or a code difference** between pace-trac and pace-cake
|
|
150
|
-
|
|
151
|
-
**Next step**: Check Network tab in DevTools to see the actual error, not just the CORS message.
|
|
152
|
-
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
# How to Fix CORS Error in Supabase
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
|
|
5
|
-
You're seeing this error when trying to log in:
|
|
6
|
-
```
|
|
7
|
-
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource
|
|
8
|
-
at https://srqhjwivpohjcjqikjry.supabase.co/auth/v1/token?grant_type=password
|
|
9
|
-
(Reason: CORS request did not succeed)
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
This happens because Supabase is blocking requests from `localhost:8087` due to CORS (Cross-Origin Resource Sharing) policy.
|
|
13
|
-
|
|
14
|
-
## Solution: Add Your Origin to Supabase CORS Settings
|
|
15
|
-
|
|
16
|
-
### Step 1: Log into Supabase Dashboard
|
|
17
|
-
|
|
18
|
-
1. Go to [https://app.supabase.com](https://app.supabase.com)
|
|
19
|
-
2. Log in with your Supabase account
|
|
20
|
-
3. Select your project (the one with URL `srqhjwivpohjcjqikjry.supabase.co`)
|
|
21
|
-
|
|
22
|
-
### Step 2: Navigate to API Settings
|
|
23
|
-
|
|
24
|
-
1. In the left sidebar, click on **"Settings"** (gear icon)
|
|
25
|
-
2. Click on **"API"** in the settings menu
|
|
26
|
-
|
|
27
|
-
### Step 3: Find CORS Settings
|
|
28
|
-
|
|
29
|
-
Look for one of these sections (Supabase UI may vary):
|
|
30
|
-
|
|
31
|
-
**Option A: "CORS" Section**
|
|
32
|
-
- Scroll down to find **"CORS"** or **"Allowed Origins"** section
|
|
33
|
-
- You'll see a text area or input field for allowed origins
|
|
34
|
-
|
|
35
|
-
**Option B: "Additional Configuration"**
|
|
36
|
-
- Look for **"Additional Configuration"** or **"Advanced Settings"**
|
|
37
|
-
- Find **"CORS Origins"** or **"Allowed Origins"**
|
|
38
|
-
|
|
39
|
-
**Option C: "Auth" Settings**
|
|
40
|
-
- Sometimes CORS is under **"Auth"** → **"URL Configuration"**
|
|
41
|
-
- Look for **"Site URL"** or **"Redirect URLs"** sections
|
|
42
|
-
- CORS might be listed as **"Additional Redirect URLs"** or **"Allowed Origins"**
|
|
43
|
-
|
|
44
|
-
### Step 4: Add Your Development Origin
|
|
45
|
-
|
|
46
|
-
In the CORS/Allowed Origins field, add:
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
http://localhost:8087
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**If there are already origins listed**, add yours on a new line or separated by commas:
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
http://localhost:3000
|
|
56
|
-
http://localhost:8087
|
|
57
|
-
http://localhost:5173
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**For development, you can also use a wildcard** (less secure, but convenient):
|
|
61
|
-
```
|
|
62
|
-
*
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
⚠️ **Note**: Wildcard (`*`) allows ALL origins. Only use this for development, never in production!
|
|
66
|
-
|
|
67
|
-
### Step 5: Save Changes
|
|
68
|
-
|
|
69
|
-
1. Click **"Save"** or **"Update"** button
|
|
70
|
-
2. Wait for confirmation that settings were saved
|
|
71
|
-
3. Changes may take a few seconds to propagate
|
|
72
|
-
|
|
73
|
-
### Step 6: Test Login
|
|
74
|
-
|
|
75
|
-
1. Go back to your app (`http://localhost:8087`)
|
|
76
|
-
2. Try logging in again
|
|
77
|
-
3. Check browser console - CORS error should be gone
|
|
78
|
-
|
|
79
|
-
## Alternative: Check Project Settings
|
|
80
|
-
|
|
81
|
-
If you can't find CORS settings in API settings:
|
|
82
|
-
|
|
83
|
-
### Method 1: Project Settings → API
|
|
84
|
-
1. Go to **"Project Settings"** (top right, gear icon)
|
|
85
|
-
2. Click **"API"**
|
|
86
|
-
3. Look for **"CORS"** or **"Allowed Origins"**
|
|
87
|
-
|
|
88
|
-
### Method 2: Auth Settings
|
|
89
|
-
1. Go to **"Authentication"** in left sidebar
|
|
90
|
-
2. Click **"URL Configuration"**
|
|
91
|
-
3. Check **"Site URL"** and **"Redirect URLs"**
|
|
92
|
-
4. Add `http://localhost:8087` to redirect URLs if needed
|
|
93
|
-
|
|
94
|
-
### Method 3: Database Settings
|
|
95
|
-
1. Go to **"Settings"** → **"Database"**
|
|
96
|
-
2. Look for **"Connection Pooling"** or **"API"** settings
|
|
97
|
-
3. CORS might be listed there
|
|
98
|
-
|
|
99
|
-
## If CORS Settings Don't Exist
|
|
100
|
-
|
|
101
|
-
Some Supabase projects might not have explicit CORS settings. In that case:
|
|
102
|
-
|
|
103
|
-
### Option 1: Check Site URL
|
|
104
|
-
1. Go to **"Authentication"** → **"URL Configuration"**
|
|
105
|
-
2. Set **"Site URL"** to `http://localhost:8087`
|
|
106
|
-
3. Add `http://localhost:8087` to **"Redirect URLs"**
|
|
107
|
-
|
|
108
|
-
### Option 2: Use Supabase CLI
|
|
109
|
-
If you have Supabase CLI installed:
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# Update CORS settings via CLI
|
|
113
|
-
supabase projects update <project-id> --cors-origins "http://localhost:8087"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Option 3: Contact Supabase Support
|
|
117
|
-
If you can't find CORS settings anywhere:
|
|
118
|
-
1. Check Supabase documentation for your project version
|
|
119
|
-
2. Contact Supabase support
|
|
120
|
-
3. They can help configure CORS for your project
|
|
121
|
-
|
|
122
|
-
## Production Setup
|
|
123
|
-
|
|
124
|
-
For production, you'll need to:
|
|
125
|
-
|
|
126
|
-
1. **Add your production domain**:
|
|
127
|
-
```
|
|
128
|
-
https://yourdomain.com
|
|
129
|
-
https://www.yourdomain.com
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
2. **Remove wildcard** (`*`) if you used it for development
|
|
133
|
-
|
|
134
|
-
3. **Set Site URL** in Auth settings to your production URL
|
|
135
|
-
|
|
136
|
-
## Verification
|
|
137
|
-
|
|
138
|
-
After making changes:
|
|
139
|
-
|
|
140
|
-
1. **Clear browser cache** (important!)
|
|
141
|
-
2. **Hard refresh** the page (Ctrl+Shift+R or Cmd+Shift+R)
|
|
142
|
-
3. **Try login again**
|
|
143
|
-
4. **Check browser console** - should see no CORS errors
|
|
144
|
-
|
|
145
|
-
## Common Issues
|
|
146
|
-
|
|
147
|
-
### "Settings saved but still getting CORS error"
|
|
148
|
-
- Wait 30-60 seconds for changes to propagate
|
|
149
|
-
- Clear browser cache
|
|
150
|
-
- Try incognito/private browsing mode
|
|
151
|
-
- Check if you're using the correct origin (http vs https, port number)
|
|
152
|
-
|
|
153
|
-
### "Can't find CORS settings"
|
|
154
|
-
- Supabase UI changes frequently
|
|
155
|
-
- Try searching for "CORS", "origins", or "allowed"
|
|
156
|
-
- Check Supabase documentation for your project version
|
|
157
|
-
- Contact Supabase support
|
|
158
|
-
|
|
159
|
-
### "Works in one browser but not another"
|
|
160
|
-
- Clear cache in both browsers
|
|
161
|
-
- Check browser security settings
|
|
162
|
-
- Try disabling browser extensions
|
|
163
|
-
- Check if one browser has stricter CORS policies
|
|
164
|
-
|
|
165
|
-
## Still Having Issues?
|
|
166
|
-
|
|
167
|
-
If CORS error persists after following these steps:
|
|
168
|
-
|
|
169
|
-
1. **Double-check the origin**: Make sure `http://localhost:8087` matches exactly (including `http://` not `https://`)
|
|
170
|
-
2. **Check network tab**: Open browser DevTools → Network tab, look for the failed request, check request headers
|
|
171
|
-
3. **Verify Supabase project**: Make sure you're editing the correct project (check the URL in error message)
|
|
172
|
-
4. **Check for typos**: Ensure no extra spaces or characters in CORS settings
|
|
173
|
-
5. **Try different port**: If using a different port, add that too: `http://localhost:5173`, `http://localhost:3000`, etc.
|
|
174
|
-
|
|
175
|
-
## Summary
|
|
176
|
-
|
|
177
|
-
1. ✅ Go to Supabase Dashboard → Settings → API
|
|
178
|
-
2. ✅ Find "CORS" or "Allowed Origins" section
|
|
179
|
-
3. ✅ Add `http://localhost:8087`
|
|
180
|
-
4. ✅ Save changes
|
|
181
|
-
5. ✅ Clear browser cache and test
|
|
182
|
-
|
|
183
|
-
The CORS error should be resolved after these steps!
|
|
184
|
-
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Cake PagePermissionGuard Issue - Summary & Action Plan
|
|
8
|
-
|
|
9
|
-
## 🚨 Issue Status: CAKE APPLICATION BUG (Not pace-core)
|
|
10
|
-
|
|
11
|
-
**Date**: January 16, 2025
|
|
12
|
-
**Priority**: Critical
|
|
13
|
-
**Status**: Requires Cake team action
|
|
14
|
-
|
|
15
|
-
## Problem Summary
|
|
16
|
-
|
|
17
|
-
The `PagePermissionGuard` component from pace-core is working correctly, but Cake's implementation has a UI layering issue causing the Access Denied modal to persist despite correct permissions.
|
|
18
|
-
|
|
19
|
-
### Evidence from Console Logs
|
|
20
|
-
|
|
21
|
-
✅ **pace-core is working correctly**:
|
|
22
|
-
- `useCan` returns `can: true`
|
|
23
|
-
- `willShowAccessDenied: false`
|
|
24
|
-
- `willShowContent: true`
|
|
25
|
-
- `RENDERING CONTENT STATE` is logged
|
|
26
|
-
|
|
27
|
-
❌ **Cake has implementation issues**:
|
|
28
|
-
- Access Denied modal remains visible
|
|
29
|
-
- Infinite re-render loop detected (same instance ID `14bp0efg9`)
|
|
30
|
-
- UI state not updating despite correct component state
|
|
31
|
-
|
|
32
|
-
## Root Cause Analysis
|
|
33
|
-
|
|
34
|
-
Based on the console logs, this is **definitely a Cake application issue**, not a pace-core bug. The most likely causes are:
|
|
35
|
-
|
|
36
|
-
1. **Multiple PagePermissionGuard instances** rendering simultaneously
|
|
37
|
-
2. **Infinite re-render loop** in the Meals component
|
|
38
|
-
3. **CSS/Modal layering conflicts** keeping the modal visible
|
|
39
|
-
4. **React state management issues** preventing UI updates
|
|
40
|
-
|
|
41
|
-
## Immediate Action Required
|
|
42
|
-
|
|
43
|
-
### Step 1: Add Diagnostic Code
|
|
44
|
-
|
|
45
|
-
Add this to your Meals component to identify the exact issue:
|
|
46
|
-
|
|
47
|
-
```tsx
|
|
48
|
-
import { useEffect, useRef } from 'react';
|
|
49
|
-
|
|
50
|
-
export function Meals() {
|
|
51
|
-
const renderCount = useRef(0);
|
|
52
|
-
renderCount.current += 1;
|
|
53
|
-
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
// Check for infinite re-renders
|
|
56
|
-
if (renderCount.current > 10) {
|
|
57
|
-
console.error('🚨 INFINITE RE-RENDER DETECTED!', {
|
|
58
|
-
renderCount: renderCount.current,
|
|
59
|
-
component: 'Meals'
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Check for multiple PagePermissionGuard instances
|
|
64
|
-
const guards = document.querySelectorAll('[data-testid*="page-permission-guard"]');
|
|
65
|
-
console.log('[Meals] PagePermissionGuard instances:', guards.length);
|
|
66
|
-
|
|
67
|
-
// Check for multiple modals
|
|
68
|
-
const modals = document.querySelectorAll('[role="dialog"], .modal, [data-testid*="modal"]');
|
|
69
|
-
console.log('[Meals] Modal elements:', modals.length);
|
|
70
|
-
|
|
71
|
-
}, []);
|
|
72
|
-
|
|
73
|
-
console.log('[Meals] Component render count:', renderCount.current);
|
|
74
|
-
|
|
75
|
-
return (
|
|
76
|
-
<div>
|
|
77
|
-
<PagePermissionGuard pageName="meals" operation="read">
|
|
78
|
-
<DataTable ... />
|
|
79
|
-
</PagePermissionGuard>
|
|
80
|
-
</div>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Step 2: Check for Common Issues
|
|
86
|
-
|
|
87
|
-
1. **Multiple PagePermissionGuard wrappers**:
|
|
88
|
-
```tsx
|
|
89
|
-
// ❌ WRONG - Don't do this
|
|
90
|
-
<PagePermissionGuard>
|
|
91
|
-
<PagePermissionGuard>
|
|
92
|
-
<DataTable />
|
|
93
|
-
</PagePermissionGuard>
|
|
94
|
-
</PagePermissionGuard>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
2. **Conditional rendering**:
|
|
98
|
-
```tsx
|
|
99
|
-
// ❌ WRONG - Don't conditionally render the guard
|
|
100
|
-
{someCondition && (
|
|
101
|
-
<PagePermissionGuard>
|
|
102
|
-
<DataTable />
|
|
103
|
-
</PagePermissionGuard>
|
|
104
|
-
)}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
3. **State management causing re-renders**:
|
|
108
|
-
```tsx
|
|
109
|
-
// ❌ WRONG - This can cause infinite loops
|
|
110
|
-
const [loading, setLoading] = useState(true);
|
|
111
|
-
useEffect(() => {
|
|
112
|
-
setLoading(false);
|
|
113
|
-
}, [loading]); // This dependency causes infinite loop
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Step 3: Simplify the Implementation
|
|
117
|
-
|
|
118
|
-
Use this minimal implementation to test:
|
|
119
|
-
|
|
120
|
-
```tsx
|
|
121
|
-
import React from 'react';
|
|
122
|
-
import { PagePermissionGuard, DataTable } from '@jmruthers/pace-core';
|
|
123
|
-
|
|
124
|
-
export function Meals() {
|
|
125
|
-
console.log('[Meals] Rendering Meals component');
|
|
126
|
-
|
|
127
|
-
return (
|
|
128
|
-
<div>
|
|
129
|
-
<h1>Meals</h1>
|
|
130
|
-
<p>Manage the meals available for AJ2025...</p>
|
|
131
|
-
|
|
132
|
-
<PagePermissionGuard
|
|
133
|
-
pageName="meals"
|
|
134
|
-
operation="read"
|
|
135
|
-
fallback={
|
|
136
|
-
<div className="min-h-screen flex items-center justify-center">
|
|
137
|
-
<div className="text-center">
|
|
138
|
-
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-sec-900 mx-auto mb-4"></div>
|
|
139
|
-
<p>Loading permissions...</p>
|
|
140
|
-
</div>
|
|
141
|
-
</div>
|
|
142
|
-
}
|
|
143
|
-
>
|
|
144
|
-
<DataTable
|
|
145
|
-
data={processedMeals || []}
|
|
146
|
-
columns={columns}
|
|
147
|
-
rbac={{
|
|
148
|
-
resource: 'meals',
|
|
149
|
-
pageId: 'meals'
|
|
150
|
-
}}
|
|
151
|
-
// ... other props
|
|
152
|
-
/>
|
|
153
|
-
</PagePermissionGuard>
|
|
154
|
-
</div>
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
## Expected Results After Fix
|
|
160
|
-
|
|
161
|
-
After implementing the fix, you should see:
|
|
162
|
-
|
|
163
|
-
1. ✅ Only one `PagePermissionGuard` instance in console
|
|
164
|
-
2. ✅ No infinite re-render warnings
|
|
165
|
-
3. ✅ `RENDERING CONTENT STATE` appears once
|
|
166
|
-
4. ✅ Access Denied modal disappears
|
|
167
|
-
5. ✅ DataTable content becomes visible
|
|
168
|
-
|
|
169
|
-
## Files to Check
|
|
170
|
-
|
|
171
|
-
1. **Meals component** - Look for multiple PagePermissionGuard wrappers
|
|
172
|
-
2. **Parent components** - Check for conditional rendering
|
|
173
|
-
3. **State management** - Look for infinite re-render causes
|
|
174
|
-
4. **CSS files** - Check for modal z-index conflicts
|
|
175
|
-
|
|
176
|
-
## Debugging Tools
|
|
177
|
-
|
|
178
|
-
1. **React DevTools** - Check component tree for multiple instances
|
|
179
|
-
2. **Browser DevTools** - Check for multiple modal elements
|
|
180
|
-
3. **Console logs** - Look for infinite re-render warnings
|
|
181
|
-
|
|
182
|
-
## Contact Information
|
|
183
|
-
|
|
184
|
-
If you need further assistance after implementing these fixes, please provide:
|
|
185
|
-
|
|
186
|
-
1. The complete Meals component code
|
|
187
|
-
2. Console logs after adding the diagnostic code
|
|
188
|
-
3. Screenshots of React DevTools component tree
|
|
189
|
-
4. Any parent component that renders the Meals component
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
**Note**: This is confirmed to be a Cake application issue, not a pace-core bug. The pace-core component is working correctly as evidenced by the console logs showing proper permission resolution and state management.
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Database View Compatibility
|
|
8
|
-
|
|
9
|
-
## Problem: "column reference 'user_id' is ambiguous" Error
|
|
10
|
-
|
|
11
|
-
If you're seeing errors like:
|
|
12
|
-
```
|
|
13
|
-
column reference 'user_id' is ambiguous
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
This typically occurs when your database uses **views** instead of base tables for `organisation_memberships` or `rbac_organisation_roles`, and these views join multiple tables that both contain `user_id` columns.
|
|
17
|
-
|
|
18
|
-
## Understanding the Issue
|
|
19
|
-
|
|
20
|
-
@jmruthers/pace-core expects these tables to be simple base tables:
|
|
21
|
-
- `organisation_memberships`
|
|
22
|
-
- `rbac_organisation_roles`
|
|
23
|
-
- `organisations`
|
|
24
|
-
|
|
25
|
-
When your database uses **views with complex joins** for these table names, PostgreSQL cannot determine which `user_id` column to use in queries, causing the "ambiguous column reference" error.
|
|
26
|
-
|
|
27
|
-
## Solution 1: Apply Compatibility Migration (Recommended)
|
|
28
|
-
|
|
29
|
-
@jmruthers/pace-core includes a compatibility migration that provides SQL functions to handle this scenario.
|
|
30
|
-
|
|
31
|
-
### Step 1: Apply the Migration
|
|
32
|
-
Copy the migration file to your Supabase project:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# Copy the migration to your project
|
|
36
|
-
cp node_modules/@jmruthers/pace-core/supabase/migrations/20250202000001_add_view_compatibility_functions.sql supabase/migrations/
|
|
37
|
-
|
|
38
|
-
# Apply the migration
|
|
39
|
-
supabase db push
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Step 2: Verify Functions Are Created
|
|
43
|
-
The migration creates these functions:
|
|
44
|
-
- `get_user_organisation_memberships(target_user_id UUID)`
|
|
45
|
-
- `get_user_organisation_roles(target_user_id UUID, org_ids UUID[])`
|
|
46
|
-
|
|
47
|
-
@jmruthers/pace-core will automatically detect and use these functions when it encounters ambiguous column errors.
|
|
48
|
-
|
|
49
|
-
## Solution 2: Modify Your Database Views
|
|
50
|
-
|
|
51
|
-
If you prefer to modify your database views instead, ensure they qualify column names explicitly:
|
|
52
|
-
|
|
53
|
-
```sql
|
|
54
|
-
-- Example: Fix ambiguous columns in a view
|
|
55
|
-
CREATE OR REPLACE VIEW organisation_memberships AS
|
|
56
|
-
SELECT
|
|
57
|
-
om.id,
|
|
58
|
-
om.user_id, -- Explicitly qualify with table alias
|
|
59
|
-
om.organisation_id,
|
|
60
|
-
om.is_primary,
|
|
61
|
-
om.joined_at,
|
|
62
|
-
om.status,
|
|
63
|
-
om.created_at,
|
|
64
|
-
om.updated_at,
|
|
65
|
-
om.created_by,
|
|
66
|
-
om.updated_by,
|
|
67
|
-
-- Include other joined data with different column names
|
|
68
|
-
u.email as user_email, -- Avoid column name conflicts
|
|
69
|
-
o.name as org_name
|
|
70
|
-
FROM organisation_memberships_base om
|
|
71
|
-
JOIN users u ON u.id = om.user_id
|
|
72
|
-
JOIN organisations o ON o.id = om.organisation_id;
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Solution 3: Use Base Tables
|
|
76
|
-
|
|
77
|
-
If possible, use base tables instead of views for the core @jmruthers/pace-core tables:
|
|
78
|
-
- `organisation_memberships`
|
|
79
|
-
- `rbac_organisation_roles`
|
|
80
|
-
- `organisations`
|
|
81
|
-
|
|
82
|
-
Keep your complex views with different names and use them for your application-specific queries.
|
|
83
|
-
|
|
84
|
-
## Error Detection and Fallback
|
|
85
|
-
|
|
86
|
-
@jmruthers/pace-core v0.3.17+ includes automatic detection of this issue:
|
|
87
|
-
|
|
88
|
-
1. **First attempt**: Standard table query
|
|
89
|
-
2. **Ambiguous error detected**: Automatically tries compatibility functions
|
|
90
|
-
3. **Functions not available**: Provides clear error message with migration instructions
|
|
91
|
-
|
|
92
|
-
## Missing user_profiles Table
|
|
93
|
-
|
|
94
|
-
If you're also seeing "table 'user_profiles' doesn't exist":
|
|
95
|
-
|
|
96
|
-
This table is not required by @jmruthers/pace-core. If your application needs it, create it separately:
|
|
97
|
-
|
|
98
|
-
```sql
|
|
99
|
-
CREATE TABLE user_profiles (
|
|
100
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
101
|
-
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
102
|
-
display_name TEXT,
|
|
103
|
-
avatar_url TEXT,
|
|
104
|
-
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
105
|
-
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
106
|
-
);
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Testing Your Fix
|
|
110
|
-
|
|
111
|
-
After applying the fix, test that @jmruthers/pace-core loads correctly:
|
|
112
|
-
|
|
113
|
-
1. Clear your browser cache/localStorage
|
|
114
|
-
2. Reload your application
|
|
115
|
-
3. Check the console for @jmruthers/pace-core organisation loading messages
|
|
116
|
-
4. Verify no "ambiguous column reference" errors appear
|
|
117
|
-
|
|
118
|
-
## Need Help?
|
|
119
|
-
|
|
120
|
-
If you're still experiencing issues:
|
|
121
|
-
|
|
122
|
-
1. Check your database views and their column names
|
|
123
|
-
2. Ensure the compatibility migration was applied successfully
|
|
124
|
-
3. Review the browser console for detailed error messages
|
|
125
|
-
4. Consider simplifying your database views for the core @jmruthers/pace-core tables
|