@waypointjs/react 0.1.4 → 0.1.6
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/index.cjs +8 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -5,20 +5,21 @@ var zustand = require('zustand');
|
|
|
5
5
|
var core = require('@waypointjs/core');
|
|
6
6
|
|
|
7
7
|
// src/useWaypoint.ts
|
|
8
|
-
function useWaypoint(store) {
|
|
9
|
-
const { schema, data, externalVars, currentStepId, isSubmitting } = zustand.useStore(
|
|
8
|
+
function useWaypoint(store, externalEnums) {
|
|
9
|
+
const { schema, data, externalVars, currentStepId, skippedSteps, isSubmitting } = zustand.useStore(
|
|
10
10
|
store,
|
|
11
11
|
(s) => ({
|
|
12
12
|
schema: s.schema,
|
|
13
13
|
data: s.data,
|
|
14
14
|
externalVars: s.externalVars,
|
|
15
15
|
currentStepId: s.currentStepId,
|
|
16
|
+
skippedSteps: s.skippedSteps,
|
|
16
17
|
isSubmitting: s.isSubmitting
|
|
17
18
|
})
|
|
18
19
|
);
|
|
19
20
|
const tree = react.useMemo(
|
|
20
|
-
() => schema ? core.resolveTree(schema, data, externalVars) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
|
|
21
|
-
[schema, data, externalVars]
|
|
21
|
+
() => schema ? core.resolveTree(schema, data, externalVars, externalEnums, skippedSteps) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
|
|
22
|
+
[schema, data, externalVars, externalEnums, skippedSteps]
|
|
22
23
|
);
|
|
23
24
|
const currentStep = react.useMemo(
|
|
24
25
|
() => currentStepId ? tree.steps.find((s) => s.definition.id === currentStepId) : void 0,
|
|
@@ -50,10 +51,13 @@ function useWaypoint(store) {
|
|
|
50
51
|
isLastStep: !nextStep,
|
|
51
52
|
isSubmitting,
|
|
52
53
|
missingExternalVars: tree.missingExternalVars,
|
|
54
|
+
skippedSteps,
|
|
53
55
|
setFieldValue: (stepId, fieldId, value) => store.getState().setFieldValue(stepId, fieldId, value),
|
|
54
56
|
setStepData: (stepId, data2) => store.getState().setStepData(stepId, data2),
|
|
55
57
|
setExternalVar: (varId, value) => store.getState().setExternalVar(varId, value),
|
|
56
58
|
setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),
|
|
59
|
+
skipStep: (stepId) => store.getState().skipStep(stepId),
|
|
60
|
+
unskipStep: (stepId) => store.getState().unskipStep(stepId),
|
|
57
61
|
reset: () => store.getState().reset()
|
|
58
62
|
};
|
|
59
63
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["useStore","useMemo","resolveTree","getNextStep","getPreviousStep","calculateProgress","data"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>): WaypointState {\n const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["useStore","useMemo","resolveTree","getNextStep","getPreviousStep","calculateProgress","data"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { ExternalEnum, WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n /** Step IDs that have been skipped */\n skippedSteps: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n skipStep(stepId: string): void;\n unskipStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState {\n const { schema, data, externalVars, currentStepId, skippedSteps, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n skippedSteps: s.skippedSteps,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars, externalEnums, skippedSteps)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars, externalEnums, skippedSteps]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n skippedSteps,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n skipStep: (stepId) => store.getState().skipStep(stepId),\n unskipStep: (stepId) => store.getState().unskipStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StoreApi } from 'zustand';
|
|
2
|
-
import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ResolvedField } from '@waypointjs/core';
|
|
2
|
+
import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ExternalEnum, ResolvedField } from '@waypointjs/core';
|
|
3
3
|
|
|
4
4
|
interface WaypointState {
|
|
5
5
|
schema: WaypointRuntimeStore["schema"];
|
|
@@ -15,10 +15,14 @@ interface WaypointState {
|
|
|
15
15
|
isLastStep: boolean;
|
|
16
16
|
isSubmitting: boolean;
|
|
17
17
|
missingExternalVars: string[];
|
|
18
|
+
/** Step IDs that have been skipped */
|
|
19
|
+
skippedSteps: string[];
|
|
18
20
|
setFieldValue(stepId: string, fieldId: string, value: unknown): void;
|
|
19
21
|
setStepData(stepId: string, data: Record<string, unknown>): void;
|
|
20
22
|
setExternalVar(varId: string, value: unknown): void;
|
|
21
23
|
setCurrentStep(stepId: string): void;
|
|
24
|
+
skipStep(stepId: string): void;
|
|
25
|
+
unskipStep(stepId: string): void;
|
|
22
26
|
reset(): void;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
@@ -30,7 +34,7 @@ interface WaypointState {
|
|
|
30
34
|
* @example
|
|
31
35
|
* const { currentStep, progress, setFieldValue } = useWaypoint(store);
|
|
32
36
|
*/
|
|
33
|
-
declare function useWaypoint(store: StoreApi<WaypointRuntimeStore
|
|
37
|
+
declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState;
|
|
34
38
|
|
|
35
39
|
interface WaypointHeadlessStep {
|
|
36
40
|
step: ResolvedStep | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StoreApi } from 'zustand';
|
|
2
|
-
import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ResolvedField } from '@waypointjs/core';
|
|
2
|
+
import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ExternalEnum, ResolvedField } from '@waypointjs/core';
|
|
3
3
|
|
|
4
4
|
interface WaypointState {
|
|
5
5
|
schema: WaypointRuntimeStore["schema"];
|
|
@@ -15,10 +15,14 @@ interface WaypointState {
|
|
|
15
15
|
isLastStep: boolean;
|
|
16
16
|
isSubmitting: boolean;
|
|
17
17
|
missingExternalVars: string[];
|
|
18
|
+
/** Step IDs that have been skipped */
|
|
19
|
+
skippedSteps: string[];
|
|
18
20
|
setFieldValue(stepId: string, fieldId: string, value: unknown): void;
|
|
19
21
|
setStepData(stepId: string, data: Record<string, unknown>): void;
|
|
20
22
|
setExternalVar(varId: string, value: unknown): void;
|
|
21
23
|
setCurrentStep(stepId: string): void;
|
|
24
|
+
skipStep(stepId: string): void;
|
|
25
|
+
unskipStep(stepId: string): void;
|
|
22
26
|
reset(): void;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
@@ -30,7 +34,7 @@ interface WaypointState {
|
|
|
30
34
|
* @example
|
|
31
35
|
* const { currentStep, progress, setFieldValue } = useWaypoint(store);
|
|
32
36
|
*/
|
|
33
|
-
declare function useWaypoint(store: StoreApi<WaypointRuntimeStore
|
|
37
|
+
declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState;
|
|
34
38
|
|
|
35
39
|
interface WaypointHeadlessStep {
|
|
36
40
|
step: ResolvedStep | undefined;
|
package/dist/index.js
CHANGED
|
@@ -3,20 +3,21 @@ import { useStore } from 'zustand';
|
|
|
3
3
|
import { resolveTree, getNextStep, getPreviousStep, calculateProgress } from '@waypointjs/core';
|
|
4
4
|
|
|
5
5
|
// src/useWaypoint.ts
|
|
6
|
-
function useWaypoint(store) {
|
|
7
|
-
const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(
|
|
6
|
+
function useWaypoint(store, externalEnums) {
|
|
7
|
+
const { schema, data, externalVars, currentStepId, skippedSteps, isSubmitting } = useStore(
|
|
8
8
|
store,
|
|
9
9
|
(s) => ({
|
|
10
10
|
schema: s.schema,
|
|
11
11
|
data: s.data,
|
|
12
12
|
externalVars: s.externalVars,
|
|
13
13
|
currentStepId: s.currentStepId,
|
|
14
|
+
skippedSteps: s.skippedSteps,
|
|
14
15
|
isSubmitting: s.isSubmitting
|
|
15
16
|
})
|
|
16
17
|
);
|
|
17
18
|
const tree = useMemo(
|
|
18
|
-
() => schema ? resolveTree(schema, data, externalVars) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
|
|
19
|
-
[schema, data, externalVars]
|
|
19
|
+
() => schema ? resolveTree(schema, data, externalVars, externalEnums, skippedSteps) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
|
|
20
|
+
[schema, data, externalVars, externalEnums, skippedSteps]
|
|
20
21
|
);
|
|
21
22
|
const currentStep = useMemo(
|
|
22
23
|
() => currentStepId ? tree.steps.find((s) => s.definition.id === currentStepId) : void 0,
|
|
@@ -48,10 +49,13 @@ function useWaypoint(store) {
|
|
|
48
49
|
isLastStep: !nextStep,
|
|
49
50
|
isSubmitting,
|
|
50
51
|
missingExternalVars: tree.missingExternalVars,
|
|
52
|
+
skippedSteps,
|
|
51
53
|
setFieldValue: (stepId, fieldId, value) => store.getState().setFieldValue(stepId, fieldId, value),
|
|
52
54
|
setStepData: (stepId, data2) => store.getState().setStepData(stepId, data2),
|
|
53
55
|
setExternalVar: (varId, value) => store.getState().setExternalVar(varId, value),
|
|
54
56
|
setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),
|
|
57
|
+
skipStep: (stepId) => store.getState().skipStep(stepId),
|
|
58
|
+
unskipStep: (stepId) => store.getState().unskipStep(stepId),
|
|
55
59
|
reset: () => store.getState().reset()
|
|
56
60
|
};
|
|
57
61
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["data","useStore","useMemo","resolveTree"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["data","useStore","useMemo","resolveTree"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { ExternalEnum, WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n /** Step IDs that have been skipped */\n skippedSteps: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n skipStep(stepId: string): void;\n unskipStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState {\n const { schema, data, externalVars, currentStepId, skippedSteps, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n skippedSteps: s.skippedSteps,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars, externalEnums, skippedSteps)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars, externalEnums, skippedSteps]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n skippedSteps,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n skipStep: (stepId) => store.getState().skipStep(stepId),\n unskipStep: (stepId) => store.getState().unskipStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@waypointjs/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "React hooks for waypoint journey navigation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"navigation",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"zustand": "^4.5.2",
|
|
29
|
-
"@waypointjs/core": "0.1.
|
|
29
|
+
"@waypointjs/core": "0.1.6"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^20.19.33",
|