@jmruthers/pace-core 0.5.68 → 0.5.69
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/dist/{DataTable-4IUY7BXB.js → DataTable-MPBSXUC6.js} +5 -6
- package/dist/{PublicLoadingSpinner-DdKXTkCZ.d.ts → PublicLoadingSpinner-BOdyU3u-.d.ts} +1 -1
- package/dist/{chunk-PXWEDX7Y.js → chunk-2ARQW6VX.js} +3 -3
- package/dist/{chunk-MOJXHWDE.js → chunk-6JILXFEA.js} +335 -5
- package/dist/chunk-6JILXFEA.js.map +1 -0
- package/dist/{chunk-D7ARGIA3.js → chunk-6RBH67W7.js} +23 -6
- package/dist/chunk-6RBH67W7.js.map +1 -0
- package/dist/{chunk-ZMS23NS5.js → chunk-FJTAWPAQ.js} +3 -5
- package/dist/{chunk-ZMS23NS5.js.map → chunk-FJTAWPAQ.js.map} +1 -1
- package/dist/{chunk-OPCWH3A4.js → chunk-NO5QHMDX.js} +7 -6
- package/dist/chunk-NO5QHMDX.js.map +1 -0
- package/dist/{chunk-ZPK5656W.js → chunk-O3NWNXDY.js} +4 -5
- package/dist/chunk-O3NWNXDY.js.map +1 -0
- package/dist/{chunk-UYA6U6H7.js → chunk-Q2UP3ZWQ.js} +4 -4
- package/dist/{chunk-KRCRNXPD.js → chunk-RVYGJPOD.js} +79 -18
- package/dist/chunk-RVYGJPOD.js.map +1 -0
- package/dist/{chunk-NN45OBIS.js → chunk-UCMHBF7Y.js} +3 -5
- package/dist/{chunk-NN45OBIS.js.map → chunk-UCMHBF7Y.js.map} +1 -1
- package/dist/{chunk-ZPG4XPV5.js → chunk-V3QO3LL7.js} +5 -7
- package/dist/chunk-V3QO3LL7.js.map +1 -0
- package/dist/{chunk-U6GPOF6J.js → chunk-ZXJGZLLO.js} +17 -17
- package/dist/{chunk-U6GPOF6J.js.map → chunk-ZXJGZLLO.js.map} +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +8 -9
- package/dist/components.js.map +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +9 -6
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/providers.js +5 -7
- package/dist/rbac/index.js +5 -6
- package/dist/{usePublicRouteParams-CdoFxnJK.d.ts → usePublicRouteParams-Ua1Vz-HG.d.ts} +35 -1
- package/dist/utils.d.ts +4 -1
- package/dist/utils.js +3 -3
- package/docs/DOCUMENTATION_CHECKLIST.md +281 -0
- package/docs/README.md +22 -10
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- 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/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- 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 +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- 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/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +2 -2
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.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/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/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +39 -14
- package/docs/architecture/services.md +374 -0
- package/docs/best-practices/README.md +1 -1
- package/docs/best-practices/testing.md +1 -1
- package/docs/breaking-changes.md +182 -0
- package/docs/common-patterns.md +445 -0
- package/docs/core-concepts/authentication.md +26 -11
- package/docs/core-concepts/events.md +2 -0
- package/docs/core-concepts/organisations.md +2 -0
- package/docs/core-concepts/permissions.md +2 -0
- package/docs/{INDEX.md → documentation-index.md} +26 -38
- package/docs/faq.md +286 -0
- package/docs/{FILE_REFERENCE_SYSTEM.md → file-reference-system.md} +1 -1
- package/docs/getting-started/installation-guide.md +284 -0
- package/docs/getting-started/quick-start.md +8 -1
- package/docs/implementation-guides/app-layout.md +3 -1
- package/docs/implementation-guides/data-tables.md +2 -0
- package/docs/implementation-guides/dynamic-colors.md +47 -2
- package/docs/implementation-guides/event-theming-summary.md +220 -0
- package/docs/implementation-guides/forms.md +9 -7
- package/docs/implementation-guides/navigation.md +2 -0
- package/docs/migration/service-architecture.md +351 -0
- package/docs/rbac/README-rbac-rls-integration.md +2 -2
- package/docs/rbac/README.md +1 -1
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/quick-start.md +2 -0
- package/docs/rbac/rbac-rls-integration.md +2 -2
- package/docs/style-guide.md +136 -1
- package/docs/testing/README.md +1 -1
- package/docs/troubleshooting/authentication-issues.md +334 -0
- package/docs/troubleshooting/common-issues.md +2 -0
- package/docs/troubleshooting/styling-issues.md +199 -144
- package/docs/usage.md +23 -2
- package/package.json +1 -1
- package/src/__tests__/{TESTING_GUIDELINES.md → TEST_GUIDE_CURSOR.md} +20 -0
- package/src/__tests__/TEST_GUIDE_HUMAN.md +103 -0
- package/src/__tests__/fixtures/test-data.ts +90 -0
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +260 -0
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +224 -0
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +273 -0
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +98 -0
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +436 -0
- package/src/__tests__/helpers/__tests__/timer-utils.test.ts +371 -0
- package/src/__tests__/helpers/component-test-utils.tsx +14 -4
- package/src/__tests__/helpers/optimized-test-setup.ts +68 -0
- package/src/__tests__/helpers/test-providers.tsx +329 -0
- package/src/__tests__/helpers/test-utils.tsx +91 -45
- package/src/__tests__/helpers/timer-utils.ts +71 -0
- package/src/__tests__/hooks/usePermissions.test.ts +1 -5
- package/src/__tests__/integration/UserProfile.test.tsx +1 -5
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +42 -12
- package/src/__tests__/setup.ts +34 -28
- package/src/components/Alert/Alert.test.tsx +1 -5
- package/src/components/Avatar/Avatar.test.tsx +1 -5
- package/src/components/Button/Button.test.tsx +4 -20
- package/src/components/Card/Card.test.tsx +1 -5
- package/src/components/Checkbox/Checkbox.test.tsx +1 -5
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +1 -5
- package/src/components/DataTable/__tests__/DataTable.test.tsx +45 -49
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +1 -5
- package/src/components/DataTable/__tests__/styles.test.ts +382 -0
- package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +409 -0
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +634 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +519 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +714 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +592 -0
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +354 -0
- package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +539 -0
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +1 -5
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +1 -8
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +34 -38
- package/src/components/Footer/Footer.test.tsx +1 -5
- package/src/components/Form/Form.test.tsx +22 -35
- package/src/components/Header/Header.test.tsx +1 -9
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +1 -5
- package/src/components/Input/Input.test.tsx +2 -10
- package/src/components/LoginForm/LoginForm.test.tsx +1 -5
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +24 -24
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +1 -6
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +6 -16
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +1 -5
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +1 -5
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +1 -7
- package/src/components/PasswordReset/PasswordChangeForm.test.tsx +1 -9
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +1 -9
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +4 -5
- package/src/components/PublicLayout/PublicPageHeader.tsx +13 -9
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +666 -0
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +457 -0
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +393 -0
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +351 -0
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +374 -0
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +388 -0
- package/src/components/Select/Select.bug-test.tsx +69 -0
- package/src/components/Select/Select.refactored.tsx +497 -0
- package/src/components/Select/Select.test.tsx +42 -49
- package/src/components/Select/Select.tsx +5 -2
- package/src/components/Select/hooks.ts +254 -0
- package/src/components/Switch/Switch.test.tsx +1 -5
- package/src/components/Table/__tests__/Table.test.tsx +775 -0
- package/src/components/Toast/Toast.test.tsx +15 -8
- package/src/components/Tooltip/Tooltip.test.tsx +1 -5
- package/src/components/UserMenu/UserMenu.test.tsx +3 -15
- package/src/components/__tests__/FileDisplay.test.tsx +575 -0
- package/src/components/__tests__/FileUpload.test.tsx +446 -0
- package/src/components/__tests__/SuperAdminGuard.test.tsx +422 -354
- package/src/hooks/__tests__/ServiceHooks.test.tsx +613 -0
- package/src/hooks/__tests__/hooks.integration.test.tsx +1 -10
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +10 -14
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +307 -0
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +1 -6
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +1 -5
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +6 -9
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +321 -0
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +583 -0
- package/src/hooks/__tests__/usePublicEventLogo.unit.test.ts +640 -0
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +435 -0
- package/src/hooks/__tests__/useRBAC.unit.test.ts +10 -10
- package/src/hooks/__tests__/useStorage.unit.test.ts +751 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/public/usePublicEvent.ts +30 -9
- package/src/hooks/public/usePublicRouteParams.ts +13 -3
- package/src/hooks/services/useAuth.ts +50 -0
- package/src/hooks/services/useAuthService.ts +30 -0
- package/src/hooks/services/useCurrentEvent.ts +36 -0
- package/src/hooks/services/useCurrentOrganisation.ts +52 -0
- package/src/hooks/services/useEventService.ts +30 -0
- package/src/hooks/services/useInactivityService.ts +30 -0
- package/src/hooks/services/useOrganisationService.ts +30 -0
- package/src/hooks/services/usePermissions.ts +70 -0
- package/src/hooks/services/useRBACService.ts +30 -0
- package/src/hooks/useCounter.test.ts +1 -5
- package/src/hooks/useEventTheme.ts +86 -0
- package/src/hooks/useOrganisationPermissions.test.ts +2 -5
- package/src/hooks/useOrganisationSecurity.test.ts +1 -5
- package/src/hooks/usePermissionCache.test.ts +1 -5
- package/src/hooks/usePermissionCheck.ts +150 -0
- package/src/hooks/useSecureDataAccess.test.ts +1 -5
- package/src/index.ts +1 -0
- package/src/providers/OrganisationProvider.test.tsx +1 -5
- package/src/providers/OrganisationProvider.tsx +56 -4
- package/src/providers/UnifiedAuthProvider.test.tsx +1 -5
- package/src/providers/__tests__/AuthProvider.test.tsx +105 -439
- package/src/providers/__tests__/AuthProvider.test.tsx.backup +771 -0
- package/src/providers/__tests__/EventProvider.test.tsx +211 -110
- package/src/providers/__tests__/EventProvider.test.tsx.backup +824 -0
- package/src/providers/__tests__/InactivityProvider.test.tsx +1 -5
- package/src/providers/__tests__/OrganisationProvider.test.tsx +97 -261
- package/src/providers/__tests__/OrganisationProvider.test.tsx.backup +820 -0
- package/src/providers/__tests__/ServiceProviders.test.tsx +477 -0
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +72 -504
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup +911 -0
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup2 +166 -0
- package/src/providers/services/AuthServiceProvider.tsx +65 -0
- package/src/providers/services/EventServiceProvider.tsx +83 -0
- package/src/providers/services/InactivityServiceProvider.tsx +83 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +77 -0
- package/src/providers/services/RBACServiceProvider.tsx +79 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +368 -0
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +210 -0
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +269 -0
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +892 -0
- package/src/rbac/__tests__/engine.comprehensive.test.ts +954 -0
- package/src/rbac/__tests__/integration.authflow.test.tsx +1 -5
- package/src/rbac/__tests__/integration.navigation.test.tsx +1 -4
- package/src/rbac/__tests__/rbac-core.test.tsx +2 -7
- package/src/rbac/__tests__/rbac-functions.test.ts +1 -9
- package/src/rbac/__tests__/rbac-integration.test.ts +1 -9
- package/src/rbac/api.test.ts +1 -9
- package/src/rbac/cache.test.ts +10 -8
- package/src/rbac/cli/__tests__/policy-manager.test.ts +339 -0
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +1 -5
- package/src/rbac/components/NavigationProvider.test.tsx +1 -5
- package/src/rbac/components/PagePermissionProvider.test.tsx +1 -5
- package/src/rbac/components/SecureDataProvider.test.tsx +1 -5
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +25 -29
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +27 -30
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +23 -27
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +18 -22
- package/src/rbac/config.test.ts +1 -5
- package/src/rbac/hooks/useCan.test.ts +262 -9
- package/src/rbac/hooks/usePermissions.test.ts +246 -6
- package/src/rbac/hooks/useRBAC.simple.test.ts +1 -5
- package/src/rbac/hooks/useRBAC.test.ts +472 -198
- package/src/rbac/providers/__tests__/RBACProvider.test.tsx +1 -9
- package/src/services/AuthService.ts +416 -0
- package/src/services/EventService.ts +366 -0
- package/src/services/InactivityService.ts +388 -0
- package/src/services/OrganisationService.ts +592 -0
- package/src/services/RBACService.ts +522 -0
- package/src/services/__tests__/AuthService.test.ts +356 -0
- package/src/services/__tests__/BaseService.test.ts +314 -0
- package/src/services/__tests__/EventService.test.ts +489 -0
- package/src/services/__tests__/InactivityService.test.ts +403 -0
- package/src/services/__tests__/OrganisationService.test.ts +660 -0
- package/src/services/__tests__/RBACService.test.ts +492 -0
- package/src/services/base/BaseService.ts +87 -0
- package/src/services/interfaces/IAuthService.ts +39 -0
- package/src/services/interfaces/IEventService.ts +30 -0
- package/src/services/interfaces/IInactivityService.ts +31 -0
- package/src/services/interfaces/IOrganisationService.ts +41 -0
- package/src/services/interfaces/IRBACService.ts +62 -0
- package/src/theming/__tests__/runtime.test.ts +540 -0
- package/src/types/__tests__/file-reference.test.ts +447 -0
- package/src/types/__tests__/organisation.test.ts +1133 -0
- package/src/types/__tests__/theme.test.ts +830 -0
- package/src/types/__tests__/type-validation.test.ts +527 -0
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +1 -5
- package/src/utils/__tests__/debugLogger.test.ts +417 -0
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +1 -6
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +1 -5
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +35 -35
- package/src/utils/__tests__/organisationContext.unit.test.ts +1 -5
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +5 -11
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -6
- package/src/utils/__tests__/secureStorage.unit.test.ts +1 -5
- package/src/utils/__tests__/securityMonitor.unit.test.ts +1 -5
- package/src/utils/__tests__/sessionTracking.unit.test.ts +1 -5
- package/src/utils/appIdResolver.test.ts +6 -10
- package/src/utils/appNameResolver.simple.test.ts +142 -0
- package/src/utils/appNameResolver.test.ts +31 -458
- package/src/utils/appNameResolver.test.ts.backup +494 -0
- package/src/utils/debugLogger.ts +26 -5
- package/src/utils/formatDate.test.ts +1 -5
- package/src/utils/organisationContext.test.ts +1 -5
- package/src/utils/performanceBudgets.ts +3 -4
- package/src/utils/secureDataAccess.test.ts +1 -5
- package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -5
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +1 -5
- package/dist/chunk-D7ARGIA3.js.map +0 -1
- package/dist/chunk-IPCH4YPT.js +0 -315
- package/dist/chunk-IPCH4YPT.js.map +0 -1
- package/dist/chunk-KRCRNXPD.js.map +0 -1
- package/dist/chunk-MOJXHWDE.js.map +0 -1
- package/dist/chunk-OPCWH3A4.js.map +0 -1
- package/dist/chunk-ZPG4XPV5.js.map +0 -1
- package/dist/chunk-ZPK5656W.js.map +0 -1
- package/docs/getting-started/installation.md +0 -269
- package/src/__tests__/REBUILD_PLAN.md +0 -223
- /package/dist/{DataTable-4IUY7BXB.js.map → DataTable-MPBSXUC6.js.map} +0 -0
- /package/dist/{chunk-PXWEDX7Y.js.map → chunk-2ARQW6VX.js.map} +0 -0
- /package/dist/{chunk-UYA6U6H7.js.map → chunk-Q2UP3ZWQ.js.map} +0 -0
|
@@ -32,11 +32,10 @@ import {
|
|
|
32
32
|
useDataTableContext,
|
|
33
33
|
usePluginRegistry,
|
|
34
34
|
useStateManager
|
|
35
|
-
} from "./chunk-
|
|
36
|
-
import "./chunk-
|
|
35
|
+
} from "./chunk-NO5QHMDX.js";
|
|
36
|
+
import "./chunk-FJTAWPAQ.js";
|
|
37
37
|
import "./chunk-NHR52QAQ.js";
|
|
38
38
|
import "./chunk-B2WTCLCV.js";
|
|
39
|
-
import "./chunk-IPCH4YPT.js";
|
|
40
39
|
import {
|
|
41
40
|
DataChunkManager,
|
|
42
41
|
SearchIndex,
|
|
@@ -48,10 +47,10 @@ import {
|
|
|
48
47
|
throttle,
|
|
49
48
|
useDataTablePerformance
|
|
50
49
|
} from "./chunk-YNUBMSMV.js";
|
|
51
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-6JILXFEA.js";
|
|
52
51
|
import "./chunk-ULBI5JGB.js";
|
|
53
52
|
import "./chunk-5BSLGBYI.js";
|
|
54
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-6RBH67W7.js";
|
|
55
54
|
import "./chunk-PLDDJCW6.js";
|
|
56
55
|
export {
|
|
57
56
|
ActionButtons,
|
|
@@ -97,4 +96,4 @@ export {
|
|
|
97
96
|
usePluginRegistry,
|
|
98
97
|
useStateManager
|
|
99
98
|
};
|
|
100
|
-
//# sourceMappingURL=DataTable-
|
|
99
|
+
//# sourceMappingURL=DataTable-MPBSXUC6.js.map
|
|
@@ -3139,7 +3139,7 @@ declare function usePublicPageContext$1(): {
|
|
|
3139
3139
|
|
|
3140
3140
|
interface PublicPageHeaderProps {
|
|
3141
3141
|
/** The event data for this public page */
|
|
3142
|
-
event
|
|
3142
|
+
event?: Event;
|
|
3143
3143
|
/** The event code for this public page */
|
|
3144
3144
|
eventCode: string;
|
|
3145
3145
|
/** Optional page title */
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
init_UnifiedAuthProvider,
|
|
4
4
|
useOrganisations,
|
|
5
5
|
useUnifiedAuth
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6JILXFEA.js";
|
|
7
7
|
import {
|
|
8
8
|
init_organisationContext,
|
|
9
9
|
setOrganisationContext
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6RBH67W7.js";
|
|
11
11
|
|
|
12
12
|
// src/hooks/useSecureDataAccess.ts
|
|
13
13
|
init_UnifiedAuthProvider();
|
|
@@ -380,4 +380,4 @@ function useSecureDataAccess() {
|
|
|
380
380
|
export {
|
|
381
381
|
useSecureDataAccess
|
|
382
382
|
};
|
|
383
|
-
//# sourceMappingURL=chunk-
|
|
383
|
+
//# sourceMappingURL=chunk-2ARQW6VX.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
init_debugLogger,
|
|
10
10
|
init_organisationContext,
|
|
11
11
|
setOrganisationContext
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-6RBH67W7.js";
|
|
13
13
|
import {
|
|
14
14
|
__commonJS,
|
|
15
15
|
__esm,
|
|
@@ -7304,6 +7304,7 @@ function OrganisationProvider({ children }) {
|
|
|
7304
7304
|
const isLoadingRef = useRef2(false);
|
|
7305
7305
|
const lastLoadTimeRef = useRef2(0);
|
|
7306
7306
|
const hasFailedRef = useRef2(false);
|
|
7307
|
+
const abortControllerRef = useRef2(null);
|
|
7307
7308
|
const { user, session, supabase, signOut } = useUnifiedAuth();
|
|
7308
7309
|
let navigate = null;
|
|
7309
7310
|
try {
|
|
@@ -7368,6 +7369,11 @@ function OrganisationProvider({ children }) {
|
|
|
7368
7369
|
console.log("OrganisationProvider", "Too soon since last load, skipping");
|
|
7369
7370
|
return;
|
|
7370
7371
|
}
|
|
7372
|
+
if (abortControllerRef.current) {
|
|
7373
|
+
abortControllerRef.current.abort();
|
|
7374
|
+
}
|
|
7375
|
+
abortControllerRef.current = new AbortController();
|
|
7376
|
+
const abortSignal = abortControllerRef.current.signal;
|
|
7371
7377
|
lastLoadTimeRef.current = now;
|
|
7372
7378
|
isLoadingRef.current = true;
|
|
7373
7379
|
setIsLoading(true);
|
|
@@ -7383,12 +7389,19 @@ function OrganisationProvider({ children }) {
|
|
|
7383
7389
|
try {
|
|
7384
7390
|
console.log("[OrganisationProvider] Making RPC call to data_user_organisation_roles_get...");
|
|
7385
7391
|
const timeoutPromise = new Promise((_, reject) => {
|
|
7386
|
-
setTimeout(() => reject(new Error("RPC call timeout after 10 seconds")), 1e4);
|
|
7392
|
+
const timeoutId = setTimeout(() => reject(new Error("RPC call timeout after 10 seconds")), 1e4);
|
|
7393
|
+
abortSignal.addEventListener("abort", () => {
|
|
7394
|
+
clearTimeout(timeoutId);
|
|
7395
|
+
reject(new Error("Request aborted"));
|
|
7396
|
+
});
|
|
7387
7397
|
});
|
|
7388
7398
|
const rpcPromise = supabase.rpc("data_user_organisation_roles_get", {
|
|
7389
7399
|
p_user_id: user.id,
|
|
7390
7400
|
p_organisation_id: null
|
|
7391
7401
|
});
|
|
7402
|
+
if (abortSignal.aborted) {
|
|
7403
|
+
throw new Error("Request aborted");
|
|
7404
|
+
}
|
|
7392
7405
|
const result = await Promise.race([rpcPromise, timeoutPromise]);
|
|
7393
7406
|
console.log("[OrganisationProvider] RPC call completed:", {
|
|
7394
7407
|
hasData: !!result.data,
|
|
@@ -7408,6 +7421,9 @@ function OrganisationProvider({ children }) {
|
|
|
7408
7421
|
if (membershipError.message?.includes("timeout")) {
|
|
7409
7422
|
console.log("[OrganisationProvider] RPC timed out, trying direct database query as fallback...");
|
|
7410
7423
|
try {
|
|
7424
|
+
if (abortSignal.aborted) {
|
|
7425
|
+
throw new Error("Request aborted");
|
|
7426
|
+
}
|
|
7411
7427
|
const { data: fallbackData, error: fallbackError } = await supabase.from("rbac_organisation_roles").select(`
|
|
7412
7428
|
id,
|
|
7413
7429
|
user_id,
|
|
@@ -7537,6 +7553,9 @@ function OrganisationProvider({ children }) {
|
|
|
7537
7553
|
lengths: { original: finalOrganisationIds.length, safe: safeOrganisationIds.length }
|
|
7538
7554
|
});
|
|
7539
7555
|
console.log("[OrganisationProvider] Using direct table query with manual filtering");
|
|
7556
|
+
if (abortSignal.aborted) {
|
|
7557
|
+
throw new Error("Request aborted");
|
|
7558
|
+
}
|
|
7540
7559
|
const { data: allOrganisations, error: orgError } = await supabase.from("organisations").select("id, name, display_name, subscription_tier, settings, is_active, parent_id, created_at, updated_at");
|
|
7541
7560
|
if (orgError) {
|
|
7542
7561
|
console.error("[OrganisationProvider] Error loading organisations:", orgError);
|
|
@@ -7616,6 +7635,7 @@ function OrganisationProvider({ children }) {
|
|
|
7616
7635
|
} finally {
|
|
7617
7636
|
isLoadingRef.current = false;
|
|
7618
7637
|
setIsLoading(false);
|
|
7638
|
+
abortControllerRef.current = null;
|
|
7619
7639
|
}
|
|
7620
7640
|
}, [user, session, supabase, clearAllCachedData]);
|
|
7621
7641
|
useEffect7(() => {
|
|
@@ -7626,6 +7646,10 @@ function OrganisationProvider({ children }) {
|
|
|
7626
7646
|
setIsLoading(false);
|
|
7627
7647
|
return;
|
|
7628
7648
|
}
|
|
7649
|
+
if (retryCount > 0 && Date.now() - lastLoadTimeRef.current < 5e3) {
|
|
7650
|
+
console.log("[OrganisationProvider] Circuit breaker active - too soon since last attempt");
|
|
7651
|
+
return;
|
|
7652
|
+
}
|
|
7629
7653
|
console.log("[OrganisationProvider] Authentication stable, loading organizations... (retry:", retryCount, ")");
|
|
7630
7654
|
loadUserOrganisations();
|
|
7631
7655
|
} else if (!user && !session) {
|
|
@@ -7642,7 +7666,18 @@ function OrganisationProvider({ children }) {
|
|
|
7642
7666
|
localStorage.removeItem(STORAGE_KEYS2.SELECTED_ORGANISATION);
|
|
7643
7667
|
localStorage.removeItem(STORAGE_KEYS2.ORGANISATION_CONTEXT);
|
|
7644
7668
|
}
|
|
7645
|
-
}, [user, session, supabase,
|
|
7669
|
+
}, [user, session, supabase, loadUserOrganisations]);
|
|
7670
|
+
useEffect7(() => {
|
|
7671
|
+
return () => {
|
|
7672
|
+
isLoadingRef.current = false;
|
|
7673
|
+
hasFailedRef.current = false;
|
|
7674
|
+
lastLoadTimeRef.current = 0;
|
|
7675
|
+
if (abortControllerRef.current) {
|
|
7676
|
+
abortControllerRef.current.abort();
|
|
7677
|
+
abortControllerRef.current = null;
|
|
7678
|
+
}
|
|
7679
|
+
};
|
|
7680
|
+
}, []);
|
|
7646
7681
|
const handleLogoutAndRedirect = useCallback7(async () => {
|
|
7647
7682
|
try {
|
|
7648
7683
|
await signOut();
|
|
@@ -7835,6 +7870,297 @@ var init_OrganisationProvider = __esm({
|
|
|
7835
7870
|
}
|
|
7836
7871
|
});
|
|
7837
7872
|
|
|
7873
|
+
// src/providers/EventProvider.tsx
|
|
7874
|
+
var EventProvider_exports = {};
|
|
7875
|
+
__export(EventProvider_exports, {
|
|
7876
|
+
EventProvider: () => EventProvider,
|
|
7877
|
+
useEvents: () => useEvents
|
|
7878
|
+
});
|
|
7879
|
+
import {
|
|
7880
|
+
createContext as createContext6,
|
|
7881
|
+
useContext as useContext6,
|
|
7882
|
+
useState as useState8,
|
|
7883
|
+
useEffect as useEffect8,
|
|
7884
|
+
useLayoutEffect,
|
|
7885
|
+
useCallback as useCallback8,
|
|
7886
|
+
useRef as useRef3,
|
|
7887
|
+
useMemo as useMemo7
|
|
7888
|
+
} from "react";
|
|
7889
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
7890
|
+
function getNextEventByDate(events) {
|
|
7891
|
+
if (!events || events.length === 0) {
|
|
7892
|
+
return null;
|
|
7893
|
+
}
|
|
7894
|
+
const now = /* @__PURE__ */ new Date();
|
|
7895
|
+
const futureEvents = events.filter((event) => {
|
|
7896
|
+
if (!event.event_date) return false;
|
|
7897
|
+
const eventDate = new Date(event.event_date);
|
|
7898
|
+
return eventDate >= now;
|
|
7899
|
+
});
|
|
7900
|
+
if (futureEvents.length === 0) {
|
|
7901
|
+
return null;
|
|
7902
|
+
}
|
|
7903
|
+
const sortedFutureEvents = futureEvents.sort((a, b) => {
|
|
7904
|
+
const dateA = new Date(a.event_date);
|
|
7905
|
+
const dateB = new Date(b.event_date);
|
|
7906
|
+
return dateA.getTime() - dateB.getTime();
|
|
7907
|
+
});
|
|
7908
|
+
return sortedFutureEvents[0];
|
|
7909
|
+
}
|
|
7910
|
+
function EventProvider({ children }) {
|
|
7911
|
+
const [events, setEvents] = useState8([]);
|
|
7912
|
+
const [selectedEvent, setSelectedEventState] = useState8(null);
|
|
7913
|
+
const [isLoading, setIsLoading] = useState8(true);
|
|
7914
|
+
const [error, setError] = useState8(null);
|
|
7915
|
+
const { user, session, supabase, appName, setSelectedEventId } = useUnifiedAuth();
|
|
7916
|
+
const isInitializedRef = useRef3(false);
|
|
7917
|
+
const isFetchingRef = useRef3(false);
|
|
7918
|
+
const hasAutoSelectedRef = useRef3(false);
|
|
7919
|
+
const userClearedEventRef = useRef3(false);
|
|
7920
|
+
const setSelectedEventIdRef = useRef3(setSelectedEventId);
|
|
7921
|
+
let selectedOrganisation = null;
|
|
7922
|
+
let ensureOrganisationContext = null;
|
|
7923
|
+
try {
|
|
7924
|
+
const orgContext = useOrganisations();
|
|
7925
|
+
selectedOrganisation = orgContext.selectedOrganisation;
|
|
7926
|
+
ensureOrganisationContext = orgContext.ensureOrganisationContext;
|
|
7927
|
+
} catch (error2) {
|
|
7928
|
+
console.warn("[EventProvider] Organisation context not available:", error2);
|
|
7929
|
+
}
|
|
7930
|
+
const loadPersistedEvent = useCallback8(async (events2) => {
|
|
7931
|
+
try {
|
|
7932
|
+
let persistedEventId = sessionStorage.getItem("pace-core-selected-event");
|
|
7933
|
+
if (!persistedEventId) {
|
|
7934
|
+
persistedEventId = localStorage.getItem("pace-core-selected-event");
|
|
7935
|
+
if (persistedEventId) {
|
|
7936
|
+
sessionStorage.setItem("pace-core-selected-event", persistedEventId);
|
|
7937
|
+
}
|
|
7938
|
+
}
|
|
7939
|
+
if (persistedEventId && events2.length > 0) {
|
|
7940
|
+
const persistedEvent = events2.find((event) => event.event_id === persistedEventId);
|
|
7941
|
+
if (persistedEvent) {
|
|
7942
|
+
DebugLogger.log("EventProvider", "Restoring persisted event:", persistedEvent.event_name);
|
|
7943
|
+
setSelectedEventState(persistedEvent);
|
|
7944
|
+
setSelectedEventId(persistedEventId);
|
|
7945
|
+
return true;
|
|
7946
|
+
} else {
|
|
7947
|
+
DebugLogger.log("EventProvider", "Persisted event not found in current events, clearing storage");
|
|
7948
|
+
sessionStorage.removeItem("pace-core-selected-event");
|
|
7949
|
+
localStorage.removeItem("pace-core-selected-event");
|
|
7950
|
+
}
|
|
7951
|
+
}
|
|
7952
|
+
} catch (error2) {
|
|
7953
|
+
console.warn("[EventProvider] Failed to load persisted event:", error2);
|
|
7954
|
+
}
|
|
7955
|
+
return false;
|
|
7956
|
+
}, [setSelectedEventId]);
|
|
7957
|
+
const persistEventSelection = useCallback8((eventId) => {
|
|
7958
|
+
try {
|
|
7959
|
+
sessionStorage.setItem("pace-core-selected-event", eventId);
|
|
7960
|
+
localStorage.setItem("pace-core-selected-event", eventId);
|
|
7961
|
+
} catch (error2) {
|
|
7962
|
+
console.warn("[EventProvider] Failed to persist event selection:", error2);
|
|
7963
|
+
}
|
|
7964
|
+
}, []);
|
|
7965
|
+
const autoSelectNextEvent = useCallback8((events2) => {
|
|
7966
|
+
const nextEvent = getNextEventByDate(events2);
|
|
7967
|
+
if (nextEvent) {
|
|
7968
|
+
DebugLogger.log("EventProvider", "Auto-selecting next event:", nextEvent.event_name);
|
|
7969
|
+
setSelectedEventState(nextEvent);
|
|
7970
|
+
setSelectedEventId(nextEvent.event_id);
|
|
7971
|
+
persistEventSelection(nextEvent.event_id);
|
|
7972
|
+
}
|
|
7973
|
+
}, [setSelectedEventId, persistEventSelection]);
|
|
7974
|
+
const fetchEvents = useCallback8(async () => {
|
|
7975
|
+
if (!user || !session || !supabase || !appName || !selectedOrganisation) {
|
|
7976
|
+
DebugLogger.log("EventProvider", "Missing required dependencies, skipping fetch");
|
|
7977
|
+
setIsLoading(false);
|
|
7978
|
+
return;
|
|
7979
|
+
}
|
|
7980
|
+
if (isFetchingRef.current) {
|
|
7981
|
+
DebugLogger.log("EventProvider", "Already fetching events, skipping");
|
|
7982
|
+
return;
|
|
7983
|
+
}
|
|
7984
|
+
DebugLogger.log("EventProvider", "User and organisation found, fetching events for:", {
|
|
7985
|
+
userId: user.id,
|
|
7986
|
+
appName,
|
|
7987
|
+
organisationId: selectedOrganisation.id,
|
|
7988
|
+
organisationName: selectedOrganisation.display_name
|
|
7989
|
+
});
|
|
7990
|
+
isFetchingRef.current = true;
|
|
7991
|
+
let isMounted = true;
|
|
7992
|
+
try {
|
|
7993
|
+
if (ensureOrganisationContext) {
|
|
7994
|
+
await ensureOrganisationContext();
|
|
7995
|
+
await setOrganisationContext(supabase, selectedOrganisation.id);
|
|
7996
|
+
}
|
|
7997
|
+
DebugLogger.log("EventProvider", "Calling data_user_events_get RPC with:", {
|
|
7998
|
+
user_id: user.id,
|
|
7999
|
+
organisation_id: selectedOrganisation.id,
|
|
8000
|
+
app_name: appName
|
|
8001
|
+
});
|
|
8002
|
+
const { data, error: rpcError } = await supabase.rpc("data_user_events_get", {
|
|
8003
|
+
p_user_id: user.id,
|
|
8004
|
+
p_organisation_id: selectedOrganisation.id,
|
|
8005
|
+
p_app_name: appName
|
|
8006
|
+
});
|
|
8007
|
+
DebugLogger.log("EventProvider", "RPC response:", {
|
|
8008
|
+
data,
|
|
8009
|
+
error: rpcError,
|
|
8010
|
+
dataLength: data?.length || 0,
|
|
8011
|
+
organisationId: selectedOrganisation.id
|
|
8012
|
+
});
|
|
8013
|
+
if (rpcError) {
|
|
8014
|
+
throw new Error(rpcError.message || "Failed to fetch events");
|
|
8015
|
+
}
|
|
8016
|
+
if (isMounted) {
|
|
8017
|
+
const eventsData = data || [];
|
|
8018
|
+
console.log("[EventProvider] Loaded events:", eventsData.map((event) => ({
|
|
8019
|
+
eventId: event.event_id,
|
|
8020
|
+
eventName: event.event_name,
|
|
8021
|
+
organisationId: event.organisation_id,
|
|
8022
|
+
selectedOrganisationId: selectedOrganisation?.id
|
|
8023
|
+
})));
|
|
8024
|
+
const transformedEvents = eventsData.map((event) => ({
|
|
8025
|
+
id: event.event_id,
|
|
8026
|
+
// Use event_id as the primary id
|
|
8027
|
+
event_id: event.event_id,
|
|
8028
|
+
event_name: event.event_name,
|
|
8029
|
+
event_date: event.event_date,
|
|
8030
|
+
event_venue: event.event_venue,
|
|
8031
|
+
event_participants: event.event_participants,
|
|
8032
|
+
event_colours: event.event_colours,
|
|
8033
|
+
event_logo: "",
|
|
8034
|
+
// No logo field in event table
|
|
8035
|
+
organisation_id: event.organisation_id,
|
|
8036
|
+
is_visible: event.is_visible,
|
|
8037
|
+
// Legacy compatibility
|
|
8038
|
+
name: event.event_name,
|
|
8039
|
+
start_date: event.event_date
|
|
8040
|
+
}));
|
|
8041
|
+
setEvents(transformedEvents);
|
|
8042
|
+
setError(null);
|
|
8043
|
+
hasAutoSelectedRef.current = false;
|
|
8044
|
+
const persistedEventLoaded = await loadPersistedEvent(transformedEvents);
|
|
8045
|
+
if (!persistedEventLoaded) {
|
|
8046
|
+
const nextEvent = getNextEventByDate(transformedEvents);
|
|
8047
|
+
if (nextEvent) {
|
|
8048
|
+
DebugLogger.log("EventProvider", "Auto-selecting next event after no persisted event found:", nextEvent.event_name);
|
|
8049
|
+
hasAutoSelectedRef.current = true;
|
|
8050
|
+
setSelectedEventState(nextEvent);
|
|
8051
|
+
setSelectedEventIdRef.current(nextEvent.event_id);
|
|
8052
|
+
persistEventSelection(nextEvent.event_id);
|
|
8053
|
+
}
|
|
8054
|
+
}
|
|
8055
|
+
}
|
|
8056
|
+
} catch (err) {
|
|
8057
|
+
console.error("[EventProvider] Error fetching events:", err);
|
|
8058
|
+
const _error = err instanceof Error ? err : new Error("Unknown error occurred");
|
|
8059
|
+
if (isMounted) {
|
|
8060
|
+
setError(_error);
|
|
8061
|
+
setEvents([]);
|
|
8062
|
+
}
|
|
8063
|
+
} finally {
|
|
8064
|
+
if (isMounted) {
|
|
8065
|
+
setIsLoading(false);
|
|
8066
|
+
}
|
|
8067
|
+
isFetchingRef.current = false;
|
|
8068
|
+
}
|
|
8069
|
+
return () => {
|
|
8070
|
+
isMounted = false;
|
|
8071
|
+
};
|
|
8072
|
+
}, [user, session, supabase, appName, selectedOrganisation, ensureOrganisationContext, loadPersistedEvent, autoSelectNextEvent]);
|
|
8073
|
+
useEffect8(() => {
|
|
8074
|
+
if (!isInitializedRef.current) {
|
|
8075
|
+
isInitializedRef.current = true;
|
|
8076
|
+
fetchEvents();
|
|
8077
|
+
}
|
|
8078
|
+
}, [fetchEvents]);
|
|
8079
|
+
useEffect8(() => {
|
|
8080
|
+
setSelectedEventIdRef.current = setSelectedEventId;
|
|
8081
|
+
}, [setSelectedEventId]);
|
|
8082
|
+
useLayoutEffect(() => {
|
|
8083
|
+
if (events.length > 0 && !selectedEvent && !hasAutoSelectedRef.current && !userClearedEventRef.current) {
|
|
8084
|
+
const nextEvent = getNextEventByDate(events);
|
|
8085
|
+
if (nextEvent) {
|
|
8086
|
+
DebugLogger.log("EventProvider", "Auto-selecting next event:", nextEvent.event_name);
|
|
8087
|
+
hasAutoSelectedRef.current = true;
|
|
8088
|
+
setSelectedEventState(nextEvent);
|
|
8089
|
+
setSelectedEventIdRef.current(nextEvent.event_id);
|
|
8090
|
+
persistEventSelection(nextEvent.event_id);
|
|
8091
|
+
}
|
|
8092
|
+
}
|
|
8093
|
+
}, [events, selectedEvent]);
|
|
8094
|
+
const setSelectedEvent = useCallback8((event) => {
|
|
8095
|
+
if (event) {
|
|
8096
|
+
try {
|
|
8097
|
+
console.log("[EventProvider] Event selection validation:", {
|
|
8098
|
+
eventId: event.event_id,
|
|
8099
|
+
eventName: event.event_name,
|
|
8100
|
+
eventOrganisationId: event.organisation_id,
|
|
8101
|
+
selectedOrganisationId: selectedOrganisation?.id,
|
|
8102
|
+
selectedOrganisationName: selectedOrganisation?.display_name,
|
|
8103
|
+
match: event.organisation_id === selectedOrganisation?.id
|
|
8104
|
+
});
|
|
8105
|
+
if (selectedOrganisation && event.organisation_id !== selectedOrganisation.id) {
|
|
8106
|
+
console.error("[EventProvider] Event organisation_id does not match selected organisation", {
|
|
8107
|
+
eventOrganisationId: event.organisation_id,
|
|
8108
|
+
selectedOrganisationId: selectedOrganisation.id,
|
|
8109
|
+
eventName: event.event_name
|
|
8110
|
+
});
|
|
8111
|
+
return;
|
|
8112
|
+
}
|
|
8113
|
+
} catch (error2) {
|
|
8114
|
+
console.error("[EventProvider] Error during event validation:", error2);
|
|
8115
|
+
}
|
|
8116
|
+
setSelectedEventState(event);
|
|
8117
|
+
setSelectedEventId(event.event_id);
|
|
8118
|
+
persistEventSelection(event.event_id);
|
|
8119
|
+
userClearedEventRef.current = false;
|
|
8120
|
+
} else {
|
|
8121
|
+
setSelectedEventState(null);
|
|
8122
|
+
setSelectedEventId(null);
|
|
8123
|
+
sessionStorage.removeItem("pace-core-selected-event");
|
|
8124
|
+
localStorage.removeItem("pace-core-selected-event");
|
|
8125
|
+
hasAutoSelectedRef.current = false;
|
|
8126
|
+
userClearedEventRef.current = true;
|
|
8127
|
+
}
|
|
8128
|
+
}, [selectedOrganisation, setSelectedEventId, persistEventSelection]);
|
|
8129
|
+
const refreshEvents = useCallback8(async () => {
|
|
8130
|
+
isInitializedRef.current = false;
|
|
8131
|
+
isFetchingRef.current = false;
|
|
8132
|
+
userClearedEventRef.current = false;
|
|
8133
|
+
await fetchEvents();
|
|
8134
|
+
}, [fetchEvents]);
|
|
8135
|
+
const contextValue = useMemo7(() => ({
|
|
8136
|
+
events,
|
|
8137
|
+
selectedEvent,
|
|
8138
|
+
isLoading,
|
|
8139
|
+
error,
|
|
8140
|
+
setSelectedEvent,
|
|
8141
|
+
refreshEvents
|
|
8142
|
+
}), [events, selectedEvent, isLoading, error, setSelectedEvent, refreshEvents]);
|
|
8143
|
+
return /* @__PURE__ */ jsx10(EventContext.Provider, { value: contextValue, children });
|
|
8144
|
+
}
|
|
8145
|
+
var EventContext, useEvents;
|
|
8146
|
+
var init_EventProvider = __esm({
|
|
8147
|
+
"src/providers/EventProvider.tsx"() {
|
|
8148
|
+
"use strict";
|
|
8149
|
+
init_UnifiedAuthProvider();
|
|
8150
|
+
init_OrganisationProvider();
|
|
8151
|
+
init_organisationContext();
|
|
8152
|
+
init_debugLogger();
|
|
8153
|
+
EventContext = createContext6(void 0);
|
|
8154
|
+
useEvents = () => {
|
|
8155
|
+
const context = useContext6(EventContext);
|
|
8156
|
+
if (context === void 0) {
|
|
8157
|
+
throw new Error("useEvents must be used within an EventProvider");
|
|
8158
|
+
}
|
|
8159
|
+
return context;
|
|
8160
|
+
};
|
|
8161
|
+
}
|
|
8162
|
+
});
|
|
8163
|
+
|
|
7838
8164
|
export {
|
|
7839
8165
|
AuthProvider,
|
|
7840
8166
|
useAuth,
|
|
@@ -7877,7 +8203,11 @@ export {
|
|
|
7877
8203
|
OrganisationProvider,
|
|
7878
8204
|
useOrganisations,
|
|
7879
8205
|
OrganisationProvider_exports,
|
|
7880
|
-
init_OrganisationProvider
|
|
8206
|
+
init_OrganisationProvider,
|
|
8207
|
+
useEvents,
|
|
8208
|
+
EventProvider,
|
|
8209
|
+
EventProvider_exports,
|
|
8210
|
+
init_EventProvider
|
|
7881
8211
|
};
|
|
7882
8212
|
/*! Bundled license information:
|
|
7883
8213
|
|
|
@@ -7891,4 +8221,4 @@ lodash/lodash.js:
|
|
|
7891
8221
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
7892
8222
|
*)
|
|
7893
8223
|
*/
|
|
7894
|
-
//# sourceMappingURL=chunk-
|
|
8224
|
+
//# sourceMappingURL=chunk-6JILXFEA.js.map
|