ant-design-x-vue-next
Version:
Ant Design X for Vue — community continuation aligned with @ant-design/x
44 lines (43 loc) • 1.4 kB
JavaScript
import f from "../../_util/hooks/use-state.mjs";
import { computed as s, toValue as v, watch as y } from "vue";
const m = (u) => {
const d = s(() => {
const e = v(u) || {}, o = e.collapsible, l = typeof o == "object" && o ? o : {}, t = o === !0 || typeof o == "object", a = e.defaultExpandedKeys ?? l.defaultExpandedKeys ?? [], c = e.expandedKeys !== void 0 ? e.expandedKeys : l.expandedKeys !== void 0 ? l.expandedKeys : void 0, x = e.onExpand ?? l.onExpand ?? (() => {
});
return {
forceCollapse: t,
isControlled: c !== void 0,
controlledExpandedKeys: c,
defaultExpandedKeys: a,
customizeOnExpand: x
};
}), [r, p] = f(
() => d.value.controlledExpandedKeys ?? d.value.defaultExpandedKeys
), n = s(
() => d.value.isControlled ? d.value.controlledExpandedKeys : r.value
);
y(
() => ({
isControlled: d.value.isControlled,
controlled: d.value.controlledExpandedKeys,
defaults: d.value.defaultExpandedKeys
}),
(e) => {
e.isControlled && p(e.controlled ?? []);
},
{ deep: 1 }
);
const i = (e) => {
var l, t;
const o = n.value.includes(e) ? n.value.filter((a) => a !== e) : [...n.value, e];
(t = (l = d.value).customizeOnExpand) == null || t.call(l, o), d.value.isControlled || p(o);
};
return [
s(() => d.value.forceCollapse),
n,
i
];
};
export {
m as default
};