arlo-react-native 0.1.0 → 0.1.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/dist/ArloFlowRenderer.d.ts +3 -0
- package/dist/ArloFlowRenderer.d.ts.map +1 -0
- package/dist/ArloFlowRenderer.js +431 -0
- package/dist/ArloFlowRenderer.js.map +1 -0
- package/dist/ArloPresenterRenderer.d.ts +10 -0
- package/dist/ArloPresenterRenderer.d.ts.map +1 -0
- package/dist/ArloPresenterRenderer.js +27 -0
- package/dist/ArloPresenterRenderer.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +22 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +22 -0
- package/dist/registry.js.map +1 -0
- package/dist/storage-cache.d.ts +12 -0
- package/dist/storage-cache.d.ts.map +1 -0
- package/dist/storage-cache.js +17 -0
- package/dist/storage-cache.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/useArloPresenter.d.ts +3 -0
- package/dist/useArloPresenter.d.ts.map +1 -0
- package/dist/useArloPresenter.js +10 -0
- package/dist/useArloPresenter.js.map +1 -0
- package/package.json +21 -4
- package/src/ArloFlowRenderer.tsx +0 -763
- package/src/ArloPresenterRenderer.tsx +0 -59
- package/src/index.ts +0 -23
- package/src/registry.ts +0 -45
- package/src/storage-cache.ts +0 -29
- package/src/types.ts +0 -41
- package/src/useArloPresenter.ts +0 -11
- package/tsconfig.json +0 -16
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
import { Text, View } from "react-native";
|
|
3
|
-
|
|
4
|
-
import type { ArloPresenter } from "arlo-sdk";
|
|
5
|
-
|
|
6
|
-
import { ArloFlowRenderer } from "./ArloFlowRenderer";
|
|
7
|
-
import type { ArloFlowRendererProps } from "./types";
|
|
8
|
-
import { useArloPresenter } from "./useArloPresenter";
|
|
9
|
-
|
|
10
|
-
export interface ArloPresenterRendererProps
|
|
11
|
-
extends Omit<ArloFlowRendererProps, "session"> {
|
|
12
|
-
presenter: ArloPresenter;
|
|
13
|
-
loadingState?: ReactNode;
|
|
14
|
-
errorState?: (message: string) => ReactNode;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function ArloPresenterRenderer({
|
|
18
|
-
presenter,
|
|
19
|
-
loadingState = (
|
|
20
|
-
<View>
|
|
21
|
-
<Text>Loading...</Text>
|
|
22
|
-
</View>
|
|
23
|
-
),
|
|
24
|
-
errorState,
|
|
25
|
-
...rendererProps
|
|
26
|
-
}: ArloPresenterRendererProps) {
|
|
27
|
-
const state = useArloPresenter(presenter);
|
|
28
|
-
|
|
29
|
-
if (state.status === "loading") {
|
|
30
|
-
return <>{loadingState}</>;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (state.status === "error") {
|
|
34
|
-
if (errorState) {
|
|
35
|
-
return <>{errorState(state.error?.message ?? "Unknown error")}</>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<View>
|
|
40
|
-
<Text>{state.error?.message ?? "Failed to load flow"}</Text>
|
|
41
|
-
</View>
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (!state.session) {
|
|
46
|
-
return <>{rendererProps.emptyState ?? null}</>;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<ArloFlowRenderer
|
|
51
|
-
session={state.session}
|
|
52
|
-
{...rendererProps}
|
|
53
|
-
onSnapshotChange={(snapshot) => {
|
|
54
|
-
rendererProps.onSnapshotChange?.(snapshot);
|
|
55
|
-
presenter.syncSession();
|
|
56
|
-
}}
|
|
57
|
-
/>
|
|
58
|
-
);
|
|
59
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export { ArloFlowRenderer } from "./ArloFlowRenderer";
|
|
2
|
-
export { ArloPresenterRenderer } from "./ArloPresenterRenderer";
|
|
3
|
-
export { createArloRegistry } from "./registry";
|
|
4
|
-
export { createReactNativeFlowCache } from "./storage-cache";
|
|
5
|
-
export { useArloPresenter } from "./useArloPresenter";
|
|
6
|
-
export type {
|
|
7
|
-
ArloComponentRenderContext,
|
|
8
|
-
ArloComponentRenderer,
|
|
9
|
-
ArloComponentRendererMap,
|
|
10
|
-
ArloCustomScreenRenderer,
|
|
11
|
-
ArloFlowRendererProps,
|
|
12
|
-
} from "./types";
|
|
13
|
-
export type {
|
|
14
|
-
ArloRegistry,
|
|
15
|
-
ArloRegisteredComponent,
|
|
16
|
-
ArloRegisteredScreen,
|
|
17
|
-
ArloRegistryComponentContext,
|
|
18
|
-
ArloRegistryScreenContext,
|
|
19
|
-
} from "./registry";
|
|
20
|
-
export type {
|
|
21
|
-
AsyncStorageLike,
|
|
22
|
-
CreateReactNativeFlowCacheOptions,
|
|
23
|
-
} from "./storage-cache";
|
package/src/registry.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
import type { FlowComponent, FlowSession, FlowSessionSnapshot, Screen } from "arlo-sdk";
|
|
4
|
-
|
|
5
|
-
export interface ArloRegistryScreenContext {
|
|
6
|
-
session: FlowSession;
|
|
7
|
-
snapshot: FlowSessionSnapshot;
|
|
8
|
-
screen: Screen;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface ArloRegistryComponentContext extends ArloRegistryScreenContext {
|
|
12
|
-
component: Extract<FlowComponent, { type: "CUSTOM_COMPONENT" }>;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export type ArloRegisteredScreen = (context: ArloRegistryScreenContext) => ReactNode;
|
|
16
|
-
export type ArloRegisteredComponent = (
|
|
17
|
-
context: ArloRegistryComponentContext
|
|
18
|
-
) => ReactNode;
|
|
19
|
-
|
|
20
|
-
export interface ArloRegistry {
|
|
21
|
-
registerScreen(key: string, renderer: ArloRegisteredScreen): void;
|
|
22
|
-
registerComponent(key: string, renderer: ArloRegisteredComponent): void;
|
|
23
|
-
getScreen(key: string): ArloRegisteredScreen | null;
|
|
24
|
-
getComponent(key: string): ArloRegisteredComponent | null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function createArloRegistry(): ArloRegistry {
|
|
28
|
-
const screens = new Map<string, ArloRegisteredScreen>();
|
|
29
|
-
const components = new Map<string, ArloRegisteredComponent>();
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
registerScreen(key: string, renderer: ArloRegisteredScreen): void {
|
|
33
|
-
screens.set(key, renderer);
|
|
34
|
-
},
|
|
35
|
-
registerComponent(key: string, renderer: ArloRegisteredComponent): void {
|
|
36
|
-
components.set(key, renderer);
|
|
37
|
-
},
|
|
38
|
-
getScreen(key: string): ArloRegisteredScreen | null {
|
|
39
|
-
return screens.get(key) ?? null;
|
|
40
|
-
},
|
|
41
|
-
getComponent(key: string): ArloRegisteredComponent | null {
|
|
42
|
-
return components.get(key) ?? null;
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
package/src/storage-cache.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { createPersistentFlowCache, type ArloCacheStorage } from "arlo-sdk";
|
|
2
|
-
|
|
3
|
-
export interface AsyncStorageLike {
|
|
4
|
-
getItem(key: string): Promise<string | null>;
|
|
5
|
-
setItem(key: string, value: string): Promise<void>;
|
|
6
|
-
removeItem(key: string): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface CreateReactNativeFlowCacheOptions {
|
|
10
|
-
storage: AsyncStorageLike;
|
|
11
|
-
namespace?: string;
|
|
12
|
-
maxAgeMs?: number;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function createReactNativeFlowCache(
|
|
16
|
-
options: CreateReactNativeFlowCacheOptions
|
|
17
|
-
) {
|
|
18
|
-
const storage: ArloCacheStorage = {
|
|
19
|
-
getItem: options.storage.getItem.bind(options.storage),
|
|
20
|
-
setItem: options.storage.setItem.bind(options.storage),
|
|
21
|
-
removeItem: options.storage.removeItem.bind(options.storage),
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
return createPersistentFlowCache({
|
|
25
|
-
storage,
|
|
26
|
-
namespace: options.namespace,
|
|
27
|
-
maxAgeMs: options.maxAgeMs,
|
|
28
|
-
});
|
|
29
|
-
}
|
package/src/types.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
import type {
|
|
4
|
-
FlowBridgeHandlers,
|
|
5
|
-
FlowComponent,
|
|
6
|
-
FlowSession,
|
|
7
|
-
FlowSessionSnapshot,
|
|
8
|
-
Screen,
|
|
9
|
-
} from "arlo-sdk";
|
|
10
|
-
import type { ArloRegistry } from "./registry";
|
|
11
|
-
|
|
12
|
-
export interface ArloComponentRenderContext {
|
|
13
|
-
session: FlowSession;
|
|
14
|
-
snapshot: FlowSessionSnapshot;
|
|
15
|
-
handlers?: FlowBridgeHandlers;
|
|
16
|
-
onValueChange: (fieldKey: string, value: string | string[] | number | boolean | null) => void;
|
|
17
|
-
onPressButton: (componentId: string) => Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type ArloComponentRenderer<T extends FlowComponent = FlowComponent> = (
|
|
21
|
-
component: T,
|
|
22
|
-
context: ArloComponentRenderContext
|
|
23
|
-
) => ReactNode;
|
|
24
|
-
|
|
25
|
-
export type ArloComponentRendererMap = Partial<{
|
|
26
|
-
[K in FlowComponent["type"]]: ArloComponentRenderer<Extract<FlowComponent, { type: K }>>;
|
|
27
|
-
}>;
|
|
28
|
-
|
|
29
|
-
export type ArloCustomScreenRenderer = (screen: Screen, context: ArloComponentRenderContext) => ReactNode;
|
|
30
|
-
|
|
31
|
-
export interface ArloFlowRendererProps {
|
|
32
|
-
session: FlowSession;
|
|
33
|
-
handlers?: FlowBridgeHandlers;
|
|
34
|
-
componentRenderers?: ArloComponentRendererMap;
|
|
35
|
-
registry?: ArloRegistry;
|
|
36
|
-
autoStart?: boolean;
|
|
37
|
-
emptyState?: ReactNode;
|
|
38
|
-
unsupportedComponent?: (component: FlowComponent) => ReactNode;
|
|
39
|
-
unsupportedScreen?: (screen: Screen) => ReactNode;
|
|
40
|
-
onSnapshotChange?: (snapshot: FlowSessionSnapshot) => void;
|
|
41
|
-
}
|
package/src/useArloPresenter.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
|
|
3
|
-
import type { ArloPresentationState, ArloPresenter } from "arlo-sdk";
|
|
4
|
-
|
|
5
|
-
export function useArloPresenter(presenter: ArloPresenter): ArloPresentationState {
|
|
6
|
-
const [state, setState] = useState<ArloPresentationState>(() => presenter.getState());
|
|
7
|
-
|
|
8
|
-
useEffect(() => presenter.subscribe(setState), [presenter]);
|
|
9
|
-
|
|
10
|
-
return state;
|
|
11
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"noEmit": true,
|
|
5
|
-
"rootDir": "./src",
|
|
6
|
-
"module": "esnext",
|
|
7
|
-
"target": "ES2020",
|
|
8
|
-
"lib": ["ES2020", "DOM"],
|
|
9
|
-
"jsx": "react-jsx",
|
|
10
|
-
"baseUrl": ".",
|
|
11
|
-
"paths": {
|
|
12
|
-
"arlo-sdk": ["../arlo-sdk/src/index.ts"]
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"include": ["src/**/*.ts", "src/**/*.tsx"]
|
|
16
|
-
}
|