@daltonr/pathwrite-react-native 0.10.1 → 0.12.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/README.md CHANGED
@@ -124,7 +124,7 @@ The API is identical to `@daltonr/pathwrite-react`. `usePath` creates an engine
124
124
 
125
125
  | Field | Type | Description |
126
126
  |---|---|---|
127
- | `snapshot` | `PathSnapshot \| null` | Current state. `null` when no path is active. |
127
+ | `snapshot` | `PathSnapshot \| null` | Current state. `null` when no path is active or when `completionBehaviour: "dismiss"` is used. With the default `"stayOnFinal"`, a non-null snapshot with `status === "completed"` is returned after the path finishes. |
128
128
  | `start(definition, data?)` | function | Start a path. |
129
129
  | `next()` | function | Advance one step. Completes on the last step. |
130
130
  | `previous()` | function | Go back one step. |
@@ -135,6 +135,7 @@ The API is identical to `@daltonr/pathwrite-react`. `usePath` creates an engine
135
135
  | `resetStep()` | function | Restore data to step-entry state. |
136
136
  | `startSubPath(definition, data?, meta?)` | function | Push a sub-path. |
137
137
  | `restart(definition, data?)` | function | Tear down any active path and start fresh. |
138
+ | `validate()` | function | Set `snapshot.hasValidated` without navigating. Triggers all inline field errors simultaneously. Used to validate all tabs in a nested shell at once. |
138
139
 
139
140
  All returned callbacks are referentially stable.
140
141
 
@@ -157,10 +158,14 @@ All returned callbacks are referentially stable.
157
158
  | `hideCancel` | `boolean` | `false` | Hide the cancel button. |
158
159
  | `hideProgress` | `boolean` | `false` | Hide the progress header. Also hidden automatically for single-step paths. |
159
160
  | `disableBodyScroll` | `boolean` | `false` | Replace the `ScrollView` body with a plain `View`. Use when a step contains a `FlatList` or other virtualized list. |
160
- | `footerLayout` | `"wizard" \| "form" \| "auto"` | `"auto"` | `"wizard"`: Back on left. `"form"`: Cancel on left, no Back. |
161
+ | `layout` | `"wizard" \| "form" \| "auto" \| "tabs"` | `"auto"` | `"wizard"`: Back on left, Cancel+Submit on right. `"form"`: Cancel on left, Submit on right, no Back. `"tabs"`: No progress header or footer — for tabbed interfaces. `"auto"` picks `"form"` for single-step paths. |
161
162
  | `renderHeader` | `(snapshot) => ReactNode` | — | Replace the default progress header entirely. |
162
163
  | `renderFooter` | `(snapshot, actions) => ReactNode` | — | Replace the default navigation buttons. |
164
+ | `completionContent` | `ReactNode` | — | Custom content rendered when `snapshot.status === "completed"` (`completionBehaviour: "stayOnFinal"`). If omitted, a default "All done." panel is shown. |
163
165
  | `style` | `StyleProp<ViewStyle>` | — | Override for the root `View`. |
166
+ | `validateWhen` | `boolean` | `false` | When it becomes `true`, calls `validate()` on the engine. Bind to the outer snapshot's `hasAttemptedNext` when this shell is nested inside a step of an outer shell. |
167
+ | `restoreKey` | `string` | — | When set, the shell automatically saves its full state (data + active step) into the nearest outer `PathShell`'s data under this key on every change, and restores from it on remount. No-op on a top-level shell. |
168
+ | `services` | `unknown` | — | Arbitrary services object available to step components via `usePathContext<TData, TServices>().services`. |
164
169
 
165
170
  ### PathShellHandle and the restart() ref pattern
166
171
 
package/dist/index.d.ts CHANGED
@@ -28,10 +28,14 @@ export interface UsePathReturn<TData extends PathData = PathData> {
28
28
  previous: () => void;
29
29
  /** Cancel the active path (or sub-path). */
30
30
  cancel: () => void;
31
- /** Jump directly to a step by ID, bypassing guards and shouldSkip. */
32
- goToStep: (stepId: string) => void;
31
+ /** Jump directly to a step by ID, bypassing guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating. */
32
+ goToStep: (stepId: string, options?: {
33
+ validateOnLeave?: boolean;
34
+ }) => void;
33
35
  /** Jump directly to a step by ID, checking the current step's guard first. */
34
- goToStepChecked: (stepId: string) => void;
36
+ goToStepChecked: (stepId: string, options?: {
37
+ validateOnLeave?: boolean;
38
+ }) => void;
35
39
  /** Update a single data value. When `TData` is specified, key and value are type-checked. */
36
40
  setData: <K extends string & keyof TData>(key: K, value: TData[K]) => void;
37
41
  /** Reset the current step's data to what it was when the step was entered. */
@@ -42,6 +46,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
42
46
  retry: () => void;
43
47
  /** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
44
48
  suspend: () => void;
49
+ /** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
50
+ validate: () => void;
45
51
  }
46
52
  export type PathProviderProps = PropsWithChildren<{
47
53
  onEvent?: (event: PathEvent) => void;
@@ -75,8 +81,12 @@ export interface PathShellActions {
75
81
  next: () => void;
76
82
  previous: () => void;
77
83
  cancel: () => void;
78
- goToStep: (stepId: string) => void;
79
- goToStepChecked: (stepId: string) => void;
84
+ goToStep: (stepId: string, options?: {
85
+ validateOnLeave?: boolean;
86
+ }) => void;
87
+ goToStepChecked: (stepId: string, options?: {
88
+ validateOnLeave?: boolean;
89
+ }) => void;
80
90
  setData: (key: string, value: unknown) => void;
81
91
  restart: () => void;
82
92
  retry: () => void;
@@ -89,8 +99,14 @@ export interface PathShellProps {
89
99
  engine?: PathEngine;
90
100
  /** Map of step ID → React Native content. The shell renders `steps[snapshot.stepId]` for the current step. */
91
101
  steps: Record<string, ReactNode>;
92
- /** Initial data passed to engine.start(). */
102
+ /** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
93
103
  initialData?: PathData;
104
+ /**
105
+ * When set, this shell automatically saves its state into the nearest outer `PathShell`'s
106
+ * data under this key on every change, and restores from that stored state on remount.
107
+ * No-op when used on a top-level shell with no outer `PathShell` ancestor.
108
+ */
109
+ restoreKey?: string;
94
110
  /** If true, the path is started automatically on mount. Defaults to true. */
95
111
  autoStart?: boolean;
96
112
  /** Called when the path completes. */
@@ -113,13 +129,18 @@ export interface PathShellProps {
113
129
  hideCancel?: boolean;
114
130
  /** If true, hide the progress dots. Also hidden automatically when the path has only one step. */
115
131
  hideProgress?: boolean;
132
+ /** If true, hide the footer (navigation buttons). Defaults to `false`. The error panel is still shown on async failure regardless of this prop. */
133
+ hideFooter?: boolean;
134
+ /** When true, calls `validate()` on the engine so all steps show inline errors simultaneously. Useful when this shell is nested inside a step of an outer shell: bind to the outer snapshot's `hasAttemptedNext`. */
135
+ validateWhen?: boolean;
116
136
  /**
117
- * Footer layout mode:
137
+ * Shell layout mode:
118
138
  * - `"auto"` (default): "form" for single-step top-level paths, "wizard" otherwise.
119
- * - `"wizard"`: Back on left, Cancel and Next on right.
120
- * - `"form"`: Cancel on left, Next alone on right.
139
+ * - `"wizard"`: Progress header + Back on left, Cancel and Next on right.
140
+ * - `"form"`: Progress header + Cancel on left, Next alone on right.
141
+ * - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
121
142
  */
122
- footerLayout?: "wizard" | "form" | "auto";
143
+ layout?: "wizard" | "form" | "auto" | "tabs";
123
144
  /**
124
145
  * Controls whether the shell renders its auto-generated field-error summary box.
125
146
  * - `"summary"` (default): Shell renders the labeled error list below the step body.
@@ -151,6 +172,12 @@ export interface PathShellProps {
151
172
  * Step components access it via `usePathContext<TData, TServices>()`.
152
173
  */
153
174
  services?: unknown;
175
+ /**
176
+ * Content to render when `snapshot.status === "completed"` (i.e. after the
177
+ * path finishes with `completionBehaviour: "stayOnFinal"`). Defaults to a
178
+ * simple "All done." panel with a Restart button.
179
+ */
180
+ completionContent?: ReactNode;
154
181
  }
155
182
  /**
156
183
  * Default UI shell for React Native. Renders a progress dot indicator,
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ export function usePath(options) {
29
29
  snapshotRef.current = event.snapshot;
30
30
  }
31
31
  else if (event.type === "completed" || event.type === "cancelled") {
32
- snapshotRef.current = null;
32
+ snapshotRef.current = engine.snapshot();
33
33
  }
34
34
  onEventRef.current?.(event);
35
35
  callback();
@@ -41,14 +41,15 @@ export function usePath(options) {
41
41
  const next = useCallback(() => engine.next(), [engine]);
42
42
  const previous = useCallback(() => engine.previous(), [engine]);
43
43
  const cancel = useCallback(() => engine.cancel(), [engine]);
44
- const goToStep = useCallback((stepId) => engine.goToStep(stepId), [engine]);
45
- const goToStepChecked = useCallback((stepId) => engine.goToStepChecked(stepId), [engine]);
44
+ const goToStep = useCallback((stepId, options) => engine.goToStep(stepId, options), [engine]);
45
+ const goToStepChecked = useCallback((stepId, options) => engine.goToStepChecked(stepId, options), [engine]);
46
46
  const setData = useCallback((key, value) => engine.setData(key, value), [engine]);
47
47
  const resetStep = useCallback(() => engine.resetStep(), [engine]);
48
48
  const restart = useCallback(() => engine.restart(), [engine]);
49
49
  const retry = useCallback(() => engine.retry(), [engine]);
50
50
  const suspend = useCallback(() => engine.suspend(), [engine]);
51
- return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend };
51
+ const validate = useCallback(() => engine.validate(), [engine]);
52
+ return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend, validate };
52
53
  }
53
54
  const PathContext = createContext(null);
54
55
  /**
@@ -91,7 +92,8 @@ export function usePathContext() {
91
92
  * />
92
93
  * ```
93
94
  */
94
- export const PathShell = forwardRef(function PathShell({ path: pathDef, engine: externalEngine, steps, initialData = {}, autoStart = true, onComplete, onCancel, onEvent, backLabel = "Previous", nextLabel = "Next", completeLabel = "Complete", loadingLabel, cancelLabel = "Cancel", hideCancel = false, hideProgress = false, footerLayout = "auto", validationDisplay = "summary", renderHeader, renderFooter, style, keyboardVerticalOffset = 0, disableBodyScroll = false, services, }, ref) {
95
+ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine: externalEngine, steps, initialData = {}, restoreKey, autoStart = true, onComplete, onCancel, onEvent, backLabel = "Previous", nextLabel = "Next", completeLabel = "Complete", loadingLabel, cancelLabel = "Cancel", hideCancel = false, hideProgress = false, hideFooter = false, layout = "auto", validationDisplay = "summary", renderHeader, renderFooter, style, keyboardVerticalOffset = 0, disableBodyScroll = false, services, validateWhen = false, completionContent, }, ref) {
96
+ const outerCtx = useContext(PathContext);
95
97
  const pathReturn = usePath({
96
98
  engine: externalEngine,
97
99
  onEvent(event) {
@@ -100,9 +102,16 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
100
102
  onComplete?.(event.data);
101
103
  if (event.type === "cancelled")
102
104
  onCancel?.(event.data);
105
+ if (restoreKey && outerCtx && event.type === "stateChanged") {
106
+ outerCtx.path.setData(restoreKey, event.snapshot);
107
+ }
103
108
  },
104
109
  });
105
- const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
110
+ const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
111
+ useEffect(() => {
112
+ if (validateWhen)
113
+ validate();
114
+ }, [validateWhen, validate]);
106
115
  useImperativeHandle(ref, () => ({
107
116
  restart: () => restart(),
108
117
  }));
@@ -110,7 +119,20 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
110
119
  useEffect(() => {
111
120
  if (autoStart && !startedRef.current && !externalEngine) {
112
121
  startedRef.current = true;
113
- start(pathDef, initialData);
122
+ let startData = initialData;
123
+ let restoreStepId;
124
+ if (restoreKey && outerCtx) {
125
+ const stored = outerCtx.path.snapshot?.data[restoreKey];
126
+ if (stored != null && typeof stored === "object" && "stepId" in stored) {
127
+ startData = stored.data;
128
+ if (stored.stepIndex > 0)
129
+ restoreStepId = stored.stepId;
130
+ }
131
+ }
132
+ const p = start(pathDef, startData);
133
+ if (restoreStepId) {
134
+ Promise.resolve(p).then(() => goToStep(restoreStepId));
135
+ }
114
136
  }
115
137
  // eslint-disable-next-line react-hooks/exhaustive-deps
116
138
  }, []);
@@ -128,13 +150,18 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
128
150
  if (!snapshot) {
129
151
  return (_jsx(PathContext.Provider, { value: contextValue, children: _jsx(View, { style: [styles.shell, style], children: _jsxs(View, { style: styles.emptyState, children: [_jsx(Text, { style: styles.emptyText, children: "No active path." }), !autoStart && (_jsx(Pressable, { style: styles.btnPrimary, onPress: () => start(pathDef, initialData), children: _jsx(Text, { style: styles.btnPrimaryText, children: "Start" }) }))] }) }) }));
130
152
  }
131
- const resolvedLayout = footerLayout === "auto"
153
+ if (snapshot.status === "completed") {
154
+ return (_jsx(PathContext.Provider, { value: contextValue, children: _jsx(View, { style: [styles.shell, style], children: completionContent ?? (_jsxs(View, { style: styles.completionPanel, children: [_jsx(Text, { style: styles.completionMessage, children: "All done." }), _jsx(Pressable, { style: styles.btnPrimary, onPress: () => restart(), children: _jsx(Text, { style: styles.btnPrimaryText, children: "Start over" }) })] })) }) }));
155
+ }
156
+ const effectiveHideProgress = hideProgress || layout === "tabs";
157
+ const effectiveHideFooter = hideFooter || layout === "tabs";
158
+ const resolvedLayout = layout === "auto" || layout === "tabs"
132
159
  ? snapshot.stepCount === 1 && snapshot.nestingLevel === 0
133
160
  ? "form"
134
161
  : "wizard"
135
- : footerLayout;
162
+ : layout;
136
163
  const isFormMode = resolvedLayout === "form";
137
- const showProgress = !hideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
164
+ const showProgress = !effectiveHideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
138
165
  return (_jsx(PathContext.Provider, { value: contextValue, children: _jsxs(KeyboardAvoidingView, { style: [styles.shell, style], behavior: Platform.OS === "ios" ? "padding" : undefined, keyboardVerticalOffset: keyboardVerticalOffset, children: [showProgress && (renderHeader
139
166
  ? renderHeader(snapshot)
140
167
  : (_jsxs(View, { style: styles.header, children: [_jsx(View, { style: styles.stepper, children: snapshot.steps.map((step, i) => (_jsx(View, { style: [
@@ -147,19 +174,21 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
147
174
  return title ? _jsx(Text, { style: styles.stepTitle, children: title }) : null;
148
175
  })(), _jsx(View, { style: styles.track, children: _jsx(View, { style: [styles.trackFill, { width: `${snapshot.progress * 100}%` }] }) })] }))), disableBodyScroll
149
176
  ? _jsx(View, { style: [styles.body, styles.bodyContent], children: stepContent })
150
- : _jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.bodyContent, children: stepContent }), validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && (_jsx(View, { style: styles.validation, children: Object.entries(snapshot.fieldErrors).map(([key, msg]) => (_jsxs(Text, { style: styles.validationItem, children: [key !== "_" && _jsxs(Text, { style: styles.validationLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), Object.keys(snapshot.fieldWarnings).length > 0 && (_jsx(View, { style: styles.warnings, children: Object.entries(snapshot.fieldWarnings).map(([key, msg]) => (_jsxs(Text, { style: styles.warningItem, children: [key !== "_" && _jsxs(Text, { style: styles.warningLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError && (_jsx(Text, { style: styles.blockingError, children: snapshot.blockingError })), snapshot.status === "error" && snapshot.error
177
+ : _jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.bodyContent, children: stepContent }), validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && Object.keys(snapshot.fieldErrors).length > 0 && (_jsx(View, { style: styles.validation, children: Object.entries(snapshot.fieldErrors).map(([key, msg]) => (_jsxs(Text, { style: styles.validationItem, children: [key !== "_" && _jsxs(Text, { style: styles.validationLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), Object.keys(snapshot.fieldWarnings).length > 0 && (_jsx(View, { style: styles.warnings, children: Object.entries(snapshot.fieldWarnings).map(([key, msg]) => (_jsxs(Text, { style: styles.warningItem, children: [key !== "_" && _jsxs(Text, { style: styles.warningLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && snapshot.blockingError && (_jsx(Text, { style: styles.blockingError, children: snapshot.blockingError })), snapshot.status === "error" && snapshot.error
151
178
  ? (() => {
152
179
  const err = snapshot.error;
153
180
  const escalated = err.retryCount >= 2;
154
181
  return (_jsxs(View, { style: styles.errorPanel, children: [_jsx(Text, { style: styles.errorTitle, children: escalated ? "Still having trouble." : "Something went wrong." }), _jsxs(Text, { style: styles.errorMessage, children: [errorPhaseMessage(err.phase), err.message ? ` ${err.message}` : ""] }), _jsxs(View, { style: styles.errorActions, children: [!escalated && (_jsx(Pressable, { style: [styles.btn, styles.btnRetry], onPress: retry, children: _jsx(Text, { style: styles.btnPrimaryText, children: "Try again" }) })), snapshot.hasPersistence && (_jsx(Pressable, { style: [styles.btn, escalated ? styles.btnRetry : styles.btnSuspend], onPress: suspend, children: _jsx(Text, { style: escalated ? styles.btnPrimaryText : styles.btnCancelText, children: "Save and come back later" }) })), escalated && !snapshot.hasPersistence && (_jsx(Pressable, { style: [styles.btn, styles.btnRetry], onPress: retry, children: _jsx(Text, { style: styles.btnPrimaryText, children: "Try again" }) }))] })] }));
155
182
  })()
156
- : renderFooter
157
- ? renderFooter(snapshot, actions)
158
- : (_jsxs(View, { style: styles.footer, children: [_jsxs(View, { style: styles.footerLeft, children: [isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), !isFormMode && !snapshot.isFirstStep && (_jsx(Pressable, { style: [styles.btn, styles.btnBack, (snapshot.status !== "idle" || !snapshot.canMovePrevious) && styles.btnDisabled], onPress: previous, disabled: snapshot.status !== "idle" || !snapshot.canMovePrevious, children: _jsxs(Text, { style: styles.btnBackText, children: ["\u2190 ", backLabel] }) }))] }), _jsxs(View, { style: styles.footerRight, children: [!isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), _jsx(Pressable, { style: [styles.btn, styles.btnPrimary, snapshot.status !== "idle" && styles.btnDisabled], onPress: next, disabled: snapshot.status !== "idle" || !snapshot.canMoveNext, children: snapshot.status !== "idle" && loadingLabel
159
- ? _jsx(Text, { style: styles.btnPrimaryText, children: loadingLabel })
160
- : snapshot.status !== "idle"
161
- ? _jsx(ActivityIndicator, { size: "small", color: "#ffffff" })
162
- : _jsx(Text, { style: styles.btnPrimaryText, children: snapshot.isLastStep ? completeLabel : `${nextLabel} →` }) })] })] }))] }) }));
183
+ : !effectiveHideFooter
184
+ ? renderFooter
185
+ ? renderFooter(snapshot, actions)
186
+ : (_jsxs(View, { style: styles.footer, children: [_jsxs(View, { style: styles.footerLeft, children: [isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), !isFormMode && !snapshot.isFirstStep && (_jsx(Pressable, { style: [styles.btn, styles.btnBack, (snapshot.status !== "idle" || !snapshot.canMovePrevious) && styles.btnDisabled], onPress: previous, disabled: snapshot.status !== "idle" || !snapshot.canMovePrevious, children: _jsxs(Text, { style: styles.btnBackText, children: ["\u2190 ", backLabel] }) }))] }), _jsxs(View, { style: styles.footerRight, children: [!isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), _jsx(Pressable, { style: [styles.btn, styles.btnPrimary, snapshot.status !== "idle" && styles.btnDisabled], onPress: next, disabled: snapshot.status !== "idle" || !snapshot.canMoveNext, children: snapshot.status !== "idle" && loadingLabel
187
+ ? _jsx(Text, { style: styles.btnPrimaryText, children: loadingLabel })
188
+ : snapshot.status !== "idle"
189
+ ? _jsx(ActivityIndicator, { size: "small", color: "#ffffff" })
190
+ : _jsx(Text, { style: styles.btnPrimaryText, children: snapshot.isLastStep ? completeLabel : `${nextLabel} →` }) })] })] }))
191
+ : null] }) }));
163
192
  });
164
193
  // ---------------------------------------------------------------------------
165
194
  // Styles
@@ -182,6 +211,18 @@ const styles = StyleSheet.create({
182
211
  color: "#6b7280",
183
212
  marginBottom: 16,
184
213
  },
214
+ completionPanel: {
215
+ flex: 1,
216
+ alignItems: "center",
217
+ justifyContent: "center",
218
+ padding: 24,
219
+ },
220
+ completionMessage: {
221
+ fontSize: 18,
222
+ fontWeight: "600",
223
+ color: "#1f2937",
224
+ marginBottom: 20,
225
+ },
185
226
  header: {
186
227
  paddingHorizontal: 20,
187
228
  paddingTop: 16,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daltonr/pathwrite-react-native",
3
- "version": "0.10.1",
3
+ "version": "0.12.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "React Native adapter for @daltonr/pathwrite-core — hooks, context provider, and optional PathShell default UI.",
@@ -44,7 +44,7 @@
44
44
  "react-native": ">=0.72.0"
45
45
  },
46
46
  "dependencies": {
47
- "@daltonr/pathwrite-core": "^0.10.1"
47
+ "@daltonr/pathwrite-core": "^0.12.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "react": "^18.3.1",
package/src/index.tsx CHANGED
@@ -64,10 +64,10 @@ export interface UsePathReturn<TData extends PathData = PathData> {
64
64
  previous: () => void;
65
65
  /** Cancel the active path (or sub-path). */
66
66
  cancel: () => void;
67
- /** Jump directly to a step by ID, bypassing guards and shouldSkip. */
68
- goToStep: (stepId: string) => void;
67
+ /** Jump directly to a step by ID, bypassing guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating. */
68
+ goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
69
69
  /** Jump directly to a step by ID, checking the current step's guard first. */
70
- goToStepChecked: (stepId: string) => void;
70
+ goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
71
71
  /** Update a single data value. When `TData` is specified, key and value are type-checked. */
72
72
  setData: <K extends string & keyof TData>(key: K, value: TData[K]) => void;
73
73
  /** Reset the current step's data to what it was when the step was entered. */
@@ -78,6 +78,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
78
78
  retry: () => void;
79
79
  /** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
80
80
  suspend: () => void;
81
+ /** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
82
+ validate: () => void;
81
83
  }
82
84
 
83
85
  export type PathProviderProps = PropsWithChildren<{
@@ -120,7 +122,7 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
120
122
  if (event.type === "stateChanged" || event.type === "resumed") {
121
123
  snapshotRef.current = event.snapshot as PathSnapshot<TData>;
122
124
  } else if (event.type === "completed" || event.type === "cancelled") {
123
- snapshotRef.current = null;
125
+ snapshotRef.current = engine.snapshot() as PathSnapshot<TData> | null;
124
126
  }
125
127
  onEventRef.current?.(event);
126
128
  callback();
@@ -144,8 +146,8 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
144
146
  const next = useCallback(() => engine.next(), [engine]);
145
147
  const previous = useCallback(() => engine.previous(), [engine]);
146
148
  const cancel = useCallback(() => engine.cancel(), [engine]);
147
- const goToStep = useCallback((stepId: string) => engine.goToStep(stepId), [engine]);
148
- const goToStepChecked = useCallback((stepId: string) => engine.goToStepChecked(stepId), [engine]);
149
+ const goToStep = useCallback((stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStep(stepId, options), [engine]);
150
+ const goToStepChecked = useCallback((stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStepChecked(stepId, options), [engine]);
149
151
  const setData = useCallback(
150
152
  <K extends string & keyof TData>(key: K, value: TData[K]) => engine.setData(key, value as unknown),
151
153
  [engine]
@@ -154,8 +156,9 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
154
156
  const restart = useCallback(() => engine.restart(), [engine]);
155
157
  const retry = useCallback(() => engine.retry(), [engine]);
156
158
  const suspend = useCallback(() => engine.suspend(), [engine]);
159
+ const validate = useCallback(() => engine.validate(), [engine]);
157
160
 
158
- return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend };
161
+ return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend, validate };
159
162
  }
160
163
 
161
164
  // ---------------------------------------------------------------------------
@@ -208,8 +211,8 @@ export interface PathShellActions {
208
211
  next: () => void;
209
212
  previous: () => void;
210
213
  cancel: () => void;
211
- goToStep: (stepId: string) => void;
212
- goToStepChecked: (stepId: string) => void;
214
+ goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
215
+ goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
213
216
  setData: (key: string, value: unknown) => void;
214
217
  restart: () => void;
215
218
  retry: () => void;
@@ -223,8 +226,14 @@ export interface PathShellProps {
223
226
  engine?: PathEngine;
224
227
  /** Map of step ID → React Native content. The shell renders `steps[snapshot.stepId]` for the current step. */
225
228
  steps: Record<string, ReactNode>;
226
- /** Initial data passed to engine.start(). */
229
+ /** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
227
230
  initialData?: PathData;
231
+ /**
232
+ * When set, this shell automatically saves its state into the nearest outer `PathShell`'s
233
+ * data under this key on every change, and restores from that stored state on remount.
234
+ * No-op when used on a top-level shell with no outer `PathShell` ancestor.
235
+ */
236
+ restoreKey?: string;
228
237
  /** If true, the path is started automatically on mount. Defaults to true. */
229
238
  autoStart?: boolean;
230
239
  /** Called when the path completes. */
@@ -247,13 +256,18 @@ export interface PathShellProps {
247
256
  hideCancel?: boolean;
248
257
  /** If true, hide the progress dots. Also hidden automatically when the path has only one step. */
249
258
  hideProgress?: boolean;
259
+ /** If true, hide the footer (navigation buttons). Defaults to `false`. The error panel is still shown on async failure regardless of this prop. */
260
+ hideFooter?: boolean;
261
+ /** When true, calls `validate()` on the engine so all steps show inline errors simultaneously. Useful when this shell is nested inside a step of an outer shell: bind to the outer snapshot's `hasAttemptedNext`. */
262
+ validateWhen?: boolean;
250
263
  /**
251
- * Footer layout mode:
264
+ * Shell layout mode:
252
265
  * - `"auto"` (default): "form" for single-step top-level paths, "wizard" otherwise.
253
- * - `"wizard"`: Back on left, Cancel and Next on right.
254
- * - `"form"`: Cancel on left, Next alone on right.
266
+ * - `"wizard"`: Progress header + Back on left, Cancel and Next on right.
267
+ * - `"form"`: Progress header + Cancel on left, Next alone on right.
268
+ * - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
255
269
  */
256
- footerLayout?: "wizard" | "form" | "auto";
270
+ layout?: "wizard" | "form" | "auto" | "tabs";
257
271
  /**
258
272
  * Controls whether the shell renders its auto-generated field-error summary box.
259
273
  * - `"summary"` (default): Shell renders the labeled error list below the step body.
@@ -285,6 +299,12 @@ export interface PathShellProps {
285
299
  * Step components access it via `usePathContext<TData, TServices>()`.
286
300
  */
287
301
  services?: unknown;
302
+ /**
303
+ * Content to render when `snapshot.status === "completed"` (i.e. after the
304
+ * path finishes with `completionBehaviour: "stayOnFinal"`). Defaults to a
305
+ * simple "All done." panel with a Restart button.
306
+ */
307
+ completionContent?: ReactNode;
288
308
  }
289
309
 
290
310
  /**
@@ -308,6 +328,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
308
328
  engine: externalEngine,
309
329
  steps,
310
330
  initialData = {},
331
+ restoreKey,
311
332
  autoStart = true,
312
333
  onComplete,
313
334
  onCancel,
@@ -319,7 +340,8 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
319
340
  cancelLabel = "Cancel",
320
341
  hideCancel = false,
321
342
  hideProgress = false,
322
- footerLayout = "auto",
343
+ hideFooter = false,
344
+ layout = "auto",
323
345
  validationDisplay = "summary",
324
346
  renderHeader,
325
347
  renderFooter,
@@ -327,17 +349,30 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
327
349
  keyboardVerticalOffset = 0,
328
350
  disableBodyScroll = false,
329
351
  services,
352
+ validateWhen = false,
353
+ completionContent,
330
354
  }: PathShellProps, ref): ReactElement {
355
+ const outerCtx = useContext(PathContext);
356
+
331
357
  const pathReturn = usePath({
332
358
  engine: externalEngine,
333
359
  onEvent(event) {
334
360
  onEvent?.(event);
335
361
  if (event.type === "completed") onComplete?.(event.data);
336
362
  if (event.type === "cancelled") onCancel?.(event.data);
363
+ if (restoreKey && outerCtx && event.type === "stateChanged") {
364
+ (outerCtx.path.setData as unknown as (key: string, value: unknown) => void)(
365
+ restoreKey, event.snapshot
366
+ );
367
+ }
337
368
  },
338
369
  });
339
370
 
340
- const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
371
+ const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
372
+
373
+ useEffect(() => {
374
+ if (validateWhen) validate();
375
+ }, [validateWhen, validate]);
341
376
 
342
377
  useImperativeHandle(ref, () => ({
343
378
  restart: () => restart(),
@@ -347,7 +382,19 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
347
382
  useEffect(() => {
348
383
  if (autoStart && !startedRef.current && !externalEngine) {
349
384
  startedRef.current = true;
350
- start(pathDef, initialData);
385
+ let startData: PathData = initialData;
386
+ let restoreStepId: string | undefined;
387
+ if (restoreKey && outerCtx) {
388
+ const stored = outerCtx.path.snapshot?.data[restoreKey] as PathSnapshot | undefined;
389
+ if (stored != null && typeof stored === "object" && "stepId" in stored) {
390
+ startData = stored.data as PathData;
391
+ if (stored.stepIndex > 0) restoreStepId = stored.stepId as string;
392
+ }
393
+ }
394
+ const p = start(pathDef, startData);
395
+ if (restoreStepId) {
396
+ Promise.resolve(p).then(() => goToStep(restoreStepId!));
397
+ }
351
398
  }
352
399
  // eslint-disable-next-line react-hooks/exhaustive-deps
353
400
  }, []);
@@ -383,15 +430,34 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
383
430
  );
384
431
  }
385
432
 
433
+ if (snapshot.status === "completed") {
434
+ return (
435
+ <PathContext.Provider value={contextValue}>
436
+ <View style={[styles.shell, style]}>
437
+ {completionContent ?? (
438
+ <View style={styles.completionPanel}>
439
+ <Text style={styles.completionMessage}>All done.</Text>
440
+ <Pressable style={styles.btnPrimary} onPress={() => restart()}>
441
+ <Text style={styles.btnPrimaryText}>Start over</Text>
442
+ </Pressable>
443
+ </View>
444
+ )}
445
+ </View>
446
+ </PathContext.Provider>
447
+ );
448
+ }
449
+
450
+ const effectiveHideProgress = hideProgress || layout === "tabs";
451
+ const effectiveHideFooter = hideFooter || layout === "tabs";
386
452
  const resolvedLayout =
387
- footerLayout === "auto"
453
+ layout === "auto" || layout === "tabs"
388
454
  ? snapshot.stepCount === 1 && snapshot.nestingLevel === 0
389
455
  ? "form"
390
456
  : "wizard"
391
- : footerLayout;
457
+ : layout;
392
458
  const isFormMode = resolvedLayout === "form";
393
459
  const showProgress =
394
- !hideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
460
+ !effectiveHideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
395
461
 
396
462
  return (
397
463
  <PathContext.Provider value={contextValue}>
@@ -441,7 +507,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
441
507
  }
442
508
 
443
509
  {/* Validation messages */}
444
- {validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && (
510
+ {validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && Object.keys(snapshot.fieldErrors).length > 0 && (
445
511
  <View style={styles.validation}>
446
512
  {Object.entries(snapshot.fieldErrors).map(([key, msg]) => (
447
513
  <Text key={key} style={styles.validationItem}>
@@ -465,7 +531,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
465
531
  )}
466
532
 
467
533
  {/* Blocking error — guard returned { allowed: false, reason } */}
468
- {validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError && (
534
+ {validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && snapshot.blockingError && (
469
535
  <Text style={styles.blockingError}>{snapshot.blockingError}</Text>
470
536
  )}
471
537
 
@@ -507,9 +573,10 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
507
573
  </View>
508
574
  );
509
575
  })()
510
- : renderFooter
511
- ? renderFooter(snapshot, actions)
512
- : (
576
+ : !effectiveHideFooter
577
+ ? renderFooter
578
+ ? renderFooter(snapshot, actions)
579
+ : (
513
580
  <View style={styles.footer}>
514
581
  <View style={styles.footerLeft}>
515
582
  {isFormMode && !hideCancel && (
@@ -556,6 +623,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
556
623
  </View>
557
624
  </View>
558
625
  )
626
+ : null
559
627
  }
560
628
  </KeyboardAvoidingView>
561
629
  </PathContext.Provider>
@@ -586,6 +654,18 @@ const styles = StyleSheet.create({
586
654
  color: "#6b7280",
587
655
  marginBottom: 16,
588
656
  },
657
+ completionPanel: {
658
+ flex: 1,
659
+ alignItems: "center",
660
+ justifyContent: "center",
661
+ padding: 24,
662
+ },
663
+ completionMessage: {
664
+ fontSize: 18,
665
+ fontWeight: "600",
666
+ color: "#1f2937",
667
+ marginBottom: 20,
668
+ },
589
669
  header: {
590
670
  paddingHorizontal: 20,
591
671
  paddingTop: 16,