@aplus-frontend/ui
Version:
175 lines (174 loc) • 4.38 kB
JavaScript
import { shallowRef as E, unref as d } from "vue";
import { isDef as F } from "../../utils/index.mjs";
import { isFunction as x, isUndefined as V, isNumber as h, cloneDeep as S, isArray as R } from "lodash-unified";
import { getRowKey as y, arrayToObject as U } from "../editable/utils.mjs";
let $ = 0;
function I() {
return `_ag_grid${$++}`;
}
const J = (l, v, n, w) => {
const K = E([]);
function j(s, t) {
const r = d(n)?.length || 0;
if (F(l.maxLength) && r >= l.maxLength || !s && x(l.rowKey))
return;
const f = {
...s || { [l.rowKey]: I() }
};
v?.setFieldValue(
w,
f,
!1,
(i, c) => {
const e = y(f, void 0, l.rowKey);
i[c] ? i[c][e] = f : i[c] = { [e]: f }, n.value ? V(t) ? n.value.push(f) : (K.value = n.value.map(
(u, o) => o < t ? null : y(u, o, l.rowKey)
).filter(Boolean), n.value.splice(t, 0, f)) : n.value = [f], v?.setFieldValue(
l.name,
f,
!0,
(u, o) => {
if (!u[o]) {
u[o] = [f];
return;
}
V(t) ? u[o].push(f) : u[o].splice(t, 0, f);
}
);
}
);
}
function k(s, t = "suffix") {
const r = d(n)?.length || 0, f = h(s) ? s : s.length;
if (F(l.maxLength) && r + f > l.maxLength || h(s) && x(l.rowKey))
return;
const i = h(s) ? new Array(s).fill(0).map(() => ({ [l.rowKey]: I() })) : S(s), c = U(i, l.rowKey);
v?.setFieldValue(
w,
c,
!1,
(e, u) => {
e[u] ? Object.assign(e[u], c) : e[u] = c, n.value ? t === "suffix" ? n.value.push(...i) : (K.value = n.value.map(
(o, g) => y(o, g, l.rowKey)
), n.value.unshift(...i)) : n.value = [...i], v?.setFieldValue(
l.name,
i,
!0,
(o, g) => {
if (!o[g]) {
o[g] = [...i];
return;
}
t === "suffix" ? o[g].push(...i) : o[g].unshift(...i);
}
);
}
);
}
function L(s) {
const t = R(s) ? s : [s];
v?.setFieldValue(
w,
void 0,
!1,
(r, f) => {
for (const e of t) {
const u = y(e, void 0, l.rowKey);
delete r[f][u];
}
const i = n.value.filter(
(e) => !t.includes(e)
), c = n.value.findIndex(
(e) => t.includes(e)
);
K.value = n.value.map(
(e, u) => u <= c ? null : y(e, u, l.rowKey)
).filter(Boolean), i.length ? n.value = i : n.value.splice(0, n.value.length), v.setFieldValue(
l.name,
void 0,
!0,
(e, u) => {
e[u] = i;
}
);
}
);
}
function O(s) {
const t = new Set(R(s) ? s : [s]);
t.size !== 0 && v?.setFieldValue(
w,
void 0,
!1,
(r, f) => {
for (const e of t)
delete r[f][e];
const i = n.value.filter(
(e, u) => !t.has(y(e, u, l.rowKey))
), c = n.value.findIndex(
(e, u) => t.has(y(e, u, l.rowKey))
);
K.value = n.value.map(
(e, u) => u <= c ? null : y(e, u, l.rowKey)
).filter(Boolean), i.length ? n.value = i : n.value.splice(0, n.value.length), v.setFieldValue(
l.name,
void 0,
!0,
(e, u) => {
e[u] = i;
}
);
}
);
}
function T(s) {
return d(n)?.[s];
}
function B() {
return d(n);
}
function _(s, t, r = !0) {
v?.setFieldValue?.(
w,
void 0,
!1,
(f, i) => {
const c = n.value.findIndex(
(u, o) => s === o
);
if (!~c)
return;
const e = y(
n.value[c],
c,
l.rowKey
);
if (e && !(!f[i] || !f[i][e])) {
if (!r) {
const u = Object.keys(f[i][e]);
for (const o of u)
o !== l.rowKey && delete f[i][e][o];
}
Object.assign(f[i][e], { ...t });
}
}
);
}
function z() {
v?.setFieldValue(w, {}), v?.setFieldValue(l.name, []);
}
return {
add: j,
addMultiple: k,
remove: L,
removeByKey: O,
getRowData: T,
getRowsData: B,
setRowData: _,
clear: z,
refreshRowIds: K
};
};
export {
J as useEditableFormItemApi
};