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.
@@ -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
- }
@@ -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
- }
@@ -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
- }