ant-design-x-vue
Version:
Craft AI-driven interfaces effortlessly
57 lines (56 loc) • 1.72 kB
JavaScript
import { toValue as l, watch as b } from "vue";
import { useEventCallback as D } from "../_util/hooks/use-event-callback.mjs";
import x from "../_util/hooks/use-state.mjs";
function C(i, v, m, p, w) {
const [t, c] = x([]), o = (e, r = t.value) => {
let n = l(i);
for (let s = 0; s < e - 1; s += 1) {
const a = r[s], u = n.find((f) => f.value === a);
if (!u)
break;
n = u.children || [];
}
return n;
}, I = (e) => e.map((r, n) => {
const a = o(n + 1, e).find((u) => u.value === r);
return a == null ? void 0 : a.value;
}), h = (e) => {
const r = t.value.length || 1, n = o(r), s = n.findIndex(
(f) => f.value === t.value[r - 1]
), a = n.length, u = n[(s + e + a) % a];
c([...t.value.slice(0, r - 1), u.value]);
}, g = () => {
t.value.length > 1 && c(t.value.slice(0, t.value.length - 1));
}, k = () => {
const e = o(t.value.length + 1);
e.length && c([...t.value, e[0].value]);
}, d = D((e) => {
if (l(v))
switch (console.log("e.key", e), e.key) {
case "ArrowDown":
h(1), e.preventDefault();
break;
case "ArrowUp":
h(-1), e.preventDefault();
break;
case "ArrowRight":
l(m) ? g() : k(), e.preventDefault();
break;
case "ArrowLeft":
l(m) ? k() : g(), e.preventDefault();
break;
case "Enter":
o(t.value.length + 1).length || p(I(t.value)), e.preventDefault();
break;
case "Escape":
w(), e.preventDefault();
break;
}
});
return b(() => l(v), () => {
l(v) && c([l(i)[0].value]);
}, { immediate: !0 }), [t, d];
}
export {
C as default
};