@aplus-frontend/ui
Version:
72 lines (71 loc) • 2.52 kB
JavaScript
import { useToken as R } from "@aplus-frontend/antdv/es/theme/internal";
import { clsx as C } from "clsx";
import { omit as N, isFunction as y, isArray as u } from "lodash-unified";
import { useSlots as k, computed as v, unref as m } from "vue";
import { useDevWarning as w } from "../../utils/warning.mjs";
import { updateFormProps as A, getFieldProps as E, getTableRenderProps as q } from "../../ap-table/utils.mjs";
import "../../config-provider/index.mjs";
import { getEditableTableTitle as D, getFinalNode as G } from "../utils.mjs";
import { useNamespace as S } from "../../config-provider/hooks/use-namespace.mjs";
const O = (o, f) => {
const {
em: b,
be: x
} = S("editable-table"), g = w("EditableTable"), F = k(), [, T] = R();
return v(() => {
const d = o.columns;
if (!d)
return [];
function c(h) {
return h.map((e) => ({
...N(e, ["ellipsis"]),
children: c(e.children || []),
title: D(e, x("table-header", "title"), b("header-cell", "required"), F.headerCell, m(T).colorTextTertiary),
customRender({
value: r,
...n
}) {
const a = y(e.editable) ? e.editable(n.text, n.record, n.index) : !!e.editable;
if (!e.valueType && !e.customRender && !e.customRenderFormItem)
return g(!1, "usage", "'can not render table cell because no `valueType` / `customRender` / `customRenderFormItem`'"), null;
let l;
if (a) {
const t = A(e, E(e.fieldProps, {
value: r,
...n
})), s = {};
o.onFieldChange && (s[`onUpdate:${t.valuePropName || "value"}`] = (I) => o.onFieldChange?.(n.index, e.dataIndex, I));
const p = u(e.dataIndex) ? e.dataIndex : [e.dataIndex];
l = {
name: [...u(o.name) ? o.name : [o.name], n.index, ...p],
...t || {},
field: {
style: "width: 100%",
...t?.field || {},
...s,
class: C("is-editable", t.class)
}
};
} else
l = {
field: q(e, {
value: r,
...n
})
};
const i = G(e, a, l, r, n.record, m(f));
return e.customRender ? e.customRender({
value: r,
...n,
editable: a,
originalNode: i
}) : i;
}
}));
}
return c(d);
});
};
export {
O as default
};