@jmruthers/pace-core 0.5.120 → 0.5.123
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/{AuthService-D4646R4b.d.ts → AuthService-DYuQPJj6.d.ts} +0 -9
- package/dist/{DataTable-DGZDJUYM.js → DataTable-WTS4IRF2.js} +7 -8
- package/dist/{PublicLoadingSpinner-DgDWTFqn.d.ts → PublicLoadingSpinner-CaoRbHvJ.d.ts} +30 -4
- package/dist/{UnifiedAuthProvider-UACKFATV.js → UnifiedAuthProvider-6C47WIML.js} +3 -4
- package/dist/{chunk-D6BOFXYR.js → chunk-35ZDPMBM.js} +3 -3
- package/dist/{chunk-CGURJ27Z.js → chunk-4MXVZVNS.js} +2 -2
- package/dist/{chunk-ZYJ6O5CA.js → chunk-C43QIDN3.js} +2 -2
- package/dist/{chunk-VKOCWWVY.js → chunk-CX5M4ZAG.js} +1 -6
- package/dist/{chunk-VKOCWWVY.js.map → chunk-CX5M4ZAG.js.map} +1 -1
- package/dist/{chunk-HFBOFZ3Z.js → chunk-DHMFMXFV.js} +258 -243
- package/dist/chunk-DHMFMXFV.js.map +1 -0
- package/dist/{chunk-RIEJGKD3.js → chunk-ESJTIADP.js} +15 -6
- package/dist/{chunk-RIEJGKD3.js.map → chunk-ESJTIADP.js.map} +1 -1
- package/dist/{chunk-SMJZMKYN.js → chunk-GEVIB2UB.js} +43 -10
- package/dist/chunk-GEVIB2UB.js.map +1 -0
- package/dist/{chunk-TDNI6ZWL.js → chunk-IJOZZOGT.js} +7 -7
- package/dist/chunk-IJOZZOGT.js.map +1 -0
- package/dist/{chunk-GZRXOUBE.js → chunk-M6DDYFUD.js} +2 -2
- package/dist/chunk-M6DDYFUD.js.map +1 -0
- package/dist/{chunk-B4GZ2BXO.js → chunk-NZGLXZGP.js} +3 -3
- package/dist/{chunk-NZ32EONV.js → chunk-QWNJCQXZ.js} +2 -2
- package/dist/{chunk-FKFHZUGF.js → chunk-XN6GWKMV.js} +43 -56
- package/dist/chunk-XN6GWKMV.js.map +1 -0
- package/dist/{chunk-BHWIUEYH.js → chunk-ZBLK676C.js} +1 -61
- package/dist/chunk-ZBLK676C.js.map +1 -0
- package/dist/{chunk-QPI2CCBA.js → chunk-ZPJMYGEP.js} +149 -96
- package/dist/chunk-ZPJMYGEP.js.map +1 -0
- package/dist/components.d.ts +1 -1
- package/dist/components.js +11 -11
- package/dist/{formatting-B1jSqgl-.d.ts → formatting-DFcCxUEk.d.ts} +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +9 -8
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +19 -17
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +2 -2
- package/dist/providers.js +2 -3
- package/dist/rbac/index.js +7 -8
- package/dist/styles/index.d.ts +1 -1
- package/dist/styles/index.js +5 -3
- package/dist/theming/runtime.d.ts +73 -1
- package/dist/theming/runtime.js +5 -5
- package/dist/{usePublicRouteParams-BdF8bZgs.d.ts → usePublicRouteParams-Dyt1tzI9.d.ts} +60 -8
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +5 -5
- 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 +6 -6
- 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 +6 -6
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.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/DataRecord.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/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.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/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +7 -7
- package/docs/api/interfaces/PublicErrorBoundaryState.md +5 -5
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +7 -7
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +51 -12
- package/docs/api/interfaces/PublicPageLayoutProps.md +72 -12
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.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/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/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.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 +140 -30
- package/docs/best-practices/README.md +1 -1
- package/docs/implementation-guides/datatable-filtering.md +313 -0
- package/docs/implementation-guides/datatable-rbac-usage.md +317 -0
- package/docs/implementation-guides/hierarchical-datatable.md +850 -0
- package/docs/implementation-guides/large-datasets.md +281 -0
- package/docs/implementation-guides/performance.md +403 -0
- package/docs/implementation-guides/public-pages.md +4 -4
- package/docs/migration/quick-migration-guide.md +320 -0
- package/docs/rbac/quick-start.md +16 -16
- package/docs/troubleshooting/README.md +4 -4
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +1 -1
- package/docs/troubleshooting/debugging.md +1117 -0
- package/docs/troubleshooting/migration.md +918 -0
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +30 -30
- package/examples/public-pages/PublicEventPage.tsx +41 -41
- package/examples/public-pages/PublicPageApp.tsx +33 -33
- package/examples/public-pages/PublicPageUsageExample.tsx +30 -30
- package/package.json +4 -4
- package/src/__tests__/hooks/usePermissions.test.ts +265 -0
- package/src/components/DataTable/DataTable.test.tsx +9 -38
- package/src/components/DataTable/DataTable.tsx +0 -7
- package/src/components/DataTable/components/DataTableCore.tsx +66 -136
- package/src/components/DataTable/components/DataTableModals.tsx +25 -22
- package/src/components/DataTable/components/EditableRow.tsx +118 -42
- package/src/components/DataTable/components/UnifiedTableBody.tsx +129 -76
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +33 -14
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +17 -5
- package/src/components/DataTable/utils/exportUtils.ts +3 -2
- package/src/components/DataTable/utils/flexibleImport.ts +27 -6
- package/src/components/Dialog/Dialog.tsx +1 -1
- package/src/components/Dialog/README.md +24 -24
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +2 -2
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +6 -6
- package/src/components/Dialog/examples/HtmlDialogExample.tsx +2 -2
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +3 -3
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +4 -4
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +12 -1
- package/src/components/PublicLayout/EventLogo.tsx +175 -0
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +22 -18
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +22 -14
- package/src/components/PublicLayout/PublicPageHeader.tsx +133 -40
- package/src/components/PublicLayout/PublicPageLayout.tsx +75 -72
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +1 -1
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +8 -8
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +23 -16
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +86 -14
- package/src/examples/CorrectPublicPageImplementation.tsx +30 -30
- package/src/examples/PublicEventPage.tsx +41 -41
- package/src/examples/PublicPageApp.tsx +33 -33
- package/src/examples/PublicPageUsageExample.tsx +30 -30
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +583 -0
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +10 -3
- package/src/hooks/index.ts +1 -1
- package/src/hooks/public/usePublicEventLogo.ts +285 -0
- package/src/hooks/public/usePublicRouteParams.ts +21 -4
- package/src/hooks/useEventTheme.test.ts +119 -43
- package/src/hooks/useEventTheme.ts +84 -55
- package/src/index.ts +3 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +630 -0
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +667 -0
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +647 -0
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +496 -0
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +496 -0
- package/src/rbac/secureClient.ts +4 -2
- package/src/services/EventService.ts +0 -66
- package/src/services/__tests__/EventService.eventColours.test.ts +44 -40
- package/src/styles/index.ts +1 -1
- package/src/theming/__tests__/parseEventColours.test.ts +209 -0
- package/src/theming/parseEventColours.ts +123 -0
- package/src/theming/runtime.ts +3 -0
- package/src/types/__tests__/file-reference.test.ts +447 -0
- package/src/types/database.generated.ts +1515 -424
- package/src/utils/formatDate.test.ts +11 -11
- package/src/utils/formatting.ts +3 -2
- package/dist/chunk-BHWIUEYH.js.map +0 -1
- package/dist/chunk-FKFHZUGF.js.map +0 -1
- package/dist/chunk-GZRXOUBE.js.map +0 -1
- package/dist/chunk-HFBOFZ3Z.js.map +0 -1
- package/dist/chunk-QPI2CCBA.js.map +0 -1
- package/dist/chunk-SMJZMKYN.js.map +0 -1
- package/dist/chunk-TDNI6ZWL.js.map +0 -1
- package/src/styles/semantic.css +0 -24
- /package/dist/{DataTable-DGZDJUYM.js.map → DataTable-WTS4IRF2.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-UACKFATV.js.map → UnifiedAuthProvider-6C47WIML.js.map} +0 -0
- /package/dist/{chunk-D6BOFXYR.js.map → chunk-35ZDPMBM.js.map} +0 -0
- /package/dist/{chunk-CGURJ27Z.js.map → chunk-4MXVZVNS.js.map} +0 -0
- /package/dist/{chunk-ZYJ6O5CA.js.map → chunk-C43QIDN3.js.map} +0 -0
- /package/dist/{chunk-B4GZ2BXO.js.map → chunk-NZGLXZGP.js.map} +0 -0
- /package/dist/{chunk-NZ32EONV.js.map → chunk-QWNJCQXZ.js.map} +0 -0
|
@@ -7,84 +7,113 @@
|
|
|
7
7
|
* Hook that automatically applies event-specific theming when an event is selected.
|
|
8
8
|
* This ensures consistent UX across all apps in the pace suite.
|
|
9
9
|
*
|
|
10
|
+
* Works in two modes:
|
|
11
|
+
* 1. Authenticated mode: Uses EventProvider context via useEvents() hook
|
|
12
|
+
* 2. Public page mode: Accepts event prop directly (no EventProvider required)
|
|
13
|
+
*
|
|
10
14
|
* @example
|
|
11
15
|
* ```tsx
|
|
16
|
+
* // Authenticated pages (with EventProvider)
|
|
12
17
|
* import { useEventTheme } from '@jmruthers/pace-core/hooks';
|
|
13
18
|
*
|
|
14
19
|
* function MyApp() {
|
|
15
|
-
* // Automatically applies event colors when event is selected
|
|
20
|
+
* // Automatically applies event colors when event is selected via EventProvider
|
|
16
21
|
* useEventTheme();
|
|
17
22
|
*
|
|
18
23
|
* return <div>Your app content</div>;
|
|
19
24
|
* }
|
|
20
25
|
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* // Public pages (without EventProvider)
|
|
30
|
+
* import { useEventTheme } from '@jmruthers/pace-core/hooks';
|
|
31
|
+
*
|
|
32
|
+
* function PublicPageLayout({ event }) {
|
|
33
|
+
* // Applies event colors directly from event prop
|
|
34
|
+
* useEventTheme(event);
|
|
35
|
+
*
|
|
36
|
+
* return <div>Public page content</div>;
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
21
39
|
*/
|
|
22
40
|
|
|
23
41
|
import { useEffect } from 'react';
|
|
24
42
|
import { useLocation } from 'react-router-dom';
|
|
25
43
|
import { useEvents } from './useEvents';
|
|
26
44
|
import { applyPalette, clearPalette } from '../theming/runtime';
|
|
27
|
-
import
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Parse and normalize event_colours to PaletteData (supports ev-* keys and string JSON)
|
|
31
|
-
* This matches the logic in EventService.parseAndNormalizeEventColours()
|
|
32
|
-
*/
|
|
33
|
-
function parseAndNormalizeEventColours(input: unknown): { main: any; sec: any; acc: any } | null {
|
|
34
|
-
try {
|
|
35
|
-
if (!input) return null;
|
|
36
|
-
let obj: any = input;
|
|
37
|
-
if (typeof input === 'string') {
|
|
38
|
-
try {
|
|
39
|
-
obj = JSON.parse(input);
|
|
40
|
-
} catch {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
} else if (typeof input !== 'object') {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const pick = (o: any, pref: string, plain: string) => (o?.[pref] ?? o?.[plain]) || null;
|
|
48
|
-
const main = pick(obj, 'ev-main', 'main');
|
|
49
|
-
const sec = pick(obj, 'ev-sec', 'sec');
|
|
50
|
-
const acc = pick(obj, 'ev-acc', 'acc');
|
|
51
|
-
if (!main && !sec && !acc) return null;
|
|
52
|
-
|
|
53
|
-
// Fill helper: return palette as-is, only return empty object if null/undefined/empty
|
|
54
|
-
const fill = (p: any) => {
|
|
55
|
-
if (!p) return {};
|
|
56
|
-
// If object is empty or has no actual color values, return empty object
|
|
57
|
-
const keys = Object.keys(p);
|
|
58
|
-
if (keys.length === 0) return {};
|
|
59
|
-
// Check if any values are truthy (not null/undefined)
|
|
60
|
-
const hasValues = keys.some(k => p[k] != null);
|
|
61
|
-
if (!hasValues) return {};
|
|
62
|
-
// Return the object as-is (don't fill missing shades)
|
|
63
|
-
return p;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
return { main: fill(main), sec: fill(sec), acc: fill(acc) };
|
|
67
|
-
} catch (error) {
|
|
68
|
-
console.warn('[useEventTheme] Failed to parse/normalize event colours:', error);
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
45
|
+
import { parseAndNormalizeEventColours } from '../theming/parseEventColours';
|
|
46
|
+
import type { Event } from '../types/unified';
|
|
72
47
|
|
|
73
48
|
/**
|
|
74
49
|
* Hook that automatically applies event-specific theming
|
|
75
50
|
*
|
|
76
|
-
* This hook
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* -
|
|
80
|
-
* -
|
|
81
|
-
* -
|
|
51
|
+
* This hook applies event colors using the theming system. It works in two modes:
|
|
52
|
+
*
|
|
53
|
+
* **Authenticated Mode (default):**
|
|
54
|
+
* - Uses EventProvider context via useEvents() hook
|
|
55
|
+
* - Automatically watches selectedEvent changes
|
|
56
|
+
* - Used in authenticated pages with EventProvider
|
|
57
|
+
*
|
|
58
|
+
* **Public Page Mode:**
|
|
59
|
+
* - Accepts event prop directly
|
|
60
|
+
* - No EventProvider required
|
|
61
|
+
* - Used in public pages without authentication context
|
|
62
|
+
*
|
|
63
|
+
* Behavior:
|
|
64
|
+
* - Applies event colors when an event with `event_colours` is provided
|
|
65
|
+
* - Clears theming when no event is provided
|
|
66
|
+
* - Skips theme application when on the login route to prevent login screen styling
|
|
67
|
+
* - Handles cleanup and error cases gracefully
|
|
68
|
+
*
|
|
69
|
+
* @param event - Optional event object. If provided, uses this event directly (public page mode).
|
|
70
|
+
* If not provided, uses EventProvider context via useEvents() (authenticated mode).
|
|
82
71
|
*
|
|
83
72
|
* @returns void - This is an effect hook with no return value
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* // Authenticated mode - uses EventProvider
|
|
77
|
+
* function MyApp() {
|
|
78
|
+
* useEventTheme(); // Watches selectedEvent from EventProvider
|
|
79
|
+
* return <div>App content</div>;
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* // Public page mode - uses event prop
|
|
86
|
+
* function PublicPageLayout({ event }) {
|
|
87
|
+
* useEventTheme(event); // Uses event prop directly
|
|
88
|
+
* return <div>Public content</div>;
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
84
91
|
*/
|
|
85
|
-
export function useEventTheme(): void {
|
|
86
|
-
const { selectedEvent } = useEvents();
|
|
92
|
+
export function useEventTheme(event?: Event | null): void {
|
|
87
93
|
const location = useLocation();
|
|
94
|
+
|
|
95
|
+
// Try to get event from EventProvider context (authenticated mode)
|
|
96
|
+
// Only use useEvents() if event prop is not provided
|
|
97
|
+
let selectedEvent: Event | null | undefined;
|
|
98
|
+
try {
|
|
99
|
+
if (event === undefined) {
|
|
100
|
+
// No event prop provided, try to use EventProvider context
|
|
101
|
+
const eventsContext = useEvents();
|
|
102
|
+
selectedEvent = eventsContext.selectedEvent;
|
|
103
|
+
} else {
|
|
104
|
+
// Event prop provided, use it directly (public page mode)
|
|
105
|
+
selectedEvent = event;
|
|
106
|
+
}
|
|
107
|
+
} catch (error) {
|
|
108
|
+
// useEvents() throws if EventProvider is not available
|
|
109
|
+
// This is expected for public pages - use the event prop if provided
|
|
110
|
+
if (event !== undefined) {
|
|
111
|
+
selectedEvent = event;
|
|
112
|
+
} else {
|
|
113
|
+
// No event prop and no EventProvider - can't apply theme
|
|
114
|
+
selectedEvent = null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
88
117
|
|
|
89
118
|
useEffect(() => {
|
|
90
119
|
// Skip theme application when on login route
|
|
@@ -106,7 +135,7 @@ export function useEventTheme(): void {
|
|
|
106
135
|
// Check if the event has theme colors
|
|
107
136
|
const eventColours = selectedEvent.event_colours;
|
|
108
137
|
|
|
109
|
-
// Parse and normalize event_colours
|
|
138
|
+
// Parse and normalize event_colours using shared utility
|
|
110
139
|
const normalized = parseAndNormalizeEventColours(eventColours);
|
|
111
140
|
|
|
112
141
|
if (!normalized) {
|
package/src/index.ts
CHANGED
|
@@ -241,8 +241,10 @@ export {
|
|
|
241
241
|
TableRow,
|
|
242
242
|
} from './components/Table/Table';
|
|
243
243
|
|
|
244
|
-
// STYLES
|
|
244
|
+
// STYLES & THEMING
|
|
245
245
|
export * from './styles';
|
|
246
|
+
// Direct export of theming utilities for convenience
|
|
247
|
+
export { parseAndNormalizeEventColours } from './theming/parseEventColours';
|
|
246
248
|
|
|
247
249
|
// PUBLIC PAGES
|
|
248
250
|
export * from './hooks/public';
|