@gradio/dataframe 0.22.0 → 0.23.1
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/CHANGELOG.md +24 -0
- package/Dataframe.test.ts +777 -31
- package/Index.svelte +107 -106
- package/dist/Index.svelte +107 -106
- package/dist/Index.svelte.d.ts +0 -1
- package/dist/shared/BooleanCell.svelte +12 -6
- package/dist/shared/BooleanCell.svelte.d.ts +4 -18
- package/dist/shared/CellMenu.svelte +74 -49
- package/dist/shared/CellMenu.svelte.d.ts +5 -19
- package/dist/shared/CellMenuButton.svelte +3 -3
- package/dist/shared/CellMenuButton.svelte.d.ts +4 -18
- package/dist/shared/CellMenuIcons.svelte +1 -1
- package/dist/shared/CellMenuIcons.svelte.d.ts +4 -18
- package/dist/shared/DataCell.svelte +189 -0
- package/dist/shared/DataCell.svelte.d.ts +44 -0
- package/dist/shared/EditableCell.svelte +88 -64
- package/dist/shared/EditableCell.svelte.d.ts +8 -26
- package/dist/shared/EmptyRowButton.svelte +2 -2
- package/dist/shared/EmptyRowButton.svelte.d.ts +4 -18
- package/dist/shared/FilterMenu.svelte +26 -18
- package/dist/shared/FilterMenu.svelte.d.ts +5 -21
- package/dist/shared/HeaderCell.svelte +218 -0
- package/dist/shared/HeaderCell.svelte.d.ts +30 -0
- package/dist/shared/RowNumber.svelte +4 -2
- package/dist/shared/RowNumber.svelte.d.ts +4 -18
- package/dist/shared/Table.svelte +1037 -949
- package/dist/shared/Table.svelte.d.ts +12 -30
- package/dist/shared/Toolbar.svelte +32 -22
- package/dist/shared/Toolbar.svelte.d.ts +6 -21
- package/dist/shared/column_measurement.svelte.d.ts +20 -0
- package/dist/shared/column_measurement.svelte.js +79 -0
- package/dist/shared/icons/FilterIcon.svelte +14 -6
- package/dist/shared/icons/FilterIcon.svelte.d.ts +14 -6
- package/dist/shared/icons/Padlock.svelte +6 -2
- package/dist/shared/icons/Padlock.svelte.d.ts +4 -25
- package/dist/shared/icons/SelectionButtons.svelte +23 -8
- package/dist/shared/icons/SelectionButtons.svelte.d.ts +4 -18
- package/dist/shared/icons/SortButtonDown.svelte +15 -4
- package/dist/shared/icons/SortButtonDown.svelte.d.ts +4 -25
- package/dist/shared/icons/SortButtonUp.svelte +15 -5
- package/dist/shared/icons/SortButtonUp.svelte.d.ts +4 -25
- package/dist/shared/icons/SortIcon.svelte +13 -7
- package/dist/shared/icons/SortIcon.svelte.d.ts +7 -21
- package/dist/shared/tanstack/index.d.ts +3 -0
- package/dist/shared/tanstack/index.js +3 -0
- package/dist/shared/tanstack/table.svelte.d.ts +26 -0
- package/dist/shared/tanstack/table.svelte.js +102 -0
- package/dist/shared/tanstack/virtual.svelte.d.ts +14 -0
- package/dist/shared/tanstack/virtual.svelte.js +76 -0
- package/dist/shared/types.d.ts +2 -0
- package/dist/shared/utils/filter.d.ts +5 -0
- package/dist/shared/utils/filter.js +62 -0
- package/dist/shared/utils/selection_utils.js +1 -1
- package/dist/shared/utils/table_utils.d.ts +1 -14
- package/dist/shared/utils/table_utils.js +0 -61
- package/dist/standalone/Index.svelte +71 -46
- package/dist/standalone/Index.svelte.d.ts +4 -23
- package/dist/types.d.ts +32 -0
- package/dist/types.js +1 -0
- package/package.json +12 -11
- package/shared/BooleanCell.svelte +12 -6
- package/shared/CellMenu.svelte +74 -49
- package/shared/CellMenuButton.svelte +3 -3
- package/shared/CellMenuIcons.svelte +1 -1
- package/shared/DataCell.svelte +189 -0
- package/shared/EditableCell.svelte +88 -64
- package/shared/EmptyRowButton.svelte +2 -2
- package/shared/FilterMenu.svelte +26 -18
- package/shared/HeaderCell.svelte +218 -0
- package/shared/RowNumber.svelte +4 -2
- package/shared/Table.svelte +1037 -949
- package/shared/Toolbar.svelte +32 -22
- package/shared/column_measurement.svelte.ts +103 -0
- package/shared/icons/FilterIcon.svelte +14 -6
- package/shared/icons/Padlock.svelte +6 -2
- package/shared/icons/SelectionButtons.svelte +23 -8
- package/shared/icons/SortButtonDown.svelte +15 -4
- package/shared/icons/SortButtonUp.svelte +15 -5
- package/shared/icons/SortIcon.svelte +13 -7
- package/shared/tanstack/index.ts +23 -0
- package/shared/tanstack/table.svelte.ts +117 -0
- package/shared/tanstack/virtual.svelte.ts +105 -0
- package/shared/types.ts +3 -0
- package/shared/utils/filter.ts +66 -0
- package/shared/utils/selection_utils.ts +1 -1
- package/shared/utils/table_utils.ts +1 -100
- package/standalone/Index.svelte +71 -46
- package/test/filter.test.ts +350 -0
- package/test/selection_utils.test.ts +416 -0
- package/test/table_utils.test.ts +45 -112
- package/types.ts +34 -0
- package/dist/shared/TableCell.svelte +0 -330
- package/dist/shared/TableCell.svelte.d.ts +0 -66
- package/dist/shared/TableHeader.svelte +0 -344
- package/dist/shared/TableHeader.svelte.d.ts +0 -61
- package/dist/shared/VirtualTable.svelte +0 -379
- package/dist/shared/VirtualTable.svelte.d.ts +0 -42
- package/dist/shared/context/dataframe_context.d.ts +0 -180
- package/dist/shared/context/dataframe_context.js +0 -412
- package/dist/shared/icons/SortArrowDown.svelte +0 -25
- package/dist/shared/icons/SortArrowDown.svelte.d.ts +0 -20
- package/dist/shared/icons/SortArrowUp.svelte +0 -25
- package/dist/shared/icons/SortArrowUp.svelte.d.ts +0 -20
- package/dist/shared/utils/data_processing.d.ts +0 -14
- package/dist/shared/utils/data_processing.js +0 -47
- package/dist/shared/utils/drag_utils.d.ts +0 -15
- package/dist/shared/utils/drag_utils.js +0 -67
- package/dist/shared/utils/filter_utils.d.ts +0 -29
- package/dist/shared/utils/filter_utils.js +0 -123
- package/dist/shared/utils/keyboard_utils.d.ts +0 -3
- package/dist/shared/utils/keyboard_utils.js +0 -236
- package/dist/shared/utils/menu_utils.d.ts +0 -42
- package/dist/shared/utils/menu_utils.js +0 -58
- package/dist/shared/utils/sort_utils.d.ts +0 -26
- package/dist/shared/utils/sort_utils.js +0 -59
- package/shared/TableCell.svelte +0 -330
- package/shared/TableHeader.svelte +0 -344
- package/shared/VirtualTable.svelte +0 -379
- package/shared/context/dataframe_context.ts +0 -701
- package/shared/icons/SortArrowDown.svelte +0 -25
- package/shared/icons/SortArrowUp.svelte +0 -25
- package/shared/utils/data_processing.ts +0 -77
- package/shared/utils/drag_utils.ts +0 -105
- package/shared/utils/filter_utils.ts +0 -208
- package/shared/utils/keyboard_utils.ts +0 -309
- package/shared/utils/menu_utils.ts +0 -115
- package/shared/utils/sort_utils.ts +0 -91
- package/test/sort_utils.test.ts +0 -323
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
export let size = 16;
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<svg
|
|
6
|
-
width={size}
|
|
7
|
-
height={size}
|
|
8
|
-
viewBox="0 0 16 16"
|
|
9
|
-
fill="none"
|
|
10
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
-
>
|
|
12
|
-
<path
|
|
13
|
-
d="M4 8L8 4L12 8"
|
|
14
|
-
stroke="currentColor"
|
|
15
|
-
stroke-width="1.5"
|
|
16
|
-
stroke-linecap="round"
|
|
17
|
-
stroke-linejoin="round"
|
|
18
|
-
/>
|
|
19
|
-
<path
|
|
20
|
-
d="M8 4V12"
|
|
21
|
-
stroke="currentColor"
|
|
22
|
-
stroke-width="1.5"
|
|
23
|
-
stroke-linecap="round"
|
|
24
|
-
/>
|
|
25
|
-
</svg>
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type { Datatype, Headers, HeadersWithIDs } from "./utils";
|
|
2
|
-
import type { CellValue } from "../types";
|
|
3
|
-
import { cast_value_to_type } from "./utils";
|
|
4
|
-
|
|
5
|
-
export function make_headers(
|
|
6
|
-
_head: Headers,
|
|
7
|
-
col_count: [number, "fixed" | "dynamic"],
|
|
8
|
-
els: Record<
|
|
9
|
-
string,
|
|
10
|
-
{ cell: null | HTMLTableCellElement; input: null | HTMLTextAreaElement }
|
|
11
|
-
>,
|
|
12
|
-
make_id: () => string
|
|
13
|
-
): HeadersWithIDs {
|
|
14
|
-
let _h = _head || [];
|
|
15
|
-
if (col_count[1] === "fixed" && _h.length < col_count[0]) {
|
|
16
|
-
const fill = Array(col_count[0] - _h.length)
|
|
17
|
-
.fill("")
|
|
18
|
-
.map((_, i) => `${i + _h.length}`);
|
|
19
|
-
_h = _h.concat(fill);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (!_h || _h.length === 0) {
|
|
23
|
-
return Array(col_count[0])
|
|
24
|
-
.fill(0)
|
|
25
|
-
.map((_, i) => {
|
|
26
|
-
const _id = make_id();
|
|
27
|
-
els[_id] = { cell: null, input: null };
|
|
28
|
-
return { id: _id, value: JSON.stringify(i + 1) };
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return _h.map((h, i) => {
|
|
33
|
-
const _id = make_id();
|
|
34
|
-
els[_id] = { cell: null, input: null };
|
|
35
|
-
return { id: _id, value: h ?? "" };
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function process_data(
|
|
40
|
-
values: CellValue[][],
|
|
41
|
-
els: Record<
|
|
42
|
-
string,
|
|
43
|
-
{ cell: null | HTMLTableCellElement; input: null | HTMLTextAreaElement }
|
|
44
|
-
>,
|
|
45
|
-
data_binding: Record<string, any>,
|
|
46
|
-
make_id: () => string,
|
|
47
|
-
display_value: string[][] | null = null,
|
|
48
|
-
datatype: Datatype | Datatype[]
|
|
49
|
-
): { id: string; value: CellValue; display_value?: string }[][] {
|
|
50
|
-
if (!values || values.length === 0) {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const result = values.map((row, i) => {
|
|
55
|
-
return row.map((value, j) => {
|
|
56
|
-
const _id = make_id();
|
|
57
|
-
els[_id] = { cell: null, input: null };
|
|
58
|
-
data_binding[_id] = value;
|
|
59
|
-
|
|
60
|
-
let display = display_value?.[i]?.[j];
|
|
61
|
-
|
|
62
|
-
if (display === undefined) {
|
|
63
|
-
display = String(value);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const dtype = Array.isArray(datatype) ? datatype[j] : datatype;
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
id: _id,
|
|
70
|
-
value: cast_value_to_type(value, dtype),
|
|
71
|
-
display_value: display
|
|
72
|
-
};
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return result;
|
|
77
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import type { CellCoordinate } from "../types";
|
|
2
|
-
import { get_range_selection } from "../utils/selection_utils";
|
|
3
|
-
|
|
4
|
-
export type DragState = {
|
|
5
|
-
is_dragging: boolean;
|
|
6
|
-
drag_start: CellCoordinate | null;
|
|
7
|
-
mouse_down_pos: { x: number; y: number } | null;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export type DragHandlers = {
|
|
11
|
-
handle_mouse_down: (event: MouseEvent, row: number, col: number) => void;
|
|
12
|
-
handle_mouse_move: (event: MouseEvent) => void;
|
|
13
|
-
handle_mouse_up: (event: MouseEvent) => void;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export function create_drag_handlers(
|
|
17
|
-
state: DragState,
|
|
18
|
-
set_is_dragging: (value: boolean) => void,
|
|
19
|
-
set_selected_cells: (cells: CellCoordinate[]) => void,
|
|
20
|
-
set_selected: (cell: CellCoordinate | false) => void,
|
|
21
|
-
handle_cell_click: (event: MouseEvent, row: number, col: number) => void,
|
|
22
|
-
show_row_numbers: boolean,
|
|
23
|
-
parent_element?: HTMLElement
|
|
24
|
-
): DragHandlers {
|
|
25
|
-
const start_drag = (event: MouseEvent, row: number, col: number): void => {
|
|
26
|
-
const target = event.target as HTMLElement;
|
|
27
|
-
const is_checkbox_click =
|
|
28
|
-
(target as HTMLInputElement).type === "checkbox" ||
|
|
29
|
-
target.closest('input[type="checkbox"]') ||
|
|
30
|
-
target.closest(".bool-cell");
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
event.target instanceof HTMLAnchorElement ||
|
|
34
|
-
(show_row_numbers && col === -1) ||
|
|
35
|
-
is_checkbox_click
|
|
36
|
-
)
|
|
37
|
-
return;
|
|
38
|
-
|
|
39
|
-
event.preventDefault();
|
|
40
|
-
event.stopPropagation();
|
|
41
|
-
|
|
42
|
-
state.mouse_down_pos = { x: event.clientX, y: event.clientY };
|
|
43
|
-
state.drag_start = [row, col];
|
|
44
|
-
|
|
45
|
-
if (!event.shiftKey && !event.metaKey && !event.ctrlKey) {
|
|
46
|
-
set_selected_cells([[row, col]]);
|
|
47
|
-
set_selected([row, col]);
|
|
48
|
-
handle_cell_click(event, row, col);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const update_selection = (event: MouseEvent): void => {
|
|
53
|
-
const cell = (event.target as HTMLElement).closest("td");
|
|
54
|
-
if (!cell) return;
|
|
55
|
-
|
|
56
|
-
const row = parseInt(cell.getAttribute("data-row") || "0");
|
|
57
|
-
const col = parseInt(cell.getAttribute("data-col") || "0");
|
|
58
|
-
|
|
59
|
-
if (isNaN(row) || isNaN(col)) return;
|
|
60
|
-
|
|
61
|
-
const selection_range = get_range_selection(state.drag_start!, [row, col]);
|
|
62
|
-
set_selected_cells(selection_range);
|
|
63
|
-
set_selected([row, col]);
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const end_drag = (event: MouseEvent): void => {
|
|
67
|
-
if (!state.is_dragging && state.drag_start) {
|
|
68
|
-
handle_cell_click(event, state.drag_start[0], state.drag_start[1]);
|
|
69
|
-
} else if (state.is_dragging && parent_element) {
|
|
70
|
-
parent_element.focus();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
state.is_dragging = false;
|
|
74
|
-
set_is_dragging(false);
|
|
75
|
-
state.drag_start = null;
|
|
76
|
-
state.mouse_down_pos = null;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
handle_mouse_down: start_drag,
|
|
81
|
-
|
|
82
|
-
handle_mouse_move(event: MouseEvent): void {
|
|
83
|
-
if (!state.drag_start || !state.mouse_down_pos) return;
|
|
84
|
-
|
|
85
|
-
if (!(event.buttons & 1)) {
|
|
86
|
-
end_drag(event);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const dx = Math.abs(event.clientX - state.mouse_down_pos.x);
|
|
91
|
-
const dy = Math.abs(event.clientY - state.mouse_down_pos.y);
|
|
92
|
-
|
|
93
|
-
if (!state.is_dragging && (dx > 3 || dy > 3)) {
|
|
94
|
-
state.is_dragging = true;
|
|
95
|
-
set_is_dragging(true);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (state.is_dragging) {
|
|
99
|
-
update_selection(event);
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
handle_mouse_up: end_drag
|
|
104
|
-
};
|
|
105
|
-
}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { filter_table_data } from "./table_utils";
|
|
2
|
-
import type { CellValue } from "../types";
|
|
3
|
-
|
|
4
|
-
export type FilterDatatype = "string" | "number";
|
|
5
|
-
|
|
6
|
-
export function filter_data(
|
|
7
|
-
data: { id: string; value: CellValue }[][],
|
|
8
|
-
filter_columns: {
|
|
9
|
-
col: number;
|
|
10
|
-
datatype: FilterDatatype;
|
|
11
|
-
filter: string;
|
|
12
|
-
value: string;
|
|
13
|
-
}[]
|
|
14
|
-
): number[] {
|
|
15
|
-
if (!data || !data.length || !data[0]) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
let row_indices = [...Array(data.length)].map((_, i) => i);
|
|
19
|
-
|
|
20
|
-
if (filter_columns.length > 0) {
|
|
21
|
-
filter_columns.forEach((column) => {
|
|
22
|
-
if (column.datatype === "string") {
|
|
23
|
-
switch (column.filter) {
|
|
24
|
-
case "Contains":
|
|
25
|
-
row_indices = row_indices.filter((i) =>
|
|
26
|
-
data[i][column.col]?.value.toString().includes(column.value)
|
|
27
|
-
);
|
|
28
|
-
break;
|
|
29
|
-
case "Does not contain":
|
|
30
|
-
row_indices = row_indices.filter(
|
|
31
|
-
(i) =>
|
|
32
|
-
!data[i][column.col]?.value.toString().includes(column.value)
|
|
33
|
-
);
|
|
34
|
-
break;
|
|
35
|
-
case "Starts with":
|
|
36
|
-
row_indices = row_indices.filter((i) =>
|
|
37
|
-
data[i][column.col]?.value.toString().startsWith(column.value)
|
|
38
|
-
);
|
|
39
|
-
break;
|
|
40
|
-
case "Ends with":
|
|
41
|
-
row_indices = row_indices.filter((i) =>
|
|
42
|
-
data[i][column.col]?.value.toString().endsWith(column.value)
|
|
43
|
-
);
|
|
44
|
-
break;
|
|
45
|
-
case "Is":
|
|
46
|
-
row_indices = row_indices.filter(
|
|
47
|
-
(i) => data[i][column.col]?.value.toString() === column.value
|
|
48
|
-
);
|
|
49
|
-
break;
|
|
50
|
-
case "Is not":
|
|
51
|
-
row_indices = row_indices.filter(
|
|
52
|
-
(i) => !(data[i][column.col]?.value.toString() === column.value)
|
|
53
|
-
);
|
|
54
|
-
break;
|
|
55
|
-
case "Is empty":
|
|
56
|
-
row_indices = row_indices.filter(
|
|
57
|
-
(i) => data[i][column.col]?.value.toString() === ""
|
|
58
|
-
);
|
|
59
|
-
break;
|
|
60
|
-
case "Is not empty":
|
|
61
|
-
row_indices = row_indices.filter(
|
|
62
|
-
(i) => !(data[i][column.col]?.value.toString() === "")
|
|
63
|
-
);
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
} else if (column.datatype === "number") {
|
|
67
|
-
switch (column.filter) {
|
|
68
|
-
case "=":
|
|
69
|
-
row_indices = row_indices.filter((i) => {
|
|
70
|
-
if (
|
|
71
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
72
|
-
!isNaN(Number(column.value))
|
|
73
|
-
) {
|
|
74
|
-
return (
|
|
75
|
-
Number(data[i][column.col]?.value) === Number(column.value)
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
return false;
|
|
79
|
-
});
|
|
80
|
-
break;
|
|
81
|
-
case "≠":
|
|
82
|
-
row_indices = row_indices.filter((i) => {
|
|
83
|
-
if (
|
|
84
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
85
|
-
!isNaN(Number(column.value))
|
|
86
|
-
) {
|
|
87
|
-
return !(
|
|
88
|
-
Number(data[i][column.col]?.value) === Number(column.value)
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
return false;
|
|
92
|
-
});
|
|
93
|
-
break;
|
|
94
|
-
case ">":
|
|
95
|
-
row_indices = row_indices.filter((i) => {
|
|
96
|
-
if (
|
|
97
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
98
|
-
!isNaN(Number(column.value))
|
|
99
|
-
) {
|
|
100
|
-
return (
|
|
101
|
-
Number(data[i][column.col]?.value) > Number(column.value)
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
return false;
|
|
105
|
-
});
|
|
106
|
-
break;
|
|
107
|
-
case "<":
|
|
108
|
-
row_indices = row_indices.filter((i) => {
|
|
109
|
-
if (
|
|
110
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
111
|
-
!isNaN(Number(column.value))
|
|
112
|
-
) {
|
|
113
|
-
return (
|
|
114
|
-
Number(data[i][column.col]?.value) < Number(column.value)
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
return false;
|
|
118
|
-
});
|
|
119
|
-
break;
|
|
120
|
-
case "≥":
|
|
121
|
-
row_indices = row_indices.filter((i) => {
|
|
122
|
-
if (
|
|
123
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
124
|
-
!isNaN(Number(column.value))
|
|
125
|
-
) {
|
|
126
|
-
return (
|
|
127
|
-
Number(data[i][column.col]?.value) >= Number(column.value)
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
});
|
|
132
|
-
break;
|
|
133
|
-
case "≤":
|
|
134
|
-
row_indices = row_indices.filter((i) => {
|
|
135
|
-
if (
|
|
136
|
-
!isNaN(Number(data[i][column.col]?.value)) &&
|
|
137
|
-
!isNaN(Number(column.value))
|
|
138
|
-
) {
|
|
139
|
-
return (
|
|
140
|
-
Number(data[i][column.col]?.value) <= Number(column.value)
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
return false;
|
|
144
|
-
});
|
|
145
|
-
break;
|
|
146
|
-
case "Is empty":
|
|
147
|
-
row_indices = row_indices.filter(
|
|
148
|
-
(i) => data[i][column.col]?.value.toString() === ""
|
|
149
|
-
);
|
|
150
|
-
break;
|
|
151
|
-
case "Is not empty":
|
|
152
|
-
row_indices = row_indices.filter((i) => {
|
|
153
|
-
if (!isNaN(Number(data[i][column.col]?.value))) {
|
|
154
|
-
return !(data[i][column.col]?.value.toString() === "");
|
|
155
|
-
}
|
|
156
|
-
return false;
|
|
157
|
-
});
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
return row_indices;
|
|
163
|
-
}
|
|
164
|
-
return [...Array(data.length)].map((_, i) => i);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export function filter_data_and_preserve_selection(
|
|
168
|
-
data: { id: string; value: CellValue }[][],
|
|
169
|
-
display_value: string[][] | null,
|
|
170
|
-
styling: string[][] | null,
|
|
171
|
-
filter_columns: {
|
|
172
|
-
col: number;
|
|
173
|
-
datatype: FilterDatatype;
|
|
174
|
-
filter: string;
|
|
175
|
-
value: string;
|
|
176
|
-
}[],
|
|
177
|
-
selected: [number, number] | false,
|
|
178
|
-
get_current_indices: (
|
|
179
|
-
id: string,
|
|
180
|
-
data: { id: string; value: CellValue }[][]
|
|
181
|
-
) => [number, number],
|
|
182
|
-
original_data?: { id: string; value: CellValue }[][],
|
|
183
|
-
original_display_value?: string[][] | null,
|
|
184
|
-
original_styling?: string[][] | null
|
|
185
|
-
): { data: typeof data; selected: [number, number] | false } {
|
|
186
|
-
let id = null;
|
|
187
|
-
if (selected && selected[0] in data && selected[1] in data[selected[0]]) {
|
|
188
|
-
id = data[selected[0]][selected[1]].id;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
filter_table_data(
|
|
192
|
-
data,
|
|
193
|
-
display_value,
|
|
194
|
-
styling,
|
|
195
|
-
filter_columns,
|
|
196
|
-
original_data,
|
|
197
|
-
original_display_value,
|
|
198
|
-
original_styling
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
let new_selected = selected;
|
|
202
|
-
if (id) {
|
|
203
|
-
const [i, j] = get_current_indices(id, data);
|
|
204
|
-
new_selected = [i, j];
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return { data, selected: new_selected };
|
|
208
|
-
}
|