@umituz/react-native-onboarding 2.4.0 → 2.5.1
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 +0 -65
- package/package.json +1 -1
- package/src/domain/entities/OnboardingOptions.ts +0 -12
- package/src/domain/entities/OnboardingUserData.ts +0 -12
- package/src/index.ts +0 -1
- package/src/infrastructure/services/OnboardingSlideService.ts +5 -1
- package/src/presentation/screens/OnboardingScreen.tsx +4 -0
package/README.md
CHANGED
|
@@ -185,8 +185,6 @@ const slides: OnboardingSlide[] = [
|
|
|
185
185
|
| `showProgressText` | `boolean` | `true` | Show progress text (1 of 5) |
|
|
186
186
|
| `storageKey` | `string` | - | Custom storage key for completion state |
|
|
187
187
|
| `autoComplete` | `boolean` | `false` | Auto-complete on last slide |
|
|
188
|
-
| `enableDeviceTracking` | `boolean` | `false` | Collect device info during onboarding |
|
|
189
|
-
| `userId` | `string` | - | User ID for device tracking (optional) |
|
|
190
188
|
|
|
191
189
|
### OnboardingSlide Interface
|
|
192
190
|
|
|
@@ -330,69 +328,6 @@ const isComplete = userData.completedAt !== undefined;
|
|
|
330
328
|
|
|
331
329
|
// Check if onboarding was skipped
|
|
332
330
|
const wasSkipped = userData.skipped === true;
|
|
333
|
-
|
|
334
|
-
// Get device info (if device tracking was enabled)
|
|
335
|
-
const deviceInfo = userData.deviceInfo;
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
## 📱 Device Tracking (Optional)
|
|
339
|
-
|
|
340
|
-
Collect device information during onboarding for analytics or support purposes.
|
|
341
|
-
|
|
342
|
-
### Installation
|
|
343
|
-
|
|
344
|
-
First, install the device tracking package:
|
|
345
|
-
|
|
346
|
-
```bash
|
|
347
|
-
npm install @umituz/react-native-device
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### Usage
|
|
351
|
-
|
|
352
|
-
```tsx
|
|
353
|
-
import { OnboardingScreen } from '@umituz/react-native-onboarding';
|
|
354
|
-
|
|
355
|
-
<OnboardingScreen
|
|
356
|
-
slides={slides}
|
|
357
|
-
enableDeviceTracking={true}
|
|
358
|
-
userId="user123" // Optional
|
|
359
|
-
onComplete={async () => {
|
|
360
|
-
const userData = onboardingStore.getUserData();
|
|
361
|
-
|
|
362
|
-
// Device info is now available
|
|
363
|
-
console.log('Device:', userData.deviceInfo?.platform);
|
|
364
|
-
console.log('OS:', userData.deviceInfo?.osVersion);
|
|
365
|
-
console.log('App:', userData.deviceInfo?.appVersion);
|
|
366
|
-
}}
|
|
367
|
-
/>
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### Device Info Structure
|
|
371
|
-
|
|
372
|
-
```typescript
|
|
373
|
-
{
|
|
374
|
-
deviceId: string;
|
|
375
|
-
platform: 'ios' | 'android' | 'web';
|
|
376
|
-
osVersion: string;
|
|
377
|
-
appVersion: string;
|
|
378
|
-
deviceName: string;
|
|
379
|
-
manufacturer: string;
|
|
380
|
-
brand: string;
|
|
381
|
-
timestamp: number;
|
|
382
|
-
userId?: string; // If provided
|
|
383
|
-
}
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### Manual Device Info Collection
|
|
387
|
-
|
|
388
|
-
```tsx
|
|
389
|
-
import { OnboardingDeviceTrackingService } from '@umituz/react-native-onboarding';
|
|
390
|
-
|
|
391
|
-
// Collect device info manually
|
|
392
|
-
const deviceInfo = await OnboardingDeviceTrackingService.collectDeviceInfo('user123');
|
|
393
|
-
|
|
394
|
-
// Check if device tracking is available
|
|
395
|
-
const isAvailable = await OnboardingDeviceTrackingService.isDeviceTrackingAvailable();
|
|
396
331
|
```
|
|
397
332
|
|
|
398
333
|
## 🔄 Resetting Onboarding
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-onboarding",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Advanced onboarding flow for React Native apps with personalization questions, theme-aware colors, animations, and customizable slides. SOLID, DRY, KISS principles applied.",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -85,17 +85,5 @@ export interface OnboardingOptions {
|
|
|
85
85
|
* Show paywall modal on onboarding completion (default: false)
|
|
86
86
|
*/
|
|
87
87
|
showPaywallOnComplete?: boolean;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Enable device tracking (default: false)
|
|
91
|
-
* When enabled, collects device information during onboarding
|
|
92
|
-
*/
|
|
93
|
-
enableDeviceTracking?: boolean;
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* User ID for device tracking (optional)
|
|
97
|
-
* Only used when enableDeviceTracking is true
|
|
98
|
-
*/
|
|
99
|
-
userId?: string;
|
|
100
88
|
}
|
|
101
89
|
|
|
@@ -39,17 +39,5 @@ export interface OnboardingUserData {
|
|
|
39
39
|
gender?: string;
|
|
40
40
|
[key: string]: any;
|
|
41
41
|
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Device information (optional)
|
|
45
|
-
* Only collected when enableDeviceTracking is true
|
|
46
|
-
*/
|
|
47
|
-
deviceInfo?: {
|
|
48
|
-
deviceId?: string;
|
|
49
|
-
platform?: string;
|
|
50
|
-
osVersion?: string;
|
|
51
|
-
appVersion?: string;
|
|
52
|
-
[key: string]: any;
|
|
53
|
-
};
|
|
54
42
|
}
|
|
55
43
|
|
package/src/index.ts
CHANGED
|
@@ -52,7 +52,6 @@ export {
|
|
|
52
52
|
useOnboardingNavigation,
|
|
53
53
|
type UseOnboardingNavigationReturn,
|
|
54
54
|
} from "./infrastructure/hooks/useOnboardingNavigation";
|
|
55
|
-
export { OnboardingDeviceTrackingService } from "./infrastructure/services/OnboardingDeviceTrackingService";
|
|
56
55
|
|
|
57
56
|
// =============================================================================
|
|
58
57
|
// PRESENTATION LAYER - Components and Screens
|
|
@@ -19,9 +19,13 @@ export class OnboardingSlideService {
|
|
|
19
19
|
* @returns Filtered slides that should be shown
|
|
20
20
|
*/
|
|
21
21
|
static filterSlides(
|
|
22
|
-
slides: OnboardingSlide[],
|
|
22
|
+
slides: OnboardingSlide[] | undefined,
|
|
23
23
|
userData: OnboardingUserData,
|
|
24
24
|
): OnboardingSlide[] {
|
|
25
|
+
// Safety check: return empty array if slides is undefined or not an array
|
|
26
|
+
if (!slides || !Array.isArray(slides)) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
25
29
|
return slides.filter((slide) => {
|
|
26
30
|
if (slide.skipIf) {
|
|
27
31
|
return !slide.skipIf(userData.answers);
|
|
@@ -96,6 +96,10 @@ export const OnboardingScreen: React.FC<OnboardingScreenProps> = ({
|
|
|
96
96
|
|
|
97
97
|
// Filter slides using service
|
|
98
98
|
const filteredSlides = useMemo(() => {
|
|
99
|
+
// Safety check: if slides is undefined or empty, return empty array
|
|
100
|
+
if (!slides || !Array.isArray(slides) || slides.length === 0) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
99
103
|
const userData = onboardingStore.getUserData();
|
|
100
104
|
return OnboardingSlideService.filterSlides(slides, userData);
|
|
101
105
|
}, [slides, onboardingStore]);
|