@daltonr/pathwrite-react 0.11.0 → 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 +6 -2
- package/dist/index.css +25 -0
- package/dist/index.d.ts +47 -10
- package/dist/index.js +41 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +97 -22
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ Step components call `usePathContext()` to access engine state — no prop drill
|
|
|
73
73
|
|
|
74
74
|
| Return value | Type | Description |
|
|
75
75
|
|---|---|---|
|
|
76
|
-
| `snapshot` | `PathSnapshot \| null` | Current snapshot. `null` when no path is active. Triggers re-render on change. |
|
|
76
|
+
| `snapshot` | `PathSnapshot \| null` | Current snapshot. `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. Triggers re-render on change. |
|
|
77
77
|
| `start(definition, data?)` | function | Start or re-start a path. |
|
|
78
78
|
| `next()` | function | Advance one step. Completes the path on the last step. |
|
|
79
79
|
| `previous()` | function | Go back one step. No-op on the first step of a top-level path. |
|
|
@@ -86,6 +86,7 @@ Step components call `usePathContext()` to access engine state — no prop drill
|
|
|
86
86
|
| `suspend()` | function | Suspend an async step while work completes. |
|
|
87
87
|
| `retry()` | function | Retry the current step after a suspension or error. |
|
|
88
88
|
| `restart(definition, data?)` | function | Tear down the active path without firing hooks and start fresh. |
|
|
89
|
+
| `validate()` | function | Set `snapshot.hasValidated` without navigating. Triggers all inline field errors simultaneously. Used to validate all tabs in a nested shell at once. |
|
|
89
90
|
|
|
90
91
|
All returned callbacks are referentially stable — safe to pass as props or include in `useEffect` dependency arrays.
|
|
91
92
|
|
|
@@ -103,11 +104,14 @@ All returned callbacks are referentially stable — safe to pass as props or inc
|
|
|
103
104
|
| `onComplete` | `(data: PathData) => void` | — | Called when the path completes. |
|
|
104
105
|
| `onCancel` | `(data: PathData) => void` | — | Called when the path is cancelled. |
|
|
105
106
|
| `engine` | `PathEngine` | — | An externally-managed engine. When provided, `PathShell` skips its own `start()`. |
|
|
107
|
+
| `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. |
|
|
108
|
+
| `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. |
|
|
106
109
|
| `validationDisplay` | `"summary" \| "inline" \| "both"` | `"summary"` | Where `fieldErrors` are rendered. Use `"inline"` so step components render their own errors. |
|
|
107
110
|
| `loadingLabel` | `string` | `"Loading…"` | Label shown during async step suspension. |
|
|
108
|
-
| `
|
|
111
|
+
| `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. |
|
|
109
112
|
| `hideProgress` | `boolean` | `false` | Hide the progress indicator. Also hidden automatically for single-step top-level paths. |
|
|
110
113
|
| `services` | `TServices` | — | Services object injected into step lifecycle hooks via `PathStepContext`. |
|
|
114
|
+
| `completionContent` | `ReactNode` | — | Custom content rendered when `snapshot.status === "completed"` (requires `completionBehaviour: "stayOnFinal"`, the default). If omitted, a default "All done." panel with a "Start over" button is shown. Components inside `completionContent` can call `usePathContext()` to access `restart` and `snapshot.data`. |
|
|
111
115
|
|
|
112
116
|
Step components rendered inside `<PathShell>` call `usePathContext()` to read `snapshot` and invoke actions — no prop drilling required.
|
|
113
117
|
|
package/dist/index.css
CHANGED
|
@@ -77,6 +77,31 @@
|
|
|
77
77
|
font-size: 14px;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/* ------------------------------------------------------------------ */
|
|
81
|
+
/* Completion panel */
|
|
82
|
+
/* ------------------------------------------------------------------ */
|
|
83
|
+
.pw-shell__completion {
|
|
84
|
+
text-align: center;
|
|
85
|
+
padding: 40px 16px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.pw-shell__completion-message {
|
|
89
|
+
font-size: 18px;
|
|
90
|
+
font-weight: 600;
|
|
91
|
+
color: var(--pw-color-text);
|
|
92
|
+
margin: 0 0 20px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.pw-shell__completion-restart {
|
|
96
|
+
border: 1px solid var(--pw-color-btn-border);
|
|
97
|
+
background: var(--pw-color-btn-bg);
|
|
98
|
+
color: var(--pw-color-text);
|
|
99
|
+
padding: var(--pw-btn-padding);
|
|
100
|
+
border-radius: var(--pw-btn-radius);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
font-size: 14px;
|
|
103
|
+
}
|
|
104
|
+
|
|
80
105
|
/* ------------------------------------------------------------------ */
|
|
81
106
|
/* Root progress — persistent top-level bar visible during sub-paths */
|
|
82
107
|
/* ------------------------------------------------------------------ */
|
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. Calls onLeave / onEnter but bypasses guards and shouldSkip. */
|
|
32
|
-
goToStep: (stepId: string
|
|
31
|
+
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating, so inline errors are visible if the user returns to it. */
|
|
32
|
+
goToStep: (stepId: string, options?: {
|
|
33
|
+
validateOnLeave?: boolean;
|
|
34
|
+
}) => void;
|
|
33
35
|
/** Jump directly to a step by ID, checking the current step's canMoveNext (forward) or canMovePrevious (backward) guard first. Navigation is blocked if the guard returns false. */
|
|
34
|
-
goToStepChecked: (stepId: string
|
|
36
|
+
goToStepChecked: (stepId: string, options?: {
|
|
37
|
+
validateOnLeave?: boolean;
|
|
38
|
+
}) => void;
|
|
35
39
|
/** Update a single data value; triggers a re-render via stateChanged. When `TData` is specified, `key` and `value` are type-checked against your data shape. */
|
|
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. Useful for "Clear" or "Reset" buttons. */
|
|
@@ -130,8 +134,25 @@ export interface PathShellProps {
|
|
|
130
134
|
engine?: PathEngine;
|
|
131
135
|
/** Map of step ID → content. The shell renders `steps[snapshot.stepId]` for the current step. */
|
|
132
136
|
steps: Record<string, ReactNode>;
|
|
133
|
-
/** Initial data passed to `engine.start()`. */
|
|
137
|
+
/** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
|
|
134
138
|
initialData?: PathData;
|
|
139
|
+
/**
|
|
140
|
+
* When set, this shell automatically saves its state into the nearest outer `PathShell`'s
|
|
141
|
+
* data under this key on every change, and restores from that stored state on remount.
|
|
142
|
+
*
|
|
143
|
+
* Use this for nested shells (e.g. a tabbed inner shell inside a wizard step) so that
|
|
144
|
+
* navigating away and back preserves both the inner data and the active tab:
|
|
145
|
+
*
|
|
146
|
+
* ```tsx
|
|
147
|
+
* <PathShell path={detailsPath} restoreKey="details" initialData={DETAILS_INITIAL} ... />
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* The outer path stores a full `PathSnapshot` under `data[restoreKey]`. Later steps in
|
|
151
|
+
* the outer path can read inner field values via `data.details?.data.fieldName`.
|
|
152
|
+
*
|
|
153
|
+
* No-op when used on a top-level shell with no outer `PathShell` ancestor.
|
|
154
|
+
*/
|
|
155
|
+
restoreKey?: string;
|
|
135
156
|
/** If true, the path is started automatically on mount. Defaults to `true`. */
|
|
136
157
|
autoStart?: boolean;
|
|
137
158
|
/** Called when the path completes. Receives the final data. */
|
|
@@ -159,12 +180,13 @@ export interface PathShellProps {
|
|
|
159
180
|
/** 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`. */
|
|
160
181
|
validateWhen?: boolean;
|
|
161
182
|
/**
|
|
162
|
-
*
|
|
183
|
+
* Shell layout mode:
|
|
163
184
|
* - `"auto"` (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
164
|
-
* - `"wizard"`: Back button on left, Cancel and Submit together on right.
|
|
165
|
-
* - `"form"`: Cancel on left, Submit alone on right. Back button never shown.
|
|
185
|
+
* - `"wizard"`: Progress header + Back button on left, Cancel and Submit together on right.
|
|
186
|
+
* - `"form"`: Progress header + Cancel on left, Submit alone on right. Back button never shown.
|
|
187
|
+
* - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
|
|
166
188
|
*/
|
|
167
|
-
|
|
189
|
+
layout?: "wizard" | "form" | "auto" | "tabs";
|
|
168
190
|
/** Optional extra CSS class on the root element. */
|
|
169
191
|
className?: string;
|
|
170
192
|
/** Render prop to replace the entire header (progress area). Receives the snapshot. */
|
|
@@ -202,6 +224,17 @@ export interface PathShellProps {
|
|
|
202
224
|
* ```
|
|
203
225
|
*/
|
|
204
226
|
services?: unknown;
|
|
227
|
+
/**
|
|
228
|
+
* Content to render when `snapshot.status === "completed"` (i.e. after the
|
|
229
|
+
* path finishes with `completionBehaviour: "stayOnFinal"`).
|
|
230
|
+
*
|
|
231
|
+
* When provided, the shell replaces the step body with this content. If
|
|
232
|
+
* omitted, a default "All done." panel is shown with a Restart button.
|
|
233
|
+
*
|
|
234
|
+
* Has no effect when `completionBehaviour` is `"dismiss"` or `"reset"`,
|
|
235
|
+
* since those modes never produce a `"completed"` snapshot.
|
|
236
|
+
*/
|
|
237
|
+
completionContent?: ReactNode;
|
|
205
238
|
}
|
|
206
239
|
export interface PathShellHandle {
|
|
207
240
|
/** Restart the shell's current path with its original `initialData`, without unmounting. */
|
|
@@ -211,8 +244,12 @@ export interface PathShellActions {
|
|
|
211
244
|
next: () => void;
|
|
212
245
|
previous: () => void;
|
|
213
246
|
cancel: () => void;
|
|
214
|
-
goToStep: (stepId: string
|
|
215
|
-
|
|
247
|
+
goToStep: (stepId: string, options?: {
|
|
248
|
+
validateOnLeave?: boolean;
|
|
249
|
+
}) => void;
|
|
250
|
+
goToStepChecked: (stepId: string, options?: {
|
|
251
|
+
validateOnLeave?: boolean;
|
|
252
|
+
}) => void;
|
|
216
253
|
setData: (key: string, value: unknown) => void;
|
|
217
254
|
/** Restart the shell's current path with its current `initialData`. */
|
|
218
255
|
restart: () => void;
|
package/dist/index.js
CHANGED
|
@@ -34,7 +34,7 @@ export function usePath(options) {
|
|
|
34
34
|
snapshotRef.current = event.snapshot;
|
|
35
35
|
}
|
|
36
36
|
else if (event.type === "completed" || event.type === "cancelled") {
|
|
37
|
-
snapshotRef.current =
|
|
37
|
+
snapshotRef.current = engine.snapshot();
|
|
38
38
|
}
|
|
39
39
|
onEventRef.current?.(event);
|
|
40
40
|
callback();
|
|
@@ -47,8 +47,8 @@ export function usePath(options) {
|
|
|
47
47
|
const next = useCallback(() => engine.next(), [engine]);
|
|
48
48
|
const previous = useCallback(() => engine.previous(), [engine]);
|
|
49
49
|
const cancel = useCallback(() => engine.cancel(), [engine]);
|
|
50
|
-
const goToStep = useCallback((stepId) => engine.goToStep(stepId), [engine]);
|
|
51
|
-
const goToStepChecked = useCallback((stepId) => engine.goToStepChecked(stepId), [engine]);
|
|
50
|
+
const goToStep = useCallback((stepId, options) => engine.goToStep(stepId, options), [engine]);
|
|
51
|
+
const goToStepChecked = useCallback((stepId, options) => engine.goToStepChecked(stepId, options), [engine]);
|
|
52
52
|
const setData = useCallback((key, value) => engine.setData(key, value), [engine]);
|
|
53
53
|
const resetStep = useCallback(() => engine.resetStep(), [engine]);
|
|
54
54
|
const restart = useCallback(() => engine.restart(), [engine]);
|
|
@@ -143,7 +143,10 @@ export function useField(field) {
|
|
|
143
143
|
* />
|
|
144
144
|
* ```
|
|
145
145
|
*/
|
|
146
|
-
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, hideFooter = false,
|
|
146
|
+
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", className, renderHeader, renderFooter, validationDisplay = "summary", progressLayout = "merged", services, validateWhen = false, completionContent, }, ref) {
|
|
147
|
+
// Read the outer PathShell's context BEFORE providing our own. Used for
|
|
148
|
+
// restoreKey: the outer context is null when this is a top-level shell.
|
|
149
|
+
const outerCtx = useContext(PathContext);
|
|
147
150
|
const pathReturn = usePath({
|
|
148
151
|
engine: externalEngine,
|
|
149
152
|
onEvent(event) {
|
|
@@ -152,6 +155,10 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
152
155
|
onComplete?.(event.data);
|
|
153
156
|
if (event.type === "cancelled")
|
|
154
157
|
onCancel?.(event.data);
|
|
158
|
+
// Auto-sync inner snapshot to the parent shell's data under restoreKey.
|
|
159
|
+
if (restoreKey && outerCtx && event.type === "stateChanged") {
|
|
160
|
+
outerCtx.path.setData(restoreKey, event.snapshot);
|
|
161
|
+
}
|
|
155
162
|
}
|
|
156
163
|
});
|
|
157
164
|
const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
|
|
@@ -168,7 +175,20 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
168
175
|
useEffect(() => {
|
|
169
176
|
if (autoStart && !startedRef.current && !externalEngine) {
|
|
170
177
|
startedRef.current = true;
|
|
171
|
-
|
|
178
|
+
let startData = initialData;
|
|
179
|
+
let restoreStepId;
|
|
180
|
+
if (restoreKey && outerCtx) {
|
|
181
|
+
const stored = outerCtx.path.snapshot?.data[restoreKey];
|
|
182
|
+
if (stored != null && typeof stored === "object" && "stepId" in stored) {
|
|
183
|
+
startData = stored.data;
|
|
184
|
+
if (stored.stepIndex > 0)
|
|
185
|
+
restoreStepId = stored.stepId;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const p = start(pathDef, startData);
|
|
189
|
+
if (restoreStepId) {
|
|
190
|
+
Promise.resolve(p).then(() => goToStep(restoreStepId));
|
|
191
|
+
}
|
|
172
192
|
}
|
|
173
193
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
174
194
|
}, []);
|
|
@@ -180,6 +200,8 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
180
200
|
? ((snapshot.formId ? steps[snapshot.formId] : undefined) ?? steps[snapshot.stepId] ?? null)
|
|
181
201
|
: null;
|
|
182
202
|
const contextValue = { path: pathReturn, services: services ?? null };
|
|
203
|
+
const effectiveHideProgress = hideProgress || layout === "tabs";
|
|
204
|
+
const effectiveHideFooter = hideFooter || layout === "tabs";
|
|
183
205
|
if (!snapshot) {
|
|
184
206
|
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", className) }, createElement("div", { className: "pw-shell__empty" }, createElement("p", null, "No active path."), !autoStart && createElement("button", {
|
|
185
207
|
type: "button",
|
|
@@ -187,14 +209,22 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
187
209
|
onClick: () => start(pathDef, initialData)
|
|
188
210
|
}, "Start"))));
|
|
189
211
|
}
|
|
212
|
+
if (snapshot.status === "completed") {
|
|
213
|
+
const showCompletionProgress = !effectiveHideProgress && snapshot.stepCount > 1;
|
|
214
|
+
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", className) }, showCompletionProgress && defaultHeader(snapshot), createElement("div", { className: "pw-shell__body" }, completionContent ?? createElement("div", { className: "pw-shell__completion" }, createElement("p", { className: "pw-shell__completion-message" }, "All done."), createElement("button", {
|
|
215
|
+
type: "button",
|
|
216
|
+
className: "pw-shell__completion-restart",
|
|
217
|
+
onClick: () => restart(),
|
|
218
|
+
}, "Start over")))));
|
|
219
|
+
}
|
|
190
220
|
const actions = {
|
|
191
221
|
next, previous, cancel, goToStep, goToStepChecked, setData,
|
|
192
222
|
restart: () => restart(),
|
|
193
223
|
retry: () => retry(),
|
|
194
224
|
suspend: () => suspend(),
|
|
195
225
|
};
|
|
196
|
-
const showRoot = !
|
|
197
|
-
const showActive = !
|
|
226
|
+
const showRoot = !effectiveHideProgress && !!snapshot.rootProgress && progressLayout !== "activeOnly";
|
|
227
|
+
const showActive = !effectiveHideProgress && (renderHeader
|
|
198
228
|
? true
|
|
199
229
|
: (snapshot.stepCount > 1 || snapshot.nestingLevel > 0) && progressLayout !== "rootOnly");
|
|
200
230
|
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", progressLayout !== "merged" && `pw-shell--progress-${progressLayout}`, className) },
|
|
@@ -217,11 +247,11 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
217
247
|
snapshot.status === "error" && snapshot.error
|
|
218
248
|
? defaultErrorPanel(snapshot, actions)
|
|
219
249
|
// Footer — navigation buttons
|
|
220
|
-
: !
|
|
250
|
+
: !effectiveHideFooter
|
|
221
251
|
? renderFooter
|
|
222
252
|
? renderFooter(snapshot, actions)
|
|
223
253
|
: defaultFooter(snapshot, actions, {
|
|
224
|
-
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel,
|
|
254
|
+
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel, layout
|
|
225
255
|
})
|
|
226
256
|
: null));
|
|
227
257
|
});
|
|
@@ -275,9 +305,9 @@ function defaultErrorPanel(snapshot, actions) {
|
|
|
275
305
|
}
|
|
276
306
|
function defaultFooter(snapshot, actions, labels) {
|
|
277
307
|
// Auto-detect layout: single-step top-level paths use "form", everything else uses "wizard"
|
|
278
|
-
const resolvedLayout = labels.
|
|
308
|
+
const resolvedLayout = labels.layout === "auto" || labels.layout === "tabs"
|
|
279
309
|
? (snapshot.stepCount === 1 && snapshot.nestingLevel === 0 ? "form" : "wizard")
|
|
280
|
-
: labels.
|
|
310
|
+
: labels.layout;
|
|
281
311
|
const isFormMode = resolvedLayout === "form";
|
|
282
312
|
return createElement("div", { className: "pw-shell__footer" }, createElement("div", { className: "pw-shell__footer-left" },
|
|
283
313
|
// Form mode: Cancel on the left
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daltonr/pathwrite-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "React adapter for @daltonr/pathwrite-core — hooks, context provider, and optional <PathShell> default UI.",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react": ">=18.0.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@daltonr/pathwrite-core": "^0.
|
|
49
|
+
"@daltonr/pathwrite-core": "^0.12.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"react": "^18.3.1",
|
package/src/index.ts
CHANGED
|
@@ -55,10 +55,10 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
55
55
|
previous: () => void;
|
|
56
56
|
/** Cancel the active path (or sub-path). */
|
|
57
57
|
cancel: () => void;
|
|
58
|
-
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. */
|
|
59
|
-
goToStep: (stepId: string) => void;
|
|
58
|
+
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating, so inline errors are visible if the user returns to it. */
|
|
59
|
+
goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
60
60
|
/** Jump directly to a step by ID, checking the current step's canMoveNext (forward) or canMovePrevious (backward) guard first. Navigation is blocked if the guard returns false. */
|
|
61
|
-
goToStepChecked: (stepId: string) => void;
|
|
61
|
+
goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
62
62
|
/** Update a single data value; triggers a re-render via stateChanged. When `TData` is specified, `key` and `value` are type-checked against your data shape. */
|
|
63
63
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => void;
|
|
64
64
|
/** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
|
|
@@ -134,7 +134,7 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
|
|
|
134
134
|
if (event.type === "stateChanged" || event.type === "resumed") {
|
|
135
135
|
snapshotRef.current = event.snapshot as PathSnapshot<TData>;
|
|
136
136
|
} else if (event.type === "completed" || event.type === "cancelled") {
|
|
137
|
-
snapshotRef.current = null;
|
|
137
|
+
snapshotRef.current = engine.snapshot() as PathSnapshot<TData> | null;
|
|
138
138
|
}
|
|
139
139
|
onEventRef.current?.(event);
|
|
140
140
|
callback();
|
|
@@ -164,12 +164,12 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
|
|
|
164
164
|
const cancel = useCallback(() => engine.cancel(), [engine]);
|
|
165
165
|
|
|
166
166
|
const goToStep = useCallback(
|
|
167
|
-
(stepId: string) => engine.goToStep(stepId),
|
|
167
|
+
(stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStep(stepId, options),
|
|
168
168
|
[engine]
|
|
169
169
|
);
|
|
170
170
|
|
|
171
171
|
const goToStepChecked = useCallback(
|
|
172
|
-
(stepId: string) => engine.goToStepChecked(stepId),
|
|
172
|
+
(stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStepChecked(stepId, options),
|
|
173
173
|
[engine]
|
|
174
174
|
);
|
|
175
175
|
|
|
@@ -299,8 +299,25 @@ export interface PathShellProps {
|
|
|
299
299
|
engine?: PathEngine;
|
|
300
300
|
/** Map of step ID → content. The shell renders `steps[snapshot.stepId]` for the current step. */
|
|
301
301
|
steps: Record<string, ReactNode>;
|
|
302
|
-
/** Initial data passed to `engine.start()`. */
|
|
302
|
+
/** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
|
|
303
303
|
initialData?: PathData;
|
|
304
|
+
/**
|
|
305
|
+
* When set, this shell automatically saves its state into the nearest outer `PathShell`'s
|
|
306
|
+
* data under this key on every change, and restores from that stored state on remount.
|
|
307
|
+
*
|
|
308
|
+
* Use this for nested shells (e.g. a tabbed inner shell inside a wizard step) so that
|
|
309
|
+
* navigating away and back preserves both the inner data and the active tab:
|
|
310
|
+
*
|
|
311
|
+
* ```tsx
|
|
312
|
+
* <PathShell path={detailsPath} restoreKey="details" initialData={DETAILS_INITIAL} ... />
|
|
313
|
+
* ```
|
|
314
|
+
*
|
|
315
|
+
* The outer path stores a full `PathSnapshot` under `data[restoreKey]`. Later steps in
|
|
316
|
+
* the outer path can read inner field values via `data.details?.data.fieldName`.
|
|
317
|
+
*
|
|
318
|
+
* No-op when used on a top-level shell with no outer `PathShell` ancestor.
|
|
319
|
+
*/
|
|
320
|
+
restoreKey?: string;
|
|
304
321
|
/** If true, the path is started automatically on mount. Defaults to `true`. */
|
|
305
322
|
autoStart?: boolean;
|
|
306
323
|
/** Called when the path completes. Receives the final data. */
|
|
@@ -328,12 +345,13 @@ export interface PathShellProps {
|
|
|
328
345
|
/** 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`. */
|
|
329
346
|
validateWhen?: boolean;
|
|
330
347
|
/**
|
|
331
|
-
*
|
|
348
|
+
* Shell layout mode:
|
|
332
349
|
* - `"auto"` (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
333
|
-
* - `"wizard"`: Back button on left, Cancel and Submit together on right.
|
|
334
|
-
* - `"form"`: Cancel on left, Submit alone on right. Back button never shown.
|
|
350
|
+
* - `"wizard"`: Progress header + Back button on left, Cancel and Submit together on right.
|
|
351
|
+
* - `"form"`: Progress header + Cancel on left, Submit alone on right. Back button never shown.
|
|
352
|
+
* - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
|
|
335
353
|
*/
|
|
336
|
-
|
|
354
|
+
layout?: "wizard" | "form" | "auto" | "tabs";
|
|
337
355
|
/** Optional extra CSS class on the root element. */
|
|
338
356
|
className?: string;
|
|
339
357
|
/** Render prop to replace the entire header (progress area). Receives the snapshot. */
|
|
@@ -371,6 +389,17 @@ export interface PathShellProps {
|
|
|
371
389
|
* ```
|
|
372
390
|
*/
|
|
373
391
|
services?: unknown;
|
|
392
|
+
/**
|
|
393
|
+
* Content to render when `snapshot.status === "completed"` (i.e. after the
|
|
394
|
+
* path finishes with `completionBehaviour: "stayOnFinal"`).
|
|
395
|
+
*
|
|
396
|
+
* When provided, the shell replaces the step body with this content. If
|
|
397
|
+
* omitted, a default "All done." panel is shown with a Restart button.
|
|
398
|
+
*
|
|
399
|
+
* Has no effect when `completionBehaviour` is `"dismiss"` or `"reset"`,
|
|
400
|
+
* since those modes never produce a `"completed"` snapshot.
|
|
401
|
+
*/
|
|
402
|
+
completionContent?: ReactNode;
|
|
374
403
|
}
|
|
375
404
|
|
|
376
405
|
export interface PathShellHandle {
|
|
@@ -382,8 +411,8 @@ export interface PathShellActions {
|
|
|
382
411
|
next: () => void;
|
|
383
412
|
previous: () => void;
|
|
384
413
|
cancel: () => void;
|
|
385
|
-
goToStep: (stepId: string) => void;
|
|
386
|
-
goToStepChecked: (stepId: string) => void;
|
|
414
|
+
goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
415
|
+
goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
387
416
|
setData: (key: string, value: unknown) => void;
|
|
388
417
|
/** Restart the shell's current path with its current `initialData`. */
|
|
389
418
|
restart: () => void;
|
|
@@ -414,6 +443,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
414
443
|
engine: externalEngine,
|
|
415
444
|
steps,
|
|
416
445
|
initialData = {},
|
|
446
|
+
restoreKey,
|
|
417
447
|
autoStart = true,
|
|
418
448
|
onComplete,
|
|
419
449
|
onCancel,
|
|
@@ -426,7 +456,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
426
456
|
hideCancel = false,
|
|
427
457
|
hideProgress = false,
|
|
428
458
|
hideFooter = false,
|
|
429
|
-
|
|
459
|
+
layout = "auto",
|
|
430
460
|
className,
|
|
431
461
|
renderHeader,
|
|
432
462
|
renderFooter,
|
|
@@ -434,13 +464,24 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
434
464
|
progressLayout = "merged",
|
|
435
465
|
services,
|
|
436
466
|
validateWhen = false,
|
|
467
|
+
completionContent,
|
|
437
468
|
}: PathShellProps, ref): ReactElement {
|
|
469
|
+
// Read the outer PathShell's context BEFORE providing our own. Used for
|
|
470
|
+
// restoreKey: the outer context is null when this is a top-level shell.
|
|
471
|
+
const outerCtx = useContext(PathContext);
|
|
472
|
+
|
|
438
473
|
const pathReturn = usePath({
|
|
439
474
|
engine: externalEngine,
|
|
440
475
|
onEvent(event) {
|
|
441
476
|
onEvent?.(event);
|
|
442
477
|
if (event.type === "completed") onComplete?.(event.data);
|
|
443
478
|
if (event.type === "cancelled") onCancel?.(event.data);
|
|
479
|
+
// Auto-sync inner snapshot to the parent shell's data under restoreKey.
|
|
480
|
+
if (restoreKey && outerCtx && event.type === "stateChanged") {
|
|
481
|
+
(outerCtx.path.setData as unknown as (key: string, value: unknown) => void)(
|
|
482
|
+
restoreKey, event.snapshot
|
|
483
|
+
);
|
|
484
|
+
}
|
|
444
485
|
}
|
|
445
486
|
});
|
|
446
487
|
|
|
@@ -460,7 +501,19 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
460
501
|
useEffect(() => {
|
|
461
502
|
if (autoStart && !startedRef.current && !externalEngine) {
|
|
462
503
|
startedRef.current = true;
|
|
463
|
-
|
|
504
|
+
let startData: PathData = initialData;
|
|
505
|
+
let restoreStepId: string | undefined;
|
|
506
|
+
if (restoreKey && outerCtx) {
|
|
507
|
+
const stored = outerCtx.path.snapshot?.data[restoreKey] as PathSnapshot | undefined;
|
|
508
|
+
if (stored != null && typeof stored === "object" && "stepId" in stored) {
|
|
509
|
+
startData = stored.data as PathData;
|
|
510
|
+
if (stored.stepIndex > 0) restoreStepId = stored.stepId as string;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const p = start(pathDef, startData);
|
|
514
|
+
if (restoreStepId) {
|
|
515
|
+
Promise.resolve(p).then(() => goToStep(restoreStepId!));
|
|
516
|
+
}
|
|
464
517
|
}
|
|
465
518
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
466
519
|
}, []);
|
|
@@ -475,6 +528,9 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
475
528
|
|
|
476
529
|
const contextValue: PathContextValue = { path: pathReturn, services: services ?? null };
|
|
477
530
|
|
|
531
|
+
const effectiveHideProgress = hideProgress || layout === "tabs";
|
|
532
|
+
const effectiveHideFooter = hideFooter || layout === "tabs";
|
|
533
|
+
|
|
478
534
|
if (!snapshot) {
|
|
479
535
|
return createElement(PathContext.Provider, { value: contextValue },
|
|
480
536
|
createElement("div", { className: cls("pw-shell", className) },
|
|
@@ -490,6 +546,25 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
490
546
|
);
|
|
491
547
|
}
|
|
492
548
|
|
|
549
|
+
if (snapshot.status === "completed") {
|
|
550
|
+
const showCompletionProgress = !effectiveHideProgress && snapshot.stepCount > 1;
|
|
551
|
+
return createElement(PathContext.Provider, { value: contextValue },
|
|
552
|
+
createElement("div", { className: cls("pw-shell", className) },
|
|
553
|
+
showCompletionProgress && defaultHeader(snapshot),
|
|
554
|
+
createElement("div", { className: "pw-shell__body" },
|
|
555
|
+
completionContent ?? createElement("div", { className: "pw-shell__completion" },
|
|
556
|
+
createElement("p", { className: "pw-shell__completion-message" }, "All done."),
|
|
557
|
+
createElement("button", {
|
|
558
|
+
type: "button",
|
|
559
|
+
className: "pw-shell__completion-restart",
|
|
560
|
+
onClick: () => restart(),
|
|
561
|
+
}, "Start over")
|
|
562
|
+
)
|
|
563
|
+
)
|
|
564
|
+
)
|
|
565
|
+
);
|
|
566
|
+
}
|
|
567
|
+
|
|
493
568
|
const actions: PathShellActions = {
|
|
494
569
|
next, previous, cancel, goToStep, goToStepChecked, setData,
|
|
495
570
|
restart: () => restart(),
|
|
@@ -497,8 +572,8 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
497
572
|
suspend: () => suspend(),
|
|
498
573
|
};
|
|
499
574
|
|
|
500
|
-
const showRoot = !
|
|
501
|
-
const showActive = !
|
|
575
|
+
const showRoot = !effectiveHideProgress && !!snapshot.rootProgress && progressLayout !== "activeOnly";
|
|
576
|
+
const showActive = !effectiveHideProgress && (renderHeader
|
|
502
577
|
? true
|
|
503
578
|
: (snapshot.stepCount > 1 || snapshot.nestingLevel > 0) && progressLayout !== "rootOnly");
|
|
504
579
|
|
|
@@ -537,11 +612,11 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
537
612
|
snapshot.status === "error" && snapshot.error
|
|
538
613
|
? defaultErrorPanel(snapshot, actions)
|
|
539
614
|
// Footer — navigation buttons
|
|
540
|
-
: !
|
|
615
|
+
: !effectiveHideFooter
|
|
541
616
|
? renderFooter
|
|
542
617
|
? renderFooter(snapshot, actions)
|
|
543
618
|
: defaultFooter(snapshot, actions, {
|
|
544
|
-
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel,
|
|
619
|
+
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel, layout
|
|
545
620
|
})
|
|
546
621
|
: null
|
|
547
622
|
)
|
|
@@ -660,7 +735,7 @@ interface FooterLabels {
|
|
|
660
735
|
loadingLabel?: string;
|
|
661
736
|
cancelLabel: string;
|
|
662
737
|
hideCancel: boolean;
|
|
663
|
-
|
|
738
|
+
layout: "wizard" | "form" | "auto" | "tabs";
|
|
664
739
|
}
|
|
665
740
|
|
|
666
741
|
function defaultFooter(
|
|
@@ -669,9 +744,9 @@ function defaultFooter(
|
|
|
669
744
|
labels: FooterLabels
|
|
670
745
|
): ReactElement {
|
|
671
746
|
// Auto-detect layout: single-step top-level paths use "form", everything else uses "wizard"
|
|
672
|
-
const resolvedLayout = labels.
|
|
747
|
+
const resolvedLayout = labels.layout === "auto" || labels.layout === "tabs"
|
|
673
748
|
? (snapshot.stepCount === 1 && snapshot.nestingLevel === 0 ? "form" : "wizard")
|
|
674
|
-
: labels.
|
|
749
|
+
: labels.layout;
|
|
675
750
|
|
|
676
751
|
const isFormMode = resolvedLayout === "form";
|
|
677
752
|
|