@oscarpalmer/tabela 0.11.0 → 0.13.0
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/body.component-_VDOpJhV.d.mts +10 -0
- package/dist/body.model-2iwsovAV.d.mts +7 -0
- package/dist/column.component-Bx46r3JI.d.mts +16 -0
- package/dist/column.model-D-aw4EU4.d.mts +16 -0
- package/dist/components/body.component.d.mts +2 -0
- package/dist/components/{body.component.js → body.component.mjs} +6 -3
- package/dist/components/column.component.d.mts +2 -0
- package/dist/components/{column.component.js → column.component.mjs} +12 -9
- package/dist/components/footer.component.d.mts +2 -0
- package/dist/components/{footer.component.js → footer.component.mjs} +7 -4
- package/dist/components/group.component.d.mts +2 -0
- package/dist/components/group.component.mjs +51 -0
- package/dist/components/header.component.d.mts +2 -0
- package/dist/components/{header.component.js → header.component.mjs} +6 -3
- package/dist/components/row.component.d.mts +2 -0
- package/dist/components/{row.component.js → row.component.mjs} +11 -7
- package/dist/filter.model-7ukJrtil.d.mts +16 -0
- package/dist/footer.component-Curiab8j.d.mts +12 -0
- package/dist/footer.model-DhqoS6ds.d.mts +8 -0
- package/dist/group.component-Cq1YYbfJ.d.mts +285 -0
- package/dist/group.model-BsKFwHbt.d.mts +10 -0
- package/dist/header.component-BjjlpZIg.d.mts +12 -0
- package/dist/header.model-DN_KzUCV.d.mts +7 -0
- package/dist/helpers/dom.helpers.d.mts +12 -0
- package/dist/helpers/{dom.helpers.js → dom.helpers.mjs} +14 -10
- package/dist/helpers/misc.helpers.d.mts +6 -0
- package/dist/helpers/{misc.helpers.js → misc.helpers.mjs} +3 -1
- package/dist/helpers/style.helper.d.mts +6 -0
- package/dist/helpers/style.helper.mjs +8 -0
- package/dist/index.d.mts +7 -0
- package/dist/{index.js → index.mjs} +3 -1
- package/dist/managers/column.manager.d.mts +2 -0
- package/dist/managers/{column.manager.js → column.manager.mjs} +6 -1
- package/dist/managers/data.manager.d.mts +2 -0
- package/dist/managers/data.manager.mjs +222 -0
- package/dist/managers/event.manager.d.mts +2 -0
- package/dist/managers/{event.manager.js → event.manager.mjs} +12 -8
- package/dist/managers/filter.manager.d.mts +2 -0
- package/dist/managers/{filter.manager.js → filter.manager.mjs} +25 -11
- package/dist/managers/group.manager.d.mts +2 -0
- package/dist/managers/group.manager.mjs +73 -0
- package/dist/managers/navigation.manager.d.mts +2 -0
- package/dist/managers/{navigation.manager.js → navigation.manager.mjs} +27 -24
- package/dist/managers/render.manager.d.mts +2 -0
- package/dist/managers/render.manager.mjs +144 -0
- package/dist/managers/row.manager.d.mts +2 -0
- package/dist/managers/{row.manager.js → row.manager.mjs} +18 -11
- package/dist/managers/selection.manager.d.mts +2 -0
- package/dist/managers/{selection.manager.js → selection.manager.mjs} +57 -48
- package/dist/managers/sort.manager.d.mts +2 -0
- package/dist/managers/{sort.manager.js → sort.manager.mjs} +32 -2
- package/dist/managers/style.manager.d.mts +2 -0
- package/dist/managers/style.manager.mjs +149 -0
- package/dist/models/body.model.d.mts +2 -0
- package/dist/models/body.model.mjs +1 -0
- package/dist/models/column.model.d.mts +2 -0
- package/dist/models/column.model.mjs +1 -0
- package/dist/models/data.model.d.mts +2 -0
- package/dist/models/data.model.mjs +1 -0
- package/dist/models/filter.model.d.mts +2 -0
- package/dist/models/filter.model.mjs +1 -0
- package/dist/models/footer.model.d.mts +2 -0
- package/dist/models/footer.model.mjs +1 -0
- package/dist/models/group.model.d.mts +2 -0
- package/dist/models/group.model.mjs +1 -0
- package/dist/models/header.model.d.mts +2 -0
- package/dist/models/header.model.mjs +1 -0
- package/dist/models/render.model.d.mts +2 -0
- package/dist/models/render.model.mjs +1 -0
- package/dist/models/selection.model.d.mts +2 -0
- package/dist/models/selection.model.mjs +1 -0
- package/dist/models/sort.model.d.mts +2 -0
- package/dist/models/sort.model.mjs +1 -0
- package/dist/models/style.model.d.mts +23 -0
- package/dist/models/style.model.mjs +23 -0
- package/dist/models/tabela.model.d.mts +2 -0
- package/dist/models/tabela.model.mjs +1 -0
- package/dist/models/tabela.options.d.mts +2 -0
- package/dist/models/tabela.options.mjs +1 -0
- package/dist/selection.model-rwQe9fco.d.mts +12 -0
- package/dist/sort.model-CauImaLu.d.mts +15 -0
- package/dist/tabela.d.mts +21 -0
- package/dist/{tabela.full.js → tabela.full.mjs} +1407 -1124
- package/dist/tabela.mjs +126 -0
- package/dist/tabela.options-RkZvfptB.d.mts +14 -0
- package/package.json +45 -37
- package/src/components/body.component.ts +4 -3
- package/src/components/column.component.ts +19 -24
- package/src/components/footer.component.ts +8 -3
- package/src/components/group.component.ts +85 -0
- package/src/components/header.component.ts +3 -2
- package/src/components/row.component.ts +10 -8
- package/src/helpers/dom.helpers.ts +24 -20
- package/src/helpers/style.helper.ts +1 -1
- package/src/managers/column.manager.ts +8 -4
- package/src/managers/data.manager.ts +265 -61
- package/src/managers/event.manager.ts +14 -11
- package/src/managers/filter.manager.ts +38 -19
- package/src/managers/group.manager.ts +131 -0
- package/src/managers/navigation.manager.ts +25 -23
- package/src/managers/render.manager.ts +84 -32
- package/src/managers/row.manager.ts +23 -11
- package/src/managers/selection.manager.ts +68 -54
- package/src/managers/sort.manager.ts +81 -16
- package/src/managers/style.manager.ts +156 -0
- package/src/models/column.model.ts +2 -2
- package/src/models/data.model.ts +23 -9
- package/src/models/filter.model.ts +11 -3
- package/src/models/group.model.ts +8 -0
- package/src/models/render.model.ts +2 -2
- package/src/models/selection.model.ts +9 -0
- package/src/models/sort.model.ts +11 -3
- package/src/models/style.model.ts +39 -0
- package/src/models/tabela.model.ts +14 -46
- package/src/models/tabela.options.ts +3 -2
- package/src/tabela.ts +72 -41
- package/dist/helpers/style.helper.js +0 -6
- package/dist/managers/data.manager.js +0 -120
- package/dist/managers/render.manager.js +0 -110
- package/dist/models/body.model.js +0 -0
- package/dist/models/column.model.js +0 -0
- package/dist/models/data.model.js +0 -0
- package/dist/models/filter.model.js +0 -0
- package/dist/models/footer.model.js +0 -0
- package/dist/models/header.model.js +0 -0
- package/dist/models/render.model.js +0 -0
- package/dist/models/sort.model.js +0 -0
- package/dist/models/tabela.model.js +0 -0
- package/dist/models/tabela.options.js +0 -0
- package/dist/tabela.js +0 -102
- package/types/components/body.component.d.ts +0 -6
- package/types/components/column.component.d.ts +0 -13
- package/types/components/footer.component.d.ts +0 -8
- package/types/components/header.component.d.ts +0 -8
- package/types/components/row.component.d.ts +0 -11
- package/types/helpers/dom.helpers.d.ts +0 -10
- package/types/helpers/misc.helpers.d.ts +0 -2
- package/types/helpers/style.helper.d.ts +0 -1
- package/types/index.d.ts +0 -4
- package/types/managers/column.manager.d.ts +0 -12
- package/types/managers/data.manager.d.ts +0 -27
- package/types/managers/event.manager.d.ts +0 -7
- package/types/managers/filter.manager.d.ts +0 -19
- package/types/managers/navigation.manager.d.ts +0 -10
- package/types/managers/render.manager.d.ts +0 -16
- package/types/managers/row.manager.d.ts +0 -13
- package/types/managers/selection.manager.d.ts +0 -18
- package/types/managers/sort.manager.d.ts +0 -26
- package/types/models/body.model.d.ts +0 -4
- package/types/models/column.model.d.ts +0 -13
- package/types/models/data.model.d.ts +0 -14
- package/types/models/filter.model.d.ts +0 -6
- package/types/models/footer.model.d.ts +0 -5
- package/types/models/header.model.d.ts +0 -4
- package/types/models/render.model.d.ts +0 -13
- package/types/models/sort.model.d.ts +0 -5
- package/types/models/tabela.model.d.ts +0 -69
- package/types/models/tabela.options.d.ts +0 -9
- package/types/tabela.d.ts +0 -12
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const CSS_TABELA = 'tabela';
|
|
2
|
+
|
|
3
|
+
export const CSS_TABELA_CELL = 'tabela__cell';
|
|
4
|
+
|
|
5
|
+
export const CSS_TABELA_CELL_BODY = 'tabela__cell--body';
|
|
6
|
+
|
|
7
|
+
export const CSS_TABELA_CELL_FOOTER = 'tabela__cell--footer';
|
|
8
|
+
|
|
9
|
+
export const CSS_TABELA_FAKER = 'tabela__faker';
|
|
10
|
+
|
|
11
|
+
export const CSS_TABELA_HEADING = 'tabela__heading';
|
|
12
|
+
|
|
13
|
+
export const CSS_TABELA_HEADING_CONTENT = 'tabela__heading__content';
|
|
14
|
+
|
|
15
|
+
export const CSS_TABELA_HEADING_SORTER = 'tabela__heading__sorter';
|
|
16
|
+
|
|
17
|
+
export const CSS_TABELA_ROW = 'tabela__row';
|
|
18
|
+
|
|
19
|
+
export const CSS_TABELA_ROW_BODY = 'tabela__row--body';
|
|
20
|
+
|
|
21
|
+
export const CSS_TABELA_ROW_FOOTER = 'tabela__row--footer';
|
|
22
|
+
|
|
23
|
+
export const CSS_TABELA_ROW_GROUP = 'tabela__row--group tabela__group';
|
|
24
|
+
|
|
25
|
+
export const CSS_TABELA_ROW_HEADER = 'tabela__row--header';
|
|
26
|
+
|
|
27
|
+
export const CSS_TABELA_ROW_SELECTED = 'tabela__row--selected';
|
|
28
|
+
|
|
29
|
+
export const CSS_TABELA_ROWGROUP = 'tabela__rowgroup';
|
|
30
|
+
|
|
31
|
+
export const CSS_TABELA_ROWGROUP_BODY = 'tabela__rowgroup--body';
|
|
32
|
+
|
|
33
|
+
export const CSS_TABELA_ROWGROUP_FOOTER = 'tabela__rowgroup--footer';
|
|
34
|
+
|
|
35
|
+
export const CSS_TABELA_ROWGROUP_HEADER = 'tabela__rowgroup--header';
|
|
36
|
+
|
|
37
|
+
export const CSS_TABELA_SELECTION = 'tabela__selection';
|
|
38
|
+
|
|
39
|
+
export const CSS_TABELA_TABLE = 'tabela__table';
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {Key, PlainObject} from '@oscarpalmer/atoms/models';
|
|
2
1
|
import type {BodyComponent} from '../components/body.component';
|
|
3
2
|
import type {FooterComponent} from '../components/footer.component';
|
|
4
3
|
import type {HeaderComponent} from '../components/header.component';
|
|
@@ -6,71 +5,40 @@ import type {ColumnManager} from '../managers/column.manager';
|
|
|
6
5
|
import type {DataManager} from '../managers/data.manager';
|
|
7
6
|
import type {EventManager} from '../managers/event.manager';
|
|
8
7
|
import type {FilterManager} from '../managers/filter.manager';
|
|
8
|
+
import type {GroupManager} from '../managers/group.manager';
|
|
9
9
|
import type {NavigationManager} from '../managers/navigation.manager';
|
|
10
10
|
import type {RenderManager} from '../managers/render.manager';
|
|
11
11
|
import type {RowManager} from '../managers/row.manager';
|
|
12
12
|
import type {SelectionManager} from '../managers/selection.manager';
|
|
13
13
|
import type {SortManager} from '../managers/sort.manager';
|
|
14
|
-
import type {
|
|
15
|
-
import type {SortDirection, SortItem} from './sort.model';
|
|
14
|
+
import type {StyleManager} from '../managers/style.manager';
|
|
16
15
|
import type {TabelaOptions} from './tabela.options';
|
|
17
16
|
|
|
18
|
-
export type
|
|
17
|
+
export type Components = {
|
|
19
18
|
body: BodyComponent;
|
|
20
19
|
footer: FooterComponent;
|
|
21
20
|
header: HeaderComponent;
|
|
22
21
|
};
|
|
23
22
|
|
|
24
|
-
export type
|
|
25
|
-
add(data: PlainObject[]): void;
|
|
26
|
-
clear(): void;
|
|
27
|
-
get(active?: boolean): PlainObject[];
|
|
28
|
-
remove(keys: Key[]): void;
|
|
29
|
-
remove(data: PlainObject[]): void;
|
|
30
|
-
synchronize(data: PlainObject[], remove?: boolean): void;
|
|
31
|
-
update(data: PlainObject[]): void;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type TabelaFilter = {
|
|
35
|
-
add(item: FilterItem): void;
|
|
36
|
-
clear(): void;
|
|
37
|
-
remove(field: string): void;
|
|
38
|
-
remove(item: FilterItem): void;
|
|
39
|
-
set(items: FilterItem[]): void;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export type TabelaManagers = {
|
|
23
|
+
export type Managers = {
|
|
43
24
|
column: ColumnManager;
|
|
44
25
|
data: DataManager;
|
|
45
26
|
event: EventManager;
|
|
46
27
|
filter: FilterManager;
|
|
28
|
+
group: GroupManager;
|
|
47
29
|
navigation: NavigationManager;
|
|
30
|
+
render: RenderManager;
|
|
48
31
|
row: RowManager;
|
|
49
32
|
selection: SelectionManager;
|
|
50
33
|
sort: SortManager;
|
|
51
|
-
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export type TabelaSelection = {
|
|
55
|
-
clear(): void;
|
|
56
|
-
deselect(keys: Key[]): void;
|
|
57
|
-
select(keys: Key[]): void;
|
|
58
|
-
toggle(): void;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export type TabelaSort = {
|
|
62
|
-
add(field: string, direction?: SortDirection): void;
|
|
63
|
-
clear(): void;
|
|
64
|
-
flip(field: string): void;
|
|
65
|
-
remove(field: string): void;
|
|
66
|
-
set(items: SortItem[]): void;
|
|
34
|
+
style: StyleManager;
|
|
67
35
|
};
|
|
68
36
|
|
|
69
|
-
export type
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
37
|
+
export type State = {
|
|
38
|
+
components: Components;
|
|
39
|
+
element: HTMLElement;
|
|
40
|
+
id: number;
|
|
41
|
+
key: string;
|
|
42
|
+
managers: Managers;
|
|
43
|
+
options: TabelaOptions;
|
|
76
44
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type {PlainObject} from '@oscarpalmer/atoms/models';
|
|
2
|
-
import type {
|
|
2
|
+
import type {TabelaColumn} from './column.model';
|
|
3
3
|
|
|
4
4
|
export type TabelaOptions = {
|
|
5
|
-
columns:
|
|
5
|
+
columns: TabelaColumn[];
|
|
6
6
|
data: PlainObject[];
|
|
7
|
+
grouping?: string;
|
|
7
8
|
key: string;
|
|
8
9
|
label: string;
|
|
9
10
|
rowHeight: number;
|
package/src/tabela.ts
CHANGED
|
@@ -1,55 +1,60 @@
|
|
|
1
1
|
import {BodyComponent} from './components/body.component';
|
|
2
2
|
import {FooterComponent} from './components/footer.component';
|
|
3
3
|
import {HeaderComponent} from './components/header.component';
|
|
4
|
+
import {createElement} from './helpers/dom.helpers';
|
|
4
5
|
import {ColumnManager} from './managers/column.manager';
|
|
5
6
|
import {DataManager} from './managers/data.manager';
|
|
6
7
|
import {EventManager} from './managers/event.manager';
|
|
7
8
|
import {FilterManager} from './managers/filter.manager';
|
|
9
|
+
import {GroupManager} from './managers/group.manager';
|
|
8
10
|
import {NavigationManager} from './managers/navigation.manager';
|
|
9
11
|
import {RenderManager} from './managers/render.manager';
|
|
10
12
|
import {RowManager} from './managers/row.manager';
|
|
11
13
|
import {SelectionManager} from './managers/selection.manager';
|
|
12
14
|
import {SortManager} from './managers/sort.manager';
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} from './models/tabela.model';
|
|
15
|
+
import {StyleManager} from './managers/style.manager';
|
|
16
|
+
import type {TabelaData} from './models/data.model';
|
|
17
|
+
import type {TabelaFilter} from './models/filter.model';
|
|
18
|
+
import type {TabelaGroup} from './models/group.model';
|
|
19
|
+
import type {TabelaSelection} from './models/selection.model';
|
|
20
|
+
import type {TabelaSort} from './models/sort.model';
|
|
21
|
+
import {CSS_TABELA, CSS_TABELA_TABLE} from './models/style.model';
|
|
22
|
+
import type {Components, Managers, State} from './models/tabela.model';
|
|
22
23
|
import type {TabelaOptions} from './models/tabela.options';
|
|
23
24
|
|
|
24
25
|
export class Tabela {
|
|
25
|
-
|
|
26
|
-
header: undefined as never,
|
|
27
|
-
body: undefined as never,
|
|
28
|
-
footer: undefined as never,
|
|
29
|
-
};
|
|
26
|
+
#components: Components;
|
|
30
27
|
|
|
31
28
|
#element: HTMLElement;
|
|
32
29
|
|
|
33
30
|
#id = getId();
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
#table: HTMLElement;
|
|
33
|
+
|
|
34
|
+
#key: string;
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
#managers: Managers = {
|
|
38
37
|
column: undefined as never,
|
|
39
38
|
data: undefined as never,
|
|
40
39
|
event: undefined as never,
|
|
41
40
|
filter: undefined as never,
|
|
41
|
+
group: undefined as never,
|
|
42
42
|
navigation: undefined as never,
|
|
43
43
|
render: undefined as never,
|
|
44
44
|
row: undefined as never,
|
|
45
45
|
selection: undefined as never,
|
|
46
46
|
sort: undefined as never,
|
|
47
|
+
style: undefined as never,
|
|
47
48
|
};
|
|
48
49
|
|
|
50
|
+
#state: State;
|
|
51
|
+
|
|
49
52
|
readonly data: TabelaData;
|
|
50
53
|
|
|
51
54
|
readonly filter: TabelaFilter;
|
|
52
55
|
|
|
56
|
+
readonly group: TabelaGroup;
|
|
57
|
+
|
|
53
58
|
readonly selection: TabelaSelection;
|
|
54
59
|
|
|
55
60
|
readonly sort: TabelaSort;
|
|
@@ -62,47 +67,62 @@ export class Tabela {
|
|
|
62
67
|
this.#element = element;
|
|
63
68
|
|
|
64
69
|
element.innerHTML = '';
|
|
65
|
-
element.role = 'table';
|
|
66
|
-
|
|
67
|
-
element.classList.add('tabela');
|
|
68
70
|
|
|
69
|
-
element.
|
|
71
|
+
element.classList.add(CSS_TABELA);
|
|
72
|
+
|
|
73
|
+
this.#table = createElement(
|
|
74
|
+
'div',
|
|
75
|
+
{
|
|
76
|
+
className: CSS_TABELA_TABLE,
|
|
77
|
+
role: 'table',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
'aria-label': options.label,
|
|
81
|
+
},
|
|
82
|
+
);
|
|
70
83
|
|
|
71
84
|
this.#key = options.key;
|
|
72
85
|
|
|
73
|
-
this.#components
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
this.#components = {
|
|
87
|
+
body: new BodyComponent(),
|
|
88
|
+
footer: new FooterComponent(),
|
|
89
|
+
header: new HeaderComponent(),
|
|
90
|
+
};
|
|
76
91
|
|
|
77
|
-
|
|
78
|
-
element,
|
|
92
|
+
this.#state = {
|
|
79
93
|
options,
|
|
80
94
|
components: this.#components,
|
|
95
|
+
element: this.#table,
|
|
81
96
|
id: this.#id,
|
|
82
97
|
key: this.#key,
|
|
83
98
|
managers: this.#managers,
|
|
84
99
|
};
|
|
85
100
|
|
|
86
|
-
this.#managers.column = new ColumnManager(state);
|
|
87
|
-
this.#managers.data = new DataManager(state);
|
|
88
|
-
this.#managers.event = new EventManager(state);
|
|
89
|
-
this.#managers.filter = new FilterManager(state);
|
|
90
|
-
this.#managers.
|
|
91
|
-
this.#managers.
|
|
92
|
-
this.#managers.
|
|
93
|
-
this.#managers.
|
|
94
|
-
this.#managers.
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
this.#managers.column = new ColumnManager(this.#state);
|
|
102
|
+
this.#managers.data = new DataManager(this.#state);
|
|
103
|
+
this.#managers.event = new EventManager(this.#state);
|
|
104
|
+
this.#managers.filter = new FilterManager(this.#state);
|
|
105
|
+
this.#managers.group = new GroupManager(this.#state);
|
|
106
|
+
this.#managers.navigation = new NavigationManager(this.#state);
|
|
107
|
+
this.#managers.render = new RenderManager(this.#state);
|
|
108
|
+
this.#managers.row = new RowManager(this.#state);
|
|
109
|
+
this.#managers.selection = new SelectionManager(this.#state);
|
|
110
|
+
this.#managers.sort = new SortManager(this.#state);
|
|
111
|
+
this.#managers.style = new StyleManager(this.#state);
|
|
112
|
+
|
|
113
|
+
this.#table.append(
|
|
97
114
|
this.#components.header.elements.group,
|
|
98
115
|
this.#components.body.elements.group,
|
|
99
116
|
this.#components.footer.elements.group,
|
|
100
117
|
);
|
|
101
118
|
|
|
119
|
+
element.append(this.#table);
|
|
120
|
+
|
|
102
121
|
this.#managers.data.set(options.data);
|
|
103
122
|
|
|
104
123
|
this.data = this.#managers.data.handlers;
|
|
105
124
|
this.filter = this.#managers.filter.handlers;
|
|
125
|
+
this.group = this.#managers.group.handlers;
|
|
106
126
|
this.selection = this.#managers.selection.handlers;
|
|
107
127
|
this.sort = this.#managers.sort.handlers;
|
|
108
128
|
}
|
|
@@ -111,6 +131,7 @@ export class Tabela {
|
|
|
111
131
|
const components = this.#components;
|
|
112
132
|
const managers = this.#managers;
|
|
113
133
|
const element = this.#element;
|
|
134
|
+
const table = this.#table;
|
|
114
135
|
|
|
115
136
|
components.body.destroy();
|
|
116
137
|
components.footer.destroy();
|
|
@@ -120,20 +141,30 @@ export class Tabela {
|
|
|
120
141
|
managers.data.destroy();
|
|
121
142
|
managers.event.destroy();
|
|
122
143
|
managers.filter.destroy();
|
|
123
|
-
|
|
144
|
+
managers.group.destroy();
|
|
145
|
+
managers.navigation.destroy();
|
|
124
146
|
managers.render.destroy();
|
|
125
147
|
managers.row.destroy();
|
|
126
148
|
managers.selection.destroy();
|
|
127
149
|
managers.sort.destroy();
|
|
128
150
|
|
|
129
151
|
element.innerHTML = '';
|
|
130
|
-
element.role = '';
|
|
131
152
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
153
|
+
table.innerHTML = '';
|
|
154
|
+
table.role = '';
|
|
155
|
+
|
|
156
|
+
element.classList.remove(CSS_TABELA);
|
|
157
|
+
|
|
158
|
+
table.removeAttribute('aria-label');
|
|
159
|
+
table.removeAttribute('role');
|
|
160
|
+
|
|
161
|
+
this.#state.components = undefined as never;
|
|
162
|
+
this.#state.managers = undefined as never;
|
|
163
|
+
this.#state.element = undefined as never;
|
|
164
|
+
this.#state.options = undefined as never;
|
|
135
165
|
|
|
136
166
|
this.#element = undefined as never;
|
|
167
|
+
this.#table = undefined as never;
|
|
137
168
|
}
|
|
138
169
|
}
|
|
139
170
|
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { push, sort } from "@oscarpalmer/atoms/array";
|
|
2
|
-
import { toMap } from "@oscarpalmer/atoms/array/to-map";
|
|
3
|
-
import { isPlainObject } from "@oscarpalmer/atoms/is";
|
|
4
|
-
var DataManager = class {
|
|
5
|
-
handlers = Object.freeze({
|
|
6
|
-
add: (data) => void this.add(data, true),
|
|
7
|
-
clear: () => void this.clear(),
|
|
8
|
-
get: (active) => this.get(active),
|
|
9
|
-
remove: (items) => void this.remove(items, true),
|
|
10
|
-
synchronize: (data, remove) => void this.synchronize(data, remove),
|
|
11
|
-
update: (data) => void this.update(data)
|
|
12
|
-
});
|
|
13
|
-
values = {
|
|
14
|
-
keys: { original: [] },
|
|
15
|
-
objects: {
|
|
16
|
-
mapped: /* @__PURE__ */ new Map(),
|
|
17
|
-
array: []
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
get size() {
|
|
21
|
-
return this.values.keys.active?.length ?? this.values.keys.original.length;
|
|
22
|
-
}
|
|
23
|
-
constructor(state) {
|
|
24
|
-
this.state = state;
|
|
25
|
-
}
|
|
26
|
-
async add(data, render) {
|
|
27
|
-
const { state, values } = this;
|
|
28
|
-
push(values.objects.array, data);
|
|
29
|
-
values.objects.mapped = toMap(values.objects.array, state.key);
|
|
30
|
-
if (render) this.render();
|
|
31
|
-
}
|
|
32
|
-
clear() {
|
|
33
|
-
if (this.values.objects.array.length > 0) this.set([]);
|
|
34
|
-
}
|
|
35
|
-
destroy() {
|
|
36
|
-
const { values } = this;
|
|
37
|
-
values.objects.mapped.clear();
|
|
38
|
-
values.keys.active = void 0;
|
|
39
|
-
values.keys.original.length = 0;
|
|
40
|
-
values.objects.array.length = 0;
|
|
41
|
-
this.handlers = void 0;
|
|
42
|
-
this.state = void 0;
|
|
43
|
-
this.values = void 0;
|
|
44
|
-
}
|
|
45
|
-
get(active) {
|
|
46
|
-
const { values } = this;
|
|
47
|
-
return active ?? false ? values.keys.active?.map((key) => values.objects.mapped.get(key)) ?? [] : values.objects.array;
|
|
48
|
-
}
|
|
49
|
-
getIndex(key) {
|
|
50
|
-
const { values } = this;
|
|
51
|
-
return (values.keys.active ?? values.keys.original).indexOf(key);
|
|
52
|
-
}
|
|
53
|
-
async remove(items, render) {
|
|
54
|
-
const { state, values } = this;
|
|
55
|
-
const keys = items.map((value) => isPlainObject(value) ? value[state.key] : value).filter((key) => values.objects.mapped.has(key));
|
|
56
|
-
const { length } = keys;
|
|
57
|
-
if (length === 0) return;
|
|
58
|
-
for (let keyIndex = 0; keyIndex < length; keyIndex += 1) {
|
|
59
|
-
const key = keys[keyIndex];
|
|
60
|
-
values.objects.mapped.delete(key);
|
|
61
|
-
const arrayIndex = values.objects.array.findIndex((object) => object[state.key] === key);
|
|
62
|
-
if (arrayIndex > -1) values.objects.array.splice(arrayIndex, 1);
|
|
63
|
-
values.keys.original.splice(values.keys.original.indexOf(key), 1);
|
|
64
|
-
state.managers.row.remove(key);
|
|
65
|
-
}
|
|
66
|
-
if (render) this.render();
|
|
67
|
-
}
|
|
68
|
-
render() {
|
|
69
|
-
const { state, values } = this;
|
|
70
|
-
values.keys.original = sort(values.objects.array.map((item) => item[state.key]));
|
|
71
|
-
if (Object.keys(state.managers.filter.items).length > 0) state.managers.filter.filter();
|
|
72
|
-
else if (state.managers.sort.items.length > 0) state.managers.sort.sort();
|
|
73
|
-
else state.managers.render.update(true);
|
|
74
|
-
}
|
|
75
|
-
set(data) {
|
|
76
|
-
const { state, values } = this;
|
|
77
|
-
values.objects.mapped = toMap(data, state.key);
|
|
78
|
-
values.objects.array = data;
|
|
79
|
-
this.render();
|
|
80
|
-
}
|
|
81
|
-
async synchronize(data, remove) {
|
|
82
|
-
const { state, values } = this;
|
|
83
|
-
const add = [];
|
|
84
|
-
const updated = [];
|
|
85
|
-
const keys = /* @__PURE__ */ new Set([]);
|
|
86
|
-
const { length } = data;
|
|
87
|
-
for (let index = 0; index < length; index += 1) {
|
|
88
|
-
const object = data[index];
|
|
89
|
-
const key = object[state.key];
|
|
90
|
-
if (values.objects.mapped.has(key)) updated.push(object);
|
|
91
|
-
else add.push(object);
|
|
92
|
-
keys.add(key);
|
|
93
|
-
}
|
|
94
|
-
if (keys.size === 0) return;
|
|
95
|
-
if (remove ?? false) {
|
|
96
|
-
const toRemove = values.keys.original.filter((key) => !keys.has(key));
|
|
97
|
-
if (toRemove.length > 0) await this.remove(toRemove, false);
|
|
98
|
-
}
|
|
99
|
-
await this.update(updated);
|
|
100
|
-
if (add.length > 0) await this.add(add, false);
|
|
101
|
-
if (add.length > 0 || (remove ?? false)) this.render();
|
|
102
|
-
}
|
|
103
|
-
async update(data) {
|
|
104
|
-
const { state, values } = this;
|
|
105
|
-
const { length } = data;
|
|
106
|
-
for (let index = 0; index < length; index += 1) {
|
|
107
|
-
const object = data[index];
|
|
108
|
-
const key = object[state.key];
|
|
109
|
-
const value = values.objects.mapped.get(key);
|
|
110
|
-
if (value != null) {
|
|
111
|
-
values.objects.mapped.set(key, {
|
|
112
|
-
...value,
|
|
113
|
-
...object
|
|
114
|
-
});
|
|
115
|
-
state.managers.row.update(key);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
export { DataManager };
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { removeRow, renderRow } from "../components/row.component.js";
|
|
2
|
-
import { on } from "@oscarpalmer/toretto/event";
|
|
3
|
-
function getRange(down) {
|
|
4
|
-
const { components, managers, options } = this.state;
|
|
5
|
-
const { clientHeight, scrollTop } = components.body.elements.group;
|
|
6
|
-
const first = Math.floor(scrollTop / options.rowHeight);
|
|
7
|
-
const last = Math.min((managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length) - 1, Math.ceil((scrollTop + clientHeight) / options.rowHeight) - 1);
|
|
8
|
-
const before = Math.ceil(clientHeight / options.rowHeight) * (down ? 1 : 2);
|
|
9
|
-
const after = Math.ceil(clientHeight / options.rowHeight) * (down ? 2 : 1);
|
|
10
|
-
const start = Math.max(0, first - before);
|
|
11
|
-
return {
|
|
12
|
-
end: Math.min((managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length) - 1, last + after),
|
|
13
|
-
start
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function onScroll() {
|
|
17
|
-
const { state } = this;
|
|
18
|
-
if (!state.active) {
|
|
19
|
-
requestAnimationFrame(() => {
|
|
20
|
-
const top = state.components.body.elements.group.scrollTop;
|
|
21
|
-
this.update(top > state.top);
|
|
22
|
-
state.active = false;
|
|
23
|
-
state.top = top;
|
|
24
|
-
});
|
|
25
|
-
state.active = true;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
var RenderManager = class {
|
|
29
|
-
fragment;
|
|
30
|
-
listener;
|
|
31
|
-
pool = {
|
|
32
|
-
cells: {},
|
|
33
|
-
rows: []
|
|
34
|
-
};
|
|
35
|
-
state;
|
|
36
|
-
visible = /* @__PURE__ */ new Map();
|
|
37
|
-
constructor(state) {
|
|
38
|
-
this.listener = on(state.components.body.elements.group, "scroll", onScroll.bind(this));
|
|
39
|
-
this.state = {
|
|
40
|
-
...state,
|
|
41
|
-
active: false,
|
|
42
|
-
top: 0
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
destroy() {
|
|
46
|
-
const { listener, pool, visible } = this;
|
|
47
|
-
listener();
|
|
48
|
-
visible.clear();
|
|
49
|
-
pool.cells = {};
|
|
50
|
-
pool.rows = [];
|
|
51
|
-
this.fragment = void 0;
|
|
52
|
-
this.listener = void 0;
|
|
53
|
-
this.pool = void 0;
|
|
54
|
-
this.state = void 0;
|
|
55
|
-
this.visible = void 0;
|
|
56
|
-
}
|
|
57
|
-
removeCells(fields) {
|
|
58
|
-
const { pool, state, visible } = this;
|
|
59
|
-
const { length } = fields;
|
|
60
|
-
for (let index = 0; index < length; index += 1) delete pool.cells[fields[index]];
|
|
61
|
-
for (const [, key] of visible) {
|
|
62
|
-
const row = state.managers.row.get(key);
|
|
63
|
-
if (row == null || row.element == null) continue;
|
|
64
|
-
for (let index = 0; index < length; index += 1) {
|
|
65
|
-
row.cells[fields[index]].innerHTML = "";
|
|
66
|
-
row.cells[fields[index]].remove();
|
|
67
|
-
delete row.cells[fields[index]];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
getFragment() {
|
|
72
|
-
this.fragment ??= document.createDocumentFragment();
|
|
73
|
-
this.fragment.replaceChildren();
|
|
74
|
-
return this.fragment;
|
|
75
|
-
}
|
|
76
|
-
update(down, rerender) {
|
|
77
|
-
const { state, pool, visible } = this;
|
|
78
|
-
const { components, managers, options } = state;
|
|
79
|
-
components.body.elements.faker.style.height = `${managers.data.size * options.rowHeight}px`;
|
|
80
|
-
const indices = /* @__PURE__ */ new Set();
|
|
81
|
-
const range = getRange.call(this, down);
|
|
82
|
-
for (let index = range.start; index <= range.end; index += 1) indices.add(index);
|
|
83
|
-
let remove = rerender ?? false;
|
|
84
|
-
for (const [index, key] of visible) {
|
|
85
|
-
const row = managers.row.get(key);
|
|
86
|
-
if (remove || row == null || !indices.has(index)) {
|
|
87
|
-
visible.delete(index);
|
|
88
|
-
if (row != null) removeRow(pool, row);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const fragment = this.getFragment();
|
|
92
|
-
const keys = managers.data.values.keys.active ?? managers.data.values.keys.original;
|
|
93
|
-
let count = 0;
|
|
94
|
-
for (let index = range.start; index <= range.end; index += 1) {
|
|
95
|
-
if (visible.has(index)) continue;
|
|
96
|
-
const key = keys[index];
|
|
97
|
-
const row = managers.row.get(key);
|
|
98
|
-
if (row == null) continue;
|
|
99
|
-
count += 1;
|
|
100
|
-
renderRow(state, row);
|
|
101
|
-
visible.set(index, key);
|
|
102
|
-
if (row.element != null) {
|
|
103
|
-
row.element.style.transform = `translateY(${index * options.rowHeight}px)`;
|
|
104
|
-
fragment.append(row.element);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (count > 0) components.body.elements.group[down ? "append" : "prepend"](fragment);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
export { RenderManager };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|