flowboard-react 0.1.0
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/FlowboardReact.podspec +20 -0
- package/LICENSE +20 -0
- package/README.md +122 -0
- package/android/build.gradle +67 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/flowboardreact/FlowboardReactModule.kt +15 -0
- package/android/src/main/java/com/flowboardreact/FlowboardReactPackage.kt +33 -0
- package/ios/FlowboardReact.h +5 -0
- package/ios/FlowboardReact.mm +21 -0
- package/lib/module/Flowboard.js +167 -0
- package/lib/module/Flowboard.js.map +1 -0
- package/lib/module/FlowboardProvider.js +52 -0
- package/lib/module/FlowboardProvider.js.map +1 -0
- package/lib/module/NativeFlowboardReact.js +5 -0
- package/lib/module/NativeFlowboardReact.js.map +1 -0
- package/lib/module/components/FlowboardFlow.js +389 -0
- package/lib/module/components/FlowboardFlow.js.map +1 -0
- package/lib/module/components/FlowboardRenderer.js +1684 -0
- package/lib/module/components/FlowboardRenderer.js.map +1 -0
- package/lib/module/components/widgets/sliderRegistry.js +48 -0
- package/lib/module/components/widgets/sliderRegistry.js.map +1 -0
- package/lib/module/core/analyticsManager.js +110 -0
- package/lib/module/core/analyticsManager.js.map +1 -0
- package/lib/module/core/assetPreloader.js +72 -0
- package/lib/module/core/assetPreloader.js.map +1 -0
- package/lib/module/core/clientContext.js +105 -0
- package/lib/module/core/clientContext.js.map +1 -0
- package/lib/module/core/fontAwesome.js +110 -0
- package/lib/module/core/fontAwesome.js.map +1 -0
- package/lib/module/core/onboardingRepository.js +62 -0
- package/lib/module/core/onboardingRepository.js.map +1 -0
- package/lib/module/core/resolverService.js +58 -0
- package/lib/module/core/resolverService.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types/flowboard.js +4 -0
- package/lib/module/types/flowboard.js.map +1 -0
- package/lib/module/types/react-native-vector-icons.d.js +2 -0
- package/lib/module/types/react-native-vector-icons.d.js.map +1 -0
- package/lib/module/utils/flowboardUtils.js +379 -0
- package/lib/module/utils/flowboardUtils.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/Flowboard.d.ts +33 -0
- package/lib/typescript/src/Flowboard.d.ts.map +1 -0
- package/lib/typescript/src/FlowboardProvider.d.ts +5 -0
- package/lib/typescript/src/FlowboardProvider.d.ts.map +1 -0
- package/lib/typescript/src/NativeFlowboardReact.d.ts +7 -0
- package/lib/typescript/src/NativeFlowboardReact.d.ts.map +1 -0
- package/lib/typescript/src/components/FlowboardFlow.d.ts +14 -0
- package/lib/typescript/src/components/FlowboardFlow.d.ts.map +1 -0
- package/lib/typescript/src/components/FlowboardRenderer.d.ts +31 -0
- package/lib/typescript/src/components/FlowboardRenderer.d.ts.map +1 -0
- package/lib/typescript/src/components/widgets/sliderRegistry.d.ts +16 -0
- package/lib/typescript/src/components/widgets/sliderRegistry.d.ts.map +1 -0
- package/lib/typescript/src/core/analyticsManager.d.ts +42 -0
- package/lib/typescript/src/core/analyticsManager.d.ts.map +1 -0
- package/lib/typescript/src/core/assetPreloader.d.ts +8 -0
- package/lib/typescript/src/core/assetPreloader.d.ts.map +1 -0
- package/lib/typescript/src/core/clientContext.d.ts +27 -0
- package/lib/typescript/src/core/clientContext.d.ts.map +1 -0
- package/lib/typescript/src/core/fontAwesome.d.ts +8 -0
- package/lib/typescript/src/core/fontAwesome.d.ts.map +1 -0
- package/lib/typescript/src/core/onboardingRepository.d.ts +15 -0
- package/lib/typescript/src/core/onboardingRepository.d.ts.map +1 -0
- package/lib/typescript/src/core/resolverService.d.ts +11 -0
- package/lib/typescript/src/core/resolverService.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types/flowboard.d.ts +34 -0
- package/lib/typescript/src/types/flowboard.d.ts.map +1 -0
- package/lib/typescript/src/utils/flowboardUtils.d.ts +31 -0
- package/lib/typescript/src/utils/flowboardUtils.d.ts.map +1 -0
- package/package.json +192 -0
- package/src/Flowboard.ts +223 -0
- package/src/FlowboardProvider.tsx +60 -0
- package/src/NativeFlowboardReact.ts +7 -0
- package/src/components/FlowboardFlow.tsx +513 -0
- package/src/components/FlowboardRenderer.tsx +1957 -0
- package/src/components/widgets/sliderRegistry.tsx +56 -0
- package/src/core/analyticsManager.ts +125 -0
- package/src/core/assetPreloader.ts +103 -0
- package/src/core/clientContext.ts +132 -0
- package/src/core/fontAwesome.ts +90 -0
- package/src/core/onboardingRepository.ts +79 -0
- package/src/core/resolverService.ts +69 -0
- package/src/index.tsx +11 -0
- package/src/types/flowboard.ts +50 -0
- package/src/types/react-native-vector-icons.d.ts +15 -0
- package/src/utils/flowboardUtils.ts +400 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = "FlowboardReact"
|
|
7
|
+
s.version = package["version"]
|
|
8
|
+
s.summary = package["description"]
|
|
9
|
+
s.homepage = package["homepage"]
|
|
10
|
+
s.license = package["license"]
|
|
11
|
+
s.authors = package["author"]
|
|
12
|
+
|
|
13
|
+
s.platforms = { :ios => min_ios_version_supported }
|
|
14
|
+
s.source = { :git => "https://github.com/gregoirecambon/flowboard-pckg-react.git", :tag => "#{s.version}" }
|
|
15
|
+
|
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm,swift,cpp}"
|
|
17
|
+
s.private_header_files = "ios/**/*.h"
|
|
18
|
+
|
|
19
|
+
install_modules_dependencies(s)
|
|
20
|
+
end
|
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Flowboard
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
in the Software without restriction, including without limitation the rights
|
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
furnished to do so, subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# flowboard-react
|
|
2
|
+
|
|
3
|
+
Flowboard React Native SDK. JSON-driven onboarding flows with custom screens and full SDUI rendering parity with the Flutter package.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install flowboard-react
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Install peer/native dependencies (recommended):
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install \
|
|
15
|
+
@react-native-async-storage/async-storage \
|
|
16
|
+
@react-native-masked-view/masked-view \
|
|
17
|
+
lottie-react-native \
|
|
18
|
+
react-native-device-info \
|
|
19
|
+
react-native-get-random-values \
|
|
20
|
+
react-native-in-app-review \
|
|
21
|
+
react-native-linear-gradient \
|
|
22
|
+
react-native-mask-input \
|
|
23
|
+
react-native-pager-view \
|
|
24
|
+
react-native-permissions \
|
|
25
|
+
react-native-safe-area-context \
|
|
26
|
+
react-native-svg \
|
|
27
|
+
react-native-vector-icons \
|
|
28
|
+
uuid
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
iOS:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
cd ios && pod install
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import React from 'react';
|
|
41
|
+
import { Flowboard, FlowboardProvider } from 'flowboard-react';
|
|
42
|
+
|
|
43
|
+
export default function App() {
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
Flowboard.init({
|
|
46
|
+
appId: 'YOUR_APP_ID',
|
|
47
|
+
bundleId: 'com.your.app',
|
|
48
|
+
debug: true,
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<FlowboardProvider>
|
|
54
|
+
{/* your app */}
|
|
55
|
+
</FlowboardProvider>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Launch onboarding:
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
await Flowboard.launchOnboarding({
|
|
64
|
+
customScreenBuilder: (ctx) => {
|
|
65
|
+
if (ctx.screenData.id === 'paywall') {
|
|
66
|
+
return <MyPaywall onClose={ctx.onNext} />;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
},
|
|
70
|
+
onOnboardEnd: (formData) => {
|
|
71
|
+
console.log('Flow completed:', formData);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Re-initialize:
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
await Flowboard.reinit();
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## API
|
|
83
|
+
|
|
84
|
+
- `Flowboard.init({ appId, bundleId, debug, enableAnalytics })`
|
|
85
|
+
- `Flowboard.launchOnboarding({ customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart })`
|
|
86
|
+
- `Flowboard.reinit()`
|
|
87
|
+
- `FlowboardProvider` (required to host modal flow)
|
|
88
|
+
|
|
89
|
+
## Parity Checklist
|
|
90
|
+
|
|
91
|
+
- [x] Flowboard init/launch/reinit
|
|
92
|
+
- [x] Client context capture + resolver payload
|
|
93
|
+
- [x] Analytics events (onboard_loaded, onboard_started, screen_view, onboard_ended)
|
|
94
|
+
- [x] Cache + progress persistence
|
|
95
|
+
- [x] SDUI components (layout, visual, inputs, advanced)
|
|
96
|
+
- [x] Custom screens/actions
|
|
97
|
+
- [x] Deeplink/weblink, rate_app, request_permission
|
|
98
|
+
- [x] Feature showcase example app
|
|
99
|
+
- [x] Jest unit tests for critical logic
|
|
100
|
+
|
|
101
|
+
## Testing
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
yarn typecheck
|
|
105
|
+
yarn test
|
|
106
|
+
yarn lint
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Notes
|
|
110
|
+
|
|
111
|
+
- Custom fonts must be available in the host app when using `fontFamily`.
|
|
112
|
+
- Asset images/Lottie ("source": "asset") should be provided as `uri` or through a custom loader in the host app.
|
|
113
|
+
|
|
114
|
+
## Contributing
|
|
115
|
+
|
|
116
|
+
- [Development workflow](CONTRIBUTING.md#development-workflow)
|
|
117
|
+
- [Sending a pull request](CONTRIBUTING.md#sending-a-pull-request)
|
|
118
|
+
- [Code of conduct](CODE_OF_CONDUCT.md)
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
MIT
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
ext.FlowboardReact = [
|
|
3
|
+
kotlinVersion: "2.0.21",
|
|
4
|
+
minSdkVersion: 24,
|
|
5
|
+
compileSdkVersion: 36,
|
|
6
|
+
targetSdkVersion: 36
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
ext.getExtOrDefault = { prop ->
|
|
10
|
+
if (rootProject.ext.has(prop)) {
|
|
11
|
+
return rootProject.ext.get(prop)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return FlowboardReact[prop]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
repositories {
|
|
18
|
+
google()
|
|
19
|
+
mavenCentral()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
dependencies {
|
|
23
|
+
classpath "com.android.tools.build:gradle:8.7.2"
|
|
24
|
+
// noinspection DifferentKotlinGradleVersion
|
|
25
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
apply plugin: "com.android.library"
|
|
31
|
+
apply plugin: "kotlin-android"
|
|
32
|
+
|
|
33
|
+
apply plugin: "com.facebook.react"
|
|
34
|
+
|
|
35
|
+
android {
|
|
36
|
+
namespace "com.flowboardreact"
|
|
37
|
+
|
|
38
|
+
compileSdkVersion getExtOrDefault("compileSdkVersion")
|
|
39
|
+
|
|
40
|
+
defaultConfig {
|
|
41
|
+
minSdkVersion getExtOrDefault("minSdkVersion")
|
|
42
|
+
targetSdkVersion getExtOrDefault("targetSdkVersion")
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
buildFeatures {
|
|
46
|
+
buildConfig true
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
buildTypes {
|
|
50
|
+
release {
|
|
51
|
+
minifyEnabled false
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
lint {
|
|
56
|
+
disable "GradleCompatible"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
compileOptions {
|
|
60
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
61
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
dependencies {
|
|
66
|
+
implementation "com.facebook.react:react-android"
|
|
67
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.flowboardreact
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
4
|
+
|
|
5
|
+
class FlowboardReactModule(reactContext: ReactApplicationContext) :
|
|
6
|
+
NativeFlowboardReactSpec(reactContext) {
|
|
7
|
+
|
|
8
|
+
override fun multiply(a: Double, b: Double): Double {
|
|
9
|
+
return a * b
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
companion object {
|
|
13
|
+
const val NAME = NativeFlowboardReactSpec.NAME
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.flowboardreact
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
|
+
import java.util.HashMap
|
|
9
|
+
|
|
10
|
+
class FlowboardReactPackage : BaseReactPackage() {
|
|
11
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
12
|
+
return if (name == FlowboardReactModule.NAME) {
|
|
13
|
+
FlowboardReactModule(reactContext)
|
|
14
|
+
} else {
|
|
15
|
+
null
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
20
|
+
return ReactModuleInfoProvider {
|
|
21
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
22
|
+
moduleInfos[FlowboardReactModule.NAME] = ReactModuleInfo(
|
|
23
|
+
FlowboardReactModule.NAME,
|
|
24
|
+
FlowboardReactModule.NAME,
|
|
25
|
+
false, // canOverrideExistingModule
|
|
26
|
+
false, // needsEagerInit
|
|
27
|
+
false, // isCxxModule
|
|
28
|
+
true // isTurboModule
|
|
29
|
+
)
|
|
30
|
+
moduleInfos
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#import "FlowboardReact.h"
|
|
2
|
+
|
|
3
|
+
@implementation FlowboardReact
|
|
4
|
+
- (NSNumber *)multiply:(double)a b:(double)b {
|
|
5
|
+
NSNumber *result = @(a * b);
|
|
6
|
+
|
|
7
|
+
return result;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
11
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
12
|
+
{
|
|
13
|
+
return std::make_shared<facebook::react::NativeFlowboardReactSpecJSI>(params);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
+ (NSString *)moduleName
|
|
17
|
+
{
|
|
18
|
+
return @"FlowboardReact";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@end
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Alert } from 'react-native';
|
|
4
|
+
import { ClientContext } from "./core/clientContext.js";
|
|
5
|
+
import { ResolverService } from "./core/resolverService.js";
|
|
6
|
+
import { OnboardingRepository } from "./core/onboardingRepository.js";
|
|
7
|
+
import { AnalyticsManager } from "./core/analyticsManager.js";
|
|
8
|
+
export class Flowboard {
|
|
9
|
+
static appId = null;
|
|
10
|
+
static bundleId = null;
|
|
11
|
+
static debug = false;
|
|
12
|
+
static repository = new OnboardingRepository();
|
|
13
|
+
static service = new ResolverService();
|
|
14
|
+
static initPromise = null;
|
|
15
|
+
static listeners = new Set();
|
|
16
|
+
static subscribe(listener) {
|
|
17
|
+
Flowboard.listeners.add(listener);
|
|
18
|
+
return () => Flowboard.listeners.delete(listener);
|
|
19
|
+
}
|
|
20
|
+
static async init(params) {
|
|
21
|
+
Flowboard.appId = params.appId;
|
|
22
|
+
Flowboard.bundleId = params.bundleId;
|
|
23
|
+
Flowboard.debug = params.debug ?? false;
|
|
24
|
+
Flowboard.log(`Initialized with appId: ${Flowboard.appId}, bundleId: ${Flowboard.bundleId}`);
|
|
25
|
+
try {
|
|
26
|
+
const clientContext = await ClientContext.create();
|
|
27
|
+
AnalyticsManager.instance.configure({
|
|
28
|
+
enabled: params.enableAnalytics ?? true,
|
|
29
|
+
context: clientContext
|
|
30
|
+
});
|
|
31
|
+
} catch (error) {
|
|
32
|
+
Flowboard.log(`Failed to configure analytics: ${String(error)}`);
|
|
33
|
+
}
|
|
34
|
+
Flowboard.initPromise = Flowboard.initialize();
|
|
35
|
+
}
|
|
36
|
+
static async reinit() {
|
|
37
|
+
Flowboard.log('Re-initializing. Clearing cache...');
|
|
38
|
+
await Flowboard.clearLocalCaches();
|
|
39
|
+
Flowboard.initPromise = Flowboard.fetchAndSave();
|
|
40
|
+
await Flowboard.initPromise;
|
|
41
|
+
}
|
|
42
|
+
static async launchOnboarding(options = {}) {
|
|
43
|
+
Flowboard.log('Attempting to launch onboarding...');
|
|
44
|
+
if (!Flowboard.appId) {
|
|
45
|
+
throw new Error('Flowboard.init() must be called before launchOnboarding');
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const context = AnalyticsManager.instance.clientContextSnapshot ?? (await ClientContext.create());
|
|
49
|
+
AnalyticsManager.instance.configure({
|
|
50
|
+
enabled: options.enableAnalytics ?? true,
|
|
51
|
+
context
|
|
52
|
+
});
|
|
53
|
+
} catch (error) {
|
|
54
|
+
Flowboard.log(`Failed to configure analytics for launch: ${String(error)}`);
|
|
55
|
+
}
|
|
56
|
+
let data = await Flowboard.repository.getOnboardingJson();
|
|
57
|
+
if (!data) {
|
|
58
|
+
Flowboard.log('Data not in cache. Waiting for initialization...');
|
|
59
|
+
if (Flowboard.initPromise) {
|
|
60
|
+
try {
|
|
61
|
+
await Flowboard.initPromise;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
Flowboard.log(`Initialization failed during wait: ${String(error)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
data = await Flowboard.repository.getOnboardingJson();
|
|
67
|
+
if (!data) {
|
|
68
|
+
Flowboard.log('Data still null after wait. Retrying fetch...');
|
|
69
|
+
try {
|
|
70
|
+
await Flowboard.fetchAndSave();
|
|
71
|
+
data = await Flowboard.repository.getOnboardingJson();
|
|
72
|
+
} catch (error) {
|
|
73
|
+
Flowboard.log(`Retry fetch failed: ${String(error)}`);
|
|
74
|
+
Alert.alert('Failed to load onboarding', String(error));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!data) {
|
|
80
|
+
Flowboard.log('Failed to launch: Data is null.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (options.alwaysRestart) {
|
|
84
|
+
await Flowboard.repository.clearProgress();
|
|
85
|
+
}
|
|
86
|
+
let initialStep = 0;
|
|
87
|
+
let initialFormData = {};
|
|
88
|
+
if (!options.alwaysRestart) {
|
|
89
|
+
const flowId = data.flow_id;
|
|
90
|
+
if (flowId) {
|
|
91
|
+
const savedStep = await Flowboard.repository.getProgressStepForFlow(flowId);
|
|
92
|
+
const savedFormData = await Flowboard.repository.getProgressFormDataForFlow(flowId);
|
|
93
|
+
if (savedStep !== null && savedStep !== undefined) {
|
|
94
|
+
const screens = Array.isArray(data.screens) ? data.screens : [];
|
|
95
|
+
if (screens.length > 0) {
|
|
96
|
+
const maxIndex = screens.length - 1;
|
|
97
|
+
if (savedStep <= 0) initialStep = 0;else if (savedStep >= screens.length) initialStep = maxIndex;else initialStep = savedStep;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (savedFormData && Object.keys(savedFormData).length > 0) {
|
|
101
|
+
initialFormData = {
|
|
102
|
+
...savedFormData
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
Flowboard.log(`Launching onboarding flow. ${data.flow_id ?? ''}`);
|
|
108
|
+
Flowboard.emitLaunch({
|
|
109
|
+
data,
|
|
110
|
+
options,
|
|
111
|
+
initialStep,
|
|
112
|
+
initialFormData
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
static async initialize() {
|
|
116
|
+
Flowboard.log('Checking local cache...');
|
|
117
|
+
const cached = await Flowboard.repository.getOnboardingJson();
|
|
118
|
+
if (cached) {
|
|
119
|
+
Flowboard.log('Onboarding data found in cache.');
|
|
120
|
+
AnalyticsManager.instance.startSession({
|
|
121
|
+
flowData: cached
|
|
122
|
+
});
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
Flowboard.log('No cached data found. Fetching from remote...');
|
|
126
|
+
await Flowboard.fetchAndSave();
|
|
127
|
+
}
|
|
128
|
+
static async fetchAndSave() {
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
if (!Flowboard.appId || !Flowboard.bundleId) {
|
|
131
|
+
throw new Error('Flowboard not initialized. Call Flowboard.init() first.');
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const context = await ClientContext.create();
|
|
135
|
+
Flowboard.log(`Fetching onboarding JSON for installId: ${context.installId} | appId: ${Flowboard.appId} | bundleId: ${Flowboard.bundleId}`);
|
|
136
|
+
const json = await Flowboard.service.fetchOnboardingJson({
|
|
137
|
+
context,
|
|
138
|
+
appId: Flowboard.appId
|
|
139
|
+
});
|
|
140
|
+
Flowboard.log('Fetch successful. Saving to cache.');
|
|
141
|
+
await Flowboard.repository.saveOnboardingJson(json);
|
|
142
|
+
AnalyticsManager.instance.startSession({
|
|
143
|
+
flowData: json
|
|
144
|
+
});
|
|
145
|
+
const duration = Date.now() - startTime;
|
|
146
|
+
AnalyticsManager.instance.trackOnboardLoaded({
|
|
147
|
+
durationMs: duration,
|
|
148
|
+
cached: false
|
|
149
|
+
});
|
|
150
|
+
} catch (error) {
|
|
151
|
+
Flowboard.log(`Error fetching onboarding data: ${String(error)}`);
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
static async clearLocalCaches() {
|
|
156
|
+
await Promise.all([Flowboard.repository.clearProgress(), Flowboard.repository.clearOnboardingJson()]);
|
|
157
|
+
}
|
|
158
|
+
static emitLaunch(payload) {
|
|
159
|
+
Flowboard.listeners.forEach(listener => listener(payload));
|
|
160
|
+
}
|
|
161
|
+
static log(message) {
|
|
162
|
+
if (Flowboard.debug) {
|
|
163
|
+
console.log(`\u{1F30A} Flowboard - ${message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=Flowboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","appId","bundleId","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","Error","clientContextSnapshot","data","getOnboardingJson","alert","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","cached","startSession","flowData","startTime","Date","now","installId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import { Modal, StyleSheet, View } from 'react-native';
|
|
5
|
+
import { Flowboard } from "./Flowboard.js";
|
|
6
|
+
import FlowboardFlow from "./components/FlowboardFlow.js";
|
|
7
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
const styles = StyleSheet.create({
|
|
9
|
+
modalContainer: {
|
|
10
|
+
flex: 1,
|
|
11
|
+
backgroundColor: 'transparent'
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export default function FlowboardProvider({
|
|
15
|
+
children
|
|
16
|
+
}) {
|
|
17
|
+
const [payload, setPayload] = useState(null);
|
|
18
|
+
const [visible, setVisible] = useState(false);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const unsubscribe = Flowboard.subscribe(nextPayload => {
|
|
21
|
+
setPayload(nextPayload);
|
|
22
|
+
setVisible(true);
|
|
23
|
+
});
|
|
24
|
+
return unsubscribe;
|
|
25
|
+
}, []);
|
|
26
|
+
const handleClose = () => {
|
|
27
|
+
setVisible(false);
|
|
28
|
+
setPayload(null);
|
|
29
|
+
};
|
|
30
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
31
|
+
children: [children, /*#__PURE__*/_jsx(Modal, {
|
|
32
|
+
visible: visible,
|
|
33
|
+
animationType: "slide",
|
|
34
|
+
transparent: true,
|
|
35
|
+
onRequestClose: handleClose,
|
|
36
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
37
|
+
style: styles.modalContainer,
|
|
38
|
+
children: payload ? /*#__PURE__*/_jsx(FlowboardFlow, {
|
|
39
|
+
data: payload.data,
|
|
40
|
+
customScreenBuilder: payload.options.customScreenBuilder,
|
|
41
|
+
customActionBuilder: payload.options.customActionBuilder,
|
|
42
|
+
onOnboardEnd: payload.options.onOnboardEnd,
|
|
43
|
+
onStepChange: payload.options.onStepChange,
|
|
44
|
+
initialStep: payload.initialStep,
|
|
45
|
+
initialFormData: payload.initialFormData,
|
|
46
|
+
onClose: handleClose
|
|
47
|
+
}) : null
|
|
48
|
+
})
|
|
49
|
+
})]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=FlowboardProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","Modal","StyleSheet","View","Flowboard","FlowboardFlow","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","styles","create","modalContainer","flex","backgroundColor","FlowboardProvider","children","payload","setPayload","visible","setVisible","unsubscribe","subscribe","nextPayload","handleClose","animationType","transparent","onRequestClose","style","data","customScreenBuilder","options","customActionBuilder","onOnboardEnd","onStepChange","initialStep","initialFormData","onClose"],"sourceRoot":"../../src","sources":["FlowboardProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACtD,SAASC,SAAS,QAA4B,gBAAa;AAC3D,OAAOC,aAAa,MAAM,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAEvD,MAAMC,MAAM,GAAGV,UAAU,CAACW,MAAM,CAAC;EAC/BC,cAAc,EAAE;IACdC,IAAI,EAAE,CAAC;IACPC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC;AAEF,eAAe,SAASC,iBAAiBA,CAAC;EACxCC;AAGF,CAAC,EAAE;EACD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGpB,QAAQ,CAAuB,IAAI,CAAC;EAClE,MAAM,CAACqB,OAAO,EAAEC,UAAU,CAAC,GAAGtB,QAAQ,CAAC,KAAK,CAAC;EAE7CD,SAAS,CAAC,MAAM;IACd,MAAMwB,WAAW,GAAGnB,SAAS,CAACoB,SAAS,CAAEC,WAAW,IAAK;MACvDL,UAAU,CAACK,WAAW,CAAC;MACvBH,UAAU,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC;IACF,OAAOC,WAAW;EACpB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,WAAW,GAAGA,CAAA,KAAM;IACxBJ,UAAU,CAAC,KAAK,CAAC;IACjBF,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC;EAED,oBACET,KAAA,CAAAF,SAAA;IAAAS,QAAA,GACGA,QAAQ,eACTX,IAAA,CAACN,KAAK;MACJoB,OAAO,EAAEA,OAAQ;MACjBM,aAAa,EAAC,OAAO;MACrBC,WAAW;MACXC,cAAc,EAAEH,WAAY;MAAAR,QAAA,eAE5BX,IAAA,CAACJ,IAAI;QAAC2B,KAAK,EAAElB,MAAM,CAACE,cAAe;QAAAI,QAAA,EAChCC,OAAO,gBACNZ,IAAA,CAACF,aAAa;UACZ0B,IAAI,EAAEZ,OAAO,CAACY,IAAK;UACnBC,mBAAmB,EAAEb,OAAO,CAACc,OAAO,CAACD,mBAAoB;UACzDE,mBAAmB,EAAEf,OAAO,CAACc,OAAO,CAACC,mBAAoB;UACzDC,YAAY,EAAEhB,OAAO,CAACc,OAAO,CAACE,YAAa;UAC3CC,YAAY,EAAEjB,OAAO,CAACc,OAAO,CAACG,YAAa;UAC3CC,WAAW,EAAElB,OAAO,CAACkB,WAAY;UACjCC,eAAe,EAAEnB,OAAO,CAACmB,eAAgB;UACzCC,OAAO,EAAEb;QAAY,CACtB,CAAC,GACA;MAAI,CACJ;IAAC,CACF,CAAC;EAAA,CACR,CAAC;AAEP","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeFlowboardReact.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AAMpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
|