@adyen/adyen-platform-experience-web
Version:

62 lines (61 loc) • 1.66 kB
JavaScript
import { useRef as f, useMemo as m } from "../../../../external/preact/hooks/dist/hooks.module.js";
import { DEFAULT_PAGE_LIMIT as l } from "../constants.js";
import { getClampedPageLimit as a } from "../utils.js";
import { mid as d } from "../../../../utils/value/number.js";
import { isNumber as p } from "../../../../utils/value/is.js";
const h = (i, o) => {
const n = i.length - 1;
if (n < 0) return o;
if (o <= i[0]) return i[0];
if (o >= i[n]) return i[n];
let r = 0, c = 0, s = n;
for (; ; ) {
const e = i[r = d(c, s)];
if (c > s || o === e) return e;
o > e ? c = r + 1 : s = r - 1;
}
}, q = ({
preferredLimit: i = l,
preferredLimitOptions: o
}) => {
const n = f(), r = f(), c = m(() => {
try {
const e = /* @__PURE__ */ new Set();
for (const t of o) {
const u = a(t);
u > 0 && e.add(u);
}
return Object.freeze([...e].sort((t, u) => t - u));
} catch {
}
}, [o]);
return { limit: m(() => {
let e = a(i) || l;
e: try {
if (n.current === c) break e;
const t = new Set(n.current = c);
if (t.size === 0) {
n.current = void 0;
break e;
}
if (r.current !== e)
t: {
if (t.size === t.add(e).size)
break t;
if (t.delete(e), t.size === t.add(r.current).size) {
if (p(r.current)) {
e = r.current;
break t;
}
} else t.delete(r.current);
e = h(n.current, e);
}
} catch {
}
return r.current = e;
}, [c, i]), limitOptions: c };
};
export {
q as default,
h as getNearestFromSortedUniqueNums
};