@owp/core 2.5.15 → 2.5.17
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/components/OwpPicker/OwpTimePicker.js +147 -185
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js +184 -177
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +16 -21
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +237 -215
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +153 -0
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +301 -209
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +141 -127
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/constants/treeGrid.js +32 -26
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +9 -1
- package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +14 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +9 -1
- package/dist/types/constants/treeGrid.d.ts +3 -3
- package/dist/utils/treeGridUtil.js +81 -76
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,266 +1,273 @@
|
|
|
1
|
-
var
|
|
2
|
-
var s = (t,
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { OwpSelectorBase as
|
|
5
|
-
import { splitSelectorValue as
|
|
6
|
-
import { STORAGE_ACCESS_TOKEN_KEY as
|
|
7
|
-
import { useOwpAppContext as
|
|
8
|
-
import { useGetCurrentUser as
|
|
9
|
-
import { createJsonString as
|
|
10
|
-
import { getApiLanguageCode as
|
|
11
|
-
import { useQuery as
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
var Qt = Object.defineProperty;
|
|
2
|
+
var s = (t, n) => Qt(t, "name", { value: n, configurable: !0 });
|
|
3
|
+
import { jsx as wt } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { OwpSelectorBase as ht } from "../OwpSelectorBase/OwpSelectorBase.js";
|
|
5
|
+
import { splitSelectorValue as P, mergeSelectorOptions as Et } from "../OwpSelectorBase/utils/querySelectorUtils.js";
|
|
6
|
+
import { STORAGE_ACCESS_TOKEN_KEY as Lt } from "../../constants/localStorageKeys.js";
|
|
7
|
+
import { useOwpAppContext as Ct } from "../../contexts/OwpAppProvider.js";
|
|
8
|
+
import { useGetCurrentUser as It } from "../../hooks/useCurrentUser.js";
|
|
9
|
+
import { createJsonString as Bt } from "../../utils/createJsonString.js";
|
|
10
|
+
import { getApiLanguageCode as Nt } from "../../utils/language.js";
|
|
11
|
+
import { useQuery as y } from "@tanstack/react-query";
|
|
12
|
+
import { clsx as st } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
13
|
+
import { useState as B, useMemo as N, useEffect as j } from "react";
|
|
14
|
+
import { isArray as it } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
|
|
15
|
+
import { isPlainObject as jt } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js";
|
|
16
|
+
import { isFunction as at } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js";
|
|
17
|
+
const $t = "resultData", v = /* @__PURE__ */ s((t) => typeof t == "string" || typeof t == "number" ? `${t}` : "", "getQuerySelectorOptionLabelText"), Tt = /* @__PURE__ */ s((t) => ({
|
|
18
|
+
jsondata: Bt(t)
|
|
19
|
+
}), "defaultBuildRequestQuery"), ct = /* @__PURE__ */ s((t, n) => n != null && n.length ? [...t, n] : t, "appendQuerySelectorQueryKeyDeps"), G = /* @__PURE__ */ s((t) => {
|
|
19
20
|
if (t instanceof Date)
|
|
20
21
|
return t.toJSON();
|
|
21
22
|
if (typeof t == "bigint")
|
|
22
23
|
return t.toString();
|
|
23
|
-
if (
|
|
24
|
-
return t.map((
|
|
25
|
-
if (
|
|
26
|
-
return Object.keys(t).sort().reduce((
|
|
27
|
-
const
|
|
28
|
-
return
|
|
24
|
+
if (it(t))
|
|
25
|
+
return t.map((n) => G(n));
|
|
26
|
+
if (jt(t))
|
|
27
|
+
return Object.keys(t).sort().reduce((n, c) => {
|
|
28
|
+
const g = G(t[c]);
|
|
29
|
+
return g === void 0 || (n[c] = g), n;
|
|
29
30
|
}, {});
|
|
30
|
-
if (!(
|
|
31
|
+
if (!(at(t) || typeof t == "symbol"))
|
|
31
32
|
return t;
|
|
32
|
-
}, "normalizeQuerySelectorKeyValue"),
|
|
33
|
-
const
|
|
34
|
-
return Object.entries(
|
|
35
|
-
|
|
36
|
-
}),
|
|
37
|
-
}, "createQuerySelectorRequestUrl"),
|
|
33
|
+
}, "normalizeQuerySelectorKeyValue"), Vt = /* @__PURE__ */ s((t) => JSON.stringify(G(t)), "createQuerySelectorScopeKey"), Mt = /* @__PURE__ */ s((t, n, c, g) => {
|
|
34
|
+
const C = new URL(t.endsWith("/") ? t : `${t}/`), f = new URL(n.startsWith("/") ? n.slice(1) : n, C);
|
|
35
|
+
return Object.entries(c).forEach(([l, u]) => {
|
|
36
|
+
u != null && f.searchParams.set(l, typeof u == "string" ? u : JSON.stringify(u));
|
|
37
|
+
}), g && f.searchParams.set("TOKEN", g), f.searchParams.set("i18nextLng", Nt()), f.toString();
|
|
38
|
+
}, "createQuerySelectorRequestUrl"), _t = /* @__PURE__ */ s((t, n) => {
|
|
38
39
|
if (!t || typeof t != "object")
|
|
39
40
|
return [];
|
|
40
|
-
const
|
|
41
|
-
return
|
|
42
|
-
}, "getQuerySelectorResponseList"),
|
|
43
|
-
const
|
|
44
|
-
return
|
|
45
|
-
label:
|
|
46
|
-
raw:
|
|
47
|
-
value:
|
|
41
|
+
const c = t[n];
|
|
42
|
+
return it(c) ? c : [];
|
|
43
|
+
}, "getQuerySelectorResponseList"), Rt = /* @__PURE__ */ s((t, n, c) => `${(c ? c(t) : `${(t == null ? void 0 : t[n ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorValue"), Jt = /* @__PURE__ */ s((t, n, c) => `${(c ? c(t) : `${(t == null ? void 0 : t[n ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorLabel"), zt = /* @__PURE__ */ s((t, n, c, g, C) => t.map((f) => {
|
|
44
|
+
const l = Rt(f, n, g);
|
|
45
|
+
return l ? {
|
|
46
|
+
label: Jt(f, c, C),
|
|
47
|
+
raw: f,
|
|
48
|
+
value: l
|
|
48
49
|
} : null;
|
|
49
|
-
}).filter((
|
|
50
|
+
}).filter((f) => f != null), "mapQuerySelectorOptions"), Pt = /* @__PURE__ */ s(({
|
|
50
51
|
apiUrl: t,
|
|
51
|
-
asyncSearch:
|
|
52
|
-
buildRequestQuery:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
asyncSearch: n,
|
|
53
|
+
buildRequestQuery: c = Tt,
|
|
54
|
+
className: g,
|
|
55
|
+
disableAllValueItem: C,
|
|
56
|
+
filterOptions: f,
|
|
57
|
+
multiple: l,
|
|
58
|
+
query: u,
|
|
59
|
+
queryKeyDeps: $,
|
|
60
|
+
responseListKey: Q = $t,
|
|
61
|
+
selectorType: T = "select",
|
|
62
|
+
value: b,
|
|
63
|
+
valueKey: w,
|
|
64
|
+
valueResolver: ut,
|
|
65
|
+
labelKey: h,
|
|
66
|
+
labelResolver: ft,
|
|
67
|
+
onChange: W,
|
|
68
|
+
defaultValue: V,
|
|
69
|
+
textFieldProps: m,
|
|
70
|
+
...lt
|
|
69
71
|
}) => {
|
|
70
|
-
const { env:
|
|
71
|
-
|
|
72
|
-
[t,
|
|
72
|
+
const { env: Y } = Ct(), H = It(), I = `${(Y == null ? void 0 : Y.apiBaseUrl) ?? ""}`.trim(), mt = `${(H == null ? void 0 : H.token) ?? localStorage.getItem(Lt) ?? ""}`.trim(), e = T === "autocomplete" ? n : void 0, i = e != null, tt = i ? !0 : C, dt = (e == null ? void 0 : e.minLength) ?? 1, ot = (e == null ? void 0 : e.debounceMs) ?? 300, [U, X] = B(b ?? V ?? ""), [gt, p] = B(""), [nt, M] = B(""), [Z, _] = B(""), et = $ != null && $.length ? G($) : void 0, S = Vt(
|
|
73
|
+
ct(
|
|
74
|
+
[t, u, Q, w, h],
|
|
73
75
|
et
|
|
74
76
|
)
|
|
75
|
-
), [
|
|
77
|
+
), [R, pt] = B(() => ({
|
|
76
78
|
options: {},
|
|
77
|
-
scopeKey:
|
|
78
|
-
})),
|
|
79
|
-
() =>
|
|
80
|
-
[
|
|
81
|
-
),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}, [
|
|
85
|
-
|
|
86
|
-
}, [
|
|
87
|
-
if (!
|
|
79
|
+
scopeKey: S
|
|
80
|
+
})), rt = N(
|
|
81
|
+
() => R.scopeKey === S ? R.options : {},
|
|
82
|
+
[R.options, R.scopeKey, S]
|
|
83
|
+
), E = N(() => P(U), [U]), A = i && Z.trim().length >= dt, J = /* @__PURE__ */ s((...o) => ct(["owp", "query-selector", ...o], et), "createSelectorQueryKey");
|
|
84
|
+
j(() => {
|
|
85
|
+
b !== void 0 && X(b);
|
|
86
|
+
}, [b]), j(() => {
|
|
87
|
+
b === void 0 && X(V ?? "");
|
|
88
|
+
}, [V, b]), j(() => {
|
|
89
|
+
if (!i)
|
|
88
90
|
return;
|
|
89
91
|
const o = window.setTimeout(() => {
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
+
_(nt.trim());
|
|
93
|
+
}, ot);
|
|
92
94
|
return () => {
|
|
93
95
|
window.clearTimeout(o);
|
|
94
96
|
};
|
|
95
|
-
}, [
|
|
96
|
-
const
|
|
97
|
+
}, [ot, i, nt]);
|
|
98
|
+
const z = /* @__PURE__ */ s(async (o) => {
|
|
97
99
|
const r = await fetch(
|
|
98
|
-
|
|
100
|
+
Mt(I, t, c(o), mt)
|
|
99
101
|
), a = await r.json();
|
|
100
102
|
if (!r.ok || (a == null ? void 0 : a.resultCode) === "STATUS_0")
|
|
101
103
|
throw new Error(`${(a == null ? void 0 : a.resultMessage) ?? "Failed to fetch selector options"}`);
|
|
102
|
-
const
|
|
103
|
-
return
|
|
104
|
-
|
|
105
|
-
h,
|
|
104
|
+
const d = _t(a, Q), O = at(f) ? f(d) : d;
|
|
105
|
+
return zt(
|
|
106
|
+
O,
|
|
106
107
|
w,
|
|
107
|
-
|
|
108
|
-
ut
|
|
108
|
+
h,
|
|
109
|
+
ut,
|
|
110
|
+
ft
|
|
109
111
|
);
|
|
110
|
-
}, "fetchOptions"),
|
|
111
|
-
queryKey:
|
|
112
|
-
enabled: !!
|
|
113
|
-
queryFn: /* @__PURE__ */ s(() =>
|
|
114
|
-
}),
|
|
115
|
-
queryKey:
|
|
112
|
+
}, "fetchOptions"), K = y({
|
|
113
|
+
queryKey: J(t, u, Q, w, h),
|
|
114
|
+
enabled: !!I && !i,
|
|
115
|
+
queryFn: /* @__PURE__ */ s(() => z(u), "queryFn")
|
|
116
|
+
}), D = y({
|
|
117
|
+
queryKey: J(
|
|
116
118
|
"search",
|
|
117
119
|
t,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
u,
|
|
121
|
+
Z,
|
|
120
122
|
Q,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
+
w,
|
|
124
|
+
h
|
|
123
125
|
),
|
|
124
|
-
enabled: !!
|
|
125
|
-
queryFn: /* @__PURE__ */ s(() =>
|
|
126
|
-
...
|
|
127
|
-
...(
|
|
126
|
+
enabled: !!I && i && A,
|
|
127
|
+
queryFn: /* @__PURE__ */ s(() => z({
|
|
128
|
+
...u,
|
|
129
|
+
...(e == null ? void 0 : e.buildKeywordQuery(Z)) ?? {}
|
|
128
130
|
}), "queryFn")
|
|
129
|
-
}),
|
|
130
|
-
queryKey:
|
|
131
|
+
}), q = y({
|
|
132
|
+
queryKey: J(
|
|
131
133
|
"all",
|
|
132
134
|
t,
|
|
133
|
-
|
|
135
|
+
u,
|
|
134
136
|
Q,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
w,
|
|
138
|
+
h
|
|
137
139
|
),
|
|
138
|
-
enabled: !!
|
|
140
|
+
enabled: !!I && i && (!!E.length || !!l && !tt),
|
|
139
141
|
queryFn: /* @__PURE__ */ s(() => {
|
|
140
142
|
var o;
|
|
141
|
-
return
|
|
142
|
-
...
|
|
143
|
-
...((o =
|
|
143
|
+
return z({
|
|
144
|
+
...u,
|
|
145
|
+
...((o = e == null ? void 0 : e.buildAllQuery) == null ? void 0 : o.call(e)) ?? {}
|
|
144
146
|
});
|
|
145
147
|
}, "queryFn")
|
|
146
|
-
}),
|
|
147
|
-
queryKey:
|
|
148
|
+
}), x = y({
|
|
149
|
+
queryKey: J(
|
|
148
150
|
"selected",
|
|
149
151
|
t,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
u,
|
|
153
|
+
E,
|
|
152
154
|
Q,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
+
w,
|
|
156
|
+
h
|
|
155
157
|
),
|
|
156
|
-
enabled: !!
|
|
158
|
+
enabled: !!I && i && !!E.length && !!(e != null && e.buildSelectedQuery),
|
|
157
159
|
queryFn: /* @__PURE__ */ s(() => {
|
|
158
160
|
var o;
|
|
159
|
-
return
|
|
160
|
-
...
|
|
161
|
-
...((o =
|
|
161
|
+
return z({
|
|
162
|
+
...u,
|
|
163
|
+
...((o = e == null ? void 0 : e.buildSelectedQuery) == null ? void 0 : o.call(e, E)) ?? {}
|
|
162
164
|
});
|
|
163
165
|
}, "queryFn")
|
|
164
|
-
}),
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
]),
|
|
170
|
-
() =>
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
Object.values(
|
|
166
|
+
}), F = N(() => i ? A ? D.data ?? [] : [] : K.data ?? [], [
|
|
167
|
+
K.data,
|
|
168
|
+
i,
|
|
169
|
+
D.data,
|
|
170
|
+
A
|
|
171
|
+
]), L = N(
|
|
172
|
+
() => Et(
|
|
173
|
+
F,
|
|
174
|
+
q.data,
|
|
175
|
+
x.data,
|
|
176
|
+
Object.values(rt)
|
|
175
177
|
),
|
|
176
|
-
[
|
|
177
|
-
),
|
|
178
|
+
[q.data, rt, F, x.data]
|
|
179
|
+
), k = N(
|
|
178
180
|
() => {
|
|
179
181
|
const o = {};
|
|
180
|
-
return
|
|
182
|
+
return L.forEach((r) => {
|
|
181
183
|
o[r.value] = r;
|
|
182
184
|
}), o;
|
|
183
185
|
},
|
|
184
|
-
[
|
|
185
|
-
),
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
186
|
+
[L]
|
|
187
|
+
), Ot = K.isLoading || D.isLoading || q.isLoading || x.isLoading, bt = st(T === "autocomplete" && "!min-w-160", g), St = st(
|
|
188
|
+
T === "autocomplete" && !(m != null && m.className) && "w-full",
|
|
189
|
+
m == null ? void 0 : m.className
|
|
190
|
+
);
|
|
191
|
+
return j(() => {
|
|
192
|
+
L.length && pt((o) => {
|
|
193
|
+
const r = o.scopeKey === S ? o.options : {}, a = { ...r };
|
|
194
|
+
let d = !1;
|
|
195
|
+
return L.forEach((O) => {
|
|
196
|
+
a[O.value] !== O && (a[O.value] = O, d = !0);
|
|
197
|
+
}), !d && o.scopeKey === S ? o : {
|
|
198
|
+
options: d ? a : r,
|
|
199
|
+
scopeKey: S
|
|
195
200
|
};
|
|
196
201
|
});
|
|
197
|
-
}, [
|
|
202
|
+
}, [S, L]), j(() => {
|
|
198
203
|
var r;
|
|
199
|
-
if (!
|
|
204
|
+
if (!i)
|
|
200
205
|
return;
|
|
201
|
-
if (
|
|
206
|
+
if (l) {
|
|
202
207
|
p("");
|
|
203
208
|
return;
|
|
204
209
|
}
|
|
205
|
-
const o =
|
|
210
|
+
const o = E[0];
|
|
206
211
|
if (!o) {
|
|
207
212
|
p("");
|
|
208
213
|
return;
|
|
209
214
|
}
|
|
210
|
-
p(
|
|
211
|
-
}, [
|
|
212
|
-
|
|
215
|
+
p(v(((r = k[o]) == null ? void 0 : r.label) ?? ""));
|
|
216
|
+
}, [i, l, k, E]), /* @__PURE__ */ wt(
|
|
217
|
+
ht,
|
|
213
218
|
{
|
|
214
|
-
...
|
|
215
|
-
allOptions:
|
|
219
|
+
...lt,
|
|
220
|
+
allOptions: L,
|
|
216
221
|
allValueMode: "joined",
|
|
217
|
-
autocompleteInputValue:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
autocompleteInputValue: i ? gt : void 0,
|
|
223
|
+
className: bt,
|
|
224
|
+
defaultValue: V,
|
|
225
|
+
disableAllValueItem: tt,
|
|
226
|
+
disableClientFilter: i,
|
|
227
|
+
loading: Ot,
|
|
228
|
+
multiple: l,
|
|
229
|
+
onAutocompleteInputChange: i ? (o, r) => {
|
|
230
|
+
r !== "reset" && (l && r !== "input" || (p(o), M(o)));
|
|
225
231
|
} : void 0,
|
|
226
232
|
onChange: /* @__PURE__ */ s((o) => {
|
|
227
233
|
var r;
|
|
228
|
-
if (
|
|
229
|
-
const a =
|
|
230
|
-
if (
|
|
231
|
-
p(""),
|
|
234
|
+
if (X(o.target.value), i) {
|
|
235
|
+
const a = P(o.target.value);
|
|
236
|
+
if (l)
|
|
237
|
+
p(""), M(""), _("");
|
|
232
238
|
else {
|
|
233
|
-
const
|
|
234
|
-
p(
|
|
239
|
+
const d = a[0], O = d ? v(((r = k[d]) == null ? void 0 : r.label) ?? "") : "";
|
|
240
|
+
p(O), M(""), _("");
|
|
235
241
|
}
|
|
236
242
|
}
|
|
237
|
-
|
|
243
|
+
W == null || W(o);
|
|
238
244
|
}, "onChange"),
|
|
239
|
-
options:
|
|
240
|
-
selectorType:
|
|
245
|
+
options: F,
|
|
246
|
+
selectorType: T,
|
|
241
247
|
textFieldProps: {
|
|
242
|
-
...
|
|
248
|
+
...m,
|
|
249
|
+
className: St,
|
|
243
250
|
onBlur: /* @__PURE__ */ s((o) => {
|
|
244
251
|
var r, a;
|
|
245
|
-
if (
|
|
246
|
-
if (
|
|
252
|
+
if (i) {
|
|
253
|
+
if (l)
|
|
247
254
|
p("");
|
|
248
255
|
else {
|
|
249
|
-
const
|
|
256
|
+
const d = P(U)[0];
|
|
250
257
|
p(
|
|
251
|
-
|
|
258
|
+
d ? v(((r = k[d]) == null ? void 0 : r.label) ?? "") : ""
|
|
252
259
|
);
|
|
253
260
|
}
|
|
254
|
-
|
|
261
|
+
M(""), _("");
|
|
255
262
|
}
|
|
256
|
-
(a =
|
|
263
|
+
(a = m == null ? void 0 : m.onBlur) == null || a.call(m, o);
|
|
257
264
|
}, "onBlur")
|
|
258
265
|
},
|
|
259
|
-
value:
|
|
266
|
+
value: b
|
|
260
267
|
}
|
|
261
268
|
);
|
|
262
269
|
}, "OwpQuerySelector");
|
|
263
270
|
export {
|
|
264
|
-
|
|
271
|
+
Pt as OwpQuerySelector
|
|
265
272
|
};
|
|
266
273
|
//# sourceMappingURL=OwpQuerySelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n disableAllValueItem,\n filterOptions,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedDisableAllValueItem = isAsyncSearchEnabled ? true : disableAllValueItem;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const shouldFetchSearchOptions = isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n isAsyncSearchEnabled &&\n (Boolean(selectedIds.length) || (Boolean(multiple) && !resolvedDisableAllValueItem)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n selectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && Boolean(selectedIds.length) && Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(selectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () =>\n mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n ),\n [allOptionsQuery.data, cachedOptions, currentOptions, selectedOptionsQuery.data],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading;\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = selectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, selectedIds]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={isAsyncSearchEnabled ? autocompleteInputValue : undefined}\n defaultValue={defaultValue}\n disableAllValueItem={resolvedDisableAllValueItem}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n textFieldProps={{\n ...textFieldProps,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","disableAllValueItem","filterOptions","multiple","selectorType","onChange","defaultValue","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedDisableAllValueItem","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAMA,KAA4B,cAM5BC,IAAkC,gBAAAC,EAAA,CAACC,MAChC,OAAOA,KAAU,YAAY,OAAOA,KAAU,WAAW,GAAGA,CAAK,KAAK,IADvC,oCAQlCC,KAA2B,gBAAAF,EAAA,CAACG,OACzB;AAAA,EACL,UAAUC,GAAiBD,CAAK;AAAA,IAFH,6BAW3BE,KAAkC,gBAAAL,EAAA,CACtCM,GACAC,MAEOA,KAAA,QAAAA,EAAc,SAAS,CAAC,GAAGD,GAAUC,CAAY,IAAID,GAJtB,oCAWlCE,IAAiC,gBAAAR,EAAA,CAACS,MAA4B;AAClE,MAAIA,aAAiB;AACnB,WAAOA,EAAM,OAAA;AAGf,MAAI,OAAOA,KAAU;AACnB,WAAOA,EAAM,SAAA;AAGf,MAAIC,GAAQD,CAAK;AACf,WAAOA,EAAM,IAAI,CAACE,MAASH,EAA+BG,CAAI,CAAC;AAGjE,MAAIC,GAAcH,CAAK;AACrB,WAAO,OAAO,KAAKA,CAAgC,EAChD,OACA,OAAgC,CAACI,GAAQC,MAAQ;AAChD,YAAMC,IAAkBP,EAAgCC,EAAkCK,CAAG,CAAC;AAE9F,aAAIC,MAAoB,WAIxBF,EAAOC,CAAG,IAAIC,IAEPF;AAAA,IACT,GAAG,CAAA,CAAE;AAGT,MAAI,EAAAG,GAAWP,CAAK,KAAK,OAAOA,KAAU;AAI1C,WAAOA;AACT,GAlCuC,mCAwCjCQ,KAA8B,gBAAAjB,EAAA,CAACS,MAC5B,KAAK,UAAUD,EAA+BC,CAAK,CAAC,GADzB,gCAW9BS,KAAgC,gBAAAlB,EAAA,CACpCmB,GACAC,GACAC,GACAC,MACG;AACH,QAAMC,IAAU,IAAI,IAAIJ,EAAW,SAAS,GAAG,IAAIA,IAAa,GAAGA,CAAU,GAAG,GAC1EK,IAAa,IAAI,IAAIJ,EAAO,WAAW,GAAG,IAAIA,EAAO,MAAM,CAAC,IAAIA,GAAQG,CAAO;AAErF,gBAAO,QAAQF,CAAY,EAAE,QAAQ,CAAC,CAACP,GAAKL,CAAK,MAAM;AACrD,IAAIA,KAAS,QAIbe,EAAW,aAAa,IAAIV,GAAK,OAAOL,KAAU,WAAWA,IAAQ,KAAK,UAAUA,CAAK,CAAC;AAAA,EAC5F,CAAC,GAEGa,KACFE,EAAW,aAAa,IAAI,SAASF,CAAW,GAGlDE,EAAW,aAAa,IAAI,cAAcC,GAAA,CAAoB,GAEvDD,EAAW,SAAA;AACpB,GAxBsC,kCA+BhCE,KAA+B,gBAAA1B,EAAA,CAAC2B,GAAeC,MAA4B;AAC/E,MAAI,CAACD,KAAQ,OAAOA,KAAS;AAC3B,WAAO,CAAA;AAGT,QAAME,IAAgBF,EAAiCC,CAAe;AAEtE,SAAOlB,GAAQmB,CAAY,IAAKA,IAA6C,CAAA;AAC/E,GARqC,iCAgB/BC,KAA4B,gBAAA9B,EAAA,CAChCW,GACAoB,GACAC,MAIO,IAFOA,IAAgBA,EAAcrB,CAAI,IAAI,IAAGA,KAAA,gBAAAA,EAAOoB,KAAY,QAAO,EAAE,OAEhE,EAAE,GAAG,KAAA,GAPQ,8BAgB5BE,KAA4B,gBAAAjC,EAAA,CAChCW,GACAuB,GACAC,MAIO,IAFOA,IAAgBA,EAAcxB,CAAI,IAAI,IAAGA,KAAA,gBAAAA,EAAOuB,KAAY,QAAO,EAAE,OAEhE,EAAE,GAAG,KAAA,GAPQ,8BAkB5BE,KAA0B,gBAAApC,EAAA,CAC9BqC,GACAN,GACAG,GACAF,GACAG,MAEOE,EACJ,IAAI,CAAC1B,MAAS;AACb,QAAMF,IAAQqB,GAA0BnB,GAAMoB,GAAUC,CAAa;AAErE,SAAKvB,IAIE;AAAA,IACL,OAAOwB,GAA0BtB,GAAMuB,GAAUC,CAAa;AAAA,IAC9D,KAAKxB;AAAA,IACL,OAAAF;AAAA,EAAA,IANO;AAQX,CAAC,EACA,OAAO,CAAC6B,MAAqEA,KAAU,IAAI,GArBhE,4BA4BnBC,KAAmB,gBAAAvC,EAAA,CAAC;AAAA,EAC/B,QAAAoB;AAAA,EACA,aAAAoB;AAAA,EACA,mBAAAC,IAAoBvC;AAAA,EACpB,qBAAAwC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAzC;AAAA,EACA,cAAAI;AAAA,EACA,iBAAAqB,IAAkB9B;AAAA,EAClB,cAAA+C,IAAe;AAAA,EACf,OAAApC;AAAA,EACA,UAAAsB;AAAA,EACA,eAAAC;AAAA,EACA,UAAAE;AAAA,EACA,eAAAC;AAAA,EACA,UAAAW;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAM,EAAE,KAAAC,EAAA,IAAQC,GAAA,GACVC,IAAcC,GAAA,GACdlC,IAAa,IAAG+B,KAAA,gBAAAA,EAAK,eAAc,EAAE,GAAG,KAAA,GACxC5B,KAAc,IAAG8B,KAAA,gBAAAA,EAAa,UAAS,aAAa,QAAQE,EAAwB,KAAK,EAAE,GAAG,KAAA,GAC9FC,IAAsBV,MAAiB,iBAAiBL,IAAc,QACtEgB,IAAuBD,KAAuB,MAC9CE,IAA8BD,IAAuB,KAAOd,GAC5DgB,MAAYH,KAAA,gBAAAA,EAAqB,cAAa,GAC9CI,MAAaJ,KAAA,gBAAAA,EAAqB,eAAc,KAChD,CAACK,GAAuBC,CAAwB,IAAIC,EAASrD,KAASsC,KAAgB,EAAE,GACxF,CAACgB,IAAwBC,CAAyB,IAAIF,EAAS,EAAE,GACjE,CAACG,IAAeC,CAAgB,IAAIJ,EAAS,EAAE,GAC/C,CAACK,GAAwBC,CAAyB,IAAIN,EAAS,EAAE,GACjEO,KACJ9D,KAAA,QAAAA,EAAc,SAAUC,EAA+BD,CAAY,IAA2B,QAC1F+D,IAAuBrD;AAAA,IAC3BZ;AAAA,MACE,CAACe,GAAQjB,GAAOyB,GAAiBG,GAAUG,CAAQ;AAAA,MACnDmC;AAAA,IAAA;AAAA,EACF,GAEI,CAACE,GAAoBC,EAAqB,IAAIV,EAAS,OAAO;AAAA,IAClE,SAAS,CAAA;AAAA,IACT,UAAUQ;AAAA,EAAA,EACV,GACIG,KAAgBC;AAAA,IACpB,MAAOH,EAAmB,aAAaD,IAAuBC,EAAmB,UAAU,CAAA;AAAA,IAC3F,CAACA,EAAmB,SAASA,EAAmB,UAAUD,CAAoB;AAAA,EAAA,GAE1EK,IAAcD,EAAQ,MAAME,EAAmBhB,CAAqB,GAAG,CAACA,CAAqB,CAAC,GAC9FiB,IAA2BrB,KAAwBW,EAAuB,KAAA,EAAO,UAAUT,IAC3FoB,IAAyB,gBAAA9E,EAAA,IAAI+E,MAC1B1E,GAAgC,CAAC,OAAO,kBAAkB,GAAG0E,CAAQ,GAAGV,EAAsB,GADxE;AAI/B,EAAAW,EAAU,MAAM;AACd,IAAIvE,MAAU,UAIdoD,EAAyBpD,CAAK;AAAA,EAChC,GAAG,CAACA,CAAK,CAAC,GAEVuE,EAAU,MAAM;AACd,IAAIvE,MAAU,UAIdoD,EAAyBd,KAAgB,EAAE;AAAA,EAC7C,GAAG,CAACA,GAActC,CAAK,CAAC,GAExBuE,EAAU,MAAM;AACd,QAAI,CAACxB;AACH;AAGF,UAAMyB,IAAQ,OAAO,WAAW,MAAM;AACpC,MAAAb,EAA0BH,GAAc,MAAM;AAAA,IAChD,GAAGN,EAAU;AAEb,WAAO,MAAM;AACX,aAAO,aAAasB,CAAK;AAAA,IAC3B;AAAA,EACF,GAAG,CAACtB,IAAYH,GAAsBS,EAAa,CAAC;AAEpD,QAAMiB,IAAe,gBAAAlF,EAAA,OAAOmF,MAAuC;AACjE,UAAMC,IAAW,MAAM;AAAA,MACrBlE,GAA8BC,GAAYC,GAAQqB,EAAkB0C,CAAS,GAAG7D,EAAW;AAAA,IAAA,GAEvFK,IAAQ,MAAMyD,EAAS,KAAA;AAE7B,QAAI,CAACA,EAAS,OAAMzD,KAAA,gBAAAA,EAAM,gBAAe;AACvC,YAAM,IAAI,MAAM,IAAGA,KAAA,gBAAAA,EAAM,kBAAiB,kCAAkC,EAAE;AAGhF,UAAME,IAAeH,GAA6BC,GAAMC,CAAe,GACjEyD,IAAgBrE,GAAW2B,CAAa,IAAIA,EAAcd,CAAY,IAAIA;AAEhF,WAAOO;AAAA,MACLiD;AAAA,MACAtD;AAAA,MACAG;AAAA,MACAF;AAAA,MACAG;AAAA,IAAA;AAAA,EAEJ,GApBqB,iBAsBfmD,IAAmBC,EAAS;AAAA,IAChC,UAAUT,EAAuB1D,GAAQjB,GAAOyB,GAAiBG,GAAUG,CAAQ;AAAA,IACnF,SAAS,EAAQf,KAAe,CAACqC;AAAA,IACjC,SAAS,gBAAAxD,EAAA,MAAMkF,EAAa/E,CAAK,GAAxB;AAAA,EAAwB,CAClC,GACKqF,IAAqBD,EAAS;AAAA,IAClC,UAAUT;AAAA,MACR;AAAA,MACA1D;AAAA,MACAjB;AAAA,MACAgE;AAAA,MACAvC;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SAAS,EAAQf,KAAeqC,KAAwBqB;AAAA,IACxD,SAAS,gBAAA7E,EAAA,MACPkF,EAAa;AAAA,MACX,GAAG/E;AAAA,MACH,IAAIoD,KAAA,gBAAAA,EAAqB,kBAAkBY,OAA2B,CAAA;AAAA,IAAC,CACxE,GAJM;AAAA,EAIN,CACJ,GACKsB,IAAkBF,EAAS;AAAA,IAC/B,UAAUT;AAAA,MACR;AAAA,MACA1D;AAAA,MACAjB;AAAA,MACAyB;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SACE,EAAQf,KACRqC,MACC,EAAQmB,EAAY,UAAY,EAAQ/B,KAAa,CAACa;AAAA,IACzD,SAAS,gBAAAzD,EAAA,MAAA;;AACP,aAAAkF,EAAa;AAAA,QACX,GAAG/E;AAAA,QACH,KAAIuF,IAAAnC,KAAA,gBAAAA,EAAqB,kBAArB,gBAAAmC,EAAA,KAAAnC,OAA0C,CAAA;AAAA,MAAC,CAChD;AAAA,OAJM;AAAA,EAIN,CACJ,GACKoC,IAAuBJ,EAAS;AAAA,IACpC,UAAUT;AAAA,MACR;AAAA,MACA1D;AAAA,MACAjB;AAAA,MACAwE;AAAA,MACA/C;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SAAS,EAAQf,KAAeqC,KAAwB,EAAQmB,EAAY,UAAW,GAAQpB,KAAA,QAAAA,EAAqB;AAAA,IACpH,SAAS,gBAAAvD,EAAA,MAAA;;AACP,aAAAkF,EAAa;AAAA,QACX,GAAG/E;AAAA,QACH,KAAIuF,IAAAnC,KAAA,gBAAAA,EAAqB,uBAArB,gBAAAmC,EAAA,KAAAnC,GAA0CoB,OAAgB,CAAA;AAAA,MAAC,CAChE;AAAA,OAJM;AAAA,EAIN,CACJ,GAEKiB,IAAiBlB,EAAQ,MACzBlB,IACKqB,IAA4BW,EAAmB,QAAQ,CAAA,IAAM,CAAA,IAG/DF,EAAiB,QAAQ,CAAA,GAC/B;AAAA,IACDA,EAAiB;AAAA,IACjB9B;AAAA,IACAgC,EAAmB;AAAA,IACnBX;AAAA,EAAA,CACD,GACKgB,IAAqBnB;AAAA,IACzB,MACEoB;AAAA,MACEF;AAAA,MACAH,EAAgB;AAAA,MAChBE,EAAqB;AAAA,MACrB,OAAO,OAAOlB,EAAa;AAAA,IAAA;AAAA,IAE/B,CAACgB,EAAgB,MAAMhB,IAAemB,GAAgBD,EAAqB,IAAI;AAAA,EAAA,GAE3EI,IAAYrB;AAAA,IAChB,MAAM;AACJ,YAAMsB,IAAgF,CAAA;AAEtF,aAAAH,EAAmB,QAAQ,CAACvD,MAAW;AACrC,QAAA0D,EAAc1D,EAAO,KAAK,IAAIA;AAAA,MAChC,CAAC,GAEM0D;AAAA,IACT;AAAA,IACA,CAACH,CAAkB;AAAA,EAAA,GAEfI,KACJX,EAAiB,aACjBE,EAAmB,aACnBC,EAAgB,aAChBE,EAAqB;AAEvB,SAAAX,EAAU,MAAM;AACd,IAAKa,EAAmB,UAIxBrB,GAAsB,CAAC0B,MAAkB;AACvC,YAAMC,IACJD,EAAc,aAAa5B,IAAuB4B,EAAc,UAAU,CAAA,GACtEE,IAAoB,EAAE,GAAGD,EAAA;AAC/B,UAAIE,IAAa;AAWjB,aATAR,EAAmB,QAAQ,CAACvD,MAAW;AACrC,QAAI8D,EAAkB9D,EAAO,KAAK,MAAMA,MAIxC8D,EAAkB9D,EAAO,KAAK,IAAIA,GAClC+D,IAAa;AAAA,MACf,CAAC,GAEG,CAACA,KAAcH,EAAc,aAAa5B,IACrC4B,IAGF;AAAA,QACL,SAASG,IAAaD,IAAoBD;AAAA,QAC1C,UAAU7B;AAAA,MAAA;AAAA,IAEd,CAAC;AAAA,EACH,GAAG,CAACA,GAAsBuB,CAAkB,CAAC,GAE7Cb,EAAU,MAAM;;AACd,QAAI,CAACxB;AACH;AAGF,QAAIZ,GAAU;AACZ,MAAAoB,EAA0B,EAAE;AAC5B;AAAA,IACF;AAEA,UAAMsC,IAAa3B,EAAY,CAAC;AAEhC,QAAI,CAAC2B,GAAY;AACf,MAAAtC,EAA0B,EAAE;AAC5B;AAAA,IACF;AAEA,IAAAA,EAA0BjE,IAAgC2F,IAAAK,EAAUO,CAAU,MAApB,gBAAAZ,EAAuB,UAAS,EAAE,CAAC;AAAA,EAC/F,GAAG,CAAClC,GAAsBZ,GAAUmD,GAAWpB,CAAW,CAAC,GAGzD,gBAAA4B;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGvD;AAAA,MACJ,YAAY4C;AAAA,MACZ,cAAa;AAAA,MACb,wBAAwBrC,IAAuBO,KAAyB;AAAA,MACxE,cAAAhB;AAAA,MACA,qBAAqBU;AAAA,MACrB,qBAAqBD;AAAA,MACrB,SAASyC;AAAA,MACT,UAAArD;AAAA,MACA,2BACEY,IACI,CAACiD,GAAgBC,MAAW;AAC1B,QAAIA,MAAW,YAIX9D,KAAY8D,MAAW,YAI3B1C,EAA0ByC,CAAc,GACxCvC,EAAiBuC,CAAc;AAAA,MACjC,IACA;AAAA,MAEN,UAAU,gBAAAzG,EAAA,CAAC2G,MAAU;;AAGnB,YAFA9C,EAAyB8C,EAAM,OAAO,KAAK,GAEvCnD,GAAsB;AACxB,gBAAMoD,IAAkBhC,EAAmB+B,EAAM,OAAO,KAAK;AAE7D,cAAI/D;AACF,YAAAoB,EAA0B,EAAE,GAC5BE,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,eACvB;AACL,kBAAMyC,IAAiBD,EAAgB,CAAC,GAClCE,IAAYD,IACd9G,IAAgC2F,IAAAK,EAAUc,CAAc,MAAxB,gBAAAnB,EAA2B,UAAS,EAAE,IACtE;AAEJ,YAAA1B,EAA0B8C,CAAS,GACnC5C,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,UAC9B;AAAA,QACF;AAEA,QAAAtB,KAAA,QAAAA,EAAW6D;AAAA,MACb,GAvBU;AAAA,MAwBV,SAASf;AAAA,MACT,cAAA/C;AAAA,MACA,gBAAgB;AAAA,QACd,GAAGG;AAAA,QACH,QAAQ,gBAAAhD,EAAA,CAAC2G,MAAU;;AACjB,cAAInD,GAAsB;AACxB,gBAAIZ;AACF,cAAAoB,EAA0B,EAAE;AAAA,iBACvB;AACL,oBAAMsC,IAAa1B,EAAmBhB,CAAqB,EAAE,CAAC;AAE9D,cAAAI;AAAA,gBACEsC,IAAavG,IAAgC2F,IAAAK,EAAUO,CAAU,MAApB,gBAAAZ,EAAuB,UAAS,EAAE,IAAI;AAAA,cAAA;AAAA,YAEvF;AAEA,YAAAxB,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,UAC9B;AAEA,WAAA2C,IAAA/D,KAAA,gBAAAA,EAAgB,WAAhB,QAAA+D,EAAA,KAAA/D,GAAyB2D;AAAA,QAC3B,GAjBQ;AAAA,MAiBR;AAAA,MAEF,OAAAlG;AAAA,IAAA;AAAA,EAAA;AAGN,GA/UgC;"}
|
|
1
|
+
{"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport clsx from 'clsx';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n className,\n disableAllValueItem,\n filterOptions,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedDisableAllValueItem = isAsyncSearchEnabled ? true : disableAllValueItem;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const shouldFetchSearchOptions = isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n isAsyncSearchEnabled &&\n (Boolean(selectedIds.length) || (Boolean(multiple) && !resolvedDisableAllValueItem)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n selectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && Boolean(selectedIds.length) && Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(selectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () =>\n mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n ),\n [allOptionsQuery.data, cachedOptions, currentOptions, selectedOptionsQuery.data],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading;\n const resolvedClassName = clsx(selectorType === 'autocomplete' && '!min-w-160', className);\n const resolvedTextFieldClassName = clsx(\n selectorType === 'autocomplete' && !textFieldProps?.className && 'w-full',\n textFieldProps?.className,\n );\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = selectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, selectedIds]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={isAsyncSearchEnabled ? autocompleteInputValue : undefined}\n className={resolvedClassName}\n defaultValue={defaultValue}\n disableAllValueItem={resolvedDisableAllValueItem}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n textFieldProps={{\n ...textFieldProps,\n className: resolvedTextFieldClassName,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","className","disableAllValueItem","filterOptions","multiple","selectorType","onChange","defaultValue","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedDisableAllValueItem","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","resolvedClassName","clsx","resolvedTextFieldClassName","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":"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"}
|