@emamid/svelte-data-table 0.0.19 → 0.0.21
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/DataTable.doc.d.ts +2 -0
- package/dist/DataTable.doc.js +3 -1
- package/dist/DataTable.svelte +35 -46
- package/dist/DataTable.svelte.d.ts +7 -3
- package/dist/DataTableDataCell.svelte +66 -3
- package/dist/DataTableDataCell.svelte.d.ts +2 -0
- package/dist/DataTableRow.svelte +93 -0
- package/dist/DataTableRow.svelte.d.ts +35 -0
- package/dist/common.d.ts +46 -11
- package/dist/common.js +23 -0
- package/package.json +1 -1
package/dist/DataTable.doc.d.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* @typedef {object} DataTable
|
|
4
4
|
* @property {ColumnConfig[]} columns - Configuration for each column to be displayed in the table.
|
|
5
5
|
* @property {any[]} items - Data for the rows in the table.
|
|
6
|
+
* @property {RowBoolean} [allowRowDrag] -
|
|
7
|
+
* @property {RowDropBoolean} [allowRowDrop] -
|
|
6
8
|
* @property {string} [sortKey] - Data property to sort by.
|
|
7
9
|
* @property {SortFunction} [sortFunction] - Function for more complex-sorting.
|
|
8
10
|
* @property {boolean} [reverseSort] - True when sorting is reversed.
|
package/dist/DataTable.doc.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* The DataTable component based on {@link https://flowbite-svelte.com/docs/components/table}
|
|
4
3
|
* @typedef {object} DataTable
|
|
5
4
|
* @property {ColumnConfig[]} columns - Configuration for each column to be displayed in the table.
|
|
6
5
|
* @property {any[]} items - Data for the rows in the table.
|
|
6
|
+
* @property {RowBoolean} [allowRowDrag] -
|
|
7
|
+
* @property {RowDropBoolean} [allowRowDrop] -
|
|
7
8
|
* @property {string} [sortKey] - Data property to sort by.
|
|
8
9
|
* @property {SortFunction} [sortFunction] - Function for more complex-sorting.
|
|
9
10
|
* @property {boolean} [reverseSort] - True when sorting is reversed.
|
|
@@ -42,6 +43,7 @@
|
|
|
42
43
|
* @fires headerClicked
|
|
43
44
|
* @fires rowClicked
|
|
44
45
|
*/
|
|
46
|
+
export {};
|
|
45
47
|
/**
|
|
46
48
|
* @event cellClicked
|
|
47
49
|
* @type {object}
|
package/dist/DataTable.svelte
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
<script>import { createEventDispatcher } from "svelte";
|
|
2
|
-
import { Table, TableBody,
|
|
2
|
+
import { Table, TableBody, TableHead } from "flowbite-svelte";
|
|
3
3
|
import { AngleDownSolid, AngleUpSolid } from "flowbite-svelte-icons";
|
|
4
|
-
import DataTableDataCell from "./DataTableDataCell.svelte";
|
|
5
4
|
import DataTableHeaderCell from "./DataTableHeaderCell.svelte";
|
|
6
|
-
import
|
|
5
|
+
import DataTableRow from "./DataTableRow.svelte";
|
|
6
|
+
import {
|
|
7
|
+
getColumnID,
|
|
8
|
+
joinClasses,
|
|
9
|
+
setDataTableContext
|
|
10
|
+
} from "./common.js";
|
|
11
|
+
export let allowRowDrag = false;
|
|
12
|
+
export let allowRowDrop = !!allowRowDrag;
|
|
7
13
|
export let columns = [];
|
|
8
14
|
export let items = [];
|
|
9
15
|
export let sortKey = "";
|
|
@@ -48,6 +54,7 @@ export let customColor = "";
|
|
|
48
54
|
let sortedItems = [];
|
|
49
55
|
let focusedColumnKeyID = null;
|
|
50
56
|
let focusedItemKey = null;
|
|
57
|
+
setDataTableContext({});
|
|
51
58
|
const sortBySortKey = (a, b) => {
|
|
52
59
|
let aValue = a[sortKey];
|
|
53
60
|
let bValue = b[sortKey];
|
|
@@ -76,7 +83,6 @@ $: {
|
|
|
76
83
|
}
|
|
77
84
|
const dispatch = createEventDispatcher();
|
|
78
85
|
const getItemKey = (item) => item ? itemKey ? item[itemKey] || null : items.indexOf(item).toString() : null;
|
|
79
|
-
const getColumnID = (column) => column ? column.id || null : null;
|
|
80
86
|
const divClass = joinClasses(divClassOverride || divClassDefault, divClassAppend);
|
|
81
87
|
const tableClass = joinClasses(tableClassOverride || tableClassDefault, tableClassAppend);
|
|
82
88
|
const theadClass = joinClasses(theadClassOverride || theadClassDefault, theadClassAppend);
|
|
@@ -167,7 +173,8 @@ const enterPressed = (event) => {
|
|
|
167
173
|
focusedItemKey = getItemKey(sortedItems[itemIndex + 1]);
|
|
168
174
|
}
|
|
169
175
|
};
|
|
170
|
-
const cellClicked = (
|
|
176
|
+
const cellClicked = (event) => {
|
|
177
|
+
const { column, item } = event.detail;
|
|
171
178
|
focusedColumnKeyID = null;
|
|
172
179
|
focusedItemKey = null;
|
|
173
180
|
if (column.canFocus) {
|
|
@@ -178,6 +185,9 @@ const cellClicked = (item, column) => {
|
|
|
178
185
|
item,
|
|
179
186
|
column
|
|
180
187
|
});
|
|
188
|
+
dispatch("rowClicked", {
|
|
189
|
+
item
|
|
190
|
+
});
|
|
181
191
|
};
|
|
182
192
|
const headerClicked = (column) => {
|
|
183
193
|
if (column.id && column.canSort) {
|
|
@@ -198,24 +208,6 @@ const headerClicked = (column) => {
|
|
|
198
208
|
reverseSort
|
|
199
209
|
});
|
|
200
210
|
};
|
|
201
|
-
const rowClicked = (item) => {
|
|
202
|
-
dispatch("rowClicked", {
|
|
203
|
-
item
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
let draggedItem = null;
|
|
207
|
-
const rowDragStart = (item) => {
|
|
208
|
-
draggedItem = item;
|
|
209
|
-
dispatch("rowDragStart", {
|
|
210
|
-
draggedItem
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
const rowDropped = (targetItem) => {
|
|
214
|
-
dispatch("rowDropped", {
|
|
215
|
-
draggedItem,
|
|
216
|
-
targetItem
|
|
217
|
-
});
|
|
218
|
-
};
|
|
219
211
|
</script>
|
|
220
212
|
|
|
221
213
|
<Table class={tableClass} {divClass} {striped} {hoverable} {noborder} {shadow} {color} {customColor}>
|
|
@@ -235,29 +227,26 @@ const rowDropped = (targetItem) => {
|
|
|
235
227
|
<TableBody {tableBodyClass}>
|
|
236
228
|
{#each sortedItems as item}
|
|
237
229
|
{@const isRowFocused = !!focusedItemKey && focusedItemKey === getItemKey(item)}
|
|
238
|
-
<
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
{
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
/>
|
|
259
|
-
{/each}
|
|
260
|
-
</TableBodyRow>
|
|
230
|
+
<DataTableRow
|
|
231
|
+
{allowRowDrag}
|
|
232
|
+
{allowRowDrop}
|
|
233
|
+
columns={internalColumns}
|
|
234
|
+
{focusedColumnKeyID}
|
|
235
|
+
{getTRClass}
|
|
236
|
+
{isRowFocused}
|
|
237
|
+
{item}
|
|
238
|
+
on:action
|
|
239
|
+
on:cellChanged
|
|
240
|
+
on:cellClicked={cellClicked}
|
|
241
|
+
on:cellDragStart
|
|
242
|
+
on:cellDropped
|
|
243
|
+
on:enterPressed={enterPressed}
|
|
244
|
+
on:nextTab={nextTab}
|
|
245
|
+
on:prevTab={prevTab}
|
|
246
|
+
on:rowClicked
|
|
247
|
+
on:rowDragStart
|
|
248
|
+
on:rowDropped
|
|
249
|
+
/>
|
|
261
250
|
{/each}
|
|
262
251
|
</TableBody>
|
|
263
252
|
</Table>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type { ColumnConfig, EnterAction, RowClassFunction, SortFunction } from './common.js';
|
|
2
|
+
import type { ColumnConfig, EnterAction, RowBoolean, RowClassFunction, RowDropBoolean, SortFunction } from './common.js';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
+
allowRowDrag?: RowBoolean | undefined;
|
|
6
|
+
allowRowDrop?: RowDropBoolean | undefined;
|
|
5
7
|
columns?: ColumnConfig[] | undefined;
|
|
6
8
|
items?: any[] | undefined;
|
|
7
9
|
sortKey?: string | undefined;
|
|
@@ -39,11 +41,13 @@ declare const __propDef: {
|
|
|
39
41
|
events: {
|
|
40
42
|
action: any;
|
|
41
43
|
cellChanged: any;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
cellDragStart: CustomEvent<any>;
|
|
45
|
+
cellDropped: CustomEvent<any>;
|
|
44
46
|
rowClicked: CustomEvent<any>;
|
|
45
47
|
rowDragStart: CustomEvent<any>;
|
|
46
48
|
rowDropped: CustomEvent<any>;
|
|
49
|
+
cellClicked: CustomEvent<any>;
|
|
50
|
+
headerClicked: CustomEvent<any>;
|
|
47
51
|
} & {
|
|
48
52
|
[evt: string]: CustomEvent<any>;
|
|
49
53
|
};
|
|
@@ -1,14 +1,77 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import {
|
|
1
|
+
<script>import { createEventDispatcher, onDestroy } from "svelte";
|
|
2
|
+
import { TableBodyCell } from "flowbite-svelte";
|
|
3
|
+
import {
|
|
4
|
+
defaultCellRenderer,
|
|
5
|
+
evalCellDropBoolean,
|
|
6
|
+
evalRowBoolean,
|
|
7
|
+
getDataTableContext
|
|
8
|
+
} from "./common.js";
|
|
3
9
|
export let column;
|
|
4
10
|
export let item;
|
|
5
11
|
export let isCellFocused;
|
|
12
|
+
const context = getDataTableContext();
|
|
13
|
+
let span;
|
|
14
|
+
const dispatch = createEventDispatcher();
|
|
15
|
+
const dragOverHandler = (event) => {
|
|
16
|
+
const { draggedColumn, draggedItem } = context;
|
|
17
|
+
event.preventDefault();
|
|
18
|
+
const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
|
|
19
|
+
if (canDrop) {
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
if (event.dataTransfer) {
|
|
22
|
+
event.dataTransfer.dropEffect = "move";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const dragStartHandler = (dragEvent) => {
|
|
27
|
+
context.draggedColumn = column;
|
|
28
|
+
context.draggedItem = item;
|
|
29
|
+
dispatch("cellDragStart", {
|
|
30
|
+
dragEvent,
|
|
31
|
+
sourceColumn: column,
|
|
32
|
+
sourceItem: item
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
const dropHandler = (event) => {
|
|
36
|
+
const { draggedColumn, draggedItem } = context;
|
|
37
|
+
const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
|
|
38
|
+
if (canDrop) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
dispatch("cellDropped", {
|
|
41
|
+
sourceColumn: draggedColumn,
|
|
42
|
+
sourceItem: draggedItem,
|
|
43
|
+
targetColumn: column,
|
|
44
|
+
targetItem: item
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
$: {
|
|
49
|
+
if (span && span.parentElement) {
|
|
50
|
+
span.parentElement.addEventListener("dragover", dragOverHandler);
|
|
51
|
+
span.parentElement.addEventListener("dragstart", dragStartHandler);
|
|
52
|
+
span.parentElement.addEventListener("drop", dropHandler);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
onDestroy(() => {
|
|
56
|
+
if (span && span.parentElement) {
|
|
57
|
+
span.parentElement.removeEventListener("dragover", dragOverHandler);
|
|
58
|
+
span.parentElement.removeEventListener("dragstart", dragStartHandler);
|
|
59
|
+
span.parentElement.removeEventListener("drop", dropHandler);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
6
62
|
</script>
|
|
7
63
|
|
|
8
64
|
{#await (column.cellRenderer || defaultCellRenderer)(column, item)}
|
|
9
65
|
<TableBodyCell tdClass={column.getTDClass(item, '', isCellFocused)} />
|
|
10
66
|
{:then { dataValue, displayValue }}
|
|
11
|
-
<TableBodyCell
|
|
67
|
+
<TableBodyCell
|
|
68
|
+
draggable={evalRowBoolean(item, column.allowCellDrag)}
|
|
69
|
+
tdClass={column.getTDClass(item, dataValue, isCellFocused)}
|
|
70
|
+
on:click
|
|
71
|
+
>
|
|
72
|
+
{#if !!column.allowCellDrag || !!column.allowCellDrop}
|
|
73
|
+
<span style="display:none" bind:this={span}></span>
|
|
74
|
+
{/if}
|
|
12
75
|
{#if column.viewComponent}
|
|
13
76
|
<svelte:component
|
|
14
77
|
this={column.viewComponent}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<script>import { createEventDispatcher, onDestroy, onMount } from "svelte";
|
|
2
|
+
import { TableBodyRow } from "flowbite-svelte";
|
|
3
|
+
import DataTableDataCell from "./DataTableDataCell.svelte";
|
|
4
|
+
import {
|
|
5
|
+
evalRowDropBoolean,
|
|
6
|
+
evalRowBoolean,
|
|
7
|
+
getColumnID,
|
|
8
|
+
getDataTableContext
|
|
9
|
+
} from "./common.js";
|
|
10
|
+
export let allowRowDrag;
|
|
11
|
+
export let allowRowDrop;
|
|
12
|
+
export let columns;
|
|
13
|
+
export let focusedColumnKeyID;
|
|
14
|
+
export let getTRClass;
|
|
15
|
+
export let isRowFocused;
|
|
16
|
+
export let item;
|
|
17
|
+
const context = getDataTableContext();
|
|
18
|
+
let span;
|
|
19
|
+
const dispatch = createEventDispatcher();
|
|
20
|
+
const cellClicked = (column) => dispatch("cellClicked", { column, item });
|
|
21
|
+
const rowClicked = () => dispatch("rowClicked", { item });
|
|
22
|
+
const dragOverHandler = (event) => {
|
|
23
|
+
const { draggedItem } = context;
|
|
24
|
+
const canDrop = evalRowDropBoolean(draggedItem, item, allowRowDrop);
|
|
25
|
+
if (canDrop) {
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
if (event.dataTransfer) {
|
|
28
|
+
event.dataTransfer.dropEffect = "move";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const dragStartHandler = (dragEvent) => {
|
|
33
|
+
context.draggedColumn = void 0;
|
|
34
|
+
context.draggedItem = item;
|
|
35
|
+
dispatch("rowDragStart", {
|
|
36
|
+
dragEvent,
|
|
37
|
+
sourceItem: item
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
const dropHandler = (event) => {
|
|
41
|
+
const { draggedItem } = context;
|
|
42
|
+
const canDrop = evalRowDropBoolean(draggedItem, item, allowRowDrop);
|
|
43
|
+
if (canDrop) {
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
dispatch("rowDropped", {
|
|
46
|
+
sourceItem: draggedItem,
|
|
47
|
+
targetItem: item
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
onMount(() => {
|
|
52
|
+
if (span && span.parentElement) {
|
|
53
|
+
span.parentElement.addEventListener("click", rowClicked);
|
|
54
|
+
span.parentElement.addEventListener("dragover", dragOverHandler);
|
|
55
|
+
span.parentElement.addEventListener("dragstart", dragStartHandler);
|
|
56
|
+
span.parentElement.addEventListener("drop", dropHandler);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
onDestroy(() => {
|
|
60
|
+
if (span && span.parentElement) {
|
|
61
|
+
span.parentElement.removeEventListener("click", rowClicked);
|
|
62
|
+
span.parentElement.removeEventListener("dragover", dragOverHandler);
|
|
63
|
+
span.parentElement.removeEventListener("dragstart", dragStartHandler);
|
|
64
|
+
span.parentElement.removeEventListener("drop", dropHandler);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<TableBodyRow
|
|
70
|
+
class={getTRClass(item, isRowFocused)}
|
|
71
|
+
draggable={evalRowBoolean(item, allowRowDrag)}
|
|
72
|
+
>
|
|
73
|
+
{#if !!allowRowDrag || !!allowRowDrop}
|
|
74
|
+
<span style="display:none" bind:this={span}></span>
|
|
75
|
+
{/if}
|
|
76
|
+
{#each columns as column}
|
|
77
|
+
{@const isCellFocused =
|
|
78
|
+
isRowFocused && focusedColumnKeyID && focusedColumnKeyID === getColumnID(column)}
|
|
79
|
+
<DataTableDataCell
|
|
80
|
+
{column}
|
|
81
|
+
{isCellFocused}
|
|
82
|
+
{item}
|
|
83
|
+
on:click={() => cellClicked(column)}
|
|
84
|
+
on:enterPressed
|
|
85
|
+
on:prevTab
|
|
86
|
+
on:nextTab
|
|
87
|
+
on:action
|
|
88
|
+
on:cellChanged
|
|
89
|
+
on:cellDragStart
|
|
90
|
+
on:cellDropped
|
|
91
|
+
/>
|
|
92
|
+
{/each}
|
|
93
|
+
</TableBodyRow>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
import type { RowBoolean, RowDropBoolean, GetTRClassFunction, InternalColumnConfig } from './common.js';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
allowRowDrag: RowBoolean;
|
|
6
|
+
allowRowDrop: RowDropBoolean;
|
|
7
|
+
columns: InternalColumnConfig[];
|
|
8
|
+
focusedColumnKeyID: any;
|
|
9
|
+
getTRClass: GetTRClassFunction;
|
|
10
|
+
isRowFocused: boolean;
|
|
11
|
+
item: any;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
enterPressed: any;
|
|
15
|
+
prevTab: any;
|
|
16
|
+
nextTab: any;
|
|
17
|
+
action: any;
|
|
18
|
+
cellChanged: any;
|
|
19
|
+
cellDragStart: CustomEvent<any>;
|
|
20
|
+
cellDropped: CustomEvent<any>;
|
|
21
|
+
cellClicked: CustomEvent<any>;
|
|
22
|
+
rowClicked: CustomEvent<any>;
|
|
23
|
+
rowDragStart: CustomEvent<any>;
|
|
24
|
+
rowDropped: CustomEvent<any>;
|
|
25
|
+
} & {
|
|
26
|
+
[evt: string]: CustomEvent<any>;
|
|
27
|
+
};
|
|
28
|
+
slots: {};
|
|
29
|
+
};
|
|
30
|
+
export type DataTableRowProps = typeof __propDef.props;
|
|
31
|
+
export type DataTableRowEvents = typeof __propDef.events;
|
|
32
|
+
export type DataTableRowSlots = typeof __propDef.slots;
|
|
33
|
+
export default class DataTableRow extends SvelteComponent<DataTableRowProps, DataTableRowEvents, DataTableRowSlots> {
|
|
34
|
+
}
|
|
35
|
+
export {};
|
package/dist/common.d.ts
CHANGED
|
@@ -56,6 +56,8 @@ b: any) => number;
|
|
|
56
56
|
* @property {string} [id] - Used to distinguish between multiple columns that have the same key.
|
|
57
57
|
* @property {string} [key] - Name of the property in each row item that will be used for this column's value.
|
|
58
58
|
* @property {string} [title] - Text to display in the column's header.
|
|
59
|
+
* @property {RowBoolean} [allowCellDrag] -
|
|
60
|
+
* @property {CellDropBoolean} [allowCellDrop] -
|
|
59
61
|
* @property {CellRenderer} [cellRenderer] - Dynamically determines the data value and display value for a cell.
|
|
60
62
|
* @property {ConstructorOfATypedSvelteComponent} [viewComponent] - Svelte component class to be displayed in the cell regardless of focus. If set, focusComponent will be ignored.
|
|
61
63
|
* @property {object} [viewComponentConfig] - Properties to be passed when creating viewComponent.
|
|
@@ -76,14 +78,19 @@ b: any) => number;
|
|
|
76
78
|
* @property {string} [sortKey] - Item property to sort by, if sortFunction is not defined.
|
|
77
79
|
*/
|
|
78
80
|
export interface ColumnConfig {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
allowCellDrag?: RowBoolean;
|
|
82
|
+
allowCellDrop?: CellDropBoolean;
|
|
83
|
+
canFocus?: boolean;
|
|
84
|
+
canSort?: boolean;
|
|
82
85
|
cellRenderer?: CellRenderer;
|
|
83
|
-
viewComponent?: ConstructorOfATypedSvelteComponent;
|
|
84
|
-
viewComponentConfig?: any;
|
|
85
86
|
focusComponent?: ConstructorOfATypedSvelteComponent;
|
|
86
87
|
focusComponentConfig?: any;
|
|
88
|
+
id?: string;
|
|
89
|
+
key?: string;
|
|
90
|
+
sortAscendingIcon?: ConstructorOfATypedSvelteComponent;
|
|
91
|
+
sortDescendingIcon?: ConstructorOfATypedSvelteComponent;
|
|
92
|
+
sortFunction?: SortFunction;
|
|
93
|
+
sortKey?: string;
|
|
87
94
|
tdClassAppend?: string;
|
|
88
95
|
tdClassOverride?: string;
|
|
89
96
|
tdFocusedClassAppend?: string;
|
|
@@ -91,12 +98,9 @@ export interface ColumnConfig {
|
|
|
91
98
|
tdClassGetter?: DataCellClassFunction;
|
|
92
99
|
thClassAppend?: string;
|
|
93
100
|
thClassOverride?: string;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
sortKey?: string;
|
|
98
|
-
sortAscendingIcon?: ConstructorOfATypedSvelteComponent;
|
|
99
|
-
sortDescendingIcon?: ConstructorOfATypedSvelteComponent;
|
|
101
|
+
title?: string;
|
|
102
|
+
viewComponent?: ConstructorOfATypedSvelteComponent;
|
|
103
|
+
viewComponentConfig?: any;
|
|
100
104
|
}
|
|
101
105
|
/**
|
|
102
106
|
* Returns the a class string for a data row.
|
|
@@ -128,9 +132,40 @@ export declare const joinClasses: (...classes: (string | false | null | undefine
|
|
|
128
132
|
* @enum {string} EnterAction
|
|
129
133
|
*/
|
|
130
134
|
export type EnterAction = 'next' | 'down' | 'stay';
|
|
135
|
+
export type GetItemKeyFunction = (item?: any) => any;
|
|
131
136
|
export type GetTDClassFunction = (item: any, value: any, isFocused: boolean) => string;
|
|
137
|
+
export type GetTRClassFunction = (item: any, isRowFocused: boolean) => string;
|
|
132
138
|
export interface InternalColumnConfig extends ColumnConfig {
|
|
133
139
|
getTDClass: GetTDClassFunction;
|
|
134
140
|
}
|
|
141
|
+
type CellDropBooleanFunction = (sourceItem: any, targetItem: any, targetColumn: ColumnConfig) => boolean;
|
|
142
|
+
/**
|
|
143
|
+
* @callback CellDropBoolean
|
|
144
|
+
* @returns {boolean}
|
|
145
|
+
*/
|
|
146
|
+
export type CellDropBoolean = boolean | CellDropBooleanFunction;
|
|
147
|
+
type RowBooleanFunction = (item: any) => boolean;
|
|
148
|
+
/**
|
|
149
|
+
* @callback RowBoolean
|
|
150
|
+
* @returns {boolean}
|
|
151
|
+
*/
|
|
152
|
+
export type RowBoolean = boolean | RowBooleanFunction;
|
|
153
|
+
type RowDropBooleanFunction = (sourceItem: any, targetItem: any) => boolean;
|
|
154
|
+
/**
|
|
155
|
+
* @callback RowDropBoolean
|
|
156
|
+
* @returns {boolean}
|
|
157
|
+
*/
|
|
158
|
+
export type RowDropBoolean = boolean | RowDropBooleanFunction;
|
|
135
159
|
export declare const blankCellValue: CellValue;
|
|
160
|
+
export declare const evalCellDropBoolean: (sourceItem: any, sourceColumn: ColumnConfig | undefined, targetItem: any, cellDropBoolean?: CellDropBoolean) => boolean | undefined;
|
|
161
|
+
export declare const evalRowBoolean: (item: any, rowBoolean?: RowBoolean) => boolean | undefined;
|
|
162
|
+
export declare const evalRowDropBoolean: (sourceItem: any, targetItem: any, rowDropBoolean?: RowDropBoolean) => boolean | undefined;
|
|
136
163
|
export declare const defaultCellRenderer: CellRenderer;
|
|
164
|
+
export declare const getColumnID: (column?: ColumnConfig | null) => string | null;
|
|
165
|
+
interface DataTableContext {
|
|
166
|
+
draggedColumn?: InternalColumnConfig;
|
|
167
|
+
draggedItem?: any;
|
|
168
|
+
}
|
|
169
|
+
export declare const getDataTableContext: () => DataTableContext;
|
|
170
|
+
export declare const setDataTableContext: (context: DataTableContext) => DataTableContext;
|
|
171
|
+
export {};
|
package/dist/common.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
1
2
|
/**
|
|
2
3
|
* Joins an array of classes into a string, removing any falsey values.
|
|
3
4
|
* @function joinClasses
|
|
@@ -9,6 +10,28 @@ export const blankCellValue = {
|
|
|
9
10
|
dataValue: null,
|
|
10
11
|
displayValue: '',
|
|
11
12
|
};
|
|
13
|
+
export const evalCellDropBoolean = (sourceItem, sourceColumn, targetItem, cellDropBoolean) => {
|
|
14
|
+
if (typeof cellDropBoolean === 'boolean') {
|
|
15
|
+
return cellDropBoolean;
|
|
16
|
+
}
|
|
17
|
+
return cellDropBoolean && cellDropBoolean(sourceItem, sourceColumn, targetItem);
|
|
18
|
+
};
|
|
19
|
+
export const evalRowBoolean = (item, rowBoolean) => {
|
|
20
|
+
if (typeof rowBoolean === 'boolean') {
|
|
21
|
+
return rowBoolean;
|
|
22
|
+
}
|
|
23
|
+
return rowBoolean && rowBoolean(item);
|
|
24
|
+
};
|
|
25
|
+
export const evalRowDropBoolean = (sourceItem, targetItem, rowDropBoolean) => {
|
|
26
|
+
if (typeof rowDropBoolean == 'boolean') {
|
|
27
|
+
return rowDropBoolean;
|
|
28
|
+
}
|
|
29
|
+
return rowDropBoolean && rowDropBoolean(sourceItem, targetItem);
|
|
30
|
+
};
|
|
12
31
|
export const defaultCellRenderer = async (column, item) => column.key
|
|
13
32
|
? { dataValue: item[column.key], displayValue: item[column.key] || '' }
|
|
14
33
|
: blankCellValue;
|
|
34
|
+
export const getColumnID = (column) => (column ? column.id || null : null);
|
|
35
|
+
const dataTableContextName = 'data-grid';
|
|
36
|
+
export const getDataTableContext = () => getContext(dataTableContextName);
|
|
37
|
+
export const setDataTableContext = (context) => setContext(dataTableContextName, context);
|