bitboss-ui 0.2.55 → 0.2.56
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/index101.js +2 -2
- package/dist/index103.js +2 -2
- package/dist/index109.js +1 -1
- package/dist/index11.js +2 -2
- package/dist/index111.js +4 -4
- package/dist/index113.js +1 -1
- package/dist/index116.js +1 -1
- package/dist/index117.js +1 -1
- package/dist/index118.js +1 -1
- package/dist/index119.js +1 -1
- package/dist/index125.js +1 -1
- package/dist/index126.js +1 -1
- package/dist/index127.js +1 -1
- package/dist/index131.js +2 -2
- package/dist/index15.js +8 -8
- package/dist/index17.js +9 -9
- package/dist/index19.js +3 -3
- package/dist/index197.js +5 -235
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +16 -10
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +16 -2
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +19 -4
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +18 -366
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +25 -130
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +8 -5
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +2 -19
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +3 -2
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +35 -2
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +6 -174
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +2 -23
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +4 -373
- package/dist/index209.js.map +1 -1
- package/dist/index21.js +2 -2
- package/dist/index210.js +235 -3
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +368 -3
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +134 -2
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +2 -16
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +172 -14
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +23 -20
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +371 -27
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +3 -8
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +3 -3
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +9 -34
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +2 -6
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +2 -2
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +6 -9
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +16 -120
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +9 -6
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +120 -16
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +1 -1
- package/dist/index227.js +295 -2
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +6 -160
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +4 -1
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +2 -69
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +2 -5
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +2 -4
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +2 -6
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -2
- package/dist/index235.js +2 -295
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +435 -2
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +89 -2
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +3 -116
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +159 -105
- package/dist/index239.js.map +1 -1
- package/dist/index240.js +1 -226
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +68 -257
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +5 -2
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +200 -15
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +224 -2
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +258 -2
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +2 -2
- package/dist/index247.js +2 -2
- package/dist/index248.js +110 -428
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +105 -88
- package/dist/index249.js.map +1 -1
- package/dist/index25.js +2 -2
- package/dist/index250.js +15 -200
- package/dist/index250.js.map +1 -1
- package/dist/index254.js +2 -2
- package/dist/index255.js +1 -1
- package/dist/index29.js +3 -3
- package/dist/index31.js +5 -5
- package/dist/index33.js +1 -1
- package/dist/index35.js +2 -2
- package/dist/index47.js +1 -1
- package/dist/index49.js +1 -1
- package/dist/index65.js +5 -5
- package/dist/index69.js +2 -2
- package/dist/index72.js +1 -1
- package/dist/index75.js +1 -1
- package/dist/index79.js +4 -4
- package/dist/index8.js +81 -78
- package/dist/index8.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index8.js
CHANGED
|
@@ -1,40 +1,43 @@
|
|
|
1
|
-
import { copy as
|
|
2
|
-
import { reactive as
|
|
3
|
-
import { isNotNil as
|
|
4
|
-
import { mapValues as
|
|
5
|
-
import { useRoute as
|
|
6
|
-
import { useRouter as
|
|
7
|
-
import { useStepper as
|
|
8
|
-
const
|
|
9
|
-
var r,
|
|
10
|
-
const e = i.match(
|
|
11
|
-
return ((r = e == null ? void 0 : e.groups) == null ? void 0 : r.step) ?? ((
|
|
12
|
-
},
|
|
1
|
+
import { copy as G } from "./index127.js";
|
|
2
|
+
import { onBeforeUnmount as H, reactive as Q, watch as v, toValue as X, computed as m, provide as Z } from "vue";
|
|
3
|
+
import { isNotNil as u } from "./index124.js";
|
|
4
|
+
import { mapValues as _ } from "./index128.js";
|
|
5
|
+
import { useRoute as ee } from "./index129.js";
|
|
6
|
+
import { useRouter as te } from "./index130.js";
|
|
7
|
+
import { useStepper as se } from "./index131.js";
|
|
8
|
+
const ie = Symbol(), w = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[\s\S]+))/, x = (i) => {
|
|
9
|
+
var r, a;
|
|
10
|
+
const e = i.match(w);
|
|
11
|
+
return ((r = e == null ? void 0 : e.groups) == null ? void 0 : r.step) ?? ((a = e == null ? void 0 : e.groups) == null ? void 0 : a.step2) ?? null;
|
|
12
|
+
}, ce = (i) => {
|
|
13
13
|
if (!i.name)
|
|
14
14
|
throw new Error(
|
|
15
15
|
"You need to provide a unique name for the current wizard instance to be used to save data"
|
|
16
16
|
);
|
|
17
|
-
const e =
|
|
18
|
-
|
|
17
|
+
const e = ee(), r = te();
|
|
18
|
+
let a = !1;
|
|
19
|
+
const g = i.useNavigation ?? !0, V = i.navigationMode ?? "query", q = i.persist ?? !0;
|
|
20
|
+
if (g && (!e.value || !r))
|
|
19
21
|
throw new Error(
|
|
20
22
|
"Navigation is enabled but could not retrieve the router instance in useWizard."
|
|
21
23
|
);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
H(() => a = !0);
|
|
25
|
+
const b = G(i.initialState), l = Q(
|
|
26
|
+
q && sessionStorage.getItem(i.name) ? {
|
|
27
|
+
...b,
|
|
25
28
|
...JSON.parse(sessionStorage.getItem(i.name))
|
|
26
|
-
} :
|
|
29
|
+
} : b
|
|
27
30
|
);
|
|
28
|
-
|
|
31
|
+
q && v(l, () => {
|
|
29
32
|
sessionStorage.setItem(i.name, JSON.stringify(l));
|
|
30
33
|
});
|
|
31
|
-
const
|
|
32
|
-
() => Object.entries(
|
|
34
|
+
const P = X(i.steps), o = m(
|
|
35
|
+
() => Object.entries(P).reduce(
|
|
33
36
|
(t, [s, n]) => (n.condition && !n.condition(l) || (t[s] = { ...n, key: s }), t),
|
|
34
37
|
{}
|
|
35
38
|
)
|
|
36
|
-
),
|
|
37
|
-
() =>
|
|
39
|
+
), S = m(
|
|
40
|
+
() => _(
|
|
38
41
|
o.value,
|
|
39
42
|
(t) => typeof t.isValid == "function" ? {
|
|
40
43
|
...t,
|
|
@@ -46,12 +49,12 @@ const te = Symbol(), x = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>
|
|
|
46
49
|
)
|
|
47
50
|
);
|
|
48
51
|
let p = null;
|
|
49
|
-
if (
|
|
52
|
+
if (g && u(e.value)) {
|
|
50
53
|
let t = null;
|
|
51
|
-
if (
|
|
54
|
+
if (V === "query")
|
|
52
55
|
e.value.query.step && (t = e.value.query.step);
|
|
53
56
|
else {
|
|
54
|
-
const s =
|
|
57
|
+
const s = x(e.value.fullPath);
|
|
55
58
|
s && (t = s);
|
|
56
59
|
}
|
|
57
60
|
p = t;
|
|
@@ -60,63 +63,63 @@ const te = Symbol(), x = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>
|
|
|
60
63
|
for (const t in o.value) {
|
|
61
64
|
if (t === p)
|
|
62
65
|
break;
|
|
63
|
-
const s =
|
|
66
|
+
const s = S.value[t];
|
|
64
67
|
if (!s || !s.isValid) {
|
|
65
68
|
p = null;
|
|
66
69
|
break;
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
72
|
const {
|
|
70
|
-
steps:
|
|
71
|
-
current:
|
|
72
|
-
goToNext:
|
|
73
|
-
goToPrevious:
|
|
73
|
+
steps: T,
|
|
74
|
+
current: j,
|
|
75
|
+
goToNext: A,
|
|
76
|
+
goToPrevious: K,
|
|
74
77
|
goTo: d,
|
|
75
|
-
index:
|
|
78
|
+
index: U,
|
|
76
79
|
at: z,
|
|
77
80
|
get: F,
|
|
78
81
|
goBackTo: I,
|
|
79
|
-
isAfter:
|
|
80
|
-
isBefore:
|
|
81
|
-
isCurrent:
|
|
82
|
-
isFirst:
|
|
83
|
-
isLast:
|
|
84
|
-
isNext:
|
|
85
|
-
isPrevious:
|
|
86
|
-
next:
|
|
87
|
-
previous:
|
|
88
|
-
stepNames:
|
|
89
|
-
} =
|
|
90
|
-
|
|
82
|
+
isAfter: B,
|
|
83
|
+
isBefore: M,
|
|
84
|
+
isCurrent: C,
|
|
85
|
+
isFirst: E,
|
|
86
|
+
isLast: J,
|
|
87
|
+
isNext: R,
|
|
88
|
+
isPrevious: W,
|
|
89
|
+
next: $,
|
|
90
|
+
previous: L,
|
|
91
|
+
stepNames: Y
|
|
92
|
+
} = se(
|
|
93
|
+
S,
|
|
91
94
|
p || Object.values(o.value)[0].key
|
|
92
|
-
), c =
|
|
95
|
+
), c = m(() => Object.keys(o.value)[U.value]), N = {
|
|
93
96
|
at: z,
|
|
94
|
-
current:
|
|
97
|
+
current: j,
|
|
95
98
|
data: l,
|
|
96
99
|
get: F,
|
|
97
100
|
goBackTo: I,
|
|
98
101
|
goTo: d,
|
|
99
|
-
goToNext:
|
|
100
|
-
goToPrevious:
|
|
101
|
-
isAfter:
|
|
102
|
-
isBefore:
|
|
103
|
-
isCurrent:
|
|
104
|
-
isFirst:
|
|
105
|
-
isLast:
|
|
106
|
-
isNext:
|
|
107
|
-
isPrevious:
|
|
102
|
+
goToNext: A,
|
|
103
|
+
goToPrevious: K,
|
|
104
|
+
isAfter: B,
|
|
105
|
+
isBefore: M,
|
|
106
|
+
isCurrent: C,
|
|
107
|
+
isFirst: E,
|
|
108
|
+
isLast: J,
|
|
109
|
+
isNext: R,
|
|
110
|
+
isPrevious: W,
|
|
108
111
|
key: c,
|
|
109
|
-
next:
|
|
110
|
-
previous:
|
|
111
|
-
stepNames:
|
|
112
|
-
steps:
|
|
112
|
+
next: $,
|
|
113
|
+
previous: L,
|
|
114
|
+
stepNames: Y,
|
|
115
|
+
steps: T
|
|
113
116
|
};
|
|
114
|
-
if (
|
|
115
|
-
if (
|
|
117
|
+
if (Z(ie, N), g)
|
|
118
|
+
if (V === "query")
|
|
116
119
|
v(
|
|
117
120
|
c,
|
|
118
121
|
() => {
|
|
119
|
-
|
|
122
|
+
u(r) && u(e.value) && r.push({
|
|
120
123
|
...e,
|
|
121
124
|
query: { ...e.value.query, step: c.value ?? null }
|
|
122
125
|
});
|
|
@@ -136,29 +139,29 @@ const te = Symbol(), x = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>
|
|
|
136
139
|
0,
|
|
137
140
|
f.indexOf(n)
|
|
138
141
|
).every(
|
|
139
|
-
(
|
|
142
|
+
(k) => {
|
|
140
143
|
var y;
|
|
141
|
-
return (y =
|
|
144
|
+
return (y = S.value[k]) == null ? void 0 : y.isValid;
|
|
142
145
|
}
|
|
143
146
|
) && d(n);
|
|
144
147
|
}
|
|
145
148
|
} else {
|
|
146
|
-
const s = Object.keys(
|
|
149
|
+
const s = Object.keys(T)[0];
|
|
147
150
|
d(s);
|
|
148
151
|
}
|
|
149
152
|
}
|
|
150
153
|
);
|
|
151
154
|
else {
|
|
152
|
-
const t =
|
|
153
|
-
if (
|
|
154
|
-
return
|
|
155
|
+
const t = m(() => {
|
|
156
|
+
if (u(e.value))
|
|
157
|
+
return x(e.value.fullPath);
|
|
155
158
|
});
|
|
156
159
|
v(
|
|
157
160
|
c,
|
|
158
161
|
(s) => {
|
|
159
|
-
|
|
162
|
+
u(e.value) && u(r) && !a && (e.value.path.includes("step") ? r.push({
|
|
160
163
|
query: e.value.query,
|
|
161
|
-
path: e.value.path.replace(
|
|
164
|
+
path: e.value.path.replace(w, `step/${s}`)
|
|
162
165
|
}) : r.push({
|
|
163
166
|
query: e.value.query,
|
|
164
167
|
// Normalizes paths with / and without
|
|
@@ -173,14 +176,14 @@ const te = Symbol(), x = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>
|
|
|
173
176
|
if (s && s !== c.value) {
|
|
174
177
|
const n = s;
|
|
175
178
|
if (n in o.value) {
|
|
176
|
-
const f = n,
|
|
177
|
-
|
|
179
|
+
const f = n, h = Object.keys(o.value);
|
|
180
|
+
h.slice(
|
|
178
181
|
0,
|
|
179
|
-
|
|
182
|
+
h.indexOf(f)
|
|
180
183
|
).every(
|
|
181
184
|
(y) => {
|
|
182
|
-
var
|
|
183
|
-
return (
|
|
185
|
+
var O;
|
|
186
|
+
return (O = o.value[y]) == null ? void 0 : O.isValid;
|
|
184
187
|
}
|
|
185
188
|
) && d(f);
|
|
186
189
|
}
|
|
@@ -188,10 +191,10 @@ const te = Symbol(), x = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>
|
|
|
188
191
|
}
|
|
189
192
|
);
|
|
190
193
|
}
|
|
191
|
-
return
|
|
194
|
+
return N;
|
|
192
195
|
};
|
|
193
196
|
export {
|
|
194
|
-
|
|
195
|
-
|
|
197
|
+
ce as useWizard,
|
|
198
|
+
ie as wizardInjectionKey
|
|
196
199
|
};
|
|
197
200
|
//# sourceMappingURL=index8.js.map
|
package/dist/index8.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index8.js","sources":["../src/composables/useWizard.ts"],"sourcesContent":["import { cloneDeep } from '@/utilities/functions/cloneDeep';\nimport { computed, provide, reactive, watch, toValue } from 'vue';\nimport { isNotNil } from '@/utilities/functions/isNotNil';\nimport { mapValues } from '@/utilities/functions/mapValues';\nimport { useRoute } from './useRoute';\nimport { useRouter } from './useRouter';\nimport { useStepper } from '@vueuse/core';\nimport type { ComputedRef, MaybeRef } from 'vue';\n\nexport const wizardInjectionKey = Symbol();\nexport type Step<U> = {\n\t/**\n\t * Function that accepts a state object and returns a boolean.\n\t * When step are accessed at the end of the pipeline the result\n\t * is provided so you don't have to run the function yourself.\n\t * It determines if the validation has passed for the step.\n\t */\n\tisValid?: (state: U) => boolean | boolean;\n\t/**\n\t * Function that accepts a state object and returns a boolean.\n\t * When step are accessed at the end of the pipeline the result\n\t * is provided so you don't have to run the function yourself.\n\t * Steps that do not pass the condition are removed.\n\t */\n\tcondition?: (state: U) => boolean;\n\t[key: string]: any;\n};\nexport type WizardState<T extends Record<string, any>> = ReturnType<\n\ttypeof useWizard<T>\n>;\n\nconst regexMatchStep =\n\t/((step\\/)(?<step>[\\s\\S]+?)(?=[/?]))|((step\\/)(?<step2>[\\s\\S]+))/;\n/**\n * With a url that follows the rule xyz.com/anything/step/:nameofthestep[/?query]\n * will match the :nameofthestep substring\n */\nconst extractStepFromUrl = (url: string) => {\n\tconst match = url.match(regexMatchStep);\n\treturn match?.groups?.step ?? match?.groups?.step2 ?? null;\n};\nexport const useWizard = <T extends object>(params: {\n\t/**\n\t * The steps definition for the wizard\n\t */\n\tsteps: MaybeRef<Record<string, Step<T>>>;\n\t/**\n\t * Name of the wizard used to persist state\n\t */\n\tname: string;\n\t/**\n\t * Initial set of data to be made available throughout\n\t */\n\tinitialState: T;\n\t/**\n\t * When navogation is enabled, to whether use the query parameters or an entire substring of the URL like xyz/steps/....\n\t * The latter useful with nuxt so you can leverage the automatic import of components based on the URL.\n\t */\n\tnavigationMode?: 'query' | 'route';\n\t/**\n\t * Whether to use navigation at all. When disabled no query or URL is changed.\n\t */\n\tuseNavigation?: boolean;\n\t/**\n\t *\n\t */\n\tpersist?: boolean;\n}) => {\n\tif (!params.name) {\n\t\tthrow new Error(\n\t\t\t'You need to provide a unique name for the current wizard instance to be used to save data'\n\t\t);\n\t}\n\tconst route = useRoute();\n\tconst router = useRouter();\n\n\tconst useNavigation = params.useNavigation ?? true;\n\tconst navigationMode = params.navigationMode ?? 'query';\n\tconst persist = params.persist ?? true;\n\n\tif (useNavigation && (!route.value || !router)) {\n\t\tthrow new Error(\n\t\t\t'Navigation is enabled but could not retrieve the router instance in useWizard.'\n\t\t);\n\t}\n\n\tconst initialStateCopy = cloneDeep(params.initialState);\n\t/**\n\t * Initial state is either read from session storage or the one provided\n\t */\n\tconst innerState = reactive<typeof params.initialState>(\n\t\tpersist && sessionStorage.getItem(params.name)\n\t\t\t? {\n\t\t\t\t\t...initialStateCopy,\n\t\t\t\t\t...JSON.parse(sessionStorage.getItem(params.name)!),\n\t\t\t\t}\n\t\t\t: initialStateCopy\n\t);\n\n\tif (persist) {\n\t\t/**\n\t\t * Every time the state changes save it to sessionStorage\n\t\t */\n\t\twatch(innerState, () => {\n\t\t\tsessionStorage.setItem(params.name, JSON.stringify(innerState));\n\t\t});\n\t}\n\n\t/**\n\t * Steps can be passed as ref so we need to unwrap them\n\t */\n\tconst unwrappedSteps = toValue(params.steps);\n\tconst filteredSteps = computed(() =>\n\t\tObject.entries(unwrappedSteps).reduce(\n\t\t\t(acc: typeof unwrappedSteps, [key, step]) => {\n\t\t\t\tif (step.condition) {\n\t\t\t\t\tif (!step.condition(innerState as T)) {\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tacc[key] = { ...step, key };\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t)\n\t);\n\n\t/**\n\t * Steps can have a isValid function that receives the current state\n\t * but we don't want to have to call it every single time so we call it once here\n\t */\n\tconst mappedSteps = computed(() =>\n\t\tmapValues(\n\t\t\tfilteredSteps.value,\n\t\t\t(step): Omit<Step<T>, 'isValid'> & { isValid: boolean } => {\n\t\t\t\tif (typeof step.isValid === 'function') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...step,\n\t\t\t\t\t\tisValid: step.isValid(innerState as T),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...step,\n\t\t\t\t\tisValid: step.isValid ?? true,\n\t\t\t\t};\n\t\t\t}\n\t\t)\n\t);\n\n\t/**\n\t * Get the initial step from the query.\n\t * If it exists check that every step before it is also valid\n\t * so user cannot manually jump by changing the URL\n\t */\n\tlet initialStep = null;\n\tif (useNavigation && isNotNil(route.value)) {\n\t\tlet step: string | null = null;\n\t\tif (navigationMode === 'query') {\n\t\t\tif (route.value.query.step) {\n\t\t\t\tstep = route.value.query.step as string;\n\t\t\t}\n\t\t} else {\n\t\t\tconst stepFromUrl = extractStepFromUrl(route.value.fullPath);\n\t\t\tif (stepFromUrl) {\n\t\t\t\tstep = stepFromUrl;\n\t\t\t}\n\t\t}\n\t\tinitialStep = step;\n\t}\n\n\tif (initialStep) {\n\t\tfor (const stepName in filteredSteps.value) {\n\t\t\tif (stepName === initialStep) break;\n\t\t\tconst current = mappedSteps.value[stepName];\n\t\t\tif (!current || !current.isValid) {\n\t\t\t\tinitialStep = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Define the state of the wizard\n\t * A few data come from useStepper\n\t */\n\tconst {\n\t\tsteps,\n\t\tcurrent,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoTo,\n\t\tindex,\n\t\tat,\n\t\tget,\n\t\tgoBackTo,\n\t\tisAfter,\n\t\tisBefore,\n\t\tisCurrent,\n\t\tisFirst,\n\t\tisLast,\n\t\tisNext,\n\t\tisPrevious,\n\t\tnext,\n\t\tprevious,\n\t\tstepNames,\n\t} = useStepper(\n\t\tmappedSteps,\n\t\tinitialStep || Object.values(filteredSteps.value)[0].key\n\t);\n\n\tconst key = computed(() => Object.keys(filteredSteps.value)[index.value]);\n\n\t/**\n\t * Complete state object\n\t */\n\tconst state = {\n\t\tat,\n\t\tcurrent: current as ComputedRef<Step<T> & { isValid: boolean }>,\n\t\tdata: innerState,\n\t\tget,\n\t\tgoBackTo,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tisAfter,\n\t\tisBefore,\n\t\tisCurrent,\n\t\tisFirst,\n\t\tisLast,\n\t\tisNext,\n\t\tisPrevious,\n\t\tkey,\n\t\tnext,\n\t\tprevious,\n\t\tstepNames,\n\t\tsteps,\n\t};\n\n\tprovide(wizardInjectionKey, state);\n\n\tif (useNavigation) {\n\t\tif (navigationMode === 'query') {\n\t\t\t/**\n\t\t\t * Every time the current step changes update route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\tkey,\n\t\t\t\t() => {\n\t\t\t\t\tif (isNotNil(router) && isNotNil(route.value)) {\n\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t...route,\n\t\t\t\t\t\t\tquery: { ...route.value.query, step: key.value ?? null },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ immediate: true }\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Every time the route changes align the current step to the route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\t() => route.value?.query.step,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tconst stepAsString = value as string;\n\t\t\t\t\t\tif (stepAsString in filteredSteps.value) {\n\t\t\t\t\t\t\tconst stepAsKey = stepAsString;\n\t\t\t\t\t\t\tconst stepKeys = Object.keys(filteredSteps.value);\n\t\t\t\t\t\t\tconst stepsPriorToTarget = stepKeys.slice(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstepKeys.indexOf(stepAsKey)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst allValid = stepsPriorToTarget.every(\n\t\t\t\t\t\t\t\t(key) => mappedSteps.value[key]?.isValid\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (allValid) {\n\t\t\t\t\t\t\t\tgoTo(stepAsKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst key = Object.keys(steps)[0];\n\t\t\t\t\t\tgoTo(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tconst stepFromUrl = computed(() => {\n\t\t\t\tif (isNotNil(route.value)) {\n\t\t\t\t\treturn extractStepFromUrl(route.value.fullPath);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t});\n\n\t\t\t/**\n\t\t\t * Every time the current step changes update route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\tkey,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (isNotNil(route.value) && isNotNil(router)) {\n\t\t\t\t\t\tif (route.value.path.includes('step')) {\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tquery: route.value.query,\n\t\t\t\t\t\t\t\tpath: route.value.path.replace(regexMatchStep, `step/${value}`),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tquery: route.value.query,\n\t\t\t\t\t\t\t\t// Normalizes paths with / and without\n\t\t\t\t\t\t\t\tpath: (route.value.path + `/step/${value}`).replace('//', '/'),\n\t\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ immediate: true, flush: 'post' }\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Every time the route changes align the current step to the route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\t() => stepFromUrl.value,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (value && value !== key.value) {\n\t\t\t\t\t\tconst stepAsString = value as string;\n\t\t\t\t\t\tif (stepAsString in filteredSteps.value) {\n\t\t\t\t\t\t\tconst stepAsKey = stepAsString;\n\t\t\t\t\t\t\tconst stepKeys = Object.keys(filteredSteps.value);\n\t\t\t\t\t\t\tconst stepsPriorToTarget = stepKeys.slice(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstepKeys.indexOf(stepAsKey)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst allValid = stepsPriorToTarget.every(\n\t\t\t\t\t\t\t\t(key) => filteredSteps.value[key]?.isValid\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (allValid) {\n\t\t\t\t\t\t\t\tgoTo(stepAsKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\treturn state;\n};\n"],"names":["wizardInjectionKey","regexMatchStep","extractStepFromUrl","url","match","_a","_b","useWizard","params","route","useRoute","router","useRouter","useNavigation","navigationMode","persist","initialStateCopy","cloneDeep","innerState","reactive","watch","unwrappedSteps","toValue","filteredSteps","computed","acc","key","step","mappedSteps","mapValues","initialStep","isNotNil","stepFromUrl","stepName","current","steps","goToNext","goToPrevious","goTo","index","at","get","goBackTo","isAfter","isBefore","isCurrent","isFirst","isLast","isNext","isPrevious","next","previous","stepNames","useStepper","state","provide","value","stepAsString","stepAsKey","stepKeys"],"mappings":";;;;;;;AASO,MAAMA,KAAqB,OAAO,GAsBnCC,IACL,mEAKKC,IAAqB,CAACC,MAAgB;;AACrC,QAAAC,IAAQD,EAAI,MAAMF,CAAc;AACtC,WAAOI,IAAAD,KAAA,gBAAAA,EAAO,WAAP,gBAAAC,EAAe,WAAQC,IAAAF,KAAA,gBAAAA,EAAO,WAAP,gBAAAE,EAAe,UAAS;AACvD,GACaC,KAAY,CAAmBC,MA0BtC;AACD,MAAA,CAACA,EAAO;AACX,UAAM,IAAI;AAAA,MACT;AAAA,IAAA;AAGF,QAAMC,IAAQC,KACRC,IAASC,KAETC,IAAgBL,EAAO,iBAAiB,IACxCM,IAAiBN,EAAO,kBAAkB,SAC1CO,IAAUP,EAAO,WAAW;AAElC,MAAIK,MAAkB,CAACJ,EAAM,SAAS,CAACE;AACtC,UAAM,IAAI;AAAA,MACT;AAAA,IAAA;AAII,QAAAK,IAAmBC,EAAUT,EAAO,YAAY,GAIhDU,IAAaC;AAAA,IAClBJ,KAAW,eAAe,QAAQP,EAAO,IAAI,IAC1C;AAAA,MACA,GAAGQ;AAAA,MACH,GAAG,KAAK,MAAM,eAAe,QAAQR,EAAO,IAAI,CAAE;AAAA,IAAA,IAElDQ;AAAA,EAAA;AAGJ,EAAID,KAIHK,EAAMF,GAAY,MAAM;AACvB,mBAAe,QAAQV,EAAO,MAAM,KAAK,UAAUU,CAAU,CAAC;AAAA,EAAA,CAC9D;AAMI,QAAAG,IAAiBC,EAAQd,EAAO,KAAK,GACrCe,IAAgBC;AAAA,IAAS,MAC9B,OAAO,QAAQH,CAAc,EAAE;AAAA,MAC9B,CAACI,GAA4B,CAACC,GAAKC,CAAI,OAClCA,EAAK,aACJ,CAACA,EAAK,UAAUT,CAAe,MAIpCO,EAAIC,CAAG,IAAI,EAAE,GAAGC,GAAM,KAAAD,MACfD;AAAA,MAER,CAAC;AAAA,IACF;AAAA,EAAA,GAOKG,IAAcJ;AAAA,IAAS,MAC5BK;AAAA,MACCN,EAAc;AAAA,MACd,CAACI,MACI,OAAOA,EAAK,WAAY,aACpB;AAAA,QACN,GAAGA;AAAA,QACH,SAASA,EAAK,QAAQT,CAAe;AAAA,MAAA,IAGhC;AAAA,QACN,GAAGS;AAAA,QACH,SAASA,EAAK,WAAW;AAAA,MAAA;AAAA,IAG5B;AAAA,EAAA;AAQD,MAAIG,IAAc;AAClB,MAAIjB,KAAiBkB,EAAStB,EAAM,KAAK,GAAG;AAC3C,QAAIkB,IAAsB;AAC1B,QAAIb,MAAmB;AAClB,MAAAL,EAAM,MAAM,MAAM,SACdkB,IAAAlB,EAAM,MAAM,MAAM;AAAA,SAEpB;AACN,YAAMuB,IAAc9B,EAAmBO,EAAM,MAAM,QAAQ;AAC3D,MAAIuB,MACIL,IAAAK;AAAA,IAET;AACc,IAAAF,IAAAH;AAAA,EACf;AAEA,MAAIG;AACQ,eAAAG,KAAYV,EAAc,OAAO;AAC3C,UAAIU,MAAaH;AAAa;AACxBI,YAAAA,IAAUN,EAAY,MAAMK,CAAQ;AAC1C,UAAI,CAACC,KAAW,CAACA,EAAQ,SAAS;AACnB,QAAAJ,IAAA;AACd;AAAA,MACD;AAAA,IACD;AAOK,QAAA;AAAA,IACL,OAAAK;AAAA,IACA,SAAAD;AAAA,IACA,UAAAE;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,IAAAC;AAAA,IACA,KAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,IACGC;AAAA,IACHzB;AAAA,IACAE,KAAe,OAAO,OAAOP,EAAc,KAAK,EAAE,CAAC,EAAE;AAAA,EAAA,GAGhDG,IAAMF,EAAS,MAAM,OAAO,KAAKD,EAAc,KAAK,EAAEgB,EAAM,KAAK,CAAC,GAKlEe,IAAQ;AAAA,IACb,IAAAd;AAAA,IACA,SAAAN;AAAA,IACA,MAAMhB;AAAA,IACN,KAAAuB;AAAA,IACA,UAAAC;AAAA,IACA,MAAAJ;AAAA,IACA,UAAAF;AAAA,IACA,cAAAC;AAAA,IACA,SAAAM;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,KAAAvB;AAAA,IACA,MAAAwB;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAjB;AAAA,EAAA;AAKD,MAFAoB,EAAQvD,IAAoBsD,CAAK,GAE7BzC;AACH,QAAIC,MAAmB;AAItB,MAAAM;AAAA,QACCM;AAAA,QACA,MAAM;AACL,UAAIK,EAASpB,CAAM,KAAKoB,EAAStB,EAAM,KAAK,KAC3CE,EAAO,KAAK;AAAA,YACX,GAAGF;AAAA,YACH,OAAO,EAAE,GAAGA,EAAM,MAAM,OAAO,MAAMiB,EAAI,SAAS,KAAK;AAAA,UAAA,CACvD;AAAA,QAEH;AAAA,QACA,EAAE,WAAW,GAAK;AAAA,MAAA,GAMnBN;AAAA,QACC;;AAAM,kBAAAf,IAAAI,EAAM,UAAN,gBAAAJ,EAAa,MAAM;AAAA;AAAA,QACzB,CAACmD,MAAU;AACV,cAAIA,GAAO;AACV,kBAAMC,IAAeD;AACjB,gBAAAC,KAAgBlC,EAAc,OAAO;AACxC,oBAAMmC,IAAYD,GACZE,IAAW,OAAO,KAAKpC,EAAc,KAAK;AAQhD,cAP2BoC,EAAS;AAAA,gBACnC;AAAA,gBACAA,EAAS,QAAQD,CAAS;AAAA,cAAA,EAES;AAAA,gBACnC,CAAChC,MAAAA;;AAAQ,0BAAArB,IAAAuB,EAAY,MAAMF,CAAG,MAArB,gBAAArB,EAAwB;AAAA;AAAA,cAAA,KAGjCiC,EAAKoB,CAAS;AAAA,YAEhB;AAAA,UAAA,OACM;AACN,kBAAMhC,IAAM,OAAO,KAAKS,CAAK,EAAE,CAAC;AAChC,YAAAG,EAAKZ,CAAG;AAAA,UACT;AAAA,QACD;AAAA,MAAA;AAAA,SAEK;AACA,YAAAM,IAAcR,EAAS,MAAM;AAC9B,YAAAO,EAAStB,EAAM,KAAK;AAChB,iBAAAP,EAAmBO,EAAM,MAAM,QAAQ;AAAA,MAExC,CACP;AAKD,MAAAW;AAAA,QACCM;AAAA,QACA,CAAC8B,MAAU;AACV,UAAIzB,EAAStB,EAAM,KAAK,KAAKsB,EAASpB,CAAM,MACvCF,EAAM,MAAM,KAAK,SAAS,MAAM,IACnCE,EAAO,KAAK;AAAA,YACX,OAAOF,EAAM,MAAM;AAAA,YACnB,MAAMA,EAAM,MAAM,KAAK,QAAQR,GAAgB,QAAQuD,CAAK,EAAE;AAAA,UAAA,CAC9D,IAED7C,EAAO,KAAK;AAAA,YACX,OAAOF,EAAM,MAAM;AAAA;AAAA,YAEnB,OAAOA,EAAM,MAAM,OAAO,SAAS+C,CAAK,IAAI,QAAQ,MAAM,GAAG;AAAA,YAC7D,SAAS;AAAA,UAAA,CACT;AAAA,QAGJ;AAAA,QACA,EAAE,WAAW,IAAM,OAAO,OAAO;AAAA,MAAA,GAMlCpC;AAAA,QACC,MAAMY,EAAY;AAAA,QAClB,CAACwB,MAAU;AACN,cAAAA,KAASA,MAAU9B,EAAI,OAAO;AACjC,kBAAM+B,IAAeD;AACjB,gBAAAC,KAAgBlC,EAAc,OAAO;AACxC,oBAAMmC,IAAYD,GACZE,IAAW,OAAO,KAAKpC,EAAc,KAAK;AAQhD,cAP2BoC,EAAS;AAAA,gBACnC;AAAA,gBACAA,EAAS,QAAQD,CAAS;AAAA,cAAA,EAES;AAAA,gBACnC,CAAChC,MAAAA;;AAAQ,0BAAArB,IAAAkB,EAAc,MAAMG,CAAG,MAAvB,gBAAArB,EAA0B;AAAA;AAAA,cAAA,KAGnCiC,EAAKoB,CAAS;AAAA,YAEhB;AAAA,UACD;AAAA,QACD;AAAA,MAAA;AAAA,IAEF;AAGM,SAAAJ;AACR;"}
|
|
1
|
+
{"version":3,"file":"index8.js","sources":["../src/composables/useWizard.ts"],"sourcesContent":["import { cloneDeep } from '@/utilities/functions/cloneDeep';\nimport { computed, provide, reactive, watch, toValue, onBeforeUnmount } from 'vue';\nimport { isNotNil } from '@/utilities/functions/isNotNil';\nimport { mapValues } from '@/utilities/functions/mapValues';\nimport { useRoute } from './useRoute';\nimport { useRouter } from './useRouter';\nimport { useStepper } from '@vueuse/core';\nimport type { ComputedRef, MaybeRef } from 'vue';\n\nexport const wizardInjectionKey = Symbol();\nexport type Step<U> = {\n\t/**\n\t * Function that accepts a state object and returns a boolean.\n\t * When step are accessed at the end of the pipeline the result\n\t * is provided so you don't have to run the function yourself.\n\t * It determines if the validation has passed for the step.\n\t */\n\tisValid?: (state: U) => boolean | boolean;\n\t/**\n\t * Function that accepts a state object and returns a boolean.\n\t * When step are accessed at the end of the pipeline the result\n\t * is provided so you don't have to run the function yourself.\n\t * Steps that do not pass the condition are removed.\n\t */\n\tcondition?: (state: U) => boolean;\n\t[key: string]: any;\n};\nexport type WizardState<T extends Record<string, any>> = ReturnType<\n\ttypeof useWizard<T>\n>;\n\nconst regexMatchStep =\n\t/((step\\/)(?<step>[\\s\\S]+?)(?=[/?]))|((step\\/)(?<step2>[\\s\\S]+))/;\n/**\n * With a url that follows the rule xyz.com/anything/step/:nameofthestep[/?query]\n * will match the :nameofthestep substring\n */\nconst extractStepFromUrl = (url: string) => {\n\tconst match = url.match(regexMatchStep);\n\treturn match?.groups?.step ?? match?.groups?.step2 ?? null;\n};\nexport const useWizard = <T extends object>(params: {\n\t/**\n\t * The steps definition for the wizard\n\t */\n\tsteps: MaybeRef<Record<string, Step<T>>>;\n\t/**\n\t * Name of the wizard used to persist state\n\t */\n\tname: string;\n\t/**\n\t * Initial set of data to be made available throughout\n\t */\n\tinitialState: T;\n\t/**\n\t * When navogation is enabled, to whether use the query parameters or an entire substring of the URL like xyz/steps/....\n\t * The latter useful with nuxt so you can leverage the automatic import of components based on the URL.\n\t */\n\tnavigationMode?: 'query' | 'route';\n\t/**\n\t * Whether to use navigation at all. When disabled no query or URL is changed.\n\t */\n\tuseNavigation?: boolean;\n\t/**\n\t *\n\t */\n\tpersist?: boolean;\n}) => {\n\tif (!params.name) {\n\t\tthrow new Error(\n\t\t\t'You need to provide a unique name for the current wizard instance to be used to save data'\n\t\t);\n\t}\n\tconst route = useRoute();\n\tconst router = useRouter();\n\n\tlet isUnmounting = false;\n\n\tconst useNavigation = params.useNavigation ?? true;\n\tconst navigationMode = params.navigationMode ?? 'query';\n\tconst persist = params.persist ?? true;\n\n\tif (useNavigation && (!route.value || !router)) {\n\t\tthrow new Error(\n\t\t\t'Navigation is enabled but could not retrieve the router instance in useWizard.'\n\t\t);\n\t}\n\tonBeforeUnmount(() => isUnmounting = true)\n\n\tconst initialStateCopy = cloneDeep(params.initialState);\n\t/**\n\t * Initial state is either read from session storage or the one provided\n\t */\n\tconst innerState = reactive<typeof params.initialState>(\n\t\tpersist && sessionStorage.getItem(params.name)\n\t\t\t? {\n\t\t\t\t\t...initialStateCopy,\n\t\t\t\t\t...JSON.parse(sessionStorage.getItem(params.name)!),\n\t\t\t\t}\n\t\t\t: initialStateCopy\n\t);\n\n\tif (persist) {\n\t\t/**\n\t\t * Every time the state changes save it to sessionStorage\n\t\t */\n\t\twatch(innerState, () => {\n\t\t\tsessionStorage.setItem(params.name, JSON.stringify(innerState));\n\t\t});\n\t}\n\n\t/**\n\t * Steps can be passed as ref so we need to unwrap them\n\t */\n\tconst unwrappedSteps = toValue(params.steps);\n\tconst filteredSteps = computed(() =>\n\t\tObject.entries(unwrappedSteps).reduce(\n\t\t\t(acc: typeof unwrappedSteps, [key, step]) => {\n\t\t\t\tif (step.condition) {\n\t\t\t\t\tif (!step.condition(innerState as T)) {\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tacc[key] = { ...step, key };\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t)\n\t);\n\n\t/**\n\t * Steps can have a isValid function that receives the current state\n\t * but we don't want to have to call it every single time so we call it once here\n\t */\n\tconst mappedSteps = computed(() =>\n\t\tmapValues(\n\t\t\tfilteredSteps.value,\n\t\t\t(step): Omit<Step<T>, 'isValid'> & { isValid: boolean } => {\n\t\t\t\tif (typeof step.isValid === 'function') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...step,\n\t\t\t\t\t\tisValid: step.isValid(innerState as T),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...step,\n\t\t\t\t\tisValid: step.isValid ?? true,\n\t\t\t\t};\n\t\t\t}\n\t\t)\n\t);\n\n\t/**\n\t * Get the initial step from the query.\n\t * If it exists check that every step before it is also valid\n\t * so user cannot manually jump by changing the URL\n\t */\n\tlet initialStep = null;\n\tif (useNavigation && isNotNil(route.value)) {\n\t\tlet step: string | null = null;\n\t\tif (navigationMode === 'query') {\n\t\t\tif (route.value.query.step) {\n\t\t\t\tstep = route.value.query.step as string;\n\t\t\t}\n\t\t} else {\n\t\t\tconst stepFromUrl = extractStepFromUrl(route.value.fullPath);\n\t\t\tif (stepFromUrl) {\n\t\t\t\tstep = stepFromUrl;\n\t\t\t}\n\t\t}\n\t\tinitialStep = step;\n\t}\n\n\tif (initialStep) {\n\t\tfor (const stepName in filteredSteps.value) {\n\t\t\tif (stepName === initialStep) break;\n\t\t\tconst current = mappedSteps.value[stepName];\n\t\t\tif (!current || !current.isValid) {\n\t\t\t\tinitialStep = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Define the state of the wizard\n\t * A few data come from useStepper\n\t */\n\tconst {\n\t\tsteps,\n\t\tcurrent,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoTo,\n\t\tindex,\n\t\tat,\n\t\tget,\n\t\tgoBackTo,\n\t\tisAfter,\n\t\tisBefore,\n\t\tisCurrent,\n\t\tisFirst,\n\t\tisLast,\n\t\tisNext,\n\t\tisPrevious,\n\t\tnext,\n\t\tprevious,\n\t\tstepNames,\n\t} = useStepper(\n\t\tmappedSteps,\n\t\tinitialStep || Object.values(filteredSteps.value)[0].key\n\t);\n\n\tconst key = computed(() => Object.keys(filteredSteps.value)[index.value]);\n\n\t/**\n\t * Complete state object\n\t */\n\tconst state = {\n\t\tat,\n\t\tcurrent: current as ComputedRef<Step<T> & { isValid: boolean }>,\n\t\tdata: innerState,\n\t\tget,\n\t\tgoBackTo,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tisAfter,\n\t\tisBefore,\n\t\tisCurrent,\n\t\tisFirst,\n\t\tisLast,\n\t\tisNext,\n\t\tisPrevious,\n\t\tkey,\n\t\tnext,\n\t\tprevious,\n\t\tstepNames,\n\t\tsteps,\n\t};\n\n\tprovide(wizardInjectionKey, state);\n\n\tif (useNavigation) {\n\t\tif (navigationMode === 'query') {\n\t\t\t/**\n\t\t\t * Every time the current step changes update route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\tkey,\n\t\t\t\t() => {\n\t\t\t\t\tif (isNotNil(router) && isNotNil(route.value)) {\n\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t...route,\n\t\t\t\t\t\t\tquery: { ...route.value.query, step: key.value ?? null },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ immediate: true }\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Every time the route changes align the current step to the route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\t() => route.value?.query.step,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tconst stepAsString = value as string;\n\t\t\t\t\t\tif (stepAsString in filteredSteps.value) {\n\t\t\t\t\t\t\tconst stepAsKey = stepAsString;\n\t\t\t\t\t\t\tconst stepKeys = Object.keys(filteredSteps.value);\n\t\t\t\t\t\t\tconst stepsPriorToTarget = stepKeys.slice(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstepKeys.indexOf(stepAsKey)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst allValid = stepsPriorToTarget.every(\n\t\t\t\t\t\t\t\t(key) => mappedSteps.value[key]?.isValid\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (allValid) {\n\t\t\t\t\t\t\t\tgoTo(stepAsKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst key = Object.keys(steps)[0];\n\t\t\t\t\t\tgoTo(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tconst stepFromUrl = computed(() => {\n\t\t\t\tif (isNotNil(route.value)) {\n\t\t\t\t\treturn extractStepFromUrl(route.value.fullPath);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t});\n\n\t\t\t/**\n\t\t\t * Every time the current step changes update route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\tkey,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (isNotNil(route.value) && isNotNil(router) && !isUnmounting) {\n\t\t\t\t\t\tif (route.value.path.includes('step')) {\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tquery: route.value.query,\n\t\t\t\t\t\t\t\tpath: route.value.path.replace(regexMatchStep, `step/${value}`),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tquery: route.value.query,\n\t\t\t\t\t\t\t\t// Normalizes paths with / and without\n\t\t\t\t\t\t\t\tpath: (route.value.path + `/step/${value}`).replace('//', '/'),\n\t\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ immediate: true, flush: 'post' }\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Every time the route changes align the current step to the route\n\t\t\t */\n\t\t\twatch(\n\t\t\t\t() => stepFromUrl.value,\n\t\t\t\t(value) => {\n\t\t\t\t\tif (value && value !== key.value) {\n\t\t\t\t\t\tconst stepAsString = value as string;\n\t\t\t\t\t\tif (stepAsString in filteredSteps.value) {\n\t\t\t\t\t\t\tconst stepAsKey = stepAsString;\n\t\t\t\t\t\t\tconst stepKeys = Object.keys(filteredSteps.value);\n\t\t\t\t\t\t\tconst stepsPriorToTarget = stepKeys.slice(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstepKeys.indexOf(stepAsKey)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst allValid = stepsPriorToTarget.every(\n\t\t\t\t\t\t\t\t(key) => filteredSteps.value[key]?.isValid\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (allValid) {\n\t\t\t\t\t\t\t\tgoTo(stepAsKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\treturn state;\n};\n"],"names":["wizardInjectionKey","regexMatchStep","extractStepFromUrl","url","match","_a","_b","useWizard","params","route","useRoute","router","useRouter","isUnmounting","useNavigation","navigationMode","persist","onBeforeUnmount","initialStateCopy","cloneDeep","innerState","reactive","watch","unwrappedSteps","toValue","filteredSteps","computed","acc","key","step","mappedSteps","mapValues","initialStep","isNotNil","stepFromUrl","stepName","current","steps","goToNext","goToPrevious","goTo","index","at","get","goBackTo","isAfter","isBefore","isCurrent","isFirst","isLast","isNext","isPrevious","next","previous","stepNames","useStepper","state","provide","value","stepAsString","stepAsKey","stepKeys"],"mappings":"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"}
|