intable 0.0.64 → 0.0.66

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 };
@@ -1,4 +1,4 @@
1
- import { type Plugin } from '..';
1
+ import { type Plugin, type TableProps } from '..';
2
2
  declare module '../index' {
3
3
  interface TableProps {
4
4
  }
@@ -8,8 +8,16 @@ declare module '../index' {
8
8
  * 会自动将外键对象 组装到当前行数据中,便于在表格中显示外键对象中的其他属性。
9
9
  */
10
10
  foreignField?: string;
11
+ dialog?: boolean;
11
12
  }
12
13
  interface TableStore {
13
14
  }
14
15
  }
15
16
  export declare const OrmPlugin: Plugin;
17
+ export declare const TableSelect: (o: {
18
+ value: any;
19
+ valueObject?: any;
20
+ onChange?: (value: any) => void;
21
+ table: TableProps;
22
+ [key: string]: any;
23
+ }) => import("solid-js").JSX.Element;
@@ -1,8 +1,9 @@
1
- import { toArr } from "../utils.js";
1
+ import { isEmpty, toArr } 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,176 @@ 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: g }) => (_) => {
18
+ let v = 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 = g.props.columns?.filter((e) => (e.type == "fk" || e.type == "fks") && e.foreignField);
21
+ if (e.length) for (let _ of e) for (let e of g.props.data) {
22
+ if (_.foreignField in e) continue;
23
+ Object.defineProperty(e, _.foreignField, {
24
+ get: () => get(v, [_.id, e[g.props.rowKey]]),
25
+ set: (y) => untrack(() => set(v, [_.id, e[g.props.rowKey]], y)),
25
26
  enumerable: !0,
26
27
  configurable: !0
27
28
  });
28
29
  }
29
- }), createComponent(e, m);
30
+ }), createComponent(e, _);
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) => (g) => createRoot((_) => {
34
+ let { eventKey: v, value: y, col: b, ok: x, cancel: S, props: C, onChange: w } = g, [T, E] = createSignal(y), D;
35
+ return setTimeout(() => {
36
+ D?.showPicker?.();
37
+ }, 0), {
38
+ el: createComponent(e, mergeProps({
39
+ ref: (e) => D = e,
40
+ get value() {
41
+ return T();
43
42
  },
44
- onCancel: x,
45
- onOk: b,
46
- class: "min-w-[40vw]",
47
- children: O
48
- }),
49
- getValue: E,
50
- destroy: h,
51
- dialog: !0
43
+ onChange: (e) => (E(e), w?.(T()), !Array.isArray(T()) && x())
44
+ }, C, { aaa: g })),
45
+ getValue: T,
46
+ destroy: _,
47
+ dialog: b.dialog
52
48
  };
53
- }), ObjTags = (m) => {
54
- let h;
55
- [m, h] = splitProps(m, [
49
+ }), ObjTags = (e) => {
50
+ let v;
51
+ [e, v] = 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 y = () => e.col.table?.columns?.[0].id, b = () => e.col.table?.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[y()],
63
+ value: e[b()]
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: (g) => e.onChange?.(e.multiple ? g : g[0])
67
+ }, v));
68
+ }, FKTags = (e) => {
69
+ let v;
70
+ [e, v] = 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 y = () => e.col.table?.columns?.[0].id, b = () => e.col.table?.rowKey ?? "id", [x] = createResource(() => e.value, () => fetchDataByKeys(toArr(e.value).map((e) => e && typeof e != "object" ? e : e[b()]), e.col.table), { initialValue: [] });
82
78
  return createComputed(() => {
83
- v(), untrack(() => set(m.data, m.col.foreignField, m.multiple ? v() : v()[0]));
79
+ x(), untrack(() => set(e.data, e.col.foreignField, e.multiple ? x() : x()[0]));
84
80
  }), createComponent(Tags, mergeProps({
85
81
  get value() {
86
- return v().map((e) => ({
87
- label: e[g()],
88
- value: e[_()]
82
+ return x().map((e) => ({
83
+ label: e[y()],
84
+ value: e[b()]
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: (g) => e.onChange?.(e.multiple ? g : g[0])
88
+ }, v));
89
+ }, ObjEditor = createEditor((e) => {
90
+ let _ = mergeProps$1(() => e.aaa.col), v = () => _.table?.rowKey ?? "id", y = () => _.type == "objs" || _.type == "fks", x = () => _.type == "fk" || _.type == "fks", C = () => x() ? toArr(e.value).map((e) => ({ [v()]: e })) : toArr(e.value), E = (g) => e.onChange(x() ? y() ? g.map((e) => e[v()]) : g?.[v()] ?? null : g);
91
+ return memo(() => memo(() => !!_.dialog)() ? createComponent(Dialog, {
92
+ get title() {
93
+ return `选择 ${_.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 g = _tmpl$(), v = g.firstChild, b = v.firstChild, D = b.firstChild, O = D.firstChild, k = O.nextSibling;
104
+ k.nextSibling;
105
+ var A = D.nextSibling, j = v.nextSibling;
106
+ return insert(D, () => C().length, k), A.$$click = () => e.onChange?.(y() ? [] : null), insert(v, (() => {
107
+ var g = memo(() => !!x());
108
+ return () => g() ? createComponent(FKTags, mergeProps(e, {
109
+ class: "ml-2",
110
+ col: _,
111
+ get value() {
112
+ return C();
113
+ },
114
+ onChange: E,
115
+ get multiple() {
116
+ return y();
117
+ }
118
+ })) : createComponent(ObjTags, mergeProps(e, {
119
+ class: "ml-2",
120
+ col: _,
121
+ get value() {
122
+ return C();
123
+ },
124
+ onChange: E,
125
+ get multiple() {
126
+ return y();
127
+ }
128
+ }));
129
+ })(), null), insert(j, 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: y(),
136
+ value: C(),
137
+ onChange: E
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
+ }))), g;
141
+ }
142
+ }) : createComponent(TableSelect, mergeProps(e, {
143
+ col: _,
144
+ get table() {
145
+ return _.table;
146
+ },
147
+ get valueObject() {
148
+ return !x();
149
+ },
150
+ class: "min-h-full outline-1.5 outline-offset--1.5 outline-[--c-primary] bg-[--table-bg] py-1",
151
+ border: !1,
152
+ get multiple() {
153
+ return y();
154
+ }
155
+ })));
132
156
  });
157
+ const TableSelect = (e) => {
158
+ let _ = () => e.table?.rowKey ?? "id", v = () => e.multiple, y = () => !e.valueObject, b = () => y() ? toArr(e.value) : toArr(e.value).map((e) => e[_()]), [S] = createResource(b, () => fetchDataByKeys(b(), e.table), { initialValue: [] });
159
+ return createComponent(Select, mergeProps(e, {
160
+ searchable: !0,
161
+ get options() {
162
+ return S().map((g) => ({
163
+ label: g[e.table?.columns?.[0].id],
164
+ value: y() ? g[_()] : g
165
+ }));
166
+ },
167
+ request: ({ keyword: g }) => e.table?.request?.({ filters: g ? [{
168
+ field: e.table?.columns?.[0].id,
169
+ op: "like",
170
+ value: g
171
+ }] : [] }).then((g) => g.data.map((g) => ({
172
+ label: g[e.table?.columns?.[0].id],
173
+ value: y() ? g[_()] : g
174
+ }))),
175
+ get valueKey() {
176
+ return memo(() => !!y())() ? void 0 : _();
177
+ },
178
+ get value() {
179
+ return e.value;
180
+ },
181
+ onChange: (g) => e.onChange?.(g),
182
+ get multiple() {
183
+ return v();
184
+ }
185
+ }));
186
+ };
133
187
  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
188
  disabled: !0,
135
189
  multiple: !0
@@ -138,24 +192,26 @@ editors.obj = ObjEditor, editors.objs = ObjEditor, editors.fk = ObjEditor, edito
138
192
  multiple: !0
139
193
  }));
140
194
  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] ??= [{}, {}];
195
+ let g = /* @__PURE__ */ new WeakMap(), _ = (e) => {
196
+ let _ = g.get(e.request) || g.set(e.request, {}).get(e.request);
197
+ return _[e.rowKey] ??= [{}, {}];
144
198
  };
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,
199
+ return async (g, v) => {
200
+ if (!v.request) return [];
201
+ g = g.filter((g) => !isEmpty(g));
202
+ let [y, b] = _(v), x = g.filter((e) => !y[e]);
203
+ if (x.length) {
204
+ let e = x.filter((e) => !b[e]), g = v.request({ filters: [{
205
+ field: v.rowKey,
150
206
  op: "in",
151
207
  value: e
152
208
  }] });
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]));
209
+ e.forEach((e, _) => {
210
+ b[e] = g.then((g) => y[e] = g.data[_]).finally(() => delete b[e]);
211
+ }), await Promise.all(x.map((e) => b[e]));
156
212
  }
157
- return e.map((e) => h[e]);
213
+ return g.map((e) => y[e]);
158
214
  };
159
215
  })();
160
216
  delegateEvents(["click"]);
161
- export { OrmPlugin };
217
+ export { OrmPlugin, TableSelect };
@@ -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;