@oxyhq/services 5.3.0 → 5.3.2
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/README.md +46 -1
- package/lib/commonjs/index.js +0 -98
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +18 -6
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +24 -11
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/index.js +1 -113
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/navigation/OxyRouter.js +36 -3
- package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/module/index.js +0 -8
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +18 -6
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +24 -11
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/index.js +1 -19
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/navigation/OxyRouter.js +36 -3
- package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/index.d.ts +0 -14
- package/lib/typescript/ui/index.d.ts.map +1 -1
- package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
- package/lib/typescript/ui/navigation/types.d.ts +1 -0
- package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -36
- package/src/ui/components/OxyProvider.tsx +17 -5
- package/src/ui/context/OxyContext.tsx +25 -11
- package/src/ui/index.ts +1 -19
- package/src/ui/navigation/OxyRouter.tsx +37 -2
- package/src/ui/navigation/types.ts +1 -0
|
@@ -11,19 +11,5 @@ export { OxyIcon } from './components/icon';
|
|
|
11
11
|
export type { IconProps } from './components/icon';
|
|
12
12
|
export { OxyContextProvider, useOxy, OxyContextState, OxyContextProviderProps } from './context/OxyContext';
|
|
13
13
|
export { fontFamilies, fontStyles } from './styles/fonts';
|
|
14
|
-
export { default as SignInScreen } from './screens/SignInScreen';
|
|
15
|
-
export { default as SignUpScreen } from './screens/SignUpScreen';
|
|
16
|
-
export { default as AccountCenterScreen } from './screens/AccountCenterScreen';
|
|
17
|
-
export { default as SessionManagementScreen } from './screens/SessionManagementScreen';
|
|
18
|
-
export { default as AccountOverviewScreen } from './screens/AccountOverviewScreen';
|
|
19
|
-
export { default as AccountSettingsScreen } from './screens/AccountSettingsScreen';
|
|
20
|
-
export { default as AccountSwitcherScreen } from './screens/AccountSwitcherScreen';
|
|
21
|
-
export { default as AppInfoScreen } from './screens/AppInfoScreen';
|
|
22
|
-
export { default as KarmaCenterScreen } from './screens/karma/KarmaCenterScreen';
|
|
23
|
-
export { default as KarmaLeaderboardScreen } from './screens/karma/KarmaLeaderboardScreen';
|
|
24
|
-
export { default as KarmaRewardsScreen } from './screens/karma/KarmaRewardsScreen';
|
|
25
|
-
export { default as KarmaRulesScreen } from './screens/karma/KarmaRulesScreen';
|
|
26
|
-
export { default as KarmaAboutScreen } from './screens/karma/KarmaAboutScreen';
|
|
27
|
-
export { default as KarmaFAQScreen } from './screens/karma/KarmaFAQScreen';
|
|
28
14
|
export * from './navigation/types';
|
|
29
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG1D,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG1D,cAAc,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyRouter.d.ts","sourceRoot":"","sources":["../../../../src/ui/navigation/OxyRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAsBnD,OAAO,EAAE,cAAc,EAAe,MAAM,SAAS,CAAC;AAkEtD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"OxyRouter.d.ts","sourceRoot":"","sources":["../../../../src/ui/navigation/OxyRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAsBnD,OAAO,EAAE,cAAc,EAAe,MAAM,SAAS,CAAC;AAkEtD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA6IvC,CAAC;AAiBF,eAAe,SAAS,CAAC"}
|
|
@@ -29,6 +29,7 @@ export interface OxyRouterProps {
|
|
|
29
29
|
onAuthenticated?: (user: User) => void;
|
|
30
30
|
theme: 'light' | 'dark';
|
|
31
31
|
adjustSnapPoints: (snapPoints: string[]) => void;
|
|
32
|
+
navigationRef?: React.MutableRefObject<((screen: string, props?: Record<string, any>) => void) | null>;
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* Props for the OxyProvider component
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ui/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ui/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;CACxG;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;IAEtD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEtC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;WAEG;QACH,eAAe,CAAC,EAAE,MAAM,CAAC;QAEzB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;WAEG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAEhD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.2",
|
|
4
4
|
"description": "Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀",
|
|
5
5
|
"main": "lib/commonjs/node/index.js",
|
|
6
6
|
"module": "lib/module/node/index.js",
|
package/src/index.ts
CHANGED
|
@@ -16,24 +16,6 @@ import {
|
|
|
16
16
|
OxyContextProvider,
|
|
17
17
|
useOxy,
|
|
18
18
|
|
|
19
|
-
// Screens
|
|
20
|
-
SignInScreen,
|
|
21
|
-
SignUpScreen,
|
|
22
|
-
AccountCenterScreen,
|
|
23
|
-
SessionManagementScreen,
|
|
24
|
-
AccountOverviewScreen,
|
|
25
|
-
AccountSettingsScreen,
|
|
26
|
-
AppInfoScreen,
|
|
27
|
-
AccountSwitcherScreen,
|
|
28
|
-
|
|
29
|
-
// Karma Screens
|
|
30
|
-
KarmaCenterScreen,
|
|
31
|
-
KarmaLeaderboardScreen,
|
|
32
|
-
KarmaRewardsScreen,
|
|
33
|
-
KarmaRulesScreen,
|
|
34
|
-
KarmaAboutScreen,
|
|
35
|
-
KarmaFAQScreen,
|
|
36
|
-
|
|
37
19
|
// Components
|
|
38
20
|
OxySignInButton,
|
|
39
21
|
OxyLogo,
|
|
@@ -67,24 +49,6 @@ export {
|
|
|
67
49
|
OxyContextProvider,
|
|
68
50
|
useOxy,
|
|
69
51
|
|
|
70
|
-
// Screens
|
|
71
|
-
SignInScreen,
|
|
72
|
-
SignUpScreen,
|
|
73
|
-
AccountCenterScreen,
|
|
74
|
-
SessionManagementScreen,
|
|
75
|
-
AccountOverviewScreen,
|
|
76
|
-
AccountSettingsScreen,
|
|
77
|
-
AppInfoScreen,
|
|
78
|
-
AccountSwitcherScreen,
|
|
79
|
-
|
|
80
|
-
// Karma Screens
|
|
81
|
-
KarmaCenterScreen,
|
|
82
|
-
KarmaLeaderboardScreen,
|
|
83
|
-
KarmaRewardsScreen,
|
|
84
|
-
KarmaRulesScreen,
|
|
85
|
-
KarmaAboutScreen,
|
|
86
|
-
KarmaFAQScreen,
|
|
87
|
-
|
|
88
52
|
// Components
|
|
89
53
|
OxySignInButton,
|
|
90
54
|
OxyLogo,
|
|
@@ -95,6 +95,9 @@ const OxyBottomSheet: React.FC<OxyProviderProps> = ({
|
|
|
95
95
|
}) => {
|
|
96
96
|
// Use the internal ref (which is passed as a prop from OxyProvider)
|
|
97
97
|
const modalRef = useRef<BottomSheetModal>(null);
|
|
98
|
+
|
|
99
|
+
// Create a ref to store the navigation function from OxyRouter
|
|
100
|
+
const navigationRef = useRef<((screen: string, props?: Record<string, any>) => void) | null>(null);
|
|
98
101
|
|
|
99
102
|
// Track content height for dynamic sizing
|
|
100
103
|
const [contentHeight, setContentHeight] = useState<number>(0);
|
|
@@ -122,16 +125,24 @@ const OxyBottomSheet: React.FC<OxyProviderProps> = ({
|
|
|
122
125
|
// Add a method to navigate between screens
|
|
123
126
|
// @ts-ignore - Adding custom method
|
|
124
127
|
bottomSheetRef.current._navigateToScreen = (screenName: string, props?: Record<string, any>) => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
//
|
|
128
|
+
console.log(`Navigation requested: ${screenName}`, props);
|
|
129
|
+
|
|
130
|
+
// Try direct navigation function first (most reliable)
|
|
131
|
+
if (navigationRef.current) {
|
|
132
|
+
console.log('Using direct navigation function');
|
|
133
|
+
navigationRef.current(screenName, props);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Fallback to event-based navigation
|
|
128
138
|
if (typeof document !== 'undefined') {
|
|
129
139
|
// For web - use a custom event
|
|
140
|
+
console.log('Using web event navigation');
|
|
130
141
|
const event = new CustomEvent('oxy:navigate', { detail: { screen: screenName, props } });
|
|
131
142
|
document.dispatchEvent(event);
|
|
132
143
|
} else {
|
|
133
|
-
// For React Native - use the
|
|
134
|
-
|
|
144
|
+
// For React Native - use the global variable approach
|
|
145
|
+
console.log('Using React Native global navigation');
|
|
135
146
|
(global as any).oxyNavigateEvent = { screen: screenName, props };
|
|
136
147
|
}
|
|
137
148
|
};
|
|
@@ -481,6 +492,7 @@ const OxyBottomSheet: React.FC<OxyProviderProps> = ({
|
|
|
481
492
|
onAuthenticated={handleAuthenticated}
|
|
482
493
|
theme={theme}
|
|
483
494
|
adjustSnapPoints={adjustSnapPoints}
|
|
495
|
+
navigationRef={navigationRef}
|
|
484
496
|
/>
|
|
485
497
|
</Animated.View>
|
|
486
498
|
</BottomSheetScrollView>
|
|
@@ -502,25 +502,39 @@ export const OxyContextProvider: React.FC<OxyContextProviderProps> = ({
|
|
|
502
502
|
|
|
503
503
|
// Bottom sheet control methods
|
|
504
504
|
const showBottomSheet = useCallback((screenOrConfig?: string | { screen: string; props?: Record<string, any> }) => {
|
|
505
|
+
console.log('showBottomSheet called with:', screenOrConfig);
|
|
506
|
+
|
|
505
507
|
if (bottomSheetRef?.current) {
|
|
506
|
-
|
|
508
|
+
console.log('bottomSheetRef is available');
|
|
509
|
+
|
|
510
|
+
// First, show the bottom sheet
|
|
507
511
|
if (bottomSheetRef.current.expand) {
|
|
512
|
+
console.log('Expanding bottom sheet');
|
|
508
513
|
bottomSheetRef.current.expand();
|
|
514
|
+
} else if (bottomSheetRef.current.present) {
|
|
515
|
+
console.log('Presenting bottom sheet');
|
|
516
|
+
bottomSheetRef.current.present();
|
|
509
517
|
} else {
|
|
510
|
-
|
|
511
|
-
bottomSheetRef.current.present?.();
|
|
518
|
+
console.warn('No expand or present method available on bottomSheetRef');
|
|
512
519
|
}
|
|
513
520
|
|
|
514
|
-
//
|
|
521
|
+
// Then navigate to the specified screen if provided
|
|
515
522
|
if (screenOrConfig) {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
+
// Add a small delay to ensure the bottom sheet is opened first
|
|
524
|
+
setTimeout(() => {
|
|
525
|
+
if (typeof screenOrConfig === 'string') {
|
|
526
|
+
// Simple screen name
|
|
527
|
+
console.log('Navigating to screen:', screenOrConfig);
|
|
528
|
+
bottomSheetRef.current?._navigateToScreen?.(screenOrConfig);
|
|
529
|
+
} else {
|
|
530
|
+
// Screen with props
|
|
531
|
+
console.log('Navigating to screen with props:', screenOrConfig.screen, screenOrConfig.props);
|
|
532
|
+
bottomSheetRef.current?._navigateToScreen?.(screenOrConfig.screen, screenOrConfig.props);
|
|
533
|
+
}
|
|
534
|
+
}, 100);
|
|
523
535
|
}
|
|
536
|
+
} else {
|
|
537
|
+
console.warn('bottomSheetRef is not available');
|
|
524
538
|
}
|
|
525
539
|
}, [bottomSheetRef]);
|
|
526
540
|
|
package/src/ui/index.ts
CHANGED
|
@@ -24,23 +24,5 @@ export {
|
|
|
24
24
|
// Export styles
|
|
25
25
|
export { fontFamilies, fontStyles } from './styles/fonts';
|
|
26
26
|
|
|
27
|
-
// Export
|
|
28
|
-
export { default as SignInScreen } from './screens/SignInScreen';
|
|
29
|
-
export { default as SignUpScreen } from './screens/SignUpScreen';
|
|
30
|
-
export { default as AccountCenterScreen } from './screens/AccountCenterScreen';
|
|
31
|
-
export { default as SessionManagementScreen } from './screens/SessionManagementScreen';
|
|
32
|
-
export { default as AccountOverviewScreen } from './screens/AccountOverviewScreen';
|
|
33
|
-
export { default as AccountSettingsScreen } from './screens/AccountSettingsScreen';
|
|
34
|
-
export { default as AccountSwitcherScreen } from './screens/AccountSwitcherScreen';
|
|
35
|
-
export { default as AppInfoScreen } from './screens/AppInfoScreen';
|
|
36
|
-
|
|
37
|
-
// Export karma screens
|
|
38
|
-
export { default as KarmaCenterScreen } from './screens/karma/KarmaCenterScreen';
|
|
39
|
-
export { default as KarmaLeaderboardScreen } from './screens/karma/KarmaLeaderboardScreen';
|
|
40
|
-
export { default as KarmaRewardsScreen } from './screens/karma/KarmaRewardsScreen';
|
|
41
|
-
export { default as KarmaRulesScreen } from './screens/karma/KarmaRulesScreen';
|
|
42
|
-
export { default as KarmaAboutScreen } from './screens/karma/KarmaAboutScreen';
|
|
43
|
-
export { default as KarmaFAQScreen } from './screens/karma/KarmaFAQScreen';
|
|
44
|
-
|
|
45
|
-
// Export types
|
|
27
|
+
// Export types for navigation (internal use)
|
|
46
28
|
export * from './navigation/types';
|
|
@@ -93,6 +93,7 @@ const OxyRouter: React.FC<OxyRouterProps> = ({
|
|
|
93
93
|
onAuthenticated,
|
|
94
94
|
theme,
|
|
95
95
|
adjustSnapPoints,
|
|
96
|
+
navigationRef,
|
|
96
97
|
}) => {
|
|
97
98
|
const [currentScreen, setCurrentScreen] = useState<string>(initialScreen);
|
|
98
99
|
const [screenHistory, setScreenHistory] = useState<string[]>([initialScreen]);
|
|
@@ -114,7 +115,22 @@ const OxyRouter: React.FC<OxyRouterProps> = ({
|
|
|
114
115
|
} else {
|
|
115
116
|
console.error(`Screen "${screen}" not found`);
|
|
116
117
|
}
|
|
117
|
-
};
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// Expose the navigate function to the parent component
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
if (navigationRef) {
|
|
123
|
+
navigationRef.current = navigate;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return () => {
|
|
127
|
+
if (navigationRef) {
|
|
128
|
+
navigationRef.current = null;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}, [navigate, navigationRef]);
|
|
132
|
+
|
|
133
|
+
// Expose the navigate method to the parent component (OxyProvider)
|
|
118
134
|
useEffect(() => {
|
|
119
135
|
// Set up event listener for navigation events
|
|
120
136
|
const handleNavigationEvent = (event: any) => {
|
|
@@ -132,9 +148,25 @@ const OxyRouter: React.FC<OxyRouterProps> = ({
|
|
|
132
148
|
}
|
|
133
149
|
};
|
|
134
150
|
|
|
135
|
-
//
|
|
151
|
+
// For React Native - check for global navigation events
|
|
152
|
+
let intervalId: NodeJS.Timeout | null = null;
|
|
153
|
+
|
|
136
154
|
if (typeof document !== 'undefined') {
|
|
155
|
+
// Web - use custom event listener
|
|
137
156
|
document.addEventListener('oxy:navigate', handleNavigationEvent);
|
|
157
|
+
} else {
|
|
158
|
+
// React Native - poll for global navigation events
|
|
159
|
+
intervalId = setInterval(() => {
|
|
160
|
+
const globalNav = (global as any).oxyNavigateEvent;
|
|
161
|
+
if (globalNav) {
|
|
162
|
+
console.log(`RN Navigation event received:`, globalNav);
|
|
163
|
+
if (globalNav.screen) {
|
|
164
|
+
navigate(globalNav.screen, globalNav.props || {});
|
|
165
|
+
}
|
|
166
|
+
// Clear the event after processing
|
|
167
|
+
(global as any).oxyNavigateEvent = null;
|
|
168
|
+
}
|
|
169
|
+
}, 100); // Check every 100ms
|
|
138
170
|
}
|
|
139
171
|
|
|
140
172
|
// Cleanup
|
|
@@ -142,6 +174,9 @@ const OxyRouter: React.FC<OxyRouterProps> = ({
|
|
|
142
174
|
if (typeof document !== 'undefined') {
|
|
143
175
|
document.removeEventListener('oxy:navigate', handleNavigationEvent);
|
|
144
176
|
}
|
|
177
|
+
if (intervalId) {
|
|
178
|
+
clearInterval(intervalId);
|
|
179
|
+
}
|
|
145
180
|
};
|
|
146
181
|
}, []);
|
|
147
182
|
|
|
@@ -33,6 +33,7 @@ export interface OxyRouterProps {
|
|
|
33
33
|
onAuthenticated?: (user: User) => void;
|
|
34
34
|
theme: 'light' | 'dark';
|
|
35
35
|
adjustSnapPoints: (snapPoints: string[]) => void;
|
|
36
|
+
navigationRef?: React.MutableRefObject<((screen: string, props?: Record<string, any>) => void) | null>;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
/**
|