intable 0.0.34 → 0.0.36
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.
- package/dist/__uno.css +1 -1
- package/dist/components/Menu.js +49 -58
- package/dist/components/Render.js +16 -9
- package/dist/components/Textarea.d.ts +14 -0
- package/dist/components/Textarea.js +68 -0
- package/dist/hooks/useSelector.d.ts +2 -0
- package/dist/hooks/useSelector.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -5
- package/dist/plugins/EditablePlugin.js +66 -61
- package/dist/plugins/FilterPlugin.js +3 -3
- package/dist/plugins/MenuPlugin.js +90 -71
- package/dist/plugins/RowSelectionPlugin.js +22 -10
- package/dist/plugins/SortPlugin.d.ts +2 -2
- package/dist/plugins/SortPlugin.js +49 -47
- package/dist/plugins/ValidatorPlugin.js +0 -1
- package/dist/style.css +2 -2
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { chooseFile, resolveOptions, unFn } from "../utils.js";
|
|
2
2
|
import { Checkbox, Files } from "./RenderPlugin/components.js";
|
|
3
|
+
import Textarea_default from "../components/Textarea.js";
|
|
3
4
|
import { Ctx } from "../index.js";
|
|
4
5
|
import { addEventListener, createComponent, delegateEvents, effect, insert, memo, mergeProps, spread, template, use } from "solid-js/web";
|
|
5
6
|
import { createComputed, createEffect, createMemo, createRoot, createSignal, on, onCleanup, useContext } from "solid-js";
|
|
@@ -7,41 +8,41 @@ import { createMutable } from "solid-js/store";
|
|
|
7
8
|
import { combineProps } from "@solid-primitives/props";
|
|
8
9
|
import { createAsyncMemo } from "@solid-primitives/memo";
|
|
9
10
|
import { delay } from "es-toolkit";
|
|
10
|
-
var _tmpl$ = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper tabindex=-1>"), _tmpl$2 = /* @__PURE__ */ template("<span class=cell-validating>"), _tmpl$3 = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$4 = /* @__PURE__ */ template("<input>"), _tmpl$5 = /* @__PURE__ */ template("<
|
|
11
|
+
var _tmpl$ = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper tabindex=-1>"), _tmpl$2 = /* @__PURE__ */ template("<span class=cell-validating>"), _tmpl$3 = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$4 = /* @__PURE__ */ template("<input>"), _tmpl$5 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">"), _tmpl$6 = /* @__PURE__ */ template("<select><option value>-"), _tmpl$7 = /* @__PURE__ */ template("<option>");
|
|
11
12
|
const EditablePlugin = {
|
|
12
13
|
name: "editable",
|
|
13
14
|
store: () => ({ editors: { ...editors } }),
|
|
14
15
|
rewriteProps: {
|
|
15
|
-
editable: ({ editable: e }, { store:
|
|
16
|
-
let
|
|
17
|
-
return !!
|
|
16
|
+
editable: ({ editable: e }, { store: y }) => (x) => {
|
|
17
|
+
let S = [x.col.editable, e].filter((e) => e != null);
|
|
18
|
+
return !!S.length && S.every((e) => unFn(e, x)) && !x.data[y.internal] && !x.col[y.internal];
|
|
18
19
|
},
|
|
19
|
-
Td: ({ Td: e }, { store:
|
|
20
|
-
let
|
|
21
|
-
if (
|
|
22
|
-
let e = !1,
|
|
23
|
-
props:
|
|
24
|
-
col:
|
|
25
|
-
eventKey:
|
|
26
|
-
data:
|
|
27
|
-
value:
|
|
20
|
+
Td: ({ Td: e }, { store: y }) => (x) => {
|
|
21
|
+
let S, { props: C } = useContext(Ctx), [E, D] = createSignal(!1), k = "", A = () => unFn(C.editable, x), M = () => (([e, y]) => x.x == e && x.y == y)(y.selected.start || []), N = () => M() && A() && !E(), [P, F] = createSignal(!1), I = createAsyncMemo(() => {
|
|
22
|
+
if (E()) {
|
|
23
|
+
let e = !1, b = x.data[x.col.id], S = ((e) => typeof e == "string" ? y.editors[e] : e)(x.col.editor ?? x.col.type ?? (x.col.enum ? "select" : "text")), w = {
|
|
24
|
+
props: x.col.editorProps,
|
|
25
|
+
col: x.col,
|
|
26
|
+
eventKey: k,
|
|
27
|
+
data: x.data,
|
|
28
|
+
value: b,
|
|
28
29
|
ok: async () => {
|
|
29
|
-
await L(
|
|
30
|
+
await L(T.getValue()), D(!1);
|
|
30
31
|
},
|
|
31
32
|
cancel: () => (e = !0, D(!1)),
|
|
32
|
-
onChange: (e) =>
|
|
33
|
-
},
|
|
33
|
+
onChange: (e) => E() && L(e).catch(() => {})
|
|
34
|
+
}, T = S(w);
|
|
34
35
|
return onCleanup(() => {
|
|
35
|
-
!e &&
|
|
36
|
-
...
|
|
37
|
-
[
|
|
38
|
-
}), e || L(
|
|
39
|
-
}), [
|
|
36
|
+
!e && T.getValue() !== b && y.commands.rowChange({
|
|
37
|
+
...C.data[x.y],
|
|
38
|
+
[x.col.id]: T.getValue()
|
|
39
|
+
}), e || L(T.getValue()).catch(() => {}), k = "", T.destroy();
|
|
40
|
+
}), [w, T];
|
|
40
41
|
}
|
|
41
42
|
});
|
|
42
43
|
async function L(e) {
|
|
43
44
|
try {
|
|
44
|
-
F(!0), await
|
|
45
|
+
F(!0), await y.validateCell(e, x.data, x.col);
|
|
45
46
|
} finally {
|
|
46
47
|
F(!1);
|
|
47
48
|
}
|
|
@@ -49,8 +50,8 @@ const EditablePlugin = {
|
|
|
49
50
|
createEffect(() => {
|
|
50
51
|
I()?.[1]?.focus?.();
|
|
51
52
|
}), createEffect(() => {
|
|
52
|
-
if (
|
|
53
|
-
let e = createMemo(() => JSON.stringify(
|
|
53
|
+
if (E()) {
|
|
54
|
+
let e = createMemo(() => JSON.stringify(y.selected ?? "{}"));
|
|
54
55
|
createEffect(on(e, () => D(!1), { defer: !0 }));
|
|
55
56
|
}
|
|
56
57
|
});
|
|
@@ -58,32 +59,32 @@ const EditablePlugin = {
|
|
|
58
59
|
w: 0,
|
|
59
60
|
h: 0
|
|
60
61
|
});
|
|
61
|
-
return createComputed(() =>
|
|
62
|
-
ref: (e) =>
|
|
62
|
+
return createComputed(() => E() && (z.w = S.getBoundingClientRect().width, z.h = S.getBoundingClientRect().height)), x = combineProps(x, {
|
|
63
|
+
ref: (e) => S = e,
|
|
63
64
|
get class() {
|
|
64
|
-
return
|
|
65
|
+
return E() ? "is-editing" : "";
|
|
65
66
|
},
|
|
66
67
|
get style() {
|
|
67
|
-
return
|
|
68
|
+
return E() ? `width: ${z.w}px; height: ${z.h}px; padding: 0; ` : "";
|
|
68
69
|
},
|
|
69
70
|
onClick: () => R?.focus?.(),
|
|
70
|
-
onDblClick: () => D(
|
|
71
|
+
onDblClick: () => D(A()),
|
|
71
72
|
onKeyDown: (e) => e.key == "Escape" && I()?.[0].cancel()
|
|
72
|
-
}), createComponent(e, mergeProps(
|
|
73
|
+
}), createComponent(e, mergeProps(x, { get children() {
|
|
73
74
|
return [memo(() => memo(() => !!I()?.[1]?.el)() ? (() => {
|
|
74
75
|
var e = _tmpl$();
|
|
75
76
|
return addEventListener(e, "keydown", (e) => {
|
|
76
|
-
e.stopPropagation(), e.key == "Enter" && !e.shiftKey && I()?.[0].ok(), e.key == "Escape" && I()?.[0].cancel();
|
|
77
|
+
e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (I()?.[0].ok(), e.preventDefault()), e.key == "Escape" && I()?.[0].cancel();
|
|
77
78
|
}), addEventListener(e, "pointerdown", (e) => e.stopPropagation()), insert(e, () => I()?.[1]?.el, null), insert(e, (() => {
|
|
78
79
|
var e = memo(() => !!P());
|
|
79
80
|
return () => e() && _tmpl$2();
|
|
80
81
|
})(), null), e;
|
|
81
|
-
})() :
|
|
82
|
+
})() : x.children), memo(() => memo(() => !!N())() && (() => {
|
|
82
83
|
var e = _tmpl$3();
|
|
83
84
|
return e.addEventListener("compositionend", () => {
|
|
84
85
|
D(!0);
|
|
85
86
|
}), e.$$input = (e) => {
|
|
86
|
-
|
|
87
|
+
k = e.target.value, D(!e.isComposing);
|
|
87
88
|
}, e.$$keydown = (e) => {
|
|
88
89
|
e.key == " " && e.preventDefault();
|
|
89
90
|
}, use((e) => {
|
|
@@ -94,35 +95,39 @@ const EditablePlugin = {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
};
|
|
97
|
-
var createEditor = (e,
|
|
98
|
-
let [
|
|
98
|
+
var createEditor = (e, b, x) => ({ eventKey: S, value: C, col: w, ok: T, cancel: E, props: D, onChange: O }) => createRoot((E) => {
|
|
99
|
+
let [k, A] = createSignal(S || C), j;
|
|
99
100
|
return createComponent(e, mergeProps({
|
|
100
|
-
ref: (e) =>
|
|
101
|
+
ref: (e) => j = e,
|
|
101
102
|
class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
|
|
102
103
|
get value() {
|
|
103
|
-
return
|
|
104
|
+
return k();
|
|
104
105
|
},
|
|
105
|
-
onInput: (e) => (
|
|
106
|
-
onChange: (e) => (
|
|
106
|
+
onInput: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k())),
|
|
107
|
+
onChange: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k()), x && T()),
|
|
107
108
|
get options() {
|
|
108
|
-
return memo(() => !!
|
|
109
|
+
return memo(() => !!w.enum)() ? resolveOptions(w.enum ?? []) : void 0;
|
|
109
110
|
}
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
}, b, D)), setTimeout(() => {
|
|
112
|
+
x && j?.showPicker?.();
|
|
113
|
+
}, 0), {
|
|
114
|
+
el: j,
|
|
115
|
+
getValue: k,
|
|
116
|
+
focus: () => j.focus(),
|
|
117
|
+
destroy: E
|
|
115
118
|
};
|
|
116
119
|
}), Input = (e) => (() => {
|
|
117
|
-
var
|
|
118
|
-
return spread(
|
|
120
|
+
var y = _tmpl$4();
|
|
121
|
+
return spread(y, e, !1, !1), y;
|
|
119
122
|
})();
|
|
120
123
|
const editors = {
|
|
121
124
|
text: createEditor(Input),
|
|
122
|
-
textarea: createEditor((e) => ((
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
125
|
+
textarea: createEditor((e) => createComponent(Textarea_default, mergeProps({ autosize: {
|
|
126
|
+
minRows: 2,
|
|
127
|
+
maxRows: 3
|
|
128
|
+
} }, e, { get class() {
|
|
129
|
+
return `${e.class} bg-[--table-bg] outline-1.5px outline-solid outline-[--c-primary]`;
|
|
130
|
+
} }))),
|
|
126
131
|
number: createEditor(Input, { type: "number" }),
|
|
127
132
|
range: createEditor(Input, { type: "range" }),
|
|
128
133
|
date: createEditor(Input, { type: "date" }, !0),
|
|
@@ -131,27 +136,27 @@ const editors = {
|
|
|
131
136
|
color: createEditor(Input, { type: "color" }),
|
|
132
137
|
tel: createEditor(Input, { type: "tel" }),
|
|
133
138
|
password: createEditor(Input, { type: "password" }),
|
|
134
|
-
file: createEditor((
|
|
139
|
+
file: createEditor((y) => createComponent(Files, mergeProps(y, {
|
|
135
140
|
class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
|
|
136
|
-
onAdd: () => chooseFile({ multiple: !0 }).then((e) =>
|
|
141
|
+
onAdd: () => chooseFile({ multiple: !0 }).then((e) => y.onChange([...y.value || [], ...e.map((e) => ({
|
|
137
142
|
name: e.name,
|
|
138
143
|
size: e.size
|
|
139
144
|
}))]))
|
|
140
145
|
}))),
|
|
141
146
|
checkbox: createEditor((e) => (() => {
|
|
142
|
-
var
|
|
143
|
-
return typeof
|
|
147
|
+
var y = _tmpl$5(), b = e.ref;
|
|
148
|
+
return typeof b == "function" ? use(b, y) : e.ref = y, insert(y, createComponent(Checkbox, mergeProps(e, {
|
|
144
149
|
ref: () => {},
|
|
145
150
|
onInput: () => {},
|
|
146
151
|
class: "mx-3!"
|
|
147
|
-
}))),
|
|
152
|
+
}))), y;
|
|
148
153
|
})()),
|
|
149
154
|
select: createEditor((e) => (() => {
|
|
150
|
-
var
|
|
151
|
-
return spread(
|
|
152
|
-
var
|
|
153
|
-
return insert(
|
|
154
|
-
})())),
|
|
155
|
+
var y = _tmpl$6();
|
|
156
|
+
return y.firstChild, spread(y, e, !1, !0), insert(y, () => e.options?.map((y) => (() => {
|
|
157
|
+
var b = _tmpl$7();
|
|
158
|
+
return insert(b, () => y.label), effect(() => b.selected = y.value === e.value), effect(() => b.value = y.value), b;
|
|
159
|
+
})()), null), y;
|
|
155
160
|
})(), {}, !0)
|
|
156
161
|
};
|
|
157
162
|
delegateEvents(["keydown", "input"]);
|
|
@@ -112,10 +112,10 @@ const FilterPlugin = {
|
|
|
112
112
|
...e
|
|
113
113
|
}, e), m.filter ??= useControlled(e, m.owner), m.filter.$setOpt(e), m.filter),
|
|
114
114
|
newRow: ({ newRow: e }, { store: h }) => function(...g) {
|
|
115
|
-
let _ = e(...g), {
|
|
116
|
-
return
|
|
115
|
+
let _ = e(...g), { columns: v } = h.props;
|
|
116
|
+
return v.forEach((e) => {
|
|
117
117
|
if (e[h.internal] || !e.filterable) return;
|
|
118
|
-
let g =
|
|
118
|
+
let g = h.props.filter.value.find((m) => isRuleNode(m) && m.field === e.id);
|
|
119
119
|
g && isRuleNode(g) && (_[e.id] = {
|
|
120
120
|
ne: `not ${g.value}`,
|
|
121
121
|
between: toArr(g.value)[0],
|
|
@@ -2,137 +2,156 @@ import { useMemoAsync } from "../hooks/index.js";
|
|
|
2
2
|
import { findParent } from "../tree.js";
|
|
3
3
|
import "../utils.js";
|
|
4
4
|
import { Menu } from "../components/Menu.js";
|
|
5
|
-
import { createComponent, memo } from "solid-js/web";
|
|
5
|
+
import { addEventListener, createComponent, delegateEvents, effect, memo, template } from "solid-js/web";
|
|
6
6
|
import { batch, createMemo, createSignal, mapArray } from "solid-js";
|
|
7
7
|
import { delay, range, remove } from "es-toolkit";
|
|
8
8
|
import { createEventListener } from "@solid-primitives/event-listener";
|
|
9
9
|
import { autoPlacement, computePosition } from "@floating-ui/dom";
|
|
10
|
+
var _tmpl$ = /* @__PURE__ */ template("<input type=number class=\"mx-2 p-0! w-8! h-5 text-center in-input bg-[--bg] input-no-spin\">"), state = {
|
|
11
|
+
c1: 1,
|
|
12
|
+
c2: 1
|
|
13
|
+
};
|
|
10
14
|
const MenuPlugin = {
|
|
11
15
|
name: "menu",
|
|
12
16
|
priority: Infinity,
|
|
13
17
|
store: (e) => ({}),
|
|
14
|
-
layers: [(
|
|
15
|
-
let [
|
|
16
|
-
createEventListener(() =>
|
|
17
|
-
function
|
|
18
|
-
e.preventDefault(),
|
|
18
|
+
layers: [(c) => {
|
|
19
|
+
let [u, f] = createSignal(), p = mapArray(() => c.plugins || [], (e) => createMemo(() => e.menus?.(c))), h = createMemo(() => p().flatMap((e) => e() || [])), [g, b] = createSignal();
|
|
20
|
+
createEventListener(() => c.table, "contextmenu", x);
|
|
21
|
+
function x(e) {
|
|
22
|
+
e.preventDefault(), c.table.contains(e.target) && b({
|
|
19
23
|
x: e.x,
|
|
20
24
|
y: e.y
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
27
|
createEventListener(document, "pointerdown", (e) => {
|
|
24
|
-
|
|
28
|
+
u()?.contains(e.target) || b();
|
|
25
29
|
});
|
|
26
|
-
let
|
|
27
|
-
let e =
|
|
28
|
-
if (e) return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(
|
|
30
|
+
let S = useMemoAsync(() => {
|
|
31
|
+
let e = u();
|
|
32
|
+
if (e) return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(g()) }, e, {
|
|
29
33
|
strategy: "fixed",
|
|
30
34
|
placement: "top-start",
|
|
31
35
|
middleware: [autoPlacement({
|
|
32
36
|
boundary: document.body,
|
|
33
37
|
alignment: "start"
|
|
34
38
|
})]
|
|
35
|
-
}).then(({ x: e, y:
|
|
39
|
+
}).then(({ x: e, y: c }) => ({
|
|
36
40
|
position: "fixed",
|
|
37
|
-
transform: `translate(${e}px, ${
|
|
41
|
+
transform: `translate(${e}px, ${c}px)`,
|
|
38
42
|
top: 0,
|
|
39
43
|
left: 0,
|
|
40
44
|
"z-index": 10
|
|
41
45
|
}));
|
|
42
46
|
});
|
|
43
|
-
return memo(() => memo(() => !!
|
|
44
|
-
ref:
|
|
47
|
+
return memo(() => memo(() => !!g())() && createComponent(Menu, {
|
|
48
|
+
ref: f,
|
|
45
49
|
class: "pointer-events-auto",
|
|
46
50
|
get style() {
|
|
47
|
-
return
|
|
51
|
+
return S() || "position: fixed";
|
|
48
52
|
},
|
|
49
53
|
get items() {
|
|
50
|
-
return
|
|
54
|
+
return h();
|
|
51
55
|
},
|
|
52
|
-
onAction: () =>
|
|
56
|
+
onAction: () => b()
|
|
53
57
|
}));
|
|
54
58
|
}],
|
|
55
59
|
menus: (e) => [
|
|
56
60
|
{
|
|
57
|
-
label:
|
|
58
|
-
|
|
61
|
+
label: () => [
|
|
62
|
+
"↑ 新增 ",
|
|
63
|
+
(() => {
|
|
64
|
+
var e = _tmpl$();
|
|
65
|
+
return addEventListener(e, "click", (e) => e.stopPropagation()), e.$$input = (e) => state.c1 = +e.currentTarget.value, effect(() => e.value = state.c1 = 1), e;
|
|
66
|
+
})(),
|
|
67
|
+
" 行"
|
|
68
|
+
],
|
|
69
|
+
cb: () => e.commands.addRows(e.selected.end[1], Array(state.c1).fill(0).map(() => e.props.newRow(e.selected.end[1])))
|
|
59
70
|
},
|
|
60
71
|
{
|
|
61
|
-
label:
|
|
62
|
-
|
|
72
|
+
label: () => [
|
|
73
|
+
"↓ 新增 ",
|
|
74
|
+
(() => {
|
|
75
|
+
var e = _tmpl$();
|
|
76
|
+
return addEventListener(e, "click", (e) => e.stopPropagation()), e.$$input = (e) => state.c2 = +e.currentTarget.value, effect(() => e.value = state.c2 = 1), e;
|
|
77
|
+
})(),
|
|
78
|
+
" 行"
|
|
79
|
+
],
|
|
80
|
+
cb: () => e.commands.addRows(e.selected.end[1], Array(state.c2).fill(0).map(() => e.props.newRow(e.selected.end[1])), !1)
|
|
63
81
|
},
|
|
64
82
|
{
|
|
65
83
|
label: "删除行",
|
|
66
|
-
cb: () => e.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([e.selected.start[1], e.selected.end[1]].sort((e,
|
|
84
|
+
cb: () => e.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([e.selected.start[1], e.selected.end[1]].sort((e, c) => e - c))))
|
|
67
85
|
}
|
|
68
86
|
],
|
|
69
87
|
commands: (e) => ({
|
|
70
|
-
rowEquals(
|
|
71
|
-
let
|
|
72
|
-
return
|
|
88
|
+
rowEquals(c, l) {
|
|
89
|
+
let u = e.props.rowKey;
|
|
90
|
+
return c == l || u != null && c?.[u] == l?.[u];
|
|
73
91
|
},
|
|
74
|
-
rowIndexOf(
|
|
75
|
-
return
|
|
92
|
+
rowIndexOf(c, l) {
|
|
93
|
+
return c.findIndex((c) => e.commands.rowEquals(c, l));
|
|
76
94
|
},
|
|
77
|
-
rowChange(
|
|
78
|
-
let
|
|
79
|
-
|
|
95
|
+
rowChange(c) {
|
|
96
|
+
let l = [...e.rawProps.data || []], u = e.commands.rowIndexOf(l, c);
|
|
97
|
+
u > -1 && (l[u] = c, e.props.onDataChange?.(l));
|
|
80
98
|
},
|
|
81
|
-
rowsChange(
|
|
82
|
-
let
|
|
83
|
-
|
|
84
|
-
let
|
|
85
|
-
|
|
86
|
-
}), e.props.onDataChange?.(
|
|
99
|
+
rowsChange(c) {
|
|
100
|
+
let l = [...e.rawProps.data || []];
|
|
101
|
+
c.forEach((c) => {
|
|
102
|
+
let u = e.commands.rowIndexOf(l, c);
|
|
103
|
+
u > -1 && (l[u] = c);
|
|
104
|
+
}), e.props.onDataChange?.(l);
|
|
87
105
|
},
|
|
88
|
-
addRows(
|
|
89
|
-
addRows(e,
|
|
106
|
+
addRows(c, l, u = !0) {
|
|
107
|
+
addRows(e, c, l, u);
|
|
90
108
|
},
|
|
91
|
-
deleteRows(
|
|
92
|
-
let { rowKey:
|
|
93
|
-
remove(
|
|
109
|
+
deleteRows(c) {
|
|
110
|
+
let { rowKey: l, data: u } = e.props, d = [...e.rawProps.data || []], f = new Set(c.map((e) => u[e]));
|
|
111
|
+
remove(d, (e) => f.has(e)), e.props?.onDataChange?.(d);
|
|
94
112
|
},
|
|
95
|
-
moveRows(
|
|
96
|
-
let { data:
|
|
97
|
-
if (!
|
|
98
|
-
let
|
|
99
|
-
function
|
|
100
|
-
return e.reduce((e,
|
|
101
|
-
if (
|
|
102
|
-
if (Array.isArray(
|
|
103
|
-
let e =
|
|
104
|
-
|
|
105
|
-
...
|
|
106
|
-
[
|
|
113
|
+
moveRows(l, u) {
|
|
114
|
+
let { data: d } = e.props, f = l.map((e) => d[e]).filter((c) => c && !c?.[e.internal]);
|
|
115
|
+
if (!f.length) return;
|
|
116
|
+
let p = u >= 0 && u < d.length ? d[u] : null, { rowKey: m } = e.props, h = e.props.tree?.children || Symbol(), g = new Set(f.map((e) => e[m])), _ = [];
|
|
117
|
+
function v(e) {
|
|
118
|
+
return e.reduce((e, c) => {
|
|
119
|
+
if (g.has(c[m])) return _.push(c), e;
|
|
120
|
+
if (Array.isArray(c[h]) && c[h].length) {
|
|
121
|
+
let e = v(c[h]);
|
|
122
|
+
c = e.length === c[h].length ? c : {
|
|
123
|
+
...c,
|
|
124
|
+
[h]: e
|
|
107
125
|
};
|
|
108
126
|
}
|
|
109
|
-
return e.push(
|
|
127
|
+
return e.push(c), e;
|
|
110
128
|
}, []);
|
|
111
129
|
}
|
|
112
|
-
let
|
|
113
|
-
if (
|
|
114
|
-
let
|
|
115
|
-
e.selected.start = [0,
|
|
130
|
+
let y = v([...e.rawProps.data || []]), b = findParent(y, (e) => e[m] === p?.[m])?.children ?? y, x = p ? b.findIndex((e) => e[m] === p[m]) : -1;
|
|
131
|
+
if (x > -1 ? b.splice(x, 0, _) : b.push(..._), e.selected) {
|
|
132
|
+
let c = Math.max(0, u - f.length);
|
|
133
|
+
e.selected.start = [0, c], e.selected.end = [Infinity, c + _.length - 1];
|
|
116
134
|
}
|
|
117
|
-
e.props?.onDataChange?.(
|
|
135
|
+
e.props?.onDataChange?.(y);
|
|
118
136
|
}
|
|
119
137
|
})
|
|
120
138
|
};
|
|
121
|
-
function addRows(e,
|
|
122
|
-
let { data:
|
|
123
|
-
for (
|
|
124
|
-
return
|
|
125
|
-
},
|
|
126
|
-
for (
|
|
127
|
-
return
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
|
|
139
|
+
function addRows(e, c, l, u) {
|
|
140
|
+
let { data: d } = e.props, f = (c) => {
|
|
141
|
+
for (u = !1; --c >= 0 && d[c]?.[e.internal];);
|
|
142
|
+
return c >= 0 ? d[c] : null;
|
|
143
|
+
}, p = (c) => {
|
|
144
|
+
for (u = !0; ++c < d.length && d[c]?.[e.internal];);
|
|
145
|
+
return c < d.length ? d[c] : null;
|
|
146
|
+
}, m = d[c]?.[e.internal] ? u ? f(c) || p(c) : p(c) || f(c) : d[c];
|
|
147
|
+
m && batch(() => {
|
|
148
|
+
c = e.commands.rowIndexOf(d, m), e.selected && (e.selected.start = [0, c + (u ? 0 : 1)], e.selected.end = [Infinity, c + l.length - 1 + (u ? 0 : 1)]);
|
|
131
149
|
}), (() => {
|
|
132
|
-
let
|
|
133
|
-
|
|
150
|
+
let c = [...e.rawProps.data || []], d = m ? e.commands.rowIndexOf(c, m) + (u ? 0 : 1) : c.length;
|
|
151
|
+
c.splice(d, 0, ...l), e.props?.onDataChange?.(c);
|
|
134
152
|
})(), delay(0).then(() => {
|
|
135
153
|
e.scrollCellIfNeeded(e.selected.start[0], e.selected.start[1]);
|
|
136
154
|
});
|
|
137
155
|
}
|
|
156
|
+
delegateEvents(["input"]);
|
|
138
157
|
export { MenuPlugin };
|
|
@@ -4,29 +4,41 @@ import { useSelector } from "../hooks/useSelector.js";
|
|
|
4
4
|
import { createComponent, insert, template } from "solid-js/web";
|
|
5
5
|
import { mergeProps as mergeProps$1 } from "solid-js";
|
|
6
6
|
import { defaultsDeep } from "es-toolkit/compat";
|
|
7
|
-
var _tmpl$ = /* @__PURE__ */ template("<label>");
|
|
7
|
+
var _tmpl$ = /* @__PURE__ */ template("<label class=\"flex items-center justify-center w-full h-full\">"), _tmpl$2 = /* @__PURE__ */ template("<label>");
|
|
8
8
|
const RowSelectionPlugin = {
|
|
9
9
|
name: "row-selection",
|
|
10
10
|
priority: -Infinity,
|
|
11
|
-
store: (
|
|
12
|
-
[
|
|
11
|
+
store: (l) => ({ rowSelectionCol: {
|
|
12
|
+
[l.internal]: 1,
|
|
13
13
|
id: Symbol("row-selection"),
|
|
14
14
|
fixed: "left",
|
|
15
15
|
class: "row-selection",
|
|
16
16
|
width: 45,
|
|
17
17
|
resizable: !1,
|
|
18
|
+
name: solidComponent((e) => l.props.rowSelection?.multiple && (() => {
|
|
19
|
+
var e = _tmpl$();
|
|
20
|
+
return insert(e, createComponent(Checkbox, {
|
|
21
|
+
get value() {
|
|
22
|
+
return l.commands.rowSelector.isAll(l.props.data);
|
|
23
|
+
},
|
|
24
|
+
onChange: (e) => e ? l.commands.rowSelector.selectAll(l.props.data) : l.commands.rowSelector.clear(),
|
|
25
|
+
get disabled() {
|
|
26
|
+
return !l.props?.data?.length;
|
|
27
|
+
}
|
|
28
|
+
})), e;
|
|
29
|
+
})()),
|
|
18
30
|
render: solidComponent((e) => (() => {
|
|
19
|
-
var
|
|
20
|
-
return insert(
|
|
31
|
+
var u = _tmpl$2();
|
|
32
|
+
return insert(u, createComponent(Checkbox, {
|
|
21
33
|
style: "position: absolute",
|
|
22
34
|
get value() {
|
|
23
|
-
return
|
|
35
|
+
return l.commands.rowSelector.has(e.data);
|
|
24
36
|
},
|
|
25
|
-
onChange: (
|
|
37
|
+
onChange: (c) => c ? l.commands.rowSelector.add(e.data) : l.commands.rowSelector.del(e.data),
|
|
26
38
|
get disabled() {
|
|
27
|
-
return !
|
|
39
|
+
return !l.props?.rowSelection?.selectable?.(e.data);
|
|
28
40
|
}
|
|
29
|
-
})),
|
|
41
|
+
})), u;
|
|
30
42
|
})())
|
|
31
43
|
} }),
|
|
32
44
|
commands: (e) => ({ rowSelector: useSelector(mergeProps$1(() => ({ ...e.props?.rowSelection }))) }),
|
|
@@ -36,7 +48,7 @@ const RowSelectionPlugin = {
|
|
|
36
48
|
multiple: !1,
|
|
37
49
|
selectable: () => !0
|
|
38
50
|
}),
|
|
39
|
-
columns: ({ columns: e }, { store:
|
|
51
|
+
columns: ({ columns: e }, { store: c }) => c.props?.rowSelection?.enable ? [c.rowSelectionCol, ...e] : e
|
|
40
52
|
}
|
|
41
53
|
};
|
|
42
54
|
export { RowSelectionPlugin };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Plugin } from '..';
|
|
1
|
+
import { type Plugin$0 } from '..';
|
|
2
2
|
import { useControlled } from '../hooks/useControlled';
|
|
3
3
|
export type SortOrder = 'asc' | 'desc';
|
|
4
4
|
export interface SortKey {
|
|
@@ -37,4 +37,4 @@ declare module '../index' {
|
|
|
37
37
|
sort: ReturnType<typeof useControlled<Exclude<TableProps['sort'], undefined>>>;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
export declare const SortPlugin: Plugin;
|
|
40
|
+
export declare const SortPlugin: Plugin$0;
|