@myop/react-native 0.0.1 → 0.0.3
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 +183 -102
- package/dist/MyopComponent.d.ts +9 -1
- package/dist/MyopComponent.d.ts.map +1 -1
- package/dist/MyopComponent.js +179 -31
- package/dist/MyopComponent.js.map +1 -1
- package/dist/MyopFallback.d.ts +3 -0
- package/dist/MyopFallback.d.ts.map +1 -0
- package/dist/MyopFallback.js +74 -0
- package/dist/MyopFallback.js.map +1 -0
- package/dist/MyopLoader.d.ts +6 -0
- package/dist/MyopLoader.d.ts.map +1 -0
- package/dist/MyopLoader.js +150 -0
- package/dist/MyopLoader.js.map +1 -0
- package/dist/componentHost.html.d.ts +1 -1
- package/dist/componentHost.html.d.ts.map +1 -1
- package/dist/componentHost.html.js +63 -43
- package/dist/componentHost.html.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -38
- package/src/MyopComponent.tsx +0 -95
- package/src/componentHost.html.ts +0 -48
- package/src/index.ts +0 -2
- package/src/types.ts +0 -25
package/README.md
CHANGED
|
@@ -1,122 +1,217 @@
|
|
|
1
|
-
# @myop/react-native
|
|
1
|
+
# @myop/react-native
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@myop/react-native)
|
|
4
|
+
[](https://github.com/myop-dev/react-native/blob/main/LICENSE)
|
|
5
|
+
|
|
6
|
+
Embed [Myop](https://myop.dev) components in your React Native applications.
|
|
7
|
+
|
|
8
|
+
## Features
|
|
9
|
+
|
|
10
|
+
- Load Myop components by ID or custom configuration
|
|
11
|
+
- Two-way communication between React Native and embedded components
|
|
12
|
+
- Customizable loading and fallback states
|
|
13
|
+
- Support for both V1 and V2 component formats
|
|
14
|
+
- TypeScript support
|
|
4
15
|
|
|
5
16
|
## Installation
|
|
6
17
|
|
|
7
18
|
```bash
|
|
8
|
-
npm install @myop/react-native
|
|
19
|
+
npm install @myop/react-native
|
|
9
20
|
```
|
|
10
21
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Make sure you have the required peer dependencies installed:
|
|
22
|
+
Install the required peer dependency:
|
|
14
23
|
|
|
15
24
|
```bash
|
|
16
25
|
npm install react-native-webview
|
|
17
26
|
```
|
|
18
27
|
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
### Basic Usage with Component ID
|
|
28
|
+
## Quick Start
|
|
22
29
|
|
|
23
30
|
```tsx
|
|
24
|
-
import
|
|
25
|
-
import { View } from 'react-native';
|
|
26
|
-
import { MyopComponent } from '@myop/react-native-host';
|
|
31
|
+
import { MyopComponent } from '@myop/react-native';
|
|
27
32
|
|
|
28
33
|
export default function App() {
|
|
29
34
|
return (
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/>
|
|
35
|
-
</View>
|
|
35
|
+
<MyopComponent
|
|
36
|
+
componentId="your-component-id"
|
|
37
|
+
style={{ flex: 1 }}
|
|
38
|
+
/>
|
|
36
39
|
);
|
|
37
40
|
}
|
|
38
41
|
```
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
### Loading by Component ID
|
|
46
|
+
|
|
47
|
+
The simplest way to embed a Myop component:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
<MyopComponent
|
|
51
|
+
componentId="abc123"
|
|
52
|
+
style={{ flex: 1 }}
|
|
53
|
+
/>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Passing Data to Components
|
|
57
|
+
|
|
58
|
+
Use the `data` prop to send data to your component's `myop_init_interface`:
|
|
41
59
|
|
|
42
60
|
```tsx
|
|
43
|
-
|
|
44
|
-
import { View } from 'react-native';
|
|
45
|
-
import { MyopComponent, IComponentInstanceConfig } from '@myop/react-native-host';
|
|
61
|
+
const [userData, setUserData] = useState({ name: 'John', theme: 'dark' });
|
|
46
62
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
63
|
+
<MyopComponent
|
|
64
|
+
componentId="abc123"
|
|
65
|
+
data={userData}
|
|
66
|
+
style={{ flex: 1 }}
|
|
67
|
+
/>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
When `data` changes, `myop_init_interface` is automatically called with the new value.
|
|
71
|
+
|
|
72
|
+
### Handling Component Events
|
|
73
|
+
|
|
74
|
+
Listen for events from your component's `myop_cta_handler`:
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
<MyopComponent
|
|
78
|
+
componentId="abc123"
|
|
79
|
+
on={(action, payload) => {
|
|
80
|
+
switch (action) {
|
|
81
|
+
case 'submit':
|
|
82
|
+
handleSubmit(payload);
|
|
83
|
+
break;
|
|
84
|
+
case 'navigate':
|
|
85
|
+
navigation.navigate(payload.screen);
|
|
86
|
+
break;
|
|
54
87
|
}
|
|
55
|
-
}
|
|
88
|
+
}}
|
|
89
|
+
style={{ flex: 1 }}
|
|
90
|
+
/>
|
|
91
|
+
```
|
|
56
92
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
93
|
+
### Executing Commands
|
|
94
|
+
|
|
95
|
+
Access the component instance for direct command execution:
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
const [component, setComponent] = useState(null);
|
|
99
|
+
|
|
100
|
+
<MyopComponent
|
|
101
|
+
componentId="abc123"
|
|
102
|
+
onLoad={(instance) => setComponent(() => instance)}
|
|
103
|
+
style={{ flex: 1 }}
|
|
104
|
+
/>
|
|
105
|
+
|
|
106
|
+
// Execute commands on the component
|
|
107
|
+
const handleReset = () => {
|
|
108
|
+
component?.('.reset()');
|
|
109
|
+
};
|
|
66
110
|
```
|
|
67
111
|
|
|
68
|
-
###
|
|
112
|
+
### Custom Loading State
|
|
69
113
|
|
|
70
|
-
|
|
114
|
+
Provide your own loading component:
|
|
71
115
|
|
|
72
116
|
```tsx
|
|
73
|
-
import
|
|
74
|
-
import { View, Button } from 'react-native';
|
|
75
|
-
import { MyopComponent } from '@myop/react-native-host';
|
|
117
|
+
import { ActivityIndicator, View } from 'react-native';
|
|
76
118
|
|
|
77
|
-
|
|
78
|
-
|
|
119
|
+
<MyopComponent
|
|
120
|
+
componentId="abc123"
|
|
121
|
+
loader={
|
|
122
|
+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
123
|
+
<ActivityIndicator size="large" color="#0000ff" />
|
|
124
|
+
</View>
|
|
125
|
+
}
|
|
126
|
+
fadeDuration={300}
|
|
127
|
+
style={{ flex: 1 }}
|
|
128
|
+
/>
|
|
129
|
+
```
|
|
79
130
|
|
|
80
|
-
|
|
81
|
-
setMyopInstance(() => myopComponent);
|
|
82
|
-
console.log('Myop component loaded!');
|
|
83
|
-
};
|
|
131
|
+
Set `loader={null}` to disable the loading state entirely.
|
|
84
132
|
|
|
85
|
-
|
|
86
|
-
if (myopInstance) {
|
|
87
|
-
myopInstance('.someMethod()');
|
|
88
|
-
}
|
|
89
|
-
};
|
|
133
|
+
### Custom Fallback State
|
|
90
134
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
<
|
|
135
|
+
Display a custom view when the component fails to load:
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
<MyopComponent
|
|
139
|
+
componentId="abc123"
|
|
140
|
+
fallback={
|
|
141
|
+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
142
|
+
<Text>Unable to load component</Text>
|
|
99
143
|
</View>
|
|
100
|
-
|
|
101
|
-
}
|
|
144
|
+
}
|
|
145
|
+
onError={(error) => console.error('Load failed:', error)}
|
|
146
|
+
style={{ flex: 1 }}
|
|
147
|
+
/>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Using Component Configuration
|
|
151
|
+
|
|
152
|
+
For advanced use cases, pass a full configuration object:
|
|
153
|
+
|
|
154
|
+
```tsx
|
|
155
|
+
import { MyopComponent, IComponentInstanceConfig } from '@myop/react-native';
|
|
156
|
+
|
|
157
|
+
const config: IComponentInstanceConfig = {
|
|
158
|
+
id: 'instance-1',
|
|
159
|
+
componentId: 'abc123',
|
|
160
|
+
componentName: 'MyComponent',
|
|
161
|
+
skinSelector: {
|
|
162
|
+
type: 'Dedicated',
|
|
163
|
+
skin: { id: 'skin-1' }
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
<MyopComponent
|
|
168
|
+
componentConfig={config}
|
|
169
|
+
style={{ flex: 1 }}
|
|
170
|
+
/>
|
|
102
171
|
```
|
|
103
172
|
|
|
104
|
-
|
|
173
|
+
### Environment Selection
|
|
105
174
|
|
|
106
|
-
|
|
175
|
+
Target different deployment environments:
|
|
107
176
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
177
|
+
```tsx
|
|
178
|
+
<MyopComponent
|
|
179
|
+
componentId="abc123"
|
|
180
|
+
environment="staging" // defaults to "production"
|
|
181
|
+
style={{ flex: 1 }}
|
|
182
|
+
/>
|
|
183
|
+
```
|
|
114
184
|
|
|
115
|
-
|
|
185
|
+
## API Reference
|
|
116
186
|
|
|
117
|
-
###
|
|
187
|
+
### MyopComponent Props
|
|
188
|
+
|
|
189
|
+
| Prop | Type | Default | Description |
|
|
190
|
+
|------|------|---------|-------------|
|
|
191
|
+
| `componentId` | `string` | - | Component ID to load from Myop cloud |
|
|
192
|
+
| `componentConfig` | `IComponentInstanceConfig` | - | Full component configuration object |
|
|
193
|
+
| `data` | `any` | - | Data passed to `myop_init_interface` |
|
|
194
|
+
| `on` | `(action: string, payload?: any) => void` | - | Handler for `myop_cta_handler` events |
|
|
195
|
+
| `onLoad` | `(instance: (cmd: string) => void) => void` | - | Callback when component loads |
|
|
196
|
+
| `onError` | `(error: string) => void` | - | Callback when component fails to load |
|
|
197
|
+
| `loader` | `ReactNode` | `<MyopLoader />` | Custom loading component |
|
|
198
|
+
| `fallback` | `ReactNode` | `<MyopFallback />` | Custom fallback component |
|
|
199
|
+
| `fadeDuration` | `number` | `200` | Loader fade-out duration in ms |
|
|
200
|
+
| `environment` | `string` | `"production"` | Target environment |
|
|
201
|
+
| `v1Mode` | `boolean` | `false` | Use V1 component format |
|
|
202
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container styles |
|
|
118
203
|
|
|
119
|
-
|
|
204
|
+
Either `componentId` or `componentConfig` must be provided.
|
|
205
|
+
|
|
206
|
+
### Exported Components
|
|
207
|
+
|
|
208
|
+
| Component | Description |
|
|
209
|
+
|-----------|-------------|
|
|
210
|
+
| `MyopComponent` | Main component for embedding Myop content |
|
|
211
|
+
| `MyopLoader` | Default animated loading state |
|
|
212
|
+
| `MyopFallback` | Default error/fallback state |
|
|
213
|
+
|
|
214
|
+
### Types
|
|
120
215
|
|
|
121
216
|
```typescript
|
|
122
217
|
interface IComponentInstanceConfig {
|
|
@@ -129,38 +224,24 @@ interface IComponentInstanceConfig {
|
|
|
129
224
|
resolvedNestedComponents?: IComponentConfig[];
|
|
130
225
|
[key: string]: any;
|
|
131
226
|
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
## How it Works
|
|
135
227
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
3. Initializes the component inside the WebView
|
|
141
|
-
4. Provides a bridge to execute commands on the loaded component
|
|
228
|
+
interface MyopLoaderRef {
|
|
229
|
+
fadeOut: (duration?: number) => void;
|
|
230
|
+
}
|
|
231
|
+
```
|
|
142
232
|
|
|
143
233
|
## Requirements
|
|
144
234
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
This project includes a demo Expo app for testing. To run the development app:
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
npm install
|
|
155
|
-
npx expo start
|
|
156
|
-
```
|
|
235
|
+
| Dependency | Version |
|
|
236
|
+
|------------|---------|
|
|
237
|
+
| React | >= 16.8.0 |
|
|
238
|
+
| React Native | >= 0.60.0 |
|
|
239
|
+
| react-native-webview | >= 11.0.0 |
|
|
157
240
|
|
|
158
|
-
##
|
|
241
|
+
## Contributing
|
|
159
242
|
|
|
160
|
-
|
|
161
|
-
npm run build
|
|
162
|
-
```
|
|
243
|
+
Contributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.
|
|
163
244
|
|
|
164
245
|
## License
|
|
165
246
|
|
|
166
|
-
MIT
|
|
247
|
+
MIT
|
package/dist/MyopComponent.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { IComponentInstanceConfig } from './types';
|
|
4
4
|
interface IPropTypes {
|
|
@@ -6,6 +6,14 @@ interface IPropTypes {
|
|
|
6
6
|
componentId?: string;
|
|
7
7
|
componentConfig?: IComponentInstanceConfig;
|
|
8
8
|
onLoad?: (myopComponent: (command: string) => void) => void;
|
|
9
|
+
onError?: (error: string) => void;
|
|
10
|
+
on?: (action: string, payload?: any) => void;
|
|
11
|
+
data?: any;
|
|
12
|
+
loader?: ReactNode;
|
|
13
|
+
fallback?: ReactNode;
|
|
14
|
+
fadeDuration?: number;
|
|
15
|
+
v1Mode?: boolean;
|
|
16
|
+
environment?: string;
|
|
9
17
|
}
|
|
10
18
|
export declare const MyopComponent: (props: IPropTypes) => React.JSX.Element;
|
|
11
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyopComponent.d.ts","sourceRoot":"","sources":["../src/MyopComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MyopComponent.d.ts","sourceRoot":"","sources":["../src/MyopComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAmB,SAAS,EAAuD,MAAM,OAAO,CAAC;AAG/G,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,SAAS,CAAC;AAMtD,UAAU,UAAU;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7C,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,sBA8N9C,CAAA"}
|
package/dist/MyopComponent.js
CHANGED
|
@@ -37,66 +37,214 @@ exports.MyopComponent = void 0;
|
|
|
37
37
|
const react_1 = __importStar(require("react"));
|
|
38
38
|
const react_native_1 = require("react-native");
|
|
39
39
|
const react_native_webview_1 = require("react-native-webview");
|
|
40
|
-
const
|
|
40
|
+
const componentHost_html_js_1 = require("./componentHost.html.js");
|
|
41
|
+
const MyopLoader_1 = require("./MyopLoader");
|
|
42
|
+
const MyopFallback_1 = require("./MyopFallback");
|
|
41
43
|
const MyopComponent = (props) => {
|
|
44
|
+
var _a, _b;
|
|
42
45
|
const webviewRef = (0, react_1.useRef)(null);
|
|
46
|
+
const loaderRef = (0, react_1.useRef)(null);
|
|
47
|
+
const [showLoader, setShowLoader] = (0, react_1.useState)(true);
|
|
48
|
+
const [showFallback, setShowFallback] = (0, react_1.useState)(false);
|
|
49
|
+
const [isComponentLoaded, setIsComponentLoaded] = (0, react_1.useState)(false);
|
|
50
|
+
const fadeDuration = (_a = props.fadeDuration) !== null && _a !== void 0 ? _a : 200;
|
|
51
|
+
// Function to call myop_init_interface in the WebView
|
|
52
|
+
const callInitInterface = (0, react_1.useCallback)((data) => {
|
|
53
|
+
if (!webviewRef.current || !isComponentLoaded)
|
|
54
|
+
return;
|
|
55
|
+
const encoded = encodeURIComponent(JSON.stringify(data));
|
|
56
|
+
webviewRef.current.injectJavaScript(`
|
|
57
|
+
if (window.myopComponent && window.myopComponent.element && window.myopComponent.element.contentWindow && window.myopComponent.element.contentWindow.myop_init_interface) {
|
|
58
|
+
window.myopComponent.element.contentWindow.myop_init_interface(JSON.parse(decodeURIComponent('${encoded}')));
|
|
59
|
+
}
|
|
60
|
+
true;
|
|
61
|
+
`);
|
|
62
|
+
}, [isComponentLoaded]);
|
|
63
|
+
// Call myop_init_interface when data prop changes (after component is loaded)
|
|
64
|
+
(0, react_1.useEffect)(() => {
|
|
65
|
+
if (isComponentLoaded && props.data !== undefined) {
|
|
66
|
+
callInitInterface(props.data);
|
|
67
|
+
}
|
|
68
|
+
}, [props.data, isComponentLoaded, callInitInterface]);
|
|
69
|
+
const hideLoader = (0, react_1.useCallback)(() => {
|
|
70
|
+
var _a;
|
|
71
|
+
if ((_a = loaderRef.current) === null || _a === void 0 ? void 0 : _a.fadeOut) {
|
|
72
|
+
loaderRef.current.fadeOut(fadeDuration);
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
setShowLoader(false);
|
|
75
|
+
}, fadeDuration);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
setShowLoader(false);
|
|
79
|
+
}
|
|
80
|
+
}, [fadeDuration]);
|
|
43
81
|
const myopComponent = (command) => {
|
|
44
82
|
var _a;
|
|
45
|
-
//TODO : return promise to data?
|
|
46
83
|
(_a = webviewRef.current) === null || _a === void 0 ? void 0 : _a.injectJavaScript(`
|
|
47
84
|
window.myopComponent${command}
|
|
48
85
|
`);
|
|
49
86
|
};
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// window.myopComponent.props.showPopupWOW();
|
|
57
|
-
// `);
|
|
87
|
+
const handleError = (0, react_1.useCallback)((errorMsg) => {
|
|
88
|
+
console.error('[MyopComponent] Error:', errorMsg);
|
|
89
|
+
hideLoader();
|
|
90
|
+
setShowFallback(true);
|
|
91
|
+
if (props.onError) {
|
|
92
|
+
props.onError(errorMsg);
|
|
58
93
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var _a;
|
|
94
|
+
}, [hideLoader, props.onError]);
|
|
95
|
+
const loadComponent = (0, react_1.useCallback)(async () => {
|
|
96
|
+
var _a, _b, _c;
|
|
63
97
|
try {
|
|
64
98
|
let componentConfig = null;
|
|
65
99
|
if (props.componentConfig) {
|
|
66
100
|
componentConfig = props.componentConfig;
|
|
67
101
|
}
|
|
68
102
|
else if (props.componentId) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
103
|
+
if (props.v1Mode) {
|
|
104
|
+
// V1 mode: use flow endpoint
|
|
105
|
+
const res = await fetch(`https://cloud.myop.dev/flow?id=${props.componentId}&auto=true`);
|
|
106
|
+
const json = await res.json();
|
|
107
|
+
if (!((_b = (_a = json.item) === null || _a === void 0 ? void 0 : _a.components) === null || _b === void 0 ? void 0 : _b[0])) {
|
|
108
|
+
handleError(`Component "${props.componentId}" not found`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
componentConfig = json.item.components[0];
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// V2 mode (default): use consume endpoint
|
|
115
|
+
const env = props.environment || 'production';
|
|
116
|
+
const res = await fetch(`https://cloud.myop.dev/consume?id=${props.componentId}&env=${env}`);
|
|
117
|
+
const config = await res.json();
|
|
118
|
+
const variant = config.item;
|
|
119
|
+
if (!variant) {
|
|
120
|
+
handleError(`Component "${props.componentId}" not found`);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!variant.consume_variant || !variant.consume_variant.length) {
|
|
124
|
+
handleError(`Component "${props.componentId}" has no implementation for environment "${env}"`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Build V2 component config
|
|
128
|
+
componentConfig = {
|
|
129
|
+
instance: {
|
|
130
|
+
id: 'auto',
|
|
131
|
+
componentId: variant.componentId,
|
|
132
|
+
componentName: variant.name,
|
|
133
|
+
skinSelector: {
|
|
134
|
+
type: 'Dedicated',
|
|
135
|
+
skin: { id: 'skin_auto_v2_converted' }
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
type: {
|
|
139
|
+
id: variant.id,
|
|
140
|
+
name: variant.name,
|
|
141
|
+
description: variant.description,
|
|
142
|
+
props: [
|
|
143
|
+
{
|
|
144
|
+
id: 'in_auto_v2_converted',
|
|
145
|
+
name: 'myop_init_interface',
|
|
146
|
+
type: 'any',
|
|
147
|
+
behavior: { type: 'code' }
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
id: 'out_auto_v2_converted',
|
|
151
|
+
name: 'myop_cta_handler',
|
|
152
|
+
type: 'any',
|
|
153
|
+
behavior: { type: 'code' }
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
refs: [],
|
|
157
|
+
skins: [{
|
|
158
|
+
id: 'skin_auto_v2_converted',
|
|
159
|
+
name: 'auto_v2_converted',
|
|
160
|
+
description: '',
|
|
161
|
+
loader: variant.consume_variant[0].loader
|
|
162
|
+
}],
|
|
163
|
+
defaultSkin: 0
|
|
164
|
+
},
|
|
165
|
+
name: variant.name
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (!componentConfig) {
|
|
170
|
+
handleError('No component configuration provided');
|
|
171
|
+
return;
|
|
72
172
|
}
|
|
73
173
|
const encoded = encodeURIComponent(JSON.stringify(componentConfig));
|
|
74
|
-
|
|
75
|
-
(_a = webviewRef.current) === null || _a === void 0 ? void 0 : _a.injectJavaScript(`
|
|
174
|
+
(_c = webviewRef.current) === null || _c === void 0 ? void 0 : _c.injectJavaScript(`
|
|
76
175
|
loadMyopComponent(\`${encoded}\`);
|
|
176
|
+
true;
|
|
77
177
|
`);
|
|
78
178
|
}
|
|
79
179
|
catch (err) {
|
|
80
|
-
|
|
180
|
+
handleError((err === null || err === void 0 ? void 0 : err.message) || 'Unknown error');
|
|
81
181
|
}
|
|
82
|
-
};
|
|
83
|
-
(0, react_1.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
182
|
+
}, [props.componentConfig, props.componentId, props.v1Mode, props.environment, handleError]);
|
|
183
|
+
const onMessage = (0, react_1.useCallback)((event) => {
|
|
184
|
+
var _a, _b, _c, _d;
|
|
185
|
+
const message = event.nativeEvent.data;
|
|
186
|
+
console.log('[MyopComponent] Message from WebView:', message);
|
|
187
|
+
if (message === 'WEBVIEW_READY') {
|
|
188
|
+
// WebView is ready, now inject the component loading code
|
|
189
|
+
loadComponent();
|
|
190
|
+
}
|
|
191
|
+
else if (message === 'COMPONENT_LOADED') {
|
|
192
|
+
setIsComponentLoaded(true);
|
|
193
|
+
hideLoader();
|
|
194
|
+
// Call myop_init_interface immediately with initial data if provided
|
|
195
|
+
if (props.data !== undefined) {
|
|
196
|
+
const encoded = encodeURIComponent(JSON.stringify(props.data));
|
|
197
|
+
(_a = webviewRef.current) === null || _a === void 0 ? void 0 : _a.injectJavaScript(`
|
|
198
|
+
if (window.myopComponent && window.myopComponent.element && window.myopComponent.element.contentWindow && window.myopComponent.element.contentWindow.myop_init_interface) {
|
|
199
|
+
window.myopComponent.element.contentWindow.myop_init_interface(JSON.parse(decodeURIComponent('${encoded}')));
|
|
200
|
+
}
|
|
201
|
+
true;
|
|
202
|
+
`);
|
|
203
|
+
}
|
|
204
|
+
if (props.onLoad) {
|
|
205
|
+
props.onLoad(myopComponent);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (((_b = message === null || message === void 0 ? void 0 : message.startsWith) === null || _b === void 0 ? void 0 : _b.call(message, 'COMPONENT_ERROR:')) || ((_c = message === null || message === void 0 ? void 0 : message.startsWith) === null || _c === void 0 ? void 0 : _c.call(message, 'SDK_INIT_ERROR:'))) {
|
|
209
|
+
const errorMsg = message.replace('COMPONENT_ERROR:', '').replace('SDK_INIT_ERROR:', '');
|
|
210
|
+
console.error('[MyopComponent] Error loading component:', errorMsg);
|
|
211
|
+
hideLoader();
|
|
212
|
+
setShowFallback(true);
|
|
213
|
+
if (props.onError) {
|
|
214
|
+
props.onError(errorMsg);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else if ((_d = message === null || message === void 0 ? void 0 : message.startsWith) === null || _d === void 0 ? void 0 : _d.call(message, 'CTA:')) {
|
|
218
|
+
// Handle myop_cta_handler calls
|
|
219
|
+
try {
|
|
220
|
+
const ctaData = JSON.parse(message.substring(4));
|
|
221
|
+
if (props.on) {
|
|
222
|
+
props.on(ctaData.action, ctaData.payload);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (e) {
|
|
226
|
+
console.error('[MyopComponent] Failed to parse CTA message:', e);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}, [loadComponent, props.onLoad, props.onError, props.on, hideLoader]);
|
|
87
230
|
return (react_1.default.createElement(react_native_1.View, { style: props.style ? props.style : styles.root },
|
|
88
|
-
react_1.default.createElement(react_native_webview_1.WebView, { ref: webviewRef, originWhitelist: ['*'], source: { html:
|
|
89
|
-
|
|
231
|
+
react_1.default.createElement(react_native_webview_1.WebView, { ref: webviewRef, originWhitelist: ['*'], source: { html: componentHost_html_js_1.HTML }, onMessage: onMessage, style: styles.webview, javaScriptEnabled: true, domStorageEnabled: true, mixedContentMode: "always", allowFileAccess: true, allowUniversalAccessFromFileURLs: true }),
|
|
232
|
+
showLoader && (react_1.default.createElement(react_native_1.View, { style: styles.loaderContainer }, props.loader !== undefined
|
|
233
|
+
? ((0, react_1.isValidElement)(props.loader)
|
|
234
|
+
? (0, react_1.cloneElement)(props.loader, { ref: loaderRef })
|
|
235
|
+
: props.loader)
|
|
236
|
+
: react_1.default.createElement(MyopLoader_1.MyopLoader, { ref: loaderRef }))),
|
|
237
|
+
showFallback && (react_1.default.createElement(react_native_1.View, { style: styles.loaderContainer }, (_b = props.fallback) !== null && _b !== void 0 ? _b : react_1.default.createElement(MyopFallback_1.MyopFallback, null)))));
|
|
90
238
|
};
|
|
91
239
|
exports.MyopComponent = MyopComponent;
|
|
92
240
|
const styles = react_native_1.StyleSheet.create({
|
|
93
241
|
root: {
|
|
94
|
-
|
|
95
|
-
|
|
242
|
+
width: '100%',
|
|
243
|
+
height: '100%',
|
|
96
244
|
},
|
|
97
245
|
webview: {
|
|
98
246
|
flex: 1,
|
|
99
|
-
|
|
100
|
-
}
|
|
247
|
+
},
|
|
248
|
+
loaderContainer: Object.assign(Object.assign({}, react_native_1.StyleSheet.absoluteFillObject), { zIndex: 1 }),
|
|
101
249
|
});
|
|
102
250
|
//# sourceMappingURL=MyopComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyopComponent.js","sourceRoot":"","sources":["../src/MyopComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA+
|
|
1
|
+
{"version":3,"file":"MyopComponent.js","sourceRoot":"","sources":["../src/MyopComponent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MyopFallback.d.ts","sourceRoot":"","sources":["../src/MyopFallback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA8D1B,eAAO,MAAM,YAAY,yBAWxB,CAAC"}
|