intable 0.0.65 → 0.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,40 +11,40 @@ const EditablePlugin = {
11
11
  name: "editable",
12
12
  store: () => ({ editors: { ...editors } }),
13
13
  rewriteProps: {
14
- editable: ({ editable: e }, { store: f }) => (m) => {
15
- let h = [m.col.editable, e].filter((e) => e != null);
16
- return !!h.length && h.every((e) => unFn(e, m)) && !m.data[f.internal] && !m.col[f.internal];
14
+ editable: ({ editable: e }, { store: u }) => (f) => {
15
+ let p = [f.col.editable, e].filter((e) => e != null);
16
+ return !!p.length && p.every((e) => unFn(e, f)) && !f.data[u.internal] && !f.col[u.internal];
17
17
  },
18
- Td: ({ Td: e }, { store: f }) => (h) => {
19
- let { props: g } = f, y, b = () => unFn(f.props.editable, h);
20
- return createMemo(() => b() ? unFn(() => {
21
- let p = "", [S, C] = createSignal(!1), D = () => (([e, f]) => h.x == e && h.y == f)(f.selected.start || []), O = () => b() && !S() && D(), [k, A] = createSignal(!1), j = createAsyncMemo(() => {
22
- if (S()) {
23
- let e = createMemo(() => JSON.stringify(f.selected ?? "{}"));
24
- createEffect(on(e, () => C(!1), { defer: !0 })), P.w = y.getBoundingClientRect().width, P.h = y.getBoundingClientRect().height;
25
- let m = !1, _ = h.data[h.col.id], v = ((e) => typeof e == "string" ? f.editors[e] : e)(h.col.editor ?? h.col.type ?? (h.col.enum && "select")) ?? (_ == null ? null : f.editors[typeof _]) ?? f.editors.text, b = {
26
- props: h.col.editorProps,
27
- col: h.col,
28
- eventKey: p,
29
- data: h.data,
30
- value: _,
18
+ Td: ({ Td: e }, { store: u }) => (p) => {
19
+ let { props: m } = u, _, v = () => unFn(u.props.editable, p);
20
+ return createMemo(() => v() ? unFn(() => {
21
+ let d = "", [b, x] = createSignal(!1), T = () => (([e, u]) => p.x == e && p.y == u)(u.selected.start || []), O = () => v() && !b() && T(), [k, A] = createSignal(!1), j = createAsyncMemo(() => {
22
+ if (b()) {
23
+ let e = createMemo(() => JSON.stringify(u.selected ?? "{}"));
24
+ createEffect(on(e, () => x(!1), { defer: !0 })), P.w = _.getBoundingClientRect().width, P.h = _.getBoundingClientRect().height;
25
+ let f = !1, h = p.data[p.col.id], g = ((e) => typeof e == "string" ? u.editors[e] : e)(p.col.editor ?? p.col.type ?? (p.col.enum && "select")) ?? (h == null ? null : u.editors[typeof h]) ?? u.editors.text, v = {
26
+ props: p.col.editorProps,
27
+ col: p.col,
28
+ eventKey: d,
29
+ data: p.data,
30
+ value: h,
31
31
  ok: async () => {
32
- await M(x.getValue()), C(!1);
32
+ await M(y.getValue()), x(!1);
33
33
  },
34
- cancel: () => (m = !0, C(!1)),
35
- onChange: (e) => S() && M(e).catch(() => {})
36
- }, x = v(b);
37
- return queueMicrotask(() => x.focus?.()), onCleanup(() => {
38
- !m && x.getValue() !== _ && f.commands.rowChange({
39
- ...g.data[h.y],
40
- [h.col.id]: x.getValue()
41
- }), m || M(x.getValue()).catch(() => {}), p = "", x.destroy();
42
- }), [b, x];
34
+ cancel: () => (f = !0, x(!1)),
35
+ onChange: (e) => b() && M(e).catch(() => {})
36
+ }, y = g(v);
37
+ return queueMicrotask(() => y.focus?.()), onCleanup(() => {
38
+ !f && y.getValue() !== h && u.commands.rowChange({
39
+ ...m.data[p.y],
40
+ [p.col.id]: y.getValue()
41
+ }), f || M(y.getValue()).catch(() => {}), d = "", y.destroy?.();
42
+ }), [v, y];
43
43
  }
44
44
  });
45
45
  async function M(e) {
46
46
  try {
47
- A(!0), await f.validateCell(e, h.data, h.col);
47
+ A(!0), await u.validateCell(e, p.data, p.col);
48
48
  } finally {
49
49
  A(!1);
50
50
  }
@@ -52,19 +52,19 @@ const EditablePlugin = {
52
52
  let N, P = createMutable({
53
53
  w: 0,
54
54
  h: 0
55
- }), F = mergeProps$2(h, {
56
- ref: (e) => (y = e, h.ref?.(e)),
55
+ }), F = mergeProps$2(p, {
56
+ ref: (e) => (_ = e, p.ref?.(e)),
57
57
  get class() {
58
- return [S() ? "is-editing" : "", h.class].filter(Boolean).join(" ");
58
+ return [b() ? "is-editing" : "", p.class].filter(Boolean).join(" ");
59
59
  },
60
60
  get style() {
61
- return [S() ? `width: ${P.w}px; height: ${P.h}px; ` : "", h.style].filter(Boolean).join(" ");
61
+ return [b() ? `width: ${P.w}px; height: ${P.h}px; ` : "", p.style].filter(Boolean).join(" ");
62
62
  },
63
- onClick: (e) => (N?.focus?.(), h.onClick?.(e)),
64
- onDblClick: (e) => (C(b()), h.onDblClick?.(e))
63
+ onClick: (e) => (N?.focus?.(), p.onClick?.(e)),
64
+ onDblClick: (e) => (x(v()), p.onDblClick?.(e))
65
65
  });
66
66
  return createComponent(e, mergeProps$2(F, { get children() {
67
- return [() => j()?.[1]?.dialog ? [memo(() => h.children), memo(() => j()?.[1]?.el)] : j()?.[1]?.el ? (() => {
67
+ return [() => j()?.[1]?.dialog ? [memo(() => p.children), memo(() => j()?.[1]?.el)] : j()?.[1]?.el ? (() => {
68
68
  var e = _tmpl$();
69
69
  return addEventListener(e, "keydown", (e) => {
70
70
  e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (j()?.[0].ok(), e.preventDefault()), e.key == "Escape" && j()?.[0].cancel();
@@ -72,12 +72,12 @@ const EditablePlugin = {
72
72
  var e = memo(() => !!k());
73
73
  return () => e() && _tmpl$2();
74
74
  })(), null), e;
75
- })() : h.children, () => O() && (() => {
75
+ })() : p.children, () => O() && (() => {
76
76
  var e = _tmpl$3();
77
77
  return e.addEventListener("compositionend", () => {
78
- C(!0);
78
+ x(!0);
79
79
  }), e.$$input = (e) => {
80
- p = e.target.value, C(!e.isComposing);
80
+ d = e.target.value, x(!e.isComposing);
81
81
  }, e.$$keydown = (e) => {
82
82
  e.key == " " && e.preventDefault();
83
83
  }, use((e) => {
@@ -85,34 +85,34 @@ const EditablePlugin = {
85
85
  }, e), e;
86
86
  })()];
87
87
  } }));
88
- }) : createComponent(e, h));
88
+ }) : createComponent(e, p));
89
89
  }
90
90
  }
91
- };
92
- var createEditor = (e, p, h) => ({ eventKey: g, value: _, col: y, ok: b, cancel: x, props: S, onChange: C }) => createRoot((x) => {
93
- let w = p?.out ?? ((e) => e), [T, E] = createSignal(g || _), D;
94
- return createComponent(e, mergeProps$2({
95
- ref: (e) => D = e,
96
- class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
97
- get value() {
98
- return T();
99
- },
100
- onInput: (e) => (E(w(e instanceof Event ? e.target.value : e)), C?.(T())),
101
- onChange: (e) => (E(w(e instanceof Event ? e.target.value : e)), C?.(T()), h && b()),
102
- get options() {
103
- return memo(() => !!y.enum)() ? resolveOptions(y.enum ?? []) : void 0;
104
- }
105
- }, p, S)), setTimeout(() => {
106
- h && D?.showPicker?.();
91
+ }, createEditor = (e, d, p) => (m) => createRoot((h) => {
92
+ let { eventKey: _, value: v, col: y, ok: b, cancel: x, props: S, onChange: C } = m, w = d?.out ?? ((e) => e), [T, E] = createSignal(p && _ || v), D;
93
+ return setTimeout(() => {
94
+ p && D?.showPicker?.();
107
95
  }, 0), {
108
- el: D,
96
+ el: createComponent(e, mergeProps$2({
97
+ ref: (e) => D = e,
98
+ class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
99
+ get value() {
100
+ return T();
101
+ },
102
+ onInput: (e) => (E(w(e instanceof Event ? e.target.value : e)), C?.(T())),
103
+ onChange: (e) => (E(w(e instanceof Event ? e.target.value : e)), C?.(T()), p && !Array.isArray(T()) && b()),
104
+ get options() {
105
+ return memo(() => !!y.enum)() ? resolveOptions(y.enum ?? []) : void 0;
106
+ }
107
+ }, d, S, { aaa: m })),
109
108
  getValue: T,
110
109
  focus: () => D.focus(),
111
- destroy: x
110
+ destroy: h
112
111
  };
113
- }), Input = (e) => (() => {
114
- var f = _tmpl$4();
115
- return spread(f, e, !1, !1), f;
112
+ });
113
+ var Input = (e) => (() => {
114
+ var u = _tmpl$4();
115
+ return spread(u, e, !1, !1), u;
116
116
  })();
117
117
  const editors = {
118
118
  text: createEditor(Input),
@@ -136,31 +136,31 @@ const editors = {
136
136
  color: createEditor(Input, { type: "color" }),
137
137
  tel: createEditor(Input, { type: "tel" }),
138
138
  password: createEditor(Input, { type: "password" }),
139
- file: createEditor((f) => createComponent(Files, mergeProps$2(f, {
139
+ file: createEditor((u) => createComponent(Files, mergeProps$2(u, {
140
140
  class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
141
- onAdd: () => chooseFile({ multiple: !0 }).then((e) => f.onChange([...f.value || [], ...e.map((e) => ({
141
+ onAdd: () => chooseFile({ multiple: !0 }).then((e) => u.onChange([...u.value || [], ...e.map((e) => ({
142
142
  name: e.name,
143
143
  size: e.size
144
144
  }))]))
145
145
  }))),
146
146
  checkbox: createEditor((e) => (() => {
147
- var f = _tmpl$5(), p = e.ref;
148
- return typeof p == "function" ? use(p, f) : e.ref = f, insert(f, createComponent(Checkbox, mergeProps$2(e, {
147
+ var u = _tmpl$5(), d = e.ref;
148
+ return typeof d == "function" ? use(d, u) : e.ref = u, insert(u, createComponent(Checkbox, mergeProps$2(e, {
149
149
  ref: () => {},
150
150
  onInput: () => {},
151
151
  class: "mx-3!"
152
- }))), f;
152
+ }))), u;
153
153
  })()),
154
154
  select: createEditor((e) => (() => {
155
- var f = _tmpl$6();
156
- return spread(f, e, !1, !0), insert(f, (() => {
157
- var f = memo(() => !e.multiple);
158
- return () => f() && _tmpl$7();
159
- })(), null), insert(f, () => e.options?.map((e) => (() => {
160
- var f = _tmpl$8();
161
- return insert(f, () => e.label), effect(() => f.value = e.value), f;
162
- })()), null), effect(() => f.value = e.value), f;
155
+ var u = _tmpl$6();
156
+ return spread(u, e, !1, !0), insert(u, (() => {
157
+ var u = memo(() => !e.multiple);
158
+ return () => u() && _tmpl$7();
159
+ })(), null), insert(u, () => e.options?.map((e) => (() => {
160
+ var u = _tmpl$8();
161
+ return insert(u, () => e.label), effect(() => u.value = e.value), u;
162
+ })()), null), effect(() => u.value = e.value), u;
163
163
  })(), {}, !0)
164
164
  };
165
165
  editors.boolean = editors.checkbox, delegateEvents(["keydown", "input"]);
166
- export { EditablePlugin, editors };
166
+ export { EditablePlugin, createEditor, editors };
@@ -0,0 +1,10 @@
1
+ import { type Plugin } from '..';
2
+ declare module '../index' {
3
+ interface TableProps {
4
+ }
5
+ interface TableColumn {
6
+ valueGetter?: (o: TDProps) => any;
7
+ valueSetter?: (o: TDProps, v: any) => void;
8
+ }
9
+ }
10
+ export declare const ExpressPlugin: Plugin;
@@ -0,0 +1,32 @@
1
+ import { createComponent } from "solid-js/web";
2
+ import { createComputed, untrack } from "solid-js";
3
+ const ExpressPlugin = {
4
+ name: "expand",
5
+ store: (e) => ({}),
6
+ rewriteProps: { Table: ({ Table: r }, { store: i }) => (a) => (createComputed(() => {
7
+ for (let e = 0; e < i.props.columns.length; e++) {
8
+ let n = i.props.columns[e];
9
+ if (!(!n.valueGetter && !n.valueSetter)) for (let r = 0; r < i.props.data.length; r++) {
10
+ let a = i.props.data[r];
11
+ n.id in a || Object.defineProperty(a, n.id, {
12
+ get: () => n.valueGetter?.({
13
+ col: n,
14
+ data: a,
15
+ x: e,
16
+ y: r
17
+ }),
18
+ set: (i) => untrack(() => n.valueSetter?.({
19
+ col: n,
20
+ data: a,
21
+ value: a[n.id],
22
+ x: e,
23
+ y: r
24
+ }, i)),
25
+ enumerable: !0,
26
+ configurable: !0
27
+ });
28
+ }
29
+ }
30
+ }), createComponent(r, a)) }
31
+ };
32
+ export { ExpressPlugin };
@@ -1,15 +1,27 @@
1
- import { type Plugin } from '..';
1
+ import { type Plugin, type TableProps } from '..';
2
2
  declare module '../index' {
3
3
  interface TableProps {
4
4
  }
5
5
  interface TableColumn {
6
+ table?: TableProps | ((p: {
7
+ data: any;
8
+ }) => TableProps);
6
9
  /**
7
10
  * 外键对象的属性。
8
11
  * 会自动将外键对象 组装到当前行数据中,便于在表格中显示外键对象中的其他属性。
9
12
  */
10
13
  foreignField?: string;
14
+ dialog?: boolean;
11
15
  }
12
16
  interface TableStore {
13
17
  }
14
18
  }
15
19
  export declare const OrmPlugin: Plugin;
20
+ export declare const TableSelect: (o: {
21
+ value: any;
22
+ valueObject?: any;
23
+ onChange?: (value: any) => void;
24
+ table: TableProps;
25
+ [key: string]: any;
26
+ }) => import("solid-js").JSX.Element;
27
+ export declare const fetchDataByKeys: (keys: any[], table: TableProps) => Promise<any[]>;
@@ -1,8 +1,9 @@
1
- import { toArr } from "../utils.js";
1
+ import { isEmpty, toArr, unFn } from "../utils.js";
2
2
  import { Tags } from "./RenderPlugin/components.js";
3
3
  import { editors } from "./EditablePlugin.js";
4
4
  import { renders } from "./RenderPlugin/index.js";
5
5
  import { Dialog } from "../components/Dialog.js";
6
+ import { Select } from "../components/Select.js";
6
7
  import { Intable } from "../index.js";
7
8
  import { createComponent, delegateEvents, insert, memo, mergeProps, template } from "solid-js/web";
8
9
  import { createComputed, createResource, createRoot, createSignal, mergeProps as mergeProps$1, splitProps, untrack } from "solid-js";
@@ -13,123 +14,178 @@ const OrmPlugin = {
13
14
  name: "orm",
14
15
  priority: -Infinity,
15
16
  store: (e) => ({}),
16
- rewriteProps: { Table: ({ Table: e }, { store: p }) => (m) => {
17
- let h = createMutable({});
17
+ rewriteProps: { Table: ({ Table: e }, { store: _ }) => (v) => {
18
+ let y = createMutable({});
18
19
  return createComputed(() => {
19
- let e = p.props.columns?.filter((e) => (e.type == "fk" || e.type == "fks") && e.foreignField);
20
- if (e.length) for (let m of e) for (let e of p.props.data) {
21
- if (m.foreignField in e) continue;
22
- Object.defineProperty(e, m.foreignField, {
23
- get: () => get(h, [m.id, e[p.props.rowKey]]),
24
- set: (g) => untrack(() => set(h, [m.id, e[p.props.rowKey]], g)),
20
+ let e = _.props.columns?.filter((e) => (e.type == "fk" || e.type == "fks") && e.foreignField);
21
+ if (e.length) for (let v of e) for (let e of _.props.data) {
22
+ if (v.foreignField in e) continue;
23
+ Object.defineProperty(e, v.foreignField, {
24
+ get: () => get(y, [v.id, e[_.props.rowKey]]),
25
+ set: (b) => untrack(() => set(y, [v.id, e[_.props.rowKey]], b)),
25
26
  enumerable: !0,
26
27
  configurable: !0
27
28
  });
28
29
  }
29
- }), createComponent(e, m);
30
+ }), createComponent(e, v);
30
31
  } }
31
32
  };
32
- var createDialogEditor = (e, p) => (m) => createRoot((h) => {
33
- let { eventKey: _, value: v, col: y, ok: b, cancel: x, props: S, onChange: C } = m, w = p?.out ?? ((e) => e), [E, D] = createSignal(_ || v), O = createComponent(e, mergeProps({
34
- get value() {
35
- return E();
36
- },
37
- onChange: (e) => (D(w(e)), C?.(E()), b())
38
- }, p, S, { aaa: m }));
39
- return {
40
- el: createComponent(Dialog, {
41
- get title() {
42
- return `选择 ${y.name}`;
33
+ var createEditor = (e) => (_) => createRoot((v) => {
34
+ let { eventKey: y, value: b, col: x, ok: S, cancel: C, props: w, onChange: T } = _, [E, D] = createSignal(b), O;
35
+ return setTimeout(() => {
36
+ O?.showPicker?.();
37
+ }, 0), {
38
+ el: createComponent(e, mergeProps({
39
+ ref: (e) => O = e,
40
+ get value() {
41
+ return E();
43
42
  },
44
- onCancel: x,
45
- onOk: b,
46
- class: "min-w-[40vw]",
47
- children: O
48
- }),
43
+ onChange: (e) => (D(e), T?.(E()), !Array.isArray(E()) && S())
44
+ }, w, { aaa: _ })),
49
45
  getValue: E,
50
- destroy: h,
51
- dialog: !0
46
+ destroy: v,
47
+ dialog: x.dialog
52
48
  };
53
- }), ObjTags = (m) => {
54
- let h;
55
- [m, h] = splitProps(m, [
49
+ }), ObjTags = (e) => {
50
+ let b;
51
+ [e, b] = splitProps(e, [
56
52
  "col",
57
53
  "data",
58
54
  "value",
59
55
  "onChange",
60
56
  "multiple"
61
57
  ]);
62
- let g = () => m.col.table?.columns?.[0].id, _ = () => m.col.table?.rowKey ?? "id";
58
+ let x = () => unFn(e.col.table, { data: e.data }), S = () => x()?.columns?.[0].id, C = () => x()?.rowKey ?? "id";
63
59
  return createComponent(Tags, mergeProps({
64
60
  get value() {
65
- return toArr(m.value).map((e) => ({
66
- label: e[g()],
67
- value: e[_()]
61
+ return toArr(e.value).map((e) => ({
62
+ label: e[S()],
63
+ value: e[C()]
68
64
  }));
69
65
  },
70
- onChange: (e) => m.onChange?.(m.multiple ? e : e[0])
71
- }, h));
72
- }, FKTags = (m) => {
73
- let h;
74
- [m, h] = splitProps(m, [
66
+ onChange: (_) => e.onChange?.(e.multiple ? _ : _[0])
67
+ }, b));
68
+ }, FKTags = (e) => {
69
+ let b;
70
+ [e, b] = splitProps(e, [
75
71
  "col",
76
72
  "data",
77
73
  "value",
78
74
  "onChange",
79
75
  "multiple"
80
76
  ]);
81
- let g = () => m.col.table?.columns?.[0].id, _ = () => m.col.table?.rowKey ?? "id", [v] = createResource(() => m.value, () => fetchDataByKeys(toArr(m.value).map((e) => e && typeof e != "object" ? e : e[_()]), m.col.table), { initialValue: [] });
77
+ let x = () => unFn(e.col.table, { data: e.data }), S = () => x()?.columns?.[0].id, C = () => x()?.rowKey ?? "id", [w] = createResource(() => e.value, () => fetchDataByKeys(toArr(e.value).map((e) => e && typeof e != "object" ? e : e[C()]), x()), { initialValue: [] });
82
78
  return createComputed(() => {
83
- v(), untrack(() => set(m.data, m.col.foreignField, m.multiple ? v() : v()[0]));
79
+ w(), untrack(() => set(e.data, e.col.foreignField, e.multiple ? w() : w()[0]));
84
80
  }), createComponent(Tags, mergeProps({
85
81
  get value() {
86
- return v().map((e) => ({
87
- label: e[g()],
88
- value: e[_()]
82
+ return w().map((e) => ({
83
+ label: e[S()],
84
+ value: e[C()]
89
85
  }));
90
86
  },
91
- onChange: (e) => m.onChange?.(m.multiple ? e : e[0])
92
- }, h));
93
- }, ObjEditor = createDialogEditor((p) => {
94
- let m = mergeProps$1(() => p.aaa.col), h = () => m.table?.rowKey ?? "id", g = () => m.type == "objs" || m.type == "fks", v = () => m.type == "fk" || m.type == "fks", x = () => v() ? toArr(p.value).map((e) => ({ [h()]: e })) : toArr(p.value), S = (e) => p.onChange(v() ? g() ? e.map((e) => e[h()]) : e?.[h()] ?? null : e);
95
- return (() => {
96
- var e = _tmpl$(), h = e.firstChild, C = h.firstChild, w = C.firstChild, T = w.firstChild, E = T.nextSibling;
97
- E.nextSibling;
98
- var D = w.nextSibling, O = h.nextSibling;
99
- return insert(w, () => x().length, E), D.$$click = () => p.onChange?.(g() ? [] : null), insert(h, (() => {
100
- var e = memo(() => !!v());
101
- return () => e() ? createComponent(FKTags, mergeProps(p, {
102
- class: "ml-2",
103
- col: m,
104
- get value() {
105
- return x();
106
- },
107
- onChange: S,
108
- get multiple() {
109
- return g();
110
- }
111
- })) : createComponent(ObjTags, mergeProps(p, {
112
- class: "ml-2",
113
- col: m,
114
- get value() {
115
- return x();
116
- },
117
- onChange: S,
118
- get multiple() {
119
- return g();
87
+ onChange: (_) => e.onChange?.(e.multiple ? _ : _[0])
88
+ }, b));
89
+ }, ObjEditor = createEditor((e) => {
90
+ let y = mergeProps$1(() => e.aaa.col), b = () => unFn(y.table, { data: e.aaa.data })?.rowKey ?? "id", x = () => y.type == "objs" || y.type == "fks", C = () => y.type == "fk" || y.type == "fks", T = () => C() ? toArr(e.value).map((e) => ({ [b()]: e })) : toArr(e.value), O = (_) => e.onChange(C() ? x() ? _.map((e) => e[b()]) : _?.[b()] ?? null : _);
91
+ return memo(() => memo(() => !!y.dialog)() ? createComponent(Dialog, {
92
+ get title() {
93
+ return `选择 ${y.name}`;
94
+ },
95
+ get onCancel() {
96
+ return e.aaa.cancel;
97
+ },
98
+ get onOk() {
99
+ return e.aaa.ok;
100
+ },
101
+ class: "min-w-[40vw]",
102
+ get children() {
103
+ var _ = _tmpl$(), v = _.firstChild, b = v.firstChild, S = b.firstChild, k = S.firstChild, A = k.nextSibling;
104
+ A.nextSibling;
105
+ var j = S.nextSibling, M = v.nextSibling;
106
+ return insert(S, () => T().length, A), j.$$click = () => e.onChange?.(x() ? [] : null), insert(v, (() => {
107
+ var _ = memo(() => !!C());
108
+ return () => _() ? createComponent(FKTags, mergeProps(e, {
109
+ class: "ml-2",
110
+ col: y,
111
+ get value() {
112
+ return T();
113
+ },
114
+ onChange: O,
115
+ get multiple() {
116
+ return x();
117
+ }
118
+ })) : createComponent(ObjTags, mergeProps(e, {
119
+ class: "ml-2",
120
+ col: y,
121
+ get value() {
122
+ return T();
123
+ },
124
+ onChange: O,
125
+ get multiple() {
126
+ return x();
127
+ }
128
+ }));
129
+ })(), null), insert(M, createComponent(Intable, mergeProps(() => e.aaa.col.table, {
130
+ class: "max-h-[65vh]",
131
+ get rowSelection() {
132
+ return {
133
+ ...e.aaa.col.table?.rowSelection,
134
+ enable: !0,
135
+ multiple: x(),
136
+ value: T(),
137
+ onChange: O
138
+ };
120
139
  }
121
- }));
122
- })(), null), insert(O, createComponent(Intable, mergeProps(() => p.aaa.col.table, { get rowSelection() {
123
- return {
124
- ...p.aaa.col.table?.rowSelection,
125
- enable: !0,
126
- multiple: g(),
127
- value: p.value,
128
- onChange: S
129
- };
130
- } }))), e;
131
- })();
140
+ }))), _;
141
+ }
142
+ }) : createComponent(TableSelect, mergeProps(e, {
143
+ get table() {
144
+ return unFn(y.table, { data: e.aaa.data });
145
+ },
146
+ get valueObject() {
147
+ return !C();
148
+ },
149
+ class: "min-h-full outline-1.5 outline-offset--1.5 outline-[--c-primary] bg-[--table-bg] py-1",
150
+ border: !1,
151
+ get multiple() {
152
+ return x();
153
+ }
154
+ })));
132
155
  });
156
+ const TableSelect = (e) => {
157
+ let v = () => e.table?.rowKey ?? "id", y = () => e.multiple, b = () => !e.valueObject, x = () => b() ? toArr(e.value) : toArr(e.value).map((e) => e[v()]), [S] = createResource(x, () => fetchDataByKeys(x(), e.table), { initialValue: [] });
158
+ return createComponent(Select, mergeProps(e, {
159
+ searchable: !0,
160
+ get options() {
161
+ return S().map((_) => ({
162
+ label: _[e.table?.columns?.[0].id],
163
+ value: b() ? _[v()] : _
164
+ }));
165
+ },
166
+ request: ({ keyword: _ }) => {
167
+ let y = [];
168
+ return _ && y.push({
169
+ field: e.table?.columns?.[0].id,
170
+ op: "like",
171
+ value: _
172
+ }), e.table?.filter && y.push(...e.table.filter.value ?? e.table.filter.initialValue ?? e.table.filter.defaultValue ?? []), e.table?.request?.({ filters: y }).then((_) => _.data.map((_) => ({
173
+ label: _[e.table?.columns?.[0].id],
174
+ value: b() ? _[v()] : _
175
+ })));
176
+ },
177
+ get valueKey() {
178
+ return memo(() => !!b())() ? void 0 : v();
179
+ },
180
+ get value() {
181
+ return e.value;
182
+ },
183
+ onChange: (_) => e.onChange?.(_),
184
+ get multiple() {
185
+ return y();
186
+ }
187
+ }));
188
+ };
133
189
  editors.obj = ObjEditor, editors.objs = ObjEditor, editors.fk = ObjEditor, editors.fks = ObjEditor, renders.fk = (e) => createComponent(FKTags, mergeProps(e, { disabled: !0 })), renders.fks = (e) => createComponent(FKTags, mergeProps(e, {
134
190
  disabled: !0,
135
191
  multiple: !0
@@ -137,25 +193,26 @@ editors.obj = ObjEditor, editors.objs = ObjEditor, editors.fk = ObjEditor, edito
137
193
  disabled: !0,
138
194
  multiple: !0
139
195
  }));
140
- var fetchDataByKeys = (() => {
141
- let e = /* @__PURE__ */ new WeakMap(), p = (p) => {
142
- let m = e.get(p.request) || e.set(p.request, {}).get(p.request);
143
- return m[p.rowKey] ??= [{}, {}];
196
+ const fetchDataByKeys = (() => {
197
+ let _ = /* @__PURE__ */ new WeakMap(), v = (e) => {
198
+ let v = _.get(e.request) || _.set(e.request, {}).get(e.request);
199
+ return v[e.rowKey] ??= [{}, {}];
144
200
  };
145
- return async (e, m) => {
146
- let [h, g] = p(m), _ = e.filter((e) => !h[e]);
147
- if (_.length) {
148
- let e = _.filter((e) => !g[e]), p = m.request?.({ filters: [{
149
- field: m.rowKey,
201
+ return async (_, y) => {
202
+ if (!y.request || (_ = _.filter((_) => !isEmpty(_)), !_.length)) return [];
203
+ let [b, x] = v(y), S = _.filter((e) => !b[e]);
204
+ if (S.length) {
205
+ let e = S.filter((e) => !x[e]), _ = y.request({ filters: [{
206
+ field: y.rowKey,
150
207
  op: "in",
151
208
  value: e
152
209
  }] });
153
- e.forEach((e, m) => {
154
- g[e] = p.then((p) => h[e] = p.data[m]).finally(() => delete g[e]);
155
- }), await Promise.all(_.map((e) => g[e]));
210
+ e.forEach((e, v) => {
211
+ x[e] = _.then((_) => b[e] = _.data[v]).finally(() => delete x[e]);
212
+ }), await Promise.all(S.map((e) => x[e]));
156
213
  }
157
- return e.map((e) => h[e]);
214
+ return _.map((e) => b[e]);
158
215
  };
159
216
  })();
160
217
  delegateEvents(["click"]);
161
- export { OrmPlugin };
218
+ export { OrmPlugin, TableSelect, fetchDataByKeys };
@@ -7,16 +7,10 @@ declare module '..' {
7
7
  defaultValue?: number;
8
8
  value?: number;
9
9
  onChange?: (page: number) => void;
10
- /** Server-side pagination: called on page change with (page, pageSize).
11
- * Parent should update `data` and `total` in response. */
12
- request?: (page: number, pageSize: number) => void | Promise<void>;
13
- /** Total record count (required for server-side pagination) */
14
10
  total?: number;
15
11
  };
16
12
  }
17
13
  interface TableStore {
18
- _pgnTotal: number;
19
- _pgnLoading: boolean;
20
14
  }
21
15
  }
22
16
  export declare const PaginationPlugin: Plugin;