matsuri-ui-base 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/SelectField/index.d.ts +96 -0
- package/SelectField/index.js +353 -0
- package/SelectField/index.js.map +1 -0
- package/cjs/SelectField/index.js +348 -0
- package/cjs/SelectField/index.js.map +1 -0
- package/cjs/index.js +7 -0
- package/cjs/index.js.map +1 -0
- package/esm/SelectField/index.js +353 -0
- package/esm/SelectField/index.js.map +1 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +2 -0
- package/index.js.map +1 -0
- package/package.json +42 -0
- package/types/SelectField/index.d.ts +96 -0
- package/types/index.d.ts +1 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.useSelectField = exports.filterSelectOptionsByQuery = void 0;
|
|
5
|
+
var _react = require("react");
|
|
6
|
+
const useOnClickOutside = (ref, handler) => {
|
|
7
|
+
(0, _react.useEffect)(() => {
|
|
8
|
+
if (!handler) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const listener = event => {
|
|
12
|
+
if (Array.isArray(ref)) {
|
|
13
|
+
for (let i = 0; i < ref.length; i++) {
|
|
14
|
+
const element = ref[i].current;
|
|
15
|
+
// 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
|
|
16
|
+
if (element && element.contains(event.composedPath()[0])) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
if (!ref.current || ref.current.contains(event.composedPath()[0])) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
handler(event);
|
|
26
|
+
};
|
|
27
|
+
document.addEventListener("mousedown", listener);
|
|
28
|
+
document.addEventListener("touchstart", listener);
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener("mousedown", listener);
|
|
31
|
+
document.removeEventListener("touchstart", listener);
|
|
32
|
+
};
|
|
33
|
+
}, [ref, handler]);
|
|
34
|
+
};
|
|
35
|
+
const getSearch = (items, query) => {
|
|
36
|
+
const copy = items.slice();
|
|
37
|
+
const len = items.length;
|
|
38
|
+
const key = query.toLowerCase();
|
|
39
|
+
let i = -1;
|
|
40
|
+
let c = 0;
|
|
41
|
+
let tmp;
|
|
42
|
+
const res = new Array(len);
|
|
43
|
+
while (++i !== len) {
|
|
44
|
+
tmp = copy[i];
|
|
45
|
+
/**
|
|
46
|
+
* Caluculate Minimum Index
|
|
47
|
+
*/
|
|
48
|
+
let j = -1;
|
|
49
|
+
let index = -1;
|
|
50
|
+
const keylen = tmp.keys.length;
|
|
51
|
+
let current;
|
|
52
|
+
while (++j !== keylen) {
|
|
53
|
+
current = tmp.keys[j].toLowerCase().indexOf(key);
|
|
54
|
+
if (index === -1 || current !== -1 && current < index) {
|
|
55
|
+
index = current;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Caluculate Score
|
|
60
|
+
*/
|
|
61
|
+
const score = index > -1 ? 1 / (index + 1) : 0;
|
|
62
|
+
if (score > 0) {
|
|
63
|
+
res[c++] = {
|
|
64
|
+
...tmp,
|
|
65
|
+
score
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
res.length = c;
|
|
70
|
+
res.sort((a, b) => {
|
|
71
|
+
if (a.score <= b.score) {
|
|
72
|
+
return 1;
|
|
73
|
+
} else {
|
|
74
|
+
return -1;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return res;
|
|
78
|
+
};
|
|
79
|
+
const dispatchChangeEvent = (element, value) => {
|
|
80
|
+
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")?.set;
|
|
81
|
+
nativeInputValueSetter?.call(element, value);
|
|
82
|
+
element.dispatchEvent(new Event("change", {
|
|
83
|
+
bubbles: true
|
|
84
|
+
}));
|
|
85
|
+
};
|
|
86
|
+
function ownerDocument(node) {
|
|
87
|
+
return node && node.ownerDocument || document;
|
|
88
|
+
}
|
|
89
|
+
const nextItem = (list, item) => {
|
|
90
|
+
if (list === item) {
|
|
91
|
+
return list.firstChild;
|
|
92
|
+
}
|
|
93
|
+
if (item && item.nextElementSibling) {
|
|
94
|
+
return item.nextElementSibling;
|
|
95
|
+
}
|
|
96
|
+
return list.firstChild;
|
|
97
|
+
};
|
|
98
|
+
const previousItem = (list, item) => {
|
|
99
|
+
if (list === item) {
|
|
100
|
+
return list.lastChild;
|
|
101
|
+
}
|
|
102
|
+
if (item && item.previousElementSibling) {
|
|
103
|
+
return item.previousElementSibling;
|
|
104
|
+
}
|
|
105
|
+
return list.lastChild;
|
|
106
|
+
};
|
|
107
|
+
const moveFocus = (list, currentFocus, traversalFunction) => {
|
|
108
|
+
let nextFocus = traversalFunction(list, currentFocus);
|
|
109
|
+
while (nextFocus) {
|
|
110
|
+
if (currentFocus === null ? nextFocus === list.lastChild : nextFocus === currentFocus) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
const disabledFocus = nextFocus.disabled || nextFocus.getAttribute("aria-disabled") === "true";
|
|
114
|
+
if (disabledFocus) {
|
|
115
|
+
nextFocus = traversalFunction(list, nextFocus);
|
|
116
|
+
} else {
|
|
117
|
+
nextFocus.focus();
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const filterSelectOptionsByQuery = (options, query) => {
|
|
123
|
+
const result = getSearch(options.map(option => {
|
|
124
|
+
return {
|
|
125
|
+
...option,
|
|
126
|
+
keys: option.keys || [option.label],
|
|
127
|
+
content: option.value
|
|
128
|
+
};
|
|
129
|
+
}), query);
|
|
130
|
+
return result;
|
|
131
|
+
};
|
|
132
|
+
exports.filterSelectOptionsByQuery = filterSelectOptionsByQuery;
|
|
133
|
+
const defaultLoadOptions = async ({
|
|
134
|
+
query,
|
|
135
|
+
options
|
|
136
|
+
}) => {
|
|
137
|
+
if (options === undefined) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
if (query === undefined) {
|
|
141
|
+
return options;
|
|
142
|
+
}
|
|
143
|
+
const result = filterSelectOptionsByQuery(options, query);
|
|
144
|
+
return result.length ? result : options;
|
|
145
|
+
};
|
|
146
|
+
const useSelectField = args => {
|
|
147
|
+
const {
|
|
148
|
+
readOnly = false,
|
|
149
|
+
name,
|
|
150
|
+
required = false,
|
|
151
|
+
options: propsOptions,
|
|
152
|
+
loadOptions = defaultLoadOptions,
|
|
153
|
+
treatQueryAsValue = false,
|
|
154
|
+
defaultValue = undefined,
|
|
155
|
+
onChangeOption
|
|
156
|
+
} = args;
|
|
157
|
+
const [open, setOpen] = (0, _react.useState)(false);
|
|
158
|
+
const [query, setQuery] = (0, _react.useState)("");
|
|
159
|
+
const [value, setValue] = (0, _react.useState)(defaultValue);
|
|
160
|
+
const selectedOptionsCache = (0, _react.useRef)(propsOptions);
|
|
161
|
+
const [options, setOptions] = (0, _react.useState)(propsOptions);
|
|
162
|
+
const rootRef = (0, _react.useRef)(null);
|
|
163
|
+
const originalInputRef = (0, _react.useRef)(null);
|
|
164
|
+
const listRef = (0, _react.useRef)(null);
|
|
165
|
+
const pseudoInputRef = (0, _react.useRef)(null);
|
|
166
|
+
(0, _react.useEffect)(() => {
|
|
167
|
+
void loadOptions({
|
|
168
|
+
query,
|
|
169
|
+
options: propsOptions,
|
|
170
|
+
selectedOptions: selectedOptionsCache.current
|
|
171
|
+
}).then(result => {
|
|
172
|
+
setOptions(result);
|
|
173
|
+
});
|
|
174
|
+
}, [propsOptions, loadOptions, query]);
|
|
175
|
+
const inputProps = (0, _react.useMemo)(() => {
|
|
176
|
+
return {
|
|
177
|
+
ref: originalInputRef,
|
|
178
|
+
required: required,
|
|
179
|
+
name: name,
|
|
180
|
+
defaultValue: value,
|
|
181
|
+
key: value,
|
|
182
|
+
tabIndex: -1,
|
|
183
|
+
autoComplete: "off",
|
|
184
|
+
autoCorrect: "off",
|
|
185
|
+
autoCapitalize: "none",
|
|
186
|
+
spellCheck: false,
|
|
187
|
+
onFocus: event => {
|
|
188
|
+
event.currentTarget.blur();
|
|
189
|
+
pseudoInputRef.current?.focus();
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}, [name, required, value]);
|
|
193
|
+
const displayValue = (0, _react.useMemo)(() => {
|
|
194
|
+
return (selectedOptionsCache.current?.find(option => option.value === value) || options?.find(option => option.value === value))?.label;
|
|
195
|
+
}, [options, value]);
|
|
196
|
+
const rootProps = (0, _react.useMemo)(() => {
|
|
197
|
+
return {
|
|
198
|
+
ref: rootRef
|
|
199
|
+
};
|
|
200
|
+
}, []);
|
|
201
|
+
useOnClickOutside([rootRef, listRef], () => {
|
|
202
|
+
setOpen(false);
|
|
203
|
+
setQuery("");
|
|
204
|
+
});
|
|
205
|
+
const updateValue = (0, _react.useCallback)(option => {
|
|
206
|
+
const value = option.value;
|
|
207
|
+
setValue(value);
|
|
208
|
+
if (onChangeOption) {
|
|
209
|
+
onChangeOption(option);
|
|
210
|
+
}
|
|
211
|
+
selectedOptionsCache.current = options;
|
|
212
|
+
if (originalInputRef.current) {
|
|
213
|
+
dispatchChangeEvent(originalInputRef.current, value);
|
|
214
|
+
}
|
|
215
|
+
}, [onChangeOption, options]);
|
|
216
|
+
const pseudoInputProps = (0, _react.useMemo)(() => {
|
|
217
|
+
return {
|
|
218
|
+
ref: pseudoInputRef,
|
|
219
|
+
value: query,
|
|
220
|
+
autoComplete: "off",
|
|
221
|
+
autoCorrect: "off",
|
|
222
|
+
autoCapitalize: "none",
|
|
223
|
+
spellCheck: false,
|
|
224
|
+
tabIndex: 0,
|
|
225
|
+
onChange: event => {
|
|
226
|
+
const query = event.currentTarget.value;
|
|
227
|
+
setQuery(query);
|
|
228
|
+
if (treatQueryAsValue) {
|
|
229
|
+
updateValue({
|
|
230
|
+
label: query,
|
|
231
|
+
value: query
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
onClick: event => {
|
|
236
|
+
/**
|
|
237
|
+
* ユーザーがフォーカスされている状態で入力要素をクリックするのは、
|
|
238
|
+
* ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。
|
|
239
|
+
*/
|
|
240
|
+
if (event.currentTarget === document.activeElement) {
|
|
241
|
+
setOpen(true);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
onFocus: () => {
|
|
245
|
+
if (readOnly !== true) {
|
|
246
|
+
setOpen(true);
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
onKeyDown: event => {
|
|
250
|
+
const {
|
|
251
|
+
key
|
|
252
|
+
} = event;
|
|
253
|
+
if (key === "Delete" || key === "Backspace") {
|
|
254
|
+
setQuery(prev => {
|
|
255
|
+
if (prev === "") {
|
|
256
|
+
setValue(undefined);
|
|
257
|
+
}
|
|
258
|
+
return prev;
|
|
259
|
+
});
|
|
260
|
+
} else if (key === "ArrowDown") {
|
|
261
|
+
event.preventDefault();
|
|
262
|
+
const list = listRef.current;
|
|
263
|
+
if (list) {
|
|
264
|
+
moveFocus(list, null, nextItem);
|
|
265
|
+
}
|
|
266
|
+
} else if (treatQueryAsValue && event.nativeEvent.isComposing === false && key === "Enter") {
|
|
267
|
+
if (treatQueryAsValue) {
|
|
268
|
+
selectedOptionsCache.current = [{
|
|
269
|
+
value: query,
|
|
270
|
+
label: query
|
|
271
|
+
}];
|
|
272
|
+
}
|
|
273
|
+
setOpen(false);
|
|
274
|
+
} else if (event.key.length === 1) {
|
|
275
|
+
setOpen(true);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
}, [query, treatQueryAsValue, updateValue, readOnly]);
|
|
280
|
+
const listProps = (0, _react.useMemo)(() => {
|
|
281
|
+
return {
|
|
282
|
+
ref: listRef,
|
|
283
|
+
role: "listbox",
|
|
284
|
+
tabIndex: -1,
|
|
285
|
+
onKeyDown: event => {
|
|
286
|
+
const key = event.key;
|
|
287
|
+
const list = listRef.current;
|
|
288
|
+
if (list === null) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const currentFocus = ownerDocument(list).activeElement;
|
|
292
|
+
if (key === "ArrowDown") {
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
moveFocus(list, currentFocus, nextItem);
|
|
295
|
+
} else if (key === "ArrowUp") {
|
|
296
|
+
event.preventDefault();
|
|
297
|
+
moveFocus(list, currentFocus, previousItem);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}, []);
|
|
302
|
+
const listItems = (0, _react.useMemo)(() => {
|
|
303
|
+
return options?.map((option, index) => {
|
|
304
|
+
const selected = option.value === value;
|
|
305
|
+
return {
|
|
306
|
+
key: `${option.value}-${index}`,
|
|
307
|
+
option,
|
|
308
|
+
props: {
|
|
309
|
+
role: "option",
|
|
310
|
+
"aria-selected": selected,
|
|
311
|
+
/**
|
|
312
|
+
* 何も選択されていないときは、先頭のオプションに飛べるようにする
|
|
313
|
+
*/
|
|
314
|
+
tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,
|
|
315
|
+
onClick: () => {
|
|
316
|
+
updateValue(option);
|
|
317
|
+
setQuery("");
|
|
318
|
+
pseudoInputRef?.current?.focus();
|
|
319
|
+
setOpen(false);
|
|
320
|
+
},
|
|
321
|
+
onKeyDown: event => {
|
|
322
|
+
const key = event.key;
|
|
323
|
+
if (key === "Enter" || key === " ") {
|
|
324
|
+
event.preventDefault();
|
|
325
|
+
event.currentTarget.click();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
});
|
|
331
|
+
}, [options, updateValue, value]);
|
|
332
|
+
const result = (0, _react.useMemo)(() => {
|
|
333
|
+
return {
|
|
334
|
+
displayValue,
|
|
335
|
+
query,
|
|
336
|
+
value,
|
|
337
|
+
openList: open,
|
|
338
|
+
inputProps,
|
|
339
|
+
pseudoInputProps,
|
|
340
|
+
listProps,
|
|
341
|
+
listItems,
|
|
342
|
+
rootProps
|
|
343
|
+
};
|
|
344
|
+
}, [displayValue, inputProps, listItems, listProps, open, pseudoInputProps, query, rootProps, value]);
|
|
345
|
+
return result;
|
|
346
|
+
};
|
|
347
|
+
exports.useSelectField = useSelectField;
|
|
348
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","require","useOnClickOutside","ref","handler","useEffect","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","sort","a","b","dispatchChangeEvent","value","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","exports","defaultLoadOptions","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","defaultValue","onChangeOption","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","rootRef","originalInputRef","listRef","pseudoInputRef","selectedOptions","then","inputProps","useMemo","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","currentTarget","blur","displayValue","find","rootProps","updateValue","useCallback","pseudoInputProps","onChange","onClick","activeElement","onKeyDown","prev","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element && element.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n }\n>(\n items: T[],\n query: string\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\"\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return (node && node.ownerDocument) || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item && item.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item && item.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue\n>(\n options: T[],\n query: string\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query\n );\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\ninterface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n defaultValue = undefined,\n onChangeOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n void loadOptions({\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n }).then((result) => {\n setOptions(result);\n });\n }, [propsOptions, loadOptions, query]);\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n setQuery(\"\");\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options]\n );\n\n const pseudoInputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n setQuery(query);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n setQuery((prev) => {\n if (prev === \"\") {\n setValue(undefined);\n }\n return prev;\n });\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [query, treatQueryAsValue, updateValue, readOnly]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n setQuery(\"\");\n pseudoInputRef?.current?.focus();\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [options, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n ]);\n return result;\n};\n"],"mappings":"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"}
|
package/cjs/index.js
ADDED
package/cjs/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_SelectField","require","exports","useSelectField"],"sources":["../../src/index.tsx"],"sourcesContent":["export { useSelectField } from \"./SelectField\";\n"],"mappings":";;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAA+CC,OAAA,CAAAC,cAAA,GAAAH,YAAA,CAAAG,cAAA"}
|