@humandialog/forms.svelte 0.5.4 → 0.5.5
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/components/Fab.svelte +5 -3
- package/components/combo/combo.svelte +1 -1
- package/components/document/rich.edit.svelte +30 -7
- package/components/document/rich.edit.svelte.d.ts +2 -2
- package/components/kanban/Kanban.d.ts +24 -4
- package/components/kanban/Kanban.js +60 -4
- package/components/kanban/internal/kanban.card.svelte +148 -70
- package/components/kanban/internal/kanban.card.svelte.d.ts +2 -5
- package/components/kanban/internal/kanban.column.svelte +116 -72
- package/components/kanban/internal/kanban.column.svelte.d.ts +9 -9
- package/components/kanban/internal/kanban.inserter.svelte +1 -1
- package/components/kanban/internal/kanban.move.menu.svelte +11 -8
- package/components/kanban/internal/kanban.move.menu.svelte.d.ts +3 -0
- package/components/kanban/internal/kanban.props.svelte +140 -0
- package/components/kanban/internal/kanban.props.svelte.d.ts +19 -0
- package/components/kanban/kanban.callbacks.svelte +2 -8
- package/components/kanban/kanban.callbacks.svelte.d.ts +1 -4
- package/components/kanban/kanban.column.svelte +8 -8
- package/components/kanban/kanban.column.svelte.d.ts +4 -4
- package/components/kanban/kanban.combo.svelte +36 -0
- package/components/kanban/kanban.combo.svelte.d.ts +24 -0
- package/components/kanban/kanban.date.svelte +30 -0
- package/components/kanban/kanban.date.svelte.d.ts +21 -0
- package/components/kanban/kanban.source.svelte +25 -0
- package/components/kanban/kanban.source.svelte.d.ts +23 -0
- package/components/kanban/kanban.static.svelte +28 -0
- package/components/kanban/kanban.static.svelte.d.ts +20 -0
- package/components/kanban/kanban.summary.svelte +4 -0
- package/components/kanban/kanban.summary.svelte.d.ts +2 -0
- package/components/kanban/kanban.svelte +390 -55
- package/components/kanban/kanban.svelte.d.ts +32 -12
- package/components/kanban/kanban.tags.svelte +34 -0
- package/components/kanban/kanban.tags.svelte.d.ts +23 -0
- package/components/kanban/kanban.title.svelte +2 -0
- package/components/kanban/kanban.title.svelte.d.ts +1 -0
- package/components/list/List.d.ts +8 -1
- package/components/list/List.js +9 -0
- package/components/list/internal/list.element.summary.svelte +21 -7
- package/components/list/internal/list.element.summary.svelte.d.ts +1 -0
- package/components/list/internal/list.element.svelte +16 -11
- package/components/list/list.svelte +1 -1
- package/components/sidebar/sidebar.group.svelte +41 -3
- package/components/sidebar/sidebar.group.svelte.d.ts +6 -0
- package/components/tag.svelte +40 -0
- package/components/tag.svelte.d.ts +19 -0
- package/components/tags.svelte +203 -0
- package/components/tags.svelte.d.ts +31 -0
- package/horizontal.toolbar.svelte +23 -4
- package/horizontal.toolbar.svelte.d.ts +2 -0
- package/index.d.ts +9 -2
- package/index.js +9 -2
- package/operations.svelte +52 -23
- package/package.json +9 -1
- package/page.svelte +3 -3
- package/page.svelte.d.ts +2 -2
- package/tenant.members.svelte +1 -1
- package/updates.d.ts +1 -0
- package/updates.js +16 -0
- package/utils.js +11 -1
- package/vertical.toolbar.svelte +31 -6
- package/vertical.toolbar.svelte.d.ts +2 -0
|
@@ -1,94 +1,428 @@
|
|
|
1
|
-
<script>import { setContext, getContext, afterUpdate } from "svelte";
|
|
2
|
-
import { rKanban_definition } from "./Kanban";
|
|
3
|
-
import { parseWidthDirective, clearActiveItem } from "../../utils";
|
|
4
|
-
import {
|
|
1
|
+
<script>import { setContext, getContext, afterUpdate, tick } from "svelte";
|
|
2
|
+
import { KanbanColumnBottom, KanbanColumnTop, rKanban_definition } from "./Kanban";
|
|
3
|
+
import { parseWidthDirective, clearActiveItem, getPrev, getNext, remove, insertAt, insertAfter, swapElements, getActive } from "../../utils";
|
|
4
|
+
import { contextItemsStore, contextTypesStore, data_tick_store } from "../../stores";
|
|
5
5
|
import Column from "./internal/kanban.column.svelte";
|
|
6
|
+
import { informModification, pushChanges } from "../../updates";
|
|
6
7
|
export let title = "";
|
|
7
|
-
export let self = void 0;
|
|
8
|
-
export let context = "";
|
|
9
|
-
export let typename = "";
|
|
10
8
|
export let c = "";
|
|
11
|
-
export
|
|
9
|
+
export const CLEAR_SELECTION = 0;
|
|
10
|
+
export const KEEP_SELECTION = -1;
|
|
11
|
+
export const SELECT_PREVIOUS = -2;
|
|
12
|
+
export const SELECT_NEXT = -3;
|
|
13
|
+
export const KEEP_OR_SELECT_NEXT = -4;
|
|
12
14
|
let user_class = $$props.class ?? "";
|
|
13
15
|
let definition = new rKanban_definition();
|
|
14
16
|
setContext("rKanban-definition", definition);
|
|
15
17
|
setContext("rIs-table-component", true);
|
|
16
|
-
let item = null;
|
|
17
|
-
let ctx = context ? context : getContext("ctx");
|
|
18
18
|
let cs = c ? parseWidthDirective(c) : "w-full min-w-full";
|
|
19
19
|
clearActiveItem("props");
|
|
20
|
-
let last_tick = -1;
|
|
21
20
|
$:
|
|
22
|
-
setup(
|
|
21
|
+
setup();
|
|
23
22
|
function setup(...args) {
|
|
24
|
-
last_tick = $data_tick_store;
|
|
25
|
-
if (self && ctx)
|
|
26
|
-
$contextItemsStore[ctx] = self;
|
|
27
|
-
if (!typename)
|
|
28
|
-
typename = $contextTypesStore[ctx];
|
|
29
23
|
}
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
let renderToken = 0;
|
|
25
|
+
export async function rerender(selectColumnIdx = -1, selectCardId = -1) {
|
|
26
|
+
definition.clear();
|
|
27
|
+
renderToken += 1;
|
|
28
|
+
await tick();
|
|
29
|
+
if (selectColumnIdx >= 0) {
|
|
30
|
+
if (selectCardId >= 0) {
|
|
31
|
+
columns[selectColumnIdx].activateByItemId(selectCardId);
|
|
32
|
+
} else {
|
|
33
|
+
columns[selectColumnIdx].activate();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
32
36
|
}
|
|
33
|
-
export function
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
export async function reload(data, selectElement = KEEP_SELECTION) {
|
|
38
|
+
let currentSelectedItem = getActive("props");
|
|
39
|
+
let selectElementId = 0;
|
|
40
|
+
let altSelectElementId = 0;
|
|
41
|
+
let selectedColumnIdx = -1;
|
|
42
|
+
const oa = definition.orderAttrib;
|
|
43
|
+
const sa = definition.stateAttrib;
|
|
44
|
+
let allItems = definition.getItems();
|
|
45
|
+
switch (selectElement) {
|
|
46
|
+
case CLEAR_SELECTION:
|
|
47
|
+
selectElementId = 0;
|
|
48
|
+
break;
|
|
49
|
+
case KEEP_SELECTION:
|
|
50
|
+
selectElementId = currentSelectedItem.Id ?? 0;
|
|
51
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentSelectedItem[sa]);
|
|
52
|
+
break;
|
|
53
|
+
case SELECT_PREVIOUS:
|
|
54
|
+
if (currentSelectedItem) {
|
|
55
|
+
const currentItemState = currentSelectedItem[sa];
|
|
56
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
57
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
58
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
59
|
+
const prevSelected = getPrev(columnItems, columnSelected);
|
|
60
|
+
if (prevSelected)
|
|
61
|
+
selectElementId = prevSelected.Id;
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case SELECT_NEXT:
|
|
65
|
+
if (currentSelectedItem) {
|
|
66
|
+
const currentItemState = currentSelectedItem[sa];
|
|
67
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
68
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
69
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
70
|
+
const nextSelected = getNext(columnItems, columnSelected);
|
|
71
|
+
if (nextSelected)
|
|
72
|
+
selectElementId = nextSelected.Id;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
case KEEP_OR_SELECT_NEXT:
|
|
76
|
+
{
|
|
77
|
+
selectElementId = currentSelectedItem.Id ?? 0;
|
|
78
|
+
if (currentSelectedItem) {
|
|
79
|
+
const currentItemState = currentSelectedItem[sa];
|
|
80
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
81
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
82
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
83
|
+
const nextSelected = getNext(columnItems, columnSelected);
|
|
84
|
+
if (nextSelected)
|
|
85
|
+
altSelectElementId = nextSelected.Id;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
if (typeof selectElement === "object" && !Array.isArray(selectElement) && selectElement !== null)
|
|
91
|
+
selectElementId = selectElement.Id;
|
|
92
|
+
else
|
|
93
|
+
selectElementId = selectElement;
|
|
94
|
+
}
|
|
95
|
+
if (Array.isArray(data))
|
|
96
|
+
definition.objects = data;
|
|
97
|
+
else
|
|
98
|
+
definition.self = data;
|
|
99
|
+
definition.items = null;
|
|
100
|
+
columns.forEach((c2) => c2.reload());
|
|
101
|
+
await tick();
|
|
102
|
+
allItems = definition.getItems();
|
|
103
|
+
if (selectElementId > 0) {
|
|
104
|
+
if (selectedColumnIdx < 0) {
|
|
105
|
+
let selectedElement = allItems.find((e) => e.Id == selectElementId);
|
|
106
|
+
if (selectedElement) {
|
|
107
|
+
selectedColumnIdx = getColumnIdx(selectedElement);
|
|
108
|
+
columns[selectedColumnIdx].activateByItemId(selectElementId);
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
const columnState = definition.columns[selectedColumnIdx].state;
|
|
112
|
+
const columnItems = allItems.filter((e) => e[sa] == columnState);
|
|
113
|
+
let selectedElement = allItems.find((e) => e.Id == selectElementId);
|
|
114
|
+
if (selectedElement == void 0) {
|
|
115
|
+
if (altSelectElementId > 0) {
|
|
116
|
+
selectedElement = columnItems.find((e) => e.Id == altSelectElementId);
|
|
117
|
+
if (selectedElement)
|
|
118
|
+
columns[selectedColumnIdx].activateByItemId(altSelectElementId);
|
|
119
|
+
}
|
|
120
|
+
} else
|
|
121
|
+
columns[selectedColumnIdx].activateByItemId(selectElementId);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
36
124
|
}
|
|
37
|
-
export function getColumnIdx(
|
|
38
|
-
|
|
39
|
-
|
|
125
|
+
export function getColumnIdx(item) {
|
|
126
|
+
return definition.columns.findIndex((c2) => c2.state == item[definition.stateAttrib]);
|
|
127
|
+
}
|
|
128
|
+
export function edit(item, field) {
|
|
129
|
+
const columnIdx = getColumnIdx(item);
|
|
130
|
+
if (columnIdx >= 0) {
|
|
131
|
+
const column = columns[columnIdx];
|
|
132
|
+
const card = column.findCardByItem(item);
|
|
40
133
|
if (card)
|
|
41
|
-
|
|
134
|
+
card.editProperty(field);
|
|
42
135
|
}
|
|
43
|
-
return -1;
|
|
44
136
|
}
|
|
45
137
|
let columns = [];
|
|
46
138
|
afterUpdate(() => {
|
|
47
139
|
for (let i = 1; i < columns.length; i++) {
|
|
48
140
|
let left_column = columns[i - 1];
|
|
49
141
|
let right_column = columns[i];
|
|
50
|
-
const left_column_height = left_column
|
|
51
|
-
const right_column_height = right_column
|
|
142
|
+
const left_column_height = left_column?.getHeight();
|
|
143
|
+
const right_column_height = right_column?.getHeight();
|
|
52
144
|
if (left_column_height > right_column_height) {
|
|
53
|
-
left_column
|
|
54
|
-
right_column
|
|
145
|
+
left_column?.setBorder(left_column.SET_RIGHT);
|
|
146
|
+
right_column?.setBorder(right_column.CLEAR_LEFT);
|
|
55
147
|
} else {
|
|
56
|
-
left_column
|
|
57
|
-
right_column
|
|
148
|
+
left_column?.setBorder(left_column.CLEAR_RIGHT);
|
|
149
|
+
right_column?.setBorder(right_column.SET_LEFT);
|
|
58
150
|
}
|
|
59
151
|
}
|
|
60
152
|
});
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
153
|
+
export function moveUp(item) {
|
|
154
|
+
const columnIdx = getColumnIdx(item);
|
|
155
|
+
let allItems = definition.getItems();
|
|
156
|
+
const oa = definition.orderAttrib;
|
|
157
|
+
const sa = definition.stateAttrib;
|
|
158
|
+
const column = columns[columnIdx];
|
|
159
|
+
const columnState = definition.columns[columnIdx].state;
|
|
160
|
+
let prev = allItems.findLast((e) => e[sa] == columnState && e[oa] < item[oa]);
|
|
161
|
+
if (!prev)
|
|
162
|
+
return;
|
|
163
|
+
swapElements(allItems, item, prev);
|
|
164
|
+
[item[oa], prev[oa]] = [prev[oa], item[oa]];
|
|
165
|
+
informModification(item, oa);
|
|
166
|
+
informModification(prev, oa);
|
|
167
|
+
pushChanges();
|
|
168
|
+
column.reload();
|
|
67
169
|
}
|
|
68
|
-
export function
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
170
|
+
export function moveDown(item) {
|
|
171
|
+
const columnIdx = getColumnIdx(item);
|
|
172
|
+
let allItems = definition.getItems();
|
|
173
|
+
const oa = definition.orderAttrib;
|
|
174
|
+
const sa = definition.stateAttrib;
|
|
175
|
+
const column = columns[columnIdx];
|
|
176
|
+
const columnState = definition.columns[columnIdx].state;
|
|
177
|
+
let next = allItems.find((e) => e[sa] == columnState && e[oa] > item[oa]);
|
|
178
|
+
if (!next)
|
|
179
|
+
return;
|
|
180
|
+
swapElements(allItems, item, next);
|
|
181
|
+
[item[oa], next[oa]] = [next[oa], item[oa]];
|
|
182
|
+
informModification(item, oa);
|
|
183
|
+
informModification(next, oa);
|
|
184
|
+
pushChanges();
|
|
185
|
+
column.reload();
|
|
186
|
+
}
|
|
187
|
+
const ORDER_STEP = 64;
|
|
188
|
+
const MIN_ORDER = 0;
|
|
189
|
+
function reorderElements(items, from = null) {
|
|
190
|
+
const oa = definition.orderAttrib;
|
|
191
|
+
let fromIdx;
|
|
192
|
+
let fromOrder;
|
|
193
|
+
if (from) {
|
|
194
|
+
fromOrder = from[oa];
|
|
195
|
+
fromIdx = items.findIndex((e) => e == from);
|
|
196
|
+
} else {
|
|
197
|
+
fromOrder = MIN_ORDER;
|
|
198
|
+
fromIdx = 0;
|
|
199
|
+
}
|
|
200
|
+
let order = fromOrder;
|
|
201
|
+
for (let i = fromIdx; i < items.length; i++) {
|
|
202
|
+
let el = items[i];
|
|
203
|
+
el[oa] = order;
|
|
204
|
+
informModification(el, oa);
|
|
205
|
+
order += ORDER_STEP;
|
|
206
|
+
}
|
|
207
|
+
pushChanges();
|
|
208
|
+
}
|
|
209
|
+
export function replace(item, toColumnIdx, afterElement) {
|
|
210
|
+
const fromColumnIdx = getColumnIdx(item);
|
|
211
|
+
let allItems = definition.getItems();
|
|
212
|
+
const oa = definition.orderAttrib;
|
|
213
|
+
const sa = definition.stateAttrib;
|
|
214
|
+
const toColumnState = definition.columns[toColumnIdx].state;
|
|
215
|
+
const toListTop = allItems.find((e) => e[sa] == toColumnState);
|
|
216
|
+
const toListBottom = allItems.findLast((e) => e[sa] == toColumnState);
|
|
217
|
+
const fromColumn = columns[fromColumnIdx];
|
|
218
|
+
const toColumn = columns[toColumnIdx];
|
|
219
|
+
switch (afterElement) {
|
|
220
|
+
case KanbanColumnTop:
|
|
221
|
+
if (!toListTop || toListTop[oa] > item[oa]) {
|
|
222
|
+
item[sa] = toColumnState;
|
|
223
|
+
informModification(item, sa);
|
|
224
|
+
} else {
|
|
225
|
+
const prevItem = getPrev(allItems, toListTop);
|
|
226
|
+
if (!prevItem) {
|
|
227
|
+
item[sa] = toColumnState;
|
|
228
|
+
item[oa] = toListTop[oa] - ORDER_STEP;
|
|
229
|
+
informModification(item, sa);
|
|
230
|
+
informModification(item, oa);
|
|
231
|
+
remove(allItems, item);
|
|
232
|
+
insertAt(allItems, 0, item);
|
|
233
|
+
} else {
|
|
234
|
+
let prevOrder = prevItem[oa];
|
|
235
|
+
let nextOrder = toListTop[oa];
|
|
236
|
+
let orderSpace = nextOrder - prevOrder;
|
|
237
|
+
if (orderSpace < 2) {
|
|
238
|
+
reorderElements(allItems, prevItem);
|
|
239
|
+
prevOrder = prevItem[oa];
|
|
240
|
+
nextOrder = toListTop[oa];
|
|
241
|
+
orderSpace = nextOrder - prevOrder;
|
|
242
|
+
}
|
|
243
|
+
item[sa] = toColumnState;
|
|
244
|
+
item[oa] = prevOrder + Math.floor(orderSpace / 2);
|
|
245
|
+
informModification(item, sa);
|
|
246
|
+
informModification(item, oa);
|
|
247
|
+
remove(allItems, item);
|
|
248
|
+
insertAfter(allItems, prevItem, item);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
pushChanges();
|
|
252
|
+
fromColumn.reload();
|
|
253
|
+
toColumn.reload();
|
|
254
|
+
return;
|
|
255
|
+
case KanbanColumnBottom:
|
|
256
|
+
default:
|
|
257
|
+
if (!toListBottom || item[oa] > toListBottom[oa]) {
|
|
258
|
+
item[sa] = toColumnState;
|
|
259
|
+
informModification(item, sa);
|
|
260
|
+
} else {
|
|
261
|
+
const nextItem = getNext(allItems, toListBottom);
|
|
262
|
+
if (!nextItem) {
|
|
263
|
+
item[sa] = toColumnState;
|
|
264
|
+
item[oa] = toListBottom[oa] + ORDER_STEP;
|
|
265
|
+
informModification(item, sa);
|
|
266
|
+
informModification(item, oa);
|
|
267
|
+
remove(allItems, item);
|
|
268
|
+
insertAfter(allItems, toListBottom, item);
|
|
269
|
+
} else {
|
|
270
|
+
let nextOrder = nextItem[oa];
|
|
271
|
+
let prevOrder = toListBottom[oa];
|
|
272
|
+
let orderSpace = nextOrder - prevOrder;
|
|
273
|
+
if (orderSpace < 2) {
|
|
274
|
+
reorderElements(allItems, toListBottom);
|
|
275
|
+
prevOrder = toListBottom[oa];
|
|
276
|
+
nextOrder = nextItem[oa];
|
|
277
|
+
orderSpace = nextOrder - prevOrder;
|
|
278
|
+
}
|
|
279
|
+
item[sa] = toColumnState;
|
|
280
|
+
item[oa] = prevOrder + Math.floor(orderSpace / 2);
|
|
281
|
+
informModification(item, sa);
|
|
282
|
+
informModification(item, oa);
|
|
283
|
+
remove(allItems, item);
|
|
284
|
+
insertAfter(allItems, toListBottom, item);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
pushChanges();
|
|
288
|
+
fromColumn.reload();
|
|
289
|
+
toColumn.reload();
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async function onInsert(columnIdx, title2, afterId) {
|
|
294
|
+
const columnState = definition.columns[columnIdx].state;
|
|
295
|
+
const oa = definition.orderAttrib;
|
|
296
|
+
const sa = definition.stateAttrib;
|
|
297
|
+
const allItems = definition.getItems();
|
|
298
|
+
const columnTop = allItems.find((e) => e[sa] == columnState);
|
|
299
|
+
const columnBottom = allItems.findLast((e) => e[sa] == columnState);
|
|
300
|
+
let newElement = {
|
|
301
|
+
[definition.titleAttrib]: title2,
|
|
302
|
+
[sa]: columnState
|
|
303
|
+
};
|
|
304
|
+
if (afterId == KanbanColumnTop) {
|
|
305
|
+
if (!columnTop) {
|
|
306
|
+
let maxOrder = 0;
|
|
307
|
+
if (allItems.length > 0) {
|
|
308
|
+
const lastItem = allItems[allItems.length - 1];
|
|
309
|
+
maxOrder = lastItem[oa];
|
|
310
|
+
}
|
|
311
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
312
|
+
} else {
|
|
313
|
+
const prevItem = getPrev(allItems, columnTop);
|
|
314
|
+
if (prevItem) {
|
|
315
|
+
let prevOrder = prevItem[oa];
|
|
316
|
+
let nextOrder = columnTop[oa];
|
|
317
|
+
let orderSpace = nextOrder - prevOrder;
|
|
318
|
+
if (orderSpace < 2) {
|
|
319
|
+
reorderElements(allItems, prevItem);
|
|
320
|
+
prevOrder = prevItem[oa];
|
|
321
|
+
nextOrder = columnTop[oa];
|
|
322
|
+
orderSpace = nextOrder - prevOrder;
|
|
323
|
+
}
|
|
324
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
325
|
+
newElement[oa] = newOrder;
|
|
326
|
+
} else {
|
|
327
|
+
newElement[oa] = columnTop[oa] - ORDER_STEP;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} else if (afterId == KanbanColumnBottom) {
|
|
331
|
+
if (!columnBottom) {
|
|
332
|
+
let maxOrder = 0;
|
|
333
|
+
if (allItems.length > 0) {
|
|
334
|
+
const lastItem = allItems[allItems.length - 1];
|
|
335
|
+
maxOrder = lastItem[oa];
|
|
336
|
+
}
|
|
337
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
338
|
+
} else {
|
|
339
|
+
const nextItem = getNext(allItems, columnBottom);
|
|
340
|
+
if (nextItem) {
|
|
341
|
+
let nextOrder = nextItem[oa];
|
|
342
|
+
let prevOrder = columnBottom[oa];
|
|
343
|
+
let orderSpace = nextOrder - prevOrder;
|
|
344
|
+
if (orderSpace < 2) {
|
|
345
|
+
reorderElements(allItems, columnBottom);
|
|
346
|
+
nextOrder = nextItem[oa];
|
|
347
|
+
prevOrder = columnBottom[oa];
|
|
348
|
+
orderSpace = nextOrder - prevOrder;
|
|
349
|
+
}
|
|
350
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
351
|
+
newElement[oa] = newOrder;
|
|
352
|
+
} else {
|
|
353
|
+
newElement[oa] = columnBottom[oa] + ORDER_STEP;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
} else {
|
|
357
|
+
const prevItem = allItems.find((e) => e.Id == afterId);
|
|
358
|
+
if (!prevItem) {
|
|
359
|
+
let maxOrder = 0;
|
|
360
|
+
if (allItems.length > 0) {
|
|
361
|
+
const lastItem = allItems[allItems.length - 1];
|
|
362
|
+
maxOrder = lastItem[oa];
|
|
363
|
+
}
|
|
364
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
365
|
+
} else {
|
|
366
|
+
const nextItem = getNext(allItems, prevItem);
|
|
367
|
+
if (nextItem) {
|
|
368
|
+
let nextOrder = nextItem[oa];
|
|
369
|
+
let prevOrder = prevItem[oa];
|
|
370
|
+
let orderSpace = nextOrder - prevOrder;
|
|
371
|
+
if (orderSpace < 2) {
|
|
372
|
+
reorderElements(allItems, prevItem);
|
|
373
|
+
nextOrder = nextItem[oa];
|
|
374
|
+
prevOrder = prevItem[oa];
|
|
375
|
+
orderSpace = nextOrder - prevOrder;
|
|
376
|
+
}
|
|
377
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
378
|
+
newElement[oa] = newOrder;
|
|
379
|
+
} else {
|
|
380
|
+
newElement[oa] = prevItem[oa] + ORDER_STEP;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
if (definition.onAdd)
|
|
385
|
+
await definition.onAdd(newElement);
|
|
386
|
+
}
|
|
387
|
+
export function activateColumn(columnIdx) {
|
|
388
|
+
columns[columnIdx].activate();
|
|
389
|
+
}
|
|
390
|
+
export function editColumnName(columnIdx, onFinish = void 0) {
|
|
391
|
+
columns[columnIdx].editName(onFinish);
|
|
392
|
+
}
|
|
393
|
+
export function moveCardsTo(items, toColumnIdx) {
|
|
394
|
+
items.forEach(
|
|
395
|
+
(item) => replace(item, toColumnIdx, KanbanColumnBottom)
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
export function setCardsState(items, state) {
|
|
399
|
+
const sa = definition.stateAttrib;
|
|
400
|
+
items.forEach((item) => {
|
|
401
|
+
item[sa] = state;
|
|
402
|
+
informModification(item, sa);
|
|
73
403
|
});
|
|
404
|
+
pushChanges();
|
|
405
|
+
}
|
|
406
|
+
export function add(item) {
|
|
407
|
+
const fromColumnIdx = getColumnIdx(item);
|
|
408
|
+
columns[fromColumnIdx].add(item);
|
|
74
409
|
}
|
|
75
410
|
</script>
|
|
76
411
|
|
|
412
|
+
{#key renderToken}
|
|
77
413
|
<slot/> <!-- Launch definition settings -->
|
|
78
414
|
|
|
415
|
+
{#if title}
|
|
416
|
+
<p class="hidden sm:block mt-3 ml-3 pb-5 text-lg text-left">{title}</p>
|
|
417
|
+
<!--hr class="hidden sm:block w-full"-->
|
|
418
|
+
{/if}
|
|
79
419
|
|
|
80
|
-
<section class="h-full mt-5 flex flex-row no-wrap sm:justify-center
|
|
420
|
+
<section class="h-full mt-5 flex flex-row no-wrap sm:justify-center
|
|
421
|
+
overflow-x-auto snap-x snap-mandatory sm:snap-none
|
|
422
|
+
{user_class}">
|
|
81
423
|
{#each definition.columns as column, idx (column.id)}
|
|
82
|
-
<Column
|
|
83
|
-
|
|
84
|
-
self={column.self}
|
|
85
|
-
a={column.a}
|
|
86
|
-
objects={column.objects}
|
|
87
|
-
context={column.context}
|
|
88
|
-
key={key}
|
|
89
|
-
currentColumnIdx={idx}
|
|
90
|
-
{showMoveOperationsForItem}
|
|
91
|
-
{scrollViewToCard}
|
|
424
|
+
<Column currentColumnIdx={idx}
|
|
425
|
+
{onInsert}
|
|
92
426
|
bind:this={columns[idx]}>
|
|
93
427
|
|
|
94
428
|
|
|
@@ -107,6 +441,7 @@ export function scrollViewToCard(item2) {
|
|
|
107
441
|
</Column>
|
|
108
442
|
{/each}
|
|
109
443
|
</section>
|
|
444
|
+
{/key}
|
|
110
445
|
|
|
111
446
|
<style>
|
|
112
447
|
.grid-1
|
|
@@ -3,16 +3,24 @@ declare const __propDef: {
|
|
|
3
3
|
props: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
title?: string | undefined;
|
|
6
|
-
self?: object | undefined;
|
|
7
|
-
context?: string | undefined;
|
|
8
|
-
typename?: string | undefined;
|
|
9
6
|
c?: string | undefined;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
CLEAR_SELECTION?: 0 | undefined;
|
|
8
|
+
KEEP_SELECTION?: -1 | undefined;
|
|
9
|
+
SELECT_PREVIOUS?: -2 | undefined;
|
|
10
|
+
SELECT_NEXT?: -3 | undefined;
|
|
11
|
+
KEEP_OR_SELECT_NEXT?: -4 | undefined;
|
|
12
|
+
rerender?: ((selectColumnIdx?: number, selectCardId?: number) => Promise<void>) | undefined;
|
|
13
|
+
reload?: ((data: object | object[], selectElement?: number) => Promise<void>) | undefined;
|
|
13
14
|
getColumnIdx?: ((item: any) => number) | undefined;
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
edit?: ((item: object, field: string) => void) | undefined;
|
|
16
|
+
moveUp?: ((item: object) => void) | undefined;
|
|
17
|
+
moveDown?: ((item: object) => void) | undefined;
|
|
18
|
+
replace?: ((item: any, toColumnIdx: any, afterElement: any) => void) | undefined;
|
|
19
|
+
activateColumn?: ((columnIdx: number) => void) | undefined;
|
|
20
|
+
editColumnName?: ((columnIdx: number, onFinish?: Function | undefined) => void) | undefined;
|
|
21
|
+
moveCardsTo?: ((items: object[], toColumnIdx: number) => void) | undefined;
|
|
22
|
+
setCardsState?: ((items: object[], state: number) => void) | undefined;
|
|
23
|
+
add?: ((item: object) => void) | undefined;
|
|
16
24
|
};
|
|
17
25
|
events: {
|
|
18
26
|
[evt: string]: CustomEvent<any>;
|
|
@@ -34,10 +42,22 @@ export type KanbanProps = typeof __propDef.props;
|
|
|
34
42
|
export type KanbanEvents = typeof __propDef.events;
|
|
35
43
|
export type KanbanSlots = typeof __propDef.slots;
|
|
36
44
|
export default class Kanban extends SvelteComponentTyped<KanbanProps, KanbanEvents, KanbanSlots> {
|
|
37
|
-
get
|
|
38
|
-
get
|
|
45
|
+
get CLEAR_SELECTION(): 0;
|
|
46
|
+
get KEEP_SELECTION(): -1;
|
|
47
|
+
get SELECT_PREVIOUS(): -2;
|
|
48
|
+
get SELECT_NEXT(): -3;
|
|
49
|
+
get KEEP_OR_SELECT_NEXT(): -4;
|
|
50
|
+
get rerender(): (selectColumnIdx?: number, selectCardId?: number) => Promise<void>;
|
|
51
|
+
get reload(): (data: object | object[], selectElement?: number) => Promise<void>;
|
|
39
52
|
get getColumnIdx(): (item: any) => number;
|
|
40
|
-
get
|
|
41
|
-
get
|
|
53
|
+
get edit(): (item: object, field: string) => void;
|
|
54
|
+
get moveUp(): (item: object) => void;
|
|
55
|
+
get moveDown(): (item: object) => void;
|
|
56
|
+
get replace(): (item: any, toColumnIdx: any, afterElement: any) => void;
|
|
57
|
+
get activateColumn(): (columnIdx: number) => void;
|
|
58
|
+
get editColumnName(): (columnIdx: number, onFinish?: Function | undefined) => void;
|
|
59
|
+
get moveCardsTo(): (items: object[], toColumnIdx: number) => void;
|
|
60
|
+
get setCardsState(): (items: object[], state: number) => void;
|
|
61
|
+
get add(): (item: object) => void;
|
|
42
62
|
}
|
|
43
63
|
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script>import { getContext } from "svelte";
|
|
2
|
+
import { KanbanCardTop, KanbanCardMiddle, KanbanCardBottom } from "./Kanban";
|
|
3
|
+
import { rList_property_tags } from "../list/List";
|
|
4
|
+
export let name = "";
|
|
5
|
+
export let a = "";
|
|
6
|
+
export let allTags = "";
|
|
7
|
+
export let onCreate = void 0;
|
|
8
|
+
export let onSelect = void 0;
|
|
9
|
+
export let top = false;
|
|
10
|
+
export let middle = true;
|
|
11
|
+
export let bottom = false;
|
|
12
|
+
let definition = getContext("rKanban-definition");
|
|
13
|
+
let tagsProperty = new rList_property_tags();
|
|
14
|
+
if (!a && name) {
|
|
15
|
+
tagsProperty.a = name;
|
|
16
|
+
tagsProperty.name = name;
|
|
17
|
+
} else if (!name && a) {
|
|
18
|
+
tagsProperty.a = a;
|
|
19
|
+
tagsProperty.name = a;
|
|
20
|
+
} else {
|
|
21
|
+
tagsProperty.a = a;
|
|
22
|
+
tagsProperty.name = name;
|
|
23
|
+
}
|
|
24
|
+
tagsProperty.onSelect = onSelect;
|
|
25
|
+
tagsProperty.onCreate = onCreate;
|
|
26
|
+
tagsProperty.allTags = allTags;
|
|
27
|
+
if (top)
|
|
28
|
+
tagsProperty.position = KanbanCardTop;
|
|
29
|
+
else if (bottom)
|
|
30
|
+
tagsProperty.position = KanbanCardBottom;
|
|
31
|
+
else
|
|
32
|
+
tagsProperty.position = KanbanCardMiddle;
|
|
33
|
+
definition.properties.push(tagsProperty);
|
|
34
|
+
</script>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
name?: string | undefined;
|
|
5
|
+
a?: string | undefined;
|
|
6
|
+
allTags?: string | undefined;
|
|
7
|
+
onCreate?: Function | undefined;
|
|
8
|
+
onSelect?: Function | undefined;
|
|
9
|
+
top?: boolean | undefined;
|
|
10
|
+
middle?: boolean | undefined;
|
|
11
|
+
bottom?: boolean | undefined;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
[evt: string]: CustomEvent<any>;
|
|
15
|
+
};
|
|
16
|
+
slots: {};
|
|
17
|
+
};
|
|
18
|
+
export type KanbanProps = typeof __propDef.props;
|
|
19
|
+
export type KanbanEvents = typeof __propDef.events;
|
|
20
|
+
export type KanbanSlots = typeof __propDef.slots;
|
|
21
|
+
export default class Kanban extends SvelteComponentTyped<KanbanProps, KanbanEvents, KanbanSlots> {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
<script>import { getContext } from "svelte";
|
|
2
2
|
export let a;
|
|
3
3
|
export let onChange = void 0;
|
|
4
|
+
export let readOnly = false;
|
|
4
5
|
let definition = getContext("rKanban-definition");
|
|
5
6
|
definition.titleAttrib = a;
|
|
6
7
|
definition.titleOnChange = onChange;
|
|
8
|
+
definition.titleReadOnly = readOnly;
|
|
7
9
|
</script>
|
|
8
10
|
|
|
@@ -4,7 +4,8 @@ export declare enum rList_property_type {
|
|
|
4
4
|
Text = 1,
|
|
5
5
|
Date = 2,
|
|
6
6
|
Combo = 3,
|
|
7
|
-
Static = 4
|
|
7
|
+
Static = 4,
|
|
8
|
+
Tags = 5
|
|
8
9
|
}
|
|
9
10
|
export declare class rList_property {
|
|
10
11
|
constructor(type: rList_property_type);
|
|
@@ -12,12 +13,18 @@ export declare class rList_property {
|
|
|
12
13
|
name: string;
|
|
13
14
|
a: string;
|
|
14
15
|
onSelect: Function | undefined;
|
|
16
|
+
position: number | string | undefined;
|
|
15
17
|
}
|
|
16
18
|
export declare class rList_property_combo extends rList_property {
|
|
17
19
|
constructor();
|
|
18
20
|
association: boolean;
|
|
19
21
|
combo_definition: rCombo_definition;
|
|
20
22
|
}
|
|
23
|
+
export declare class rList_property_tags extends rList_property {
|
|
24
|
+
constructor();
|
|
25
|
+
onCreate: Function | undefined;
|
|
26
|
+
allTags: string;
|
|
27
|
+
}
|
|
21
28
|
export declare class rList_definition {
|
|
22
29
|
title: string;
|
|
23
30
|
title_editable: boolean;
|
package/components/list/List.js
CHANGED
|
@@ -6,6 +6,7 @@ export var rList_property_type;
|
|
|
6
6
|
rList_property_type[rList_property_type["Date"] = 2] = "Date";
|
|
7
7
|
rList_property_type[rList_property_type["Combo"] = 3] = "Combo";
|
|
8
8
|
rList_property_type[rList_property_type["Static"] = 4] = "Static";
|
|
9
|
+
rList_property_type[rList_property_type["Tags"] = 5] = "Tags";
|
|
9
10
|
})(rList_property_type || (rList_property_type = {}));
|
|
10
11
|
export class rList_property {
|
|
11
12
|
constructor(type) {
|
|
@@ -15,6 +16,7 @@ export class rList_property {
|
|
|
15
16
|
name = '';
|
|
16
17
|
a = '';
|
|
17
18
|
onSelect = undefined;
|
|
19
|
+
position = undefined;
|
|
18
20
|
}
|
|
19
21
|
export class rList_property_combo extends rList_property {
|
|
20
22
|
constructor() {
|
|
@@ -24,6 +26,13 @@ export class rList_property_combo extends rList_property {
|
|
|
24
26
|
association = false;
|
|
25
27
|
combo_definition;
|
|
26
28
|
}
|
|
29
|
+
export class rList_property_tags extends rList_property {
|
|
30
|
+
constructor() {
|
|
31
|
+
super(rList_property_type.Tags);
|
|
32
|
+
}
|
|
33
|
+
onCreate = undefined;
|
|
34
|
+
allTags = '';
|
|
35
|
+
}
|
|
27
36
|
export class rList_definition {
|
|
28
37
|
title = '';
|
|
29
38
|
title_editable = false;
|