ant-design-x-vue-next
Version:
Ant Design X for Vue — community continuation aligned with @ant-design/x
71 lines (70 loc) • 1.6 kB
JavaScript
import g from "../../_util/hooks/use-state.mjs";
import { computed as f, watch as h, unref as t, onWatcherCleanup as y } from "vue";
function i(e) {
return typeof e == "string";
}
function T(e, r) {
let u = 0;
const m = Math.min(e.length, r.length);
for (; u < m && e[u] === r[u]; )
u++;
return u;
}
function x(e) {
if (Array.isArray(e)) {
const r = Math.min(e[0], e[1]), u = Math.max(e[0], e[1]);
return r + Math.floor(Math.random() * (u - r + 1));
}
return e;
}
const P = (e, r, u, m, s = f(() => !0)) => {
const [d, p] = g(""), [n, l] = g(1), v = f(() => r.value && i(e.value));
return h(
e,
() => {
const a = t(d);
if (p(e.value), !v.value && i(e.value)) {
l(e.value.length);
return;
}
if (!(!i(e.value) || !i(a))) {
if (!s.value) {
e.value !== a && l(1);
return;
}
if (e.value.indexOf(a) !== 0) {
if (!e.value || !a) {
l(1);
return;
}
const o = T(e.value, a);
l(o === 0 ? 1 : o + 1);
}
}
},
{ immediate: !0 }
), h(
[n, r, e],
() => {
if (v.value && i(e.value) && t(n) < e.value.length) {
const a = setTimeout(() => {
l(t(n) + x(u.value));
}, m.value);
y(() => {
clearTimeout(a);
});
}
},
{ immediate: !0 }
), [
f(
() => v.value && i(e.value) ? e.value.slice(0, t(n)) : e.value
),
f(
() => v.value && i(e.value) && t(n) < e.value.length
)
];
};
export {
P as default
};