schummar-table 0.3.2 → 0.5.0-beta-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/dist/assets/tableTheme.0eb513b0.js +215 -0
- package/dist/assets/tableTheme.0eb513b0.js.map +1 -0
- package/dist/assets/tableTheme.65fea986.js +214 -0
- package/dist/assets/tableTheme.65fea986.js.map +1 -0
- package/dist/assets/vendor.a5ec605d.js +2475 -0
- package/dist/assets/vendor.a5ec605d.js.map +1 -0
- package/dist/assets/vendor.c9c3328b.js +2464 -0
- package/dist/assets/vendor.c9c3328b.js.map +1 -0
- package/dist/cjs/mui4Theme.js +7 -0
- package/dist/cjs/mui4Theme.js.map +1 -0
- package/dist/cjs/mui5Theme.js +7 -0
- package/dist/cjs/mui5Theme.js.map +1 -0
- package/dist/cjs/schummar-table.js +1042 -0
- package/dist/cjs/schummar-table.js.map +1 -0
- package/dist/esm/mui4Theme.js +6 -0
- package/dist/esm/mui4Theme.js.map +1 -0
- package/dist/esm/mui5Theme.js +6 -0
- package/dist/esm/mui5Theme.js.map +1 -0
- package/dist/esm/schummar-table.js +1041 -0
- package/dist/esm/schummar-table.js.map +1 -0
- package/dist/{cjs → types}/components/cell.d.ts +1 -1
- package/dist/types/components/columnHeader.d.ts +7 -0
- package/dist/{cjs → types}/components/columnSelection.d.ts +0 -0
- package/dist/types/components/dateFilter.d.ts +8 -0
- package/dist/types/components/datePicker.d.ts +16 -0
- package/dist/types/components/expandControl.d.ts +6 -0
- package/dist/{cjs → types}/components/export.d.ts +0 -0
- package/dist/types/components/filterControl.d.ts +2 -0
- package/dist/types/components/formControlLabel.d.ts +5 -0
- package/dist/types/components/resizeHandle.d.ts +1 -0
- package/dist/{cjs → types}/components/row.d.ts +1 -1
- package/dist/{cjs → types}/components/selectComponent.d.ts +0 -0
- package/dist/types/components/selectFilter.d.ts +8 -0
- package/dist/{cjs → types}/components/sortComponent.d.ts +0 -0
- package/dist/types/components/spinnner.d.ts +3 -0
- package/dist/{cjs → types/components}/table.d.ts +1 -1
- package/dist/types/components/textFilter.d.ts +5 -0
- package/dist/{cjs → types}/components/virtualized.d.ts +0 -0
- package/dist/types/hooks/useFilter.d.ts +5 -0
- package/dist/types/hooks/useTheme.d.ts +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/{cjs → types}/internalState/calcItems.d.ts +0 -0
- package/dist/{cjs → types}/internalState/calcProps.d.ts +0 -0
- package/dist/{cjs → types}/internalState/cleanupState.d.ts +0 -0
- package/dist/{cjs → types}/internalState/filterColumns.d.ts +0 -0
- package/dist/{cjs → types}/internalState/syncSelections.d.ts +0 -0
- package/dist/types/internalState/tableStateStorage.d.ts +11 -0
- package/dist/{cjs → types}/internalState/useTableState.d.ts +0 -0
- package/dist/{cjs → types}/misc/csvExport.d.ts +0 -0
- package/dist/types/misc/debounce.d.ts +4 -0
- package/dist/types/misc/deepPartial.d.ts +3 -0
- package/dist/{cjs → types}/misc/helpers.d.ts +2 -1
- package/dist/types/misc/queue.d.ts +6 -0
- package/dist/{cjs → types}/misc/textMatch.d.ts +0 -0
- package/dist/types/misc/throttle.d.ts +4 -0
- package/dist/types/theme/defaultClasses.d.ts +15 -0
- package/dist/types/theme/defaultColors.d.ts +2 -0
- package/dist/types/theme/defaultIcons.d.ts +2 -0
- package/dist/types/theme/defaultTexts.d.ts +2 -0
- package/dist/types/theme/defaultTheme/badge.d.ts +2 -0
- package/dist/types/theme/defaultTheme/button.d.ts +2 -0
- package/dist/types/theme/defaultTheme/checkbox.d.ts +2 -0
- package/dist/types/theme/defaultTheme/iconButton.d.ts +2 -0
- package/dist/types/theme/defaultTheme/index.d.ts +2 -0
- package/dist/types/theme/defaultTheme/popover.d.ts +4 -0
- package/dist/types/theme/defaultTheme/textField.d.ts +2 -0
- package/dist/types/theme/mui4Theme/index.d.ts +8 -0
- package/dist/types/theme/mui5Theme/index.d.ts +8 -0
- package/dist/types/theme/tableTheme.d.ts +11 -0
- package/dist/types/theme/useCssVariables.d.ts +9 -0
- package/dist/types/types.d.ts +285 -0
- package/package.json +78 -38
- package/dist/cjs/components/cell.js +0 -31
- package/dist/cjs/components/columnSelection.js +0 -37
- package/dist/cjs/components/defaultFilterComponent.d.ts +0 -22
- package/dist/cjs/components/defaultFilterComponent.js +0 -91
- package/dist/cjs/components/expandComponent.d.ts +0 -5
- package/dist/cjs/components/expandComponent.js +0 -38
- package/dist/cjs/components/export.js +0 -48
- package/dist/cjs/components/filterComponent.d.ts +0 -5
- package/dist/cjs/components/filterComponent.js +0 -25
- package/dist/cjs/components/row.js +0 -48
- package/dist/cjs/components/selectComponent.js +0 -61
- package/dist/cjs/components/sortComponent.js +0 -52
- package/dist/cjs/components/textFilterComponent.d.ts +0 -11
- package/dist/cjs/components/textFilterComponent.js +0 -70
- package/dist/cjs/components/useCommonClasses.d.ts +0 -1
- package/dist/cjs/components/useCommonClasses.js +0 -49
- package/dist/cjs/components/virtualized.js +0 -98
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/index.js +0 -18
- package/dist/cjs/internalState/calcItems.js +0 -85
- package/dist/cjs/internalState/calcProps.js +0 -89
- package/dist/cjs/internalState/cleanupState.js +0 -43
- package/dist/cjs/internalState/filterColumns.js +0 -10
- package/dist/cjs/internalState/syncSelections.js +0 -22
- package/dist/cjs/internalState/useTableState.js +0 -62
- package/dist/cjs/misc/csvExport.js +0 -15
- package/dist/cjs/misc/helpers.js +0 -91
- package/dist/cjs/misc/textMatch.js +0 -23
- package/dist/cjs/misc/throttle.d.ts +0 -1
- package/dist/cjs/misc/throttle.js +0 -30
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/table.js +0 -69
- package/dist/cjs/types.d.ts +0 -134
- package/dist/cjs/types.js +0 -2
- package/dist/esm/components/cell.d.ts +0 -6
- package/dist/esm/components/cell.js +0 -28
- package/dist/esm/components/columnSelection.d.ts +0 -2
- package/dist/esm/components/columnSelection.js +0 -33
- package/dist/esm/components/defaultFilterComponent.d.ts +0 -22
- package/dist/esm/components/defaultFilterComponent.js +0 -86
- package/dist/esm/components/expandComponent.d.ts +0 -5
- package/dist/esm/components/expandComponent.js +0 -34
- package/dist/esm/components/export.d.ts +0 -2
- package/dist/esm/components/export.js +0 -44
- package/dist/esm/components/filterComponent.d.ts +0 -5
- package/dist/esm/components/filterComponent.js +0 -21
- package/dist/esm/components/row.d.ts +0 -7
- package/dist/esm/components/row.js +0 -44
- package/dist/esm/components/selectComponent.d.ts +0 -5
- package/dist/esm/components/selectComponent.js +0 -57
- package/dist/esm/components/sortComponent.d.ts +0 -4
- package/dist/esm/components/sortComponent.js +0 -48
- package/dist/esm/components/textFilterComponent.d.ts +0 -11
- package/dist/esm/components/textFilterComponent.js +0 -65
- package/dist/esm/components/useCommonClasses.d.ts +0 -1
- package/dist/esm/components/useCommonClasses.js +0 -46
- package/dist/esm/components/virtualized.d.ts +0 -6
- package/dist/esm/components/virtualized.js +0 -94
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/index.js +0 -4
- package/dist/esm/internalState/calcItems.d.ts +0 -3
- package/dist/esm/internalState/calcItems.js +0 -81
- package/dist/esm/internalState/calcProps.d.ts +0 -2
- package/dist/esm/internalState/calcProps.js +0 -85
- package/dist/esm/internalState/cleanupState.d.ts +0 -3
- package/dist/esm/internalState/cleanupState.js +0 -39
- package/dist/esm/internalState/filterColumns.d.ts +0 -3
- package/dist/esm/internalState/filterColumns.js +0 -6
- package/dist/esm/internalState/syncSelections.d.ts +0 -3
- package/dist/esm/internalState/syncSelections.js +0 -18
- package/dist/esm/internalState/useTableState.d.ts +0 -3
- package/dist/esm/internalState/useTableState.js +0 -58
- package/dist/esm/misc/csvExport.d.ts +0 -7
- package/dist/esm/misc/csvExport.js +0 -11
- package/dist/esm/misc/helpers.d.ts +0 -14
- package/dist/esm/misc/helpers.js +0 -77
- package/dist/esm/misc/textMatch.d.ts +0 -2
- package/dist/esm/misc/textMatch.js +0 -18
- package/dist/esm/misc/throttle.d.ts +0 -1
- package/dist/esm/misc/throttle.js +0 -26
- package/dist/esm/table.d.ts +0 -8
- package/dist/esm/table.js +0 -63
- package/dist/esm/types.d.ts +0 -134
- package/dist/esm/types.js +0 -1
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { CSSInterpolation } from '@emotion/serialize';
|
|
2
|
+
import React, { ComponentType, CSSProperties, ReactNode } from 'react';
|
|
3
|
+
import { TableStateStorage } from './internalState/tableStateStorage';
|
|
4
|
+
import { CsvExportOptions } from './misc/csvExport';
|
|
5
|
+
export declare type Sort = {
|
|
6
|
+
columnId: string | number;
|
|
7
|
+
direction: SortDirection;
|
|
8
|
+
};
|
|
9
|
+
export declare type SortDirection = 'asc' | 'desc';
|
|
10
|
+
export declare type Id = string | number;
|
|
11
|
+
export declare type KeyOfType<T, S> = {
|
|
12
|
+
[K in keyof T]: T[K] extends S ? K : never;
|
|
13
|
+
}[keyof T];
|
|
14
|
+
export interface TableTheme<T = unknown> {
|
|
15
|
+
/** Define display texts. */
|
|
16
|
+
text: {
|
|
17
|
+
selectColumns: ReactNode;
|
|
18
|
+
noResults: ReactNode;
|
|
19
|
+
exportTitle: ReactNode;
|
|
20
|
+
exportCopy: ReactNode;
|
|
21
|
+
exportDownload: ReactNode;
|
|
22
|
+
textFilter: ReactNode;
|
|
23
|
+
selectFilter: ReactNode;
|
|
24
|
+
dateFilter: ReactNode;
|
|
25
|
+
today: ReactNode;
|
|
26
|
+
reset: ReactNode;
|
|
27
|
+
loading: ReactNode;
|
|
28
|
+
};
|
|
29
|
+
/** Define styles. */
|
|
30
|
+
css?: {
|
|
31
|
+
table?: CSSInterpolation;
|
|
32
|
+
headerCell?: CSSInterpolation;
|
|
33
|
+
cell?: CSSInterpolation | ((item: T, index: number) => CSSInterpolation);
|
|
34
|
+
evenCell?: CSSInterpolation;
|
|
35
|
+
oddCell?: CSSInterpolation;
|
|
36
|
+
};
|
|
37
|
+
/** Defined components to be used in the table. */
|
|
38
|
+
components: {
|
|
39
|
+
IconButton: ComponentType<{
|
|
40
|
+
children: ReactNode;
|
|
41
|
+
onClick?: (e: React.MouseEvent<Element>) => void;
|
|
42
|
+
className?: string;
|
|
43
|
+
}>;
|
|
44
|
+
Button: ComponentType<{
|
|
45
|
+
children: ReactNode;
|
|
46
|
+
onClick?: (e: React.MouseEvent<Element>) => void;
|
|
47
|
+
startIcon?: ReactNode;
|
|
48
|
+
variant?: 'text' | 'outlined' | 'contained';
|
|
49
|
+
disabled?: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
Checkbox: ComponentType<{
|
|
52
|
+
checked: boolean;
|
|
53
|
+
onChange: (e: React.ChangeEvent) => void;
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
className?: string;
|
|
56
|
+
}>;
|
|
57
|
+
Popover: ComponentType<{
|
|
58
|
+
anchorEl: Element | null;
|
|
59
|
+
open: boolean;
|
|
60
|
+
hidden?: boolean;
|
|
61
|
+
onClose: () => void;
|
|
62
|
+
children: ReactNode;
|
|
63
|
+
className?: string;
|
|
64
|
+
align?: 'center' | 'left';
|
|
65
|
+
}>;
|
|
66
|
+
Badge: ComponentType<{
|
|
67
|
+
children: ReactNode;
|
|
68
|
+
badgeContent: ReactNode;
|
|
69
|
+
}>;
|
|
70
|
+
TextField: ComponentType<{
|
|
71
|
+
value: string | null;
|
|
72
|
+
onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
73
|
+
endIcon?: ReactNode;
|
|
74
|
+
className?: string;
|
|
75
|
+
}>;
|
|
76
|
+
Spinner: (props: {
|
|
77
|
+
className?: string;
|
|
78
|
+
}) => JSX.Element;
|
|
79
|
+
};
|
|
80
|
+
/** Define icons for the table. */
|
|
81
|
+
icons: {
|
|
82
|
+
[K in 'Settings' | 'Export' | 'Clipboard' | 'ChevronRight' | 'Search' | 'Clear' | 'ArrowDropDown' | 'FilterList' | 'ArrowUpward']: ComponentType<{
|
|
83
|
+
className?: string;
|
|
84
|
+
}>;
|
|
85
|
+
};
|
|
86
|
+
/** Define colors */
|
|
87
|
+
colors: {
|
|
88
|
+
primary: {
|
|
89
|
+
main: string;
|
|
90
|
+
light: string;
|
|
91
|
+
contrastText: string;
|
|
92
|
+
};
|
|
93
|
+
secondary: {
|
|
94
|
+
main: string;
|
|
95
|
+
light: string;
|
|
96
|
+
contrastText: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
/** Spacing. */
|
|
100
|
+
spacing: string | number;
|
|
101
|
+
}
|
|
102
|
+
export interface TableProps<T> extends Partial<TableTheme<T>> {
|
|
103
|
+
/** The data to be rendered. One item per row. */
|
|
104
|
+
items?: T[];
|
|
105
|
+
/** Unique id for each item/row. */
|
|
106
|
+
id: ((item: T) => Id) | KeyOfType<T, Id>;
|
|
107
|
+
/** Create a nested structure by assigning parents to items. Child items are hidden until the parent is expanded. */
|
|
108
|
+
parentId?: ((item: T) => Id | undefined) | KeyOfType<T, Id | undefined>;
|
|
109
|
+
/** If true for an item, it means that children will be loaded asynchronously as soon as item is expanded. */
|
|
110
|
+
hasDeferredChildren?: (item: T) => boolean;
|
|
111
|
+
/** Column definitions. */
|
|
112
|
+
columns: Column<T, any>[] | ((col: <V>(value: (item: T) => V, column: Omit<Column<T, V>, 'value'>) => Column<T, V>) => Column<T, any>[]);
|
|
113
|
+
/** Display a cell at the start of each row. Useful for "go to details" button for example. */
|
|
114
|
+
rowAction?: ReactNode | ((item: T, index: number) => ReactNode);
|
|
115
|
+
/** Default sort order. */
|
|
116
|
+
defaultSort?: Sort[];
|
|
117
|
+
/** If given, controls the sort order. */
|
|
118
|
+
sort?: Sort[];
|
|
119
|
+
/** Called when sort order changes. */
|
|
120
|
+
onSortChange?: (sort: Sort[]) => void;
|
|
121
|
+
/** Default selection. */
|
|
122
|
+
defaultSelection?: Set<Id>;
|
|
123
|
+
/** If given, controls the selection. */
|
|
124
|
+
selection?: Set<Id>;
|
|
125
|
+
/** Called when selection changes. */
|
|
126
|
+
onSelectionChange?: (selection: Set<Id>) => void;
|
|
127
|
+
/** Whether to show checkboxes at the start of each row.
|
|
128
|
+
* @default true
|
|
129
|
+
*/
|
|
130
|
+
enableSelection?: boolean;
|
|
131
|
+
/** Select and deselect children if a parent is selected or deselected.
|
|
132
|
+
* @default true
|
|
133
|
+
*/
|
|
134
|
+
selectSyncChildren?: boolean;
|
|
135
|
+
/** Expand parents whose children fit a newly selected filter
|
|
136
|
+
* @default false
|
|
137
|
+
*/
|
|
138
|
+
revealFiltered?: boolean;
|
|
139
|
+
/** Default expanded rows. */
|
|
140
|
+
defaultExpanded?: Set<Id>;
|
|
141
|
+
/** If given, controls expanded rows. */
|
|
142
|
+
expanded?: Set<Id>;
|
|
143
|
+
/** Called when expanded rows change. */
|
|
144
|
+
onExpandedChange?: (expanded: Set<Id>) => void;
|
|
145
|
+
/** If enabled and one row is expanded, other rows will be closed.
|
|
146
|
+
* @default false
|
|
147
|
+
*/
|
|
148
|
+
expandOnlyOne?: boolean;
|
|
149
|
+
/** Default hidden columns. */
|
|
150
|
+
defaultHiddenColumns?: Set<Id>;
|
|
151
|
+
/** If given, controls hidden columns. */
|
|
152
|
+
hiddenColumns?: Set<Id>;
|
|
153
|
+
/** Called when hidden columns change. */
|
|
154
|
+
onHiddenColumnsChange?: (hiddenColumns: Set<Id>) => void;
|
|
155
|
+
/** Default width for columns. */
|
|
156
|
+
defaultWidth?: string;
|
|
157
|
+
/** Whether to stretch the table component over the available space. If value is "left" or "right", align accordingly. */
|
|
158
|
+
fullWidth?: boolean | 'left' | 'right';
|
|
159
|
+
/** Whether the table header should be sticky.
|
|
160
|
+
* @default false
|
|
161
|
+
*/
|
|
162
|
+
stickyHeader?: boolean;
|
|
163
|
+
/** Whether the table cells should only be rendered when in viewport.
|
|
164
|
+
* @default true
|
|
165
|
+
*/
|
|
166
|
+
virtual?: boolean | {
|
|
167
|
+
rowHeight?: number;
|
|
168
|
+
initalRowHeight?: number;
|
|
169
|
+
throttleScroll?: number;
|
|
170
|
+
overscan?: number;
|
|
171
|
+
overscanBottom?: number;
|
|
172
|
+
overscanTop?: number;
|
|
173
|
+
};
|
|
174
|
+
/** Enable menu to select which columns are visible.
|
|
175
|
+
* @default true
|
|
176
|
+
*/
|
|
177
|
+
enableColumnSelection?: boolean;
|
|
178
|
+
/** Enable exporting to csv.
|
|
179
|
+
* @default false
|
|
180
|
+
*/
|
|
181
|
+
enableExport?: boolean | {
|
|
182
|
+
copy?: boolean | CsvExportOptions;
|
|
183
|
+
download?: boolean | CsvExportOptions;
|
|
184
|
+
};
|
|
185
|
+
/** Allow to drag and drop column separators to resize the column left of it.
|
|
186
|
+
* @default true
|
|
187
|
+
*/
|
|
188
|
+
enableColumnResize?: boolean;
|
|
189
|
+
/** Allow to drag and drop column header to reorder columns.
|
|
190
|
+
* @default true
|
|
191
|
+
*/
|
|
192
|
+
enableColumnReorder?: boolean;
|
|
193
|
+
/** If enabled, automatically store table state in localStorage, localForage or another compatible storage. */
|
|
194
|
+
persist?: {
|
|
195
|
+
storage: TableStateStorage;
|
|
196
|
+
id?: string;
|
|
197
|
+
include?: ('sort' | 'selection' | 'expanded' | 'hiddenColumns' | 'filterValues' | 'columnWidths' | 'columnOrder')[];
|
|
198
|
+
exclude?: ('sort' | 'selection' | 'expanded' | 'hiddenColumns' | 'filterValues' | 'columnWidths' | 'columnOrder')[];
|
|
199
|
+
};
|
|
200
|
+
debug?: (...output: any) => void;
|
|
201
|
+
debugRender?: (...output: any) => void;
|
|
202
|
+
}
|
|
203
|
+
export declare type InternalTableProps<T> = Omit<TableProps<T>, 'id' | 'parentId' | 'columns' | 'enableExport'> & {
|
|
204
|
+
id: (item: T) => Id;
|
|
205
|
+
parentId?: (item: T) => Id | undefined;
|
|
206
|
+
columns: InternalColumn<T, unknown>[];
|
|
207
|
+
enableExport: {
|
|
208
|
+
copy?: CsvExportOptions;
|
|
209
|
+
download?: CsvExportOptions;
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
export declare type TableItem<T = unknown> = T & {
|
|
213
|
+
id: Id;
|
|
214
|
+
parentId?: Id;
|
|
215
|
+
children: TableItem<T>[];
|
|
216
|
+
};
|
|
217
|
+
export declare type Column<T, V> = {
|
|
218
|
+
id?: string;
|
|
219
|
+
header?: ReactNode;
|
|
220
|
+
value: (item: T) => V;
|
|
221
|
+
renderCell?: (value: V, item: T) => ReactNode;
|
|
222
|
+
exportCell?: (value: V, item: T) => string | number;
|
|
223
|
+
sortBy?: ((value: V, item: T) => unknown) | ((value: V) => unknown)[];
|
|
224
|
+
filter?: ReactNode;
|
|
225
|
+
cannotHide?: boolean;
|
|
226
|
+
width?: string;
|
|
227
|
+
justifyContent?: CSSProperties['justifyContent'];
|
|
228
|
+
css?: TableTheme<T>['css'];
|
|
229
|
+
/** If the column definition changes, supply parameters that it depends on. If not set, the column will not update */
|
|
230
|
+
dependencies?: any[];
|
|
231
|
+
};
|
|
232
|
+
export declare type InternalColumn<T, V> = Required<Omit<Column<T, V>, 'id'>, 'header' | 'renderCell' | 'exportCell' | 'sortBy'> & {
|
|
233
|
+
id: Id;
|
|
234
|
+
};
|
|
235
|
+
declare type Required<T, S> = T & {
|
|
236
|
+
[P in keyof T as P extends S ? P : never]-?: T[P];
|
|
237
|
+
};
|
|
238
|
+
export declare type Rows<T, V> = [{
|
|
239
|
+
value: V;
|
|
240
|
+
item: T;
|
|
241
|
+
}, ...{
|
|
242
|
+
value: V;
|
|
243
|
+
item: T;
|
|
244
|
+
}[]];
|
|
245
|
+
export declare type InternalTableState<T> = {
|
|
246
|
+
props: InternalTableProps<T>;
|
|
247
|
+
theme: TableTheme<T>;
|
|
248
|
+
sort: Sort[];
|
|
249
|
+
selection: Set<Id>;
|
|
250
|
+
expanded: Set<Id>;
|
|
251
|
+
rowHeights: Map<Id, number>;
|
|
252
|
+
filters: Map<Id, FilterImplementation<T, any, any, any>>;
|
|
253
|
+
filterValues: Map<Id, any>;
|
|
254
|
+
hiddenColumns: Set<Id>;
|
|
255
|
+
columnWidths: Map<Id, string>;
|
|
256
|
+
columnOrder: Id[];
|
|
257
|
+
columnStyleOverride: Map<Id, CSSInterpolation>;
|
|
258
|
+
activeColumns: InternalColumn<T, unknown>[];
|
|
259
|
+
items: TableItem<T>[];
|
|
260
|
+
itemsById: Map<Id, TableItem<T>>;
|
|
261
|
+
activeItems: TableItem<T>[];
|
|
262
|
+
activeItemsById: Map<Id, TableItem<T>>;
|
|
263
|
+
lastSelectedId?: Id;
|
|
264
|
+
};
|
|
265
|
+
export declare type CommonFilterProps<T, V, F, S extends SerializableValue> = {
|
|
266
|
+
filterBy?: (value: V, item: T) => F | F[];
|
|
267
|
+
defaultValue?: S;
|
|
268
|
+
value?: S;
|
|
269
|
+
onChange?: (value?: S) => void;
|
|
270
|
+
dependencies?: any[];
|
|
271
|
+
persist?: boolean;
|
|
272
|
+
};
|
|
273
|
+
export declare type FilterImplementation<T, V, F, S extends SerializableValue> = CommonFilterProps<T, V, F, S> & {
|
|
274
|
+
id: string;
|
|
275
|
+
isActive: (filterValue: S) => boolean;
|
|
276
|
+
test: (filterValue: S, value: F) => boolean;
|
|
277
|
+
};
|
|
278
|
+
export declare type SerializableValue = string | number | boolean | null | Date | SerializableArray | SerializableObject | SerializableSet | SerializableMap;
|
|
279
|
+
export declare type SerializableObject = {
|
|
280
|
+
[key: string]: SerializableValue;
|
|
281
|
+
};
|
|
282
|
+
export declare type SerializableArray = SerializableValue[];
|
|
283
|
+
export declare type SerializableSet = Set<SerializableValue>;
|
|
284
|
+
export declare type SerializableMap = Map<SerializableValue, SerializableValue>;
|
|
285
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "schummar-table",
|
|
3
3
|
"repository": "schummar/schummar-table",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0-beta-1",
|
|
5
5
|
"description": "",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
-
"main": "dist/cjs/
|
|
9
|
-
"module": "dist/esm/
|
|
8
|
+
"main": "dist/cjs/schummar-table.js",
|
|
9
|
+
"module": "dist/esm/schummar-table.js",
|
|
10
10
|
"exports": {
|
|
11
|
-
"
|
|
12
|
-
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/esm/schummar-table.js",
|
|
13
|
+
"require": "./dist/cjs/schummar-table.js"
|
|
14
|
+
},
|
|
15
|
+
"./mui5Theme": {
|
|
16
|
+
"import": "./dist/esm/mui5Theme.js",
|
|
17
|
+
"require": "./dist/cjs/mui5Theme.js"
|
|
18
|
+
},
|
|
19
|
+
"./mui4Theme": {
|
|
20
|
+
"import": "./dist/esm/mui4Theme.js",
|
|
21
|
+
"require": "./dist/cjs/mui4Theme.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"types": "dist/types/index.d.ts",
|
|
25
|
+
"typesVersions": {
|
|
26
|
+
"*": {
|
|
27
|
+
"*": [
|
|
28
|
+
"dist/types/index.d.ts"
|
|
29
|
+
],
|
|
30
|
+
"theme/mui5Theme": [
|
|
31
|
+
"dist/types/theme/mui5Theme/index.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"theme/mui4Theme": [
|
|
34
|
+
"dist/types/theme/mui4Theme/index.d.ts"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
13
37
|
},
|
|
14
38
|
"author": {
|
|
15
39
|
"name": "Marco Schumacher",
|
|
@@ -17,49 +41,65 @@
|
|
|
17
41
|
},
|
|
18
42
|
"license": "ISC",
|
|
19
43
|
"scripts": {
|
|
20
|
-
"start": "
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"build": "
|
|
25
|
-
"build:clean": "rimraf dist/**",
|
|
26
|
-
"build:compile:esm": "tsc",
|
|
27
|
-
"build:compile:cjs": "tsc -p tsconfig-cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
|
|
44
|
+
"start": "vite",
|
|
45
|
+
"build": "npm-run-all build:clean -p build:compile:*",
|
|
46
|
+
"build:clean": "rimraf \"dist/**/*\"",
|
|
47
|
+
"build:compile:js": "vite build",
|
|
48
|
+
"build:compile:types": "tsc --outDir dist/types --declaration --emitDeclarationOnly",
|
|
28
49
|
"lint": "run-p lint:*",
|
|
29
50
|
"lint:eslint": "eslint src",
|
|
30
51
|
"lint:tsc": "tsc --noEmit",
|
|
31
|
-
"prepublishOnly": "run-s
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
52
|
+
"prepublishOnly": "run-s lint build"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@emotion/react": "^11.7.1",
|
|
56
|
+
"dayzed": "^3.2.2",
|
|
57
|
+
"immer": "^9.0.12",
|
|
58
|
+
"schummar-state": "0.2.1-experimental-9"
|
|
35
59
|
},
|
|
36
60
|
"peerDependencies": {
|
|
37
|
-
"@
|
|
38
|
-
"@material-ui/
|
|
39
|
-
"@
|
|
40
|
-
"
|
|
41
|
-
"react": ">=
|
|
42
|
-
"
|
|
61
|
+
"@emotion/styled": "^11.6.0",
|
|
62
|
+
"@material-ui/core": "^4.12.3",
|
|
63
|
+
"@mui/material": "^5.4.0",
|
|
64
|
+
"@types/react": ">=17",
|
|
65
|
+
"@types/react-dom": ">=17",
|
|
66
|
+
"react": ">=17",
|
|
67
|
+
"react-dom": ">=17"
|
|
68
|
+
},
|
|
69
|
+
"peerDependenciesMeta": {
|
|
70
|
+
"@emotion/styled": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"@material-ui/core": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"@mui/material": {
|
|
77
|
+
"optional": true
|
|
78
|
+
}
|
|
43
79
|
},
|
|
44
80
|
"devDependencies": {
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
81
|
+
"@emotion/styled": "^11.6.0",
|
|
82
|
+
"@fontsource/fira-sans": "^4.5.2",
|
|
83
|
+
"@material-ui/core": "^4.12.3",
|
|
84
|
+
"@mui/material": "^5.4.1",
|
|
85
|
+
"@types/react": "17",
|
|
86
|
+
"@types/react-dom": "17",
|
|
87
|
+
"@typescript-eslint/eslint-plugin": "^5.11.0",
|
|
88
|
+
"@typescript-eslint/parser": "^5.11.0",
|
|
89
|
+
"@vitejs/plugin-react": "^1.2.0",
|
|
90
|
+
"@vitejs/plugin-react-refresh": "^1.3.6",
|
|
91
|
+
"eslint": "^8.8.0",
|
|
92
|
+
"localforage": "^1.10.0",
|
|
54
93
|
"npm-run-all": "^4.1.5",
|
|
55
94
|
"nyc": "^15.1.0",
|
|
56
|
-
"prettier": "^2.
|
|
57
|
-
"react": "
|
|
58
|
-
"react-dom": "
|
|
95
|
+
"prettier": "^2.5.1",
|
|
96
|
+
"react": "17",
|
|
97
|
+
"react-dom": "17",
|
|
59
98
|
"rimraf": "^3.0.2",
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
99
|
+
"ts-node": "^10.5.0",
|
|
100
|
+
"typescript": "^4.5.5",
|
|
101
|
+
"vite": "^2.8.1",
|
|
102
|
+
"zx": "^5.0.0"
|
|
63
103
|
},
|
|
64
104
|
"files": [
|
|
65
105
|
"dist"
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Cell = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const __1 = require("..");
|
|
7
|
-
const helpers_1 = require("../misc/helpers");
|
|
8
|
-
const row_1 = require("./row");
|
|
9
|
-
const useCommonClasses_1 = require("./useCommonClasses");
|
|
10
|
-
exports.Cell = (0, react_1.memo)(function Cell({ itemId, rowIndex }) {
|
|
11
|
-
var _a, _b;
|
|
12
|
-
const commonClasses = (0, useCommonClasses_1.useCommonClasses)();
|
|
13
|
-
const state = (0, __1.useTableContext)();
|
|
14
|
-
const columnId = (0, __1.useColumnContext)();
|
|
15
|
-
const column = state.useState((state) => state.activeColumns.find((column) => column.id === columnId), [columnId]);
|
|
16
|
-
const item = state.useState((state) => state.activeItemsById.get(itemId), [itemId]);
|
|
17
|
-
const classes = state.useState('props.classes');
|
|
18
|
-
let wrapCell = state.useState('props.wrapCell');
|
|
19
|
-
if (!column || !item)
|
|
20
|
-
return null;
|
|
21
|
-
(_b = (_a = state.getState().props).debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'render cell', itemId, columnId);
|
|
22
|
-
const className = (0, helpers_1.c)((0, row_1.calcClassName)(classes, rowIndex), (0, row_1.calcClassName)(column === null || column === void 0 ? void 0 : column.classes, rowIndex));
|
|
23
|
-
const content = column.renderCell(column.value(item), item);
|
|
24
|
-
if (!wrapCell && typeof content === 'string') {
|
|
25
|
-
wrapCell = (content) => ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: (0, helpers_1.c)(commonClasses.cell, className) }, { children: (0, jsx_runtime_1.jsx)("span", Object.assign({ className: (0, helpers_1.c)(commonClasses.text) }, { children: content }), void 0) }), void 0));
|
|
26
|
-
}
|
|
27
|
-
else if (!wrapCell) {
|
|
28
|
-
wrapCell = (content) => (0, jsx_runtime_1.jsx)("div", Object.assign({ className: (0, helpers_1.c)(commonClasses.cell, className) }, { children: content }), void 0);
|
|
29
|
-
}
|
|
30
|
-
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: wrapCell(content, item) }, void 0);
|
|
31
|
-
});
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ColumnSelection = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const core_1 = require("@material-ui/core");
|
|
6
|
-
const icons_1 = require("@material-ui/icons");
|
|
7
|
-
const react_1 = require("react");
|
|
8
|
-
const table_1 = require("../table");
|
|
9
|
-
const useClasses = (0, core_1.makeStyles)((theme) => ({
|
|
10
|
-
list: {
|
|
11
|
-
padding: theme.spacing(2),
|
|
12
|
-
display: 'grid',
|
|
13
|
-
},
|
|
14
|
-
}));
|
|
15
|
-
function ColumnSelection() {
|
|
16
|
-
const classes = useClasses();
|
|
17
|
-
const [anchor, setAnchor] = (0, react_1.useState)(null);
|
|
18
|
-
const state = (0, table_1.useTableContext)();
|
|
19
|
-
const columns = state.useState('props.columns');
|
|
20
|
-
const hiddenColumns = state.useState('hiddenColumns');
|
|
21
|
-
const toggle = (column) => {
|
|
22
|
-
const { props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange }, } = state.getState();
|
|
23
|
-
const newValue = new Set(hiddenColumns);
|
|
24
|
-
if (hiddenColumns.has(column.id))
|
|
25
|
-
newValue.delete(column.id);
|
|
26
|
-
else
|
|
27
|
-
newValue.add(column.id);
|
|
28
|
-
if (!controlledHiddenColumns) {
|
|
29
|
-
state.update((state) => {
|
|
30
|
-
state.hiddenColumns = newValue;
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
onHiddenColumnsChange === null || onHiddenColumnsChange === void 0 ? void 0 : onHiddenColumnsChange(newValue);
|
|
34
|
-
};
|
|
35
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ color: "inherit", size: "small", onClick: (e) => setAnchor(e.currentTarget) }, { children: (0, jsx_runtime_1.jsx)(icons_1.Settings, {}, void 0) }), void 0), (0, jsx_runtime_1.jsx)(core_1.Popover, Object.assign({ open: !!anchor, onClose: () => setAnchor(null), anchorEl: anchor, anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, transformOrigin: { vertical: 'top', horizontal: 'left' } }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes.list }, { children: columns.map((column) => ((0, jsx_runtime_1.jsx)(core_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(core_1.Checkbox, { checked: !hiddenColumns.has(column.id), onChange: () => toggle(column), disabled: column.cannotHide }, void 0), label: column.header }, column.id))) }), void 0) }), void 0)] }, void 0));
|
|
36
|
-
}
|
|
37
|
-
exports.ColumnSelection = ColumnSelection;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { Filter } from './filterComponent';
|
|
3
|
-
export declare class DefaultFilter<T, O> implements Filter<T> {
|
|
4
|
-
readonly values: Set<O>;
|
|
5
|
-
readonly filter: (item: T) => boolean;
|
|
6
|
-
constructor(values: Set<O>, filter: (item: T) => boolean);
|
|
7
|
-
}
|
|
8
|
-
declare type UnwrapArray<O> = O extends Array<infer S> ? S : O;
|
|
9
|
-
export declare function DefaultFilterComponent<V>(props: {
|
|
10
|
-
options?: UnwrapArray<V>[];
|
|
11
|
-
compare?: (a: UnwrapArray<V>, b: UnwrapArray<V>) => boolean;
|
|
12
|
-
stringValue?: (value: UnwrapArray<V>) => string;
|
|
13
|
-
render?: (value: UnwrapArray<V>) => ReactNode;
|
|
14
|
-
}): JSX.Element;
|
|
15
|
-
export declare function DefaultFilterComponent<T, V, O>(props: {
|
|
16
|
-
filterBy?: (value: V, item: T) => O | O[];
|
|
17
|
-
options?: O[];
|
|
18
|
-
compare?: (a: O, b: O) => boolean;
|
|
19
|
-
stringValue?: (value: O) => string;
|
|
20
|
-
render?: (value: O) => ReactNode;
|
|
21
|
-
}): JSX.Element;
|
|
22
|
-
export {};
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultFilterComponent = exports.DefaultFilter = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const core_1 = require("@material-ui/core");
|
|
6
|
-
const icons_1 = require("@material-ui/icons");
|
|
7
|
-
const react_1 = require("react");
|
|
8
|
-
const helpers_1 = require("../misc/helpers");
|
|
9
|
-
const table_1 = require("../table");
|
|
10
|
-
class DefaultFilter {
|
|
11
|
-
constructor(values, filter) {
|
|
12
|
-
this.values = values;
|
|
13
|
-
this.filter = filter;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.DefaultFilter = DefaultFilter;
|
|
17
|
-
const useClasses = (0, core_1.makeStyles)((theme) => ({
|
|
18
|
-
view: {
|
|
19
|
-
padding: theme.spacing(2),
|
|
20
|
-
display: 'grid',
|
|
21
|
-
'& > :first-child': {
|
|
22
|
-
marginBottom: theme.spacing(2),
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
}));
|
|
26
|
-
function DefaultFilterComponent({ filterBy: _filterBy, options: _options, compare = helpers_1.defaultEquals, stringValue = helpers_1.asString, render = stringValue, }) {
|
|
27
|
-
var _a;
|
|
28
|
-
const classes = useClasses();
|
|
29
|
-
const state = (0, table_1.useTableContext)();
|
|
30
|
-
const columnId = (0, table_1.useColumnContext)();
|
|
31
|
-
const filterBy = (0, react_1.useCallback)((value, item) => {
|
|
32
|
-
const values = _filterBy ? _filterBy(value, item) : value;
|
|
33
|
-
return values instanceof Array ? values : [values];
|
|
34
|
-
}, [_filterBy]);
|
|
35
|
-
const { text, options, filter } = state.useState((state) => {
|
|
36
|
-
const column = state.activeColumns.find((column) => column.id === columnId);
|
|
37
|
-
const _filter = state.filters.get(columnId);
|
|
38
|
-
const filter = _filter instanceof DefaultFilter ? _filter : undefined;
|
|
39
|
-
let options = _options !== null && _options !== void 0 ? _options : (0, helpers_1.orderBy)((0, helpers_1.uniq)((0, helpers_1.flatMap)(state.items, (item) => (column ? filterBy(column.value(item), item) : []))));
|
|
40
|
-
if (filter)
|
|
41
|
-
options = options.concat([...filter.values].filter((value) => !options.includes(value)));
|
|
42
|
-
return { text: state.props.text, options, filter };
|
|
43
|
-
}, [_options, columnId, filterBy]);
|
|
44
|
-
const [input, setInput] = (0, react_1.useState)('');
|
|
45
|
-
const filtered = options.filter((option) => !input || stringValue(option).toLowerCase().includes(input.toLowerCase()));
|
|
46
|
-
function toggle(value) {
|
|
47
|
-
var _a;
|
|
48
|
-
const column = state.getState().activeColumns.find((column) => column.id === columnId);
|
|
49
|
-
if (!column)
|
|
50
|
-
return;
|
|
51
|
-
const newValues = new Set(filter === null || filter === void 0 ? void 0 : filter.values);
|
|
52
|
-
if (newValues === null || newValues === void 0 ? void 0 : newValues.has(value))
|
|
53
|
-
newValues.delete(value);
|
|
54
|
-
else
|
|
55
|
-
newValues === null || newValues === void 0 ? void 0 : newValues.add(value);
|
|
56
|
-
const newFilter = newValues.size === 0
|
|
57
|
-
? undefined
|
|
58
|
-
: new DefaultFilter(newValues, (item) => {
|
|
59
|
-
const itemValues = filterBy(column.value(item), item);
|
|
60
|
-
return [...newValues].some((value) => itemValues.some((itemValue) => compare(value, itemValue)));
|
|
61
|
-
});
|
|
62
|
-
if (!column.filter) {
|
|
63
|
-
state.update((state) => {
|
|
64
|
-
if (newFilter)
|
|
65
|
-
state.filters.set(column.id, newFilter);
|
|
66
|
-
else
|
|
67
|
-
state.filters.delete(column.id);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
(_a = column.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(column, newFilter);
|
|
71
|
-
}
|
|
72
|
-
function deselectAll() {
|
|
73
|
-
var _a;
|
|
74
|
-
const column = state.getState().activeColumns.find((column) => column.id === columnId);
|
|
75
|
-
if (!column)
|
|
76
|
-
return;
|
|
77
|
-
if (!column.filter) {
|
|
78
|
-
state.update((state) => {
|
|
79
|
-
state.filters.delete(column.id);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
(_a = column.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(column);
|
|
83
|
-
}
|
|
84
|
-
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: classes.view }, { children: [(0, jsx_runtime_1.jsx)(core_1.TextField, { value: input, onChange: (e) => setInput(e.target.value), InputProps: {
|
|
85
|
-
endAdornment: input ? ((0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ onClick: () => setInput('') }, { children: (0, jsx_runtime_1.jsx)(icons_1.Clear, {}, void 0) }), void 0)) : ((0, jsx_runtime_1.jsx)(icons_1.Search, {}, void 0)),
|
|
86
|
-
} }, void 0), (0, jsx_runtime_1.jsx)(core_1.Button, Object.assign({ variant: "outlined", onClick: deselectAll, disabled: !filter }, { children: (_a = text === null || text === void 0 ? void 0 : text.deselectAll) !== null && _a !== void 0 ? _a : 'Deselect all' }), void 0), filtered.map((value, index) => {
|
|
87
|
-
var _a;
|
|
88
|
-
return ((0, jsx_runtime_1.jsx)(core_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(core_1.Checkbox, { checked: (_a = filter === null || filter === void 0 ? void 0 : filter.values.has(value)) !== null && _a !== void 0 ? _a : false, onChange: () => toggle(value) }, void 0), label: render(value) }, index));
|
|
89
|
-
})] }), void 0));
|
|
90
|
-
}
|
|
91
|
-
exports.DefaultFilterComponent = DefaultFilterComponent;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExpandComponent = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const core_1 = require("@material-ui/core");
|
|
6
|
-
const icons_1 = require("@material-ui/icons");
|
|
7
|
-
const helpers_1 = require("../misc/helpers");
|
|
8
|
-
const table_1 = require("../table");
|
|
9
|
-
function ExpandComponent({ itemId }) {
|
|
10
|
-
const state = (0, table_1.useTableContext)();
|
|
11
|
-
const isExpanded = state.useState((state) => state.expanded.has(itemId), [itemId]);
|
|
12
|
-
function toggle() {
|
|
13
|
-
const { props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange }, expanded, activeItemsById, } = state.getState();
|
|
14
|
-
const newExpanded = new Set(expanded);
|
|
15
|
-
if (expandOnlyOne)
|
|
16
|
-
newExpanded.clear();
|
|
17
|
-
if (isExpanded)
|
|
18
|
-
newExpanded.delete(itemId);
|
|
19
|
-
else {
|
|
20
|
-
newExpanded.add(itemId);
|
|
21
|
-
const item = activeItemsById.get(itemId);
|
|
22
|
-
for (const ancestor of item ? (0, helpers_1.getAncestors)(activeItemsById, item) : []) {
|
|
23
|
-
newExpanded.add(ancestor);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
onExpandedChange === null || onExpandedChange === void 0 ? void 0 : onExpandedChange(newExpanded);
|
|
27
|
-
if (!controlledExpanded) {
|
|
28
|
-
state.update((state) => {
|
|
29
|
-
state.expanded = newExpanded;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return ((0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ size: "small", onClick: toggle }, { children: (0, jsx_runtime_1.jsx)(icons_1.ChevronRight, { style: {
|
|
34
|
-
transition: 'all 500ms',
|
|
35
|
-
transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'none',
|
|
36
|
-
} }, void 0) }), void 0));
|
|
37
|
-
}
|
|
38
|
-
exports.ExpandComponent = ExpandComponent;
|