@oscarpalmer/tabela 0.13.0 → 0.14.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.
Files changed (131) hide show
  1. package/dist/components/{body.component.mjs → body.component.js} +3 -6
  2. package/dist/components/{column.component.mjs → column.component.js} +5 -8
  3. package/dist/components/{footer.component.mjs → footer.component.js} +4 -7
  4. package/dist/components/group.component.js +28 -0
  5. package/dist/components/{header.component.mjs → header.component.js} +3 -6
  6. package/dist/components/{row.component.mjs → row.component.js} +7 -11
  7. package/dist/helpers/{dom.helpers.mjs → dom.helpers.js} +9 -13
  8. package/dist/helpers/{misc.helpers.mjs → misc.helpers.js} +1 -3
  9. package/dist/helpers/style.helper.js +6 -0
  10. package/dist/{index.mjs → index.js} +1 -3
  11. package/dist/managers/{column.manager.mjs → column.manager.js} +1 -6
  12. package/dist/managers/data.manager.js +181 -0
  13. package/dist/managers/{event.manager.mjs → event.manager.js} +8 -9
  14. package/dist/managers/{filter.manager.mjs → filter.manager.js} +14 -23
  15. package/dist/managers/group.manager.js +46 -0
  16. package/dist/managers/{navigation.manager.mjs → navigation.manager.js} +24 -27
  17. package/dist/managers/{render.manager.mjs → render.manager.js} +26 -35
  18. package/dist/managers/{row.manager.mjs → row.manager.js} +11 -18
  19. package/dist/managers/{selection.manager.mjs → selection.manager.js} +28 -32
  20. package/dist/managers/{sort.manager.mjs → sort.manager.js} +9 -12
  21. package/dist/models/body.model.js +0 -0
  22. package/dist/models/column.model.js +0 -0
  23. package/dist/models/data.model.js +0 -0
  24. package/dist/models/filter.model.js +0 -0
  25. package/dist/models/footer.model.js +0 -0
  26. package/dist/models/group.model.js +0 -0
  27. package/dist/models/header.model.js +0 -0
  28. package/dist/models/render.model.js +0 -0
  29. package/dist/models/selection.model.js +0 -0
  30. package/dist/models/sort.model.js +0 -0
  31. package/dist/models/tabela.model.js +0 -0
  32. package/dist/models/tabela.options.js +0 -0
  33. package/dist/{tabela.full.mjs → tabela.full.js} +860 -1049
  34. package/dist/tabela.js +105 -0
  35. package/package.json +1 -1
  36. package/src/components/body.component.ts +10 -7
  37. package/src/components/column.component.ts +19 -15
  38. package/src/components/footer.component.ts +7 -10
  39. package/src/components/group.component.ts +34 -12
  40. package/src/components/header.component.ts +6 -5
  41. package/src/components/row.component.ts +27 -19
  42. package/src/helpers/dom.helpers.ts +18 -22
  43. package/src/helpers/misc.helpers.ts +5 -0
  44. package/src/managers/data.manager.ts +80 -77
  45. package/src/managers/event.manager.ts +21 -10
  46. package/src/managers/filter.manager.ts +34 -21
  47. package/src/managers/group.manager.ts +18 -9
  48. package/src/managers/navigation.manager.ts +46 -49
  49. package/src/managers/render.manager.ts +34 -21
  50. package/src/managers/row.manager.ts +1 -1
  51. package/src/managers/selection.manager.ts +37 -35
  52. package/src/managers/sort.manager.ts +47 -34
  53. package/src/managers/style.manager.ts +40 -25
  54. package/src/models/column.model.ts +2 -6
  55. package/src/models/data.model.ts +7 -8
  56. package/src/models/dom.model.ts +33 -0
  57. package/src/models/event.model.ts +7 -0
  58. package/src/models/filter.model.ts +20 -0
  59. package/src/models/group.model.ts +4 -0
  60. package/src/models/sort.model.ts +4 -0
  61. package/src/models/style.model.ts +32 -20
  62. package/src/models/tabela.model.ts +1 -0
  63. package/src/tabela.ts +20 -22
  64. package/dist/body.component-_VDOpJhV.d.mts +0 -10
  65. package/dist/body.model-2iwsovAV.d.mts +0 -7
  66. package/dist/column.component-Bx46r3JI.d.mts +0 -16
  67. package/dist/column.model-D-aw4EU4.d.mts +0 -16
  68. package/dist/components/body.component.d.mts +0 -2
  69. package/dist/components/column.component.d.mts +0 -2
  70. package/dist/components/footer.component.d.mts +0 -2
  71. package/dist/components/group.component.d.mts +0 -2
  72. package/dist/components/group.component.mjs +0 -51
  73. package/dist/components/header.component.d.mts +0 -2
  74. package/dist/components/row.component.d.mts +0 -2
  75. package/dist/filter.model-7ukJrtil.d.mts +0 -16
  76. package/dist/footer.component-Curiab8j.d.mts +0 -12
  77. package/dist/footer.model-DhqoS6ds.d.mts +0 -8
  78. package/dist/group.component-Cq1YYbfJ.d.mts +0 -285
  79. package/dist/group.model-BsKFwHbt.d.mts +0 -10
  80. package/dist/header.component-BjjlpZIg.d.mts +0 -12
  81. package/dist/header.model-DN_KzUCV.d.mts +0 -7
  82. package/dist/helpers/dom.helpers.d.mts +0 -12
  83. package/dist/helpers/misc.helpers.d.mts +0 -6
  84. package/dist/helpers/style.helper.d.mts +0 -6
  85. package/dist/helpers/style.helper.mjs +0 -8
  86. package/dist/index.d.mts +0 -7
  87. package/dist/managers/column.manager.d.mts +0 -2
  88. package/dist/managers/data.manager.d.mts +0 -2
  89. package/dist/managers/data.manager.mjs +0 -222
  90. package/dist/managers/event.manager.d.mts +0 -2
  91. package/dist/managers/filter.manager.d.mts +0 -2
  92. package/dist/managers/group.manager.d.mts +0 -2
  93. package/dist/managers/group.manager.mjs +0 -73
  94. package/dist/managers/navigation.manager.d.mts +0 -2
  95. package/dist/managers/render.manager.d.mts +0 -2
  96. package/dist/managers/row.manager.d.mts +0 -2
  97. package/dist/managers/selection.manager.d.mts +0 -2
  98. package/dist/managers/sort.manager.d.mts +0 -2
  99. package/dist/managers/style.manager.d.mts +0 -2
  100. package/dist/managers/style.manager.mjs +0 -149
  101. package/dist/models/body.model.d.mts +0 -2
  102. package/dist/models/body.model.mjs +0 -1
  103. package/dist/models/column.model.d.mts +0 -2
  104. package/dist/models/column.model.mjs +0 -1
  105. package/dist/models/data.model.d.mts +0 -2
  106. package/dist/models/data.model.mjs +0 -1
  107. package/dist/models/filter.model.d.mts +0 -2
  108. package/dist/models/filter.model.mjs +0 -1
  109. package/dist/models/footer.model.d.mts +0 -2
  110. package/dist/models/footer.model.mjs +0 -1
  111. package/dist/models/group.model.d.mts +0 -2
  112. package/dist/models/group.model.mjs +0 -1
  113. package/dist/models/header.model.d.mts +0 -2
  114. package/dist/models/header.model.mjs +0 -1
  115. package/dist/models/render.model.d.mts +0 -2
  116. package/dist/models/render.model.mjs +0 -1
  117. package/dist/models/selection.model.d.mts +0 -2
  118. package/dist/models/selection.model.mjs +0 -1
  119. package/dist/models/sort.model.d.mts +0 -2
  120. package/dist/models/sort.model.mjs +0 -1
  121. package/dist/models/style.model.d.mts +0 -23
  122. package/dist/models/style.model.mjs +0 -23
  123. package/dist/models/tabela.model.d.mts +0 -2
  124. package/dist/models/tabela.model.mjs +0 -1
  125. package/dist/models/tabela.options.d.mts +0 -2
  126. package/dist/models/tabela.options.mjs +0 -1
  127. package/dist/selection.model-rwQe9fco.d.mts +0 -12
  128. package/dist/sort.model-CauImaLu.d.mts +0 -15
  129. package/dist/tabela.d.mts +0 -21
  130. package/dist/tabela.mjs +0 -126
  131. package/dist/tabela.options-RkZvfptB.d.mts +0 -14
@@ -1,285 +0,0 @@
1
- import { t as BodyComponent } from "./body.component-_VDOpJhV.mjs";
2
- import { n as TabelaColumn } from "./column.model-D-aw4EU4.mjs";
3
- import { t as ColumnComponent } from "./column.component-Bx46r3JI.mjs";
4
- import { t as FooterComponent } from "./footer.component-Curiab8j.mjs";
5
- import { t as GroupValue } from "./group.model-BsKFwHbt.mjs";
6
- import { t as HeaderComponent } from "./header.component-BjjlpZIg.mjs";
7
- import { r as TabelaFilterItem } from "./filter.model-7ukJrtil.mjs";
8
- import { n as TabelaSortDirection, r as TabelaSortItem } from "./sort.model-CauImaLu.mjs";
9
- import { t as TabelaOptions } from "./tabela.options-RkZvfptB.mjs";
10
- import { Key, PlainObject } from "@oscarpalmer/atoms/models";
11
- import { RemovableEventListener } from "@oscarpalmer/toretto/models";
12
-
13
- //#region src/managers/column.manager.d.ts
14
- declare class ColumnManager {
15
- state: State;
16
- items: ColumnComponent[];
17
- constructor(state: State);
18
- destroy(): void;
19
- get(field: string): ColumnComponent | undefined;
20
- remove(field: string): void;
21
- remove(fields: string[]): void;
22
- set(columns: TabelaColumn[]): void;
23
- }
24
- //#endregion
25
- //#region src/models/data.model.d.ts
26
- type DataItem = GroupComponent | Key;
27
- type DataItems = {
28
- active?: Array<DataItem>;
29
- original: Array<DataItem>;
30
- };
31
- type DataState = {
32
- items: DataItems;
33
- values: DataValues;
34
- } & State;
35
- type DataValues = {
36
- array: Array<GroupComponent | PlainObject>;
37
- mapped: Map<Key, PlainObject>;
38
- };
39
- type TabelaData = {
40
- add(data: PlainObject[]): void;
41
- clear(): void;
42
- get(active?: boolean): PlainObject[];
43
- remove(keys: Key[]): void;
44
- remove(data: PlainObject[]): void;
45
- synchronize(data: PlainObject[], remove?: boolean): void;
46
- update(data: PlainObject[]): void;
47
- };
48
- //#endregion
49
- //#region src/managers/data.manager.d.ts
50
- declare class DataManager {
51
- handlers: Readonly<{
52
- add: (data: PlainObject[]) => undefined;
53
- clear: () => undefined;
54
- get: (active: boolean | undefined) => PlainObject[];
55
- remove: (items: Key[] | PlainObject[]) => undefined;
56
- synchronize: (data: PlainObject[], remove: boolean | undefined) => undefined;
57
- update: (data: PlainObject[]) => undefined;
58
- }>;
59
- state: DataState;
60
- get items(): DataItem[];
61
- get size(): number;
62
- constructor(state: State);
63
- add(data: PlainObject[], render: boolean): Promise<void>;
64
- clear(): void;
65
- destroy(): void;
66
- get(active?: boolean): PlainObject[];
67
- getIndex(item: DataItem): number;
68
- remove(items: Array<Key | PlainObject>, render: boolean): Promise<void>;
69
- removeItems(items: DataItem[], clear: boolean, render: boolean): Promise<void>;
70
- render(): void;
71
- set(data: PlainObject[]): void;
72
- synchronize(data: PlainObject[], remove?: boolean): Promise<void>;
73
- update(data: PlainObject[]): Promise<void>;
74
- }
75
- //#endregion
76
- //#region src/managers/event.manager.d.ts
77
- declare class EventManager {
78
- state: State;
79
- constructor(state: State);
80
- destroy(): void;
81
- onSort(event: MouseEvent, target: HTMLElement): void;
82
- }
83
- //#endregion
84
- //#region src/managers/filter.manager.d.ts
85
- declare class FilterManager {
86
- state: State;
87
- handlers: Readonly<{
88
- add: (item: TabelaFilterItem) => void;
89
- clear: () => void;
90
- remove: (value: string | TabelaFilterItem) => void;
91
- set: (items: TabelaFilterItem[]) => void;
92
- }>;
93
- items: Record<string, TabelaFilterItem[]>;
94
- constructor(state: State);
95
- add(item: TabelaFilterItem): void;
96
- clear(): void;
97
- destroy(): void;
98
- filter(): void;
99
- remove(value: string | TabelaFilterItem): void;
100
- set(items: TabelaFilterItem[]): void;
101
- }
102
- //#endregion
103
- //#region src/managers/group.manager.d.ts
104
- declare class GroupManager {
105
- state: State;
106
- collapsed: Set<Key>;
107
- enabled: boolean;
108
- field: string;
109
- handlers: Readonly<{
110
- set: (group?: string) => void;
111
- }>;
112
- items: GroupComponent[];
113
- order: Record<never, number>;
114
- constructor(state: State);
115
- add(group: GroupComponent): void;
116
- clear(): void;
117
- destroy(): void;
118
- get(value: unknown): GroupComponent | undefined;
119
- handle(button: HTMLElement): void;
120
- remove(group: GroupComponent): void;
121
- set(items: GroupComponent[]): void;
122
- }
123
- //#endregion
124
- //#region src/managers/navigation.manager.d.ts
125
- declare class NavigationManager {
126
- state: State;
127
- active: DataItem | undefined;
128
- constructor(state: State);
129
- destroy(): void;
130
- handle(event: KeyboardEvent): void;
131
- setActive(item: DataItem | undefined, scroll?: boolean): void;
132
- }
133
- //#endregion
134
- //#region src/models/render.model.d.ts
135
- type RenderElementPool = {
136
- cells: Record<string, HTMLDivElement[]>;
137
- rows: HTMLDivElement[];
138
- };
139
- type RenderRange = {
140
- end: number;
141
- start: number;
142
- };
143
- type RenderState = {
144
- active: boolean;
145
- top: number;
146
- } & State;
147
- //#endregion
148
- //#region src/managers/render.manager.d.ts
149
- declare class RenderManager {
150
- fragment: DocumentFragment;
151
- listener: RemovableEventListener;
152
- pool: RenderElementPool;
153
- state: RenderState;
154
- visible: Map<number, DataItem>;
155
- constructor(state: State);
156
- destroy(): void;
157
- removeCells(fields: string[]): void;
158
- getFragment(): DocumentFragment;
159
- update(down: boolean, rerender?: boolean): void;
160
- }
161
- //#endregion
162
- //#region src/components/row.component.d.ts
163
- declare function removeRow(pool: RenderElementPool, row: RowComponent): void;
164
- declare function renderRow(state: State, row: RowComponent): void;
165
- declare class RowComponent {
166
- readonly key: Key;
167
- cells: Record<string, HTMLDivElement>;
168
- element: HTMLDivElement | undefined;
169
- constructor(key: Key);
170
- }
171
- //#endregion
172
- //#region src/managers/row.manager.d.ts
173
- declare class RowManager {
174
- state: State;
175
- components: Map<Key, RowComponent>;
176
- constructor(state: State);
177
- clear(): void;
178
- destroy(): void;
179
- get(key: Key, create: boolean): RowComponent | undefined;
180
- has(key: Key): boolean;
181
- remove(key: Key): void;
182
- removeRow(row: RowComponent): void;
183
- update(key: Key): void;
184
- }
185
- //#endregion
186
- //#region src/managers/selection.manager.d.ts
187
- declare class SelectionManager {
188
- state: State;
189
- handlers: Readonly<{
190
- add: (keys: Key[]) => void;
191
- clear: () => void;
192
- remove: (keys: Key[]) => void;
193
- set: (keys: Key[]) => void;
194
- toggle: () => void;
195
- }>;
196
- items: Set<Key>;
197
- last: Key | undefined;
198
- constructor(state: State);
199
- add(keys: Key[]): void;
200
- clear(): void;
201
- destroy(): void;
202
- handle(event: MouseEvent, target: HTMLElement): void;
203
- range(from: Key | HTMLElement, to: Key | HTMLElement): void;
204
- remove(keys: Key[]): void;
205
- set(keys: Key[]): void;
206
- toggle(): void;
207
- update(removed: Key[]): void;
208
- }
209
- //#endregion
210
- //#region src/managers/sort.manager.d.ts
211
- declare class SortManager {
212
- state: State;
213
- handlers: Readonly<{
214
- add: (field: string, direction: TabelaSortDirection | undefined) => void;
215
- flip: (field: string) => void;
216
- clear: () => void;
217
- remove: (field: string) => void;
218
- set: (items: TabelaSortItem[]) => void;
219
- }>;
220
- items: PlainObject[];
221
- constructor(state: State);
222
- add(field: string, direction?: TabelaSortDirection): void;
223
- addOrSet(event: MouseEvent, field: string): void;
224
- clear(): void;
225
- destroy(): void;
226
- flip(field: string): void;
227
- remove(field: string): void;
228
- removeOrClear(event: MouseEvent, field: string): void;
229
- set(items: TabelaSortItem[]): void;
230
- sort(): void;
231
- toggle(event: MouseEvent, field: string, direction?: string | null): void;
232
- }
233
- declare function sortWithGroups(state: State, data: Array<GroupComponent | PlainObject>, sorters: PlainObject[]): Array<GroupComponent | PlainObject>;
234
- //#endregion
235
- //#region src/managers/style.manager.d.ts
236
- declare class StyleManager {
237
- readonly state: State;
238
- constructor(state: State);
239
- }
240
- //#endregion
241
- //#region src/models/tabela.model.d.ts
242
- type Components = {
243
- body: BodyComponent;
244
- footer: FooterComponent;
245
- header: HeaderComponent;
246
- };
247
- type Managers = {
248
- column: ColumnManager;
249
- data: DataManager;
250
- event: EventManager;
251
- filter: FilterManager;
252
- group: GroupManager;
253
- navigation: NavigationManager;
254
- render: RenderManager;
255
- row: RowManager;
256
- selection: SelectionManager;
257
- sort: SortManager;
258
- style: StyleManager;
259
- };
260
- type State = {
261
- components: Components;
262
- element: HTMLElement;
263
- id: number;
264
- key: string;
265
- managers: Managers;
266
- options: TabelaOptions;
267
- };
268
- //#endregion
269
- //#region src/components/group.component.d.ts
270
- declare class GroupComponent {
271
- readonly label: string;
272
- element: HTMLElement | undefined;
273
- expanded: boolean;
274
- filtered: number;
275
- readonly key: string;
276
- selected: number;
277
- total: number;
278
- readonly value: GroupValue;
279
- constructor(label: string, value: unknown);
280
- }
281
- declare function removeGroup(group: GroupComponent): void;
282
- declare function renderGroup(state: State, component: GroupComponent): void;
283
- declare function updateGroup(state: State, component: GroupComponent): void;
284
- //#endregion
285
- export { EventManager as C, TabelaData as D, DataState as E, ColumnManager as O, FilterManager as S, DataItem as T, RenderElementPool as _, Components as a, NavigationManager as b, StyleManager as c, SelectionManager as d, RowManager as f, RenderManager as g, renderRow as h, updateGroup as i, SortManager as l, removeRow as m, removeGroup as n, Managers as o, RowComponent as p, renderGroup as r, State as s, GroupComponent as t, sortWithGroups as u, RenderRange as v, DataManager as w, GroupManager as x, RenderState as y };
@@ -1,10 +0,0 @@
1
- //#region src/models/group.model.d.ts
2
- type GroupValue = {
3
- original: unknown;
4
- stringified: string;
5
- };
6
- type TabelaGroup = {
7
- set(group?: string): void;
8
- };
9
- //#endregion
10
- export { TabelaGroup as n, GroupValue as t };
@@ -1,12 +0,0 @@
1
- import { t as ColumnComponent } from "./column.component-Bx46r3JI.mjs";
2
- import { t as HeaderElements } from "./header.model-DN_KzUCV.mjs";
3
-
4
- //#region src/components/header.component.d.ts
5
- declare class HeaderComponent {
6
- readonly elements: HeaderElements;
7
- constructor();
8
- destroy(): void;
9
- update(columns: ColumnComponent[]): void;
10
- }
11
- //#endregion
12
- export { HeaderComponent as t };
@@ -1,7 +0,0 @@
1
- //#region src/models/header.model.d.ts
2
- type HeaderElements = {
3
- group: HTMLDivElement;
4
- row: HTMLDivElement;
5
- };
6
- //#endregion
7
- export { HeaderElements as t };
@@ -1,12 +0,0 @@
1
- //#region src/helpers/dom.helpers.d.ts
2
- type RowGroupWithRow = {
3
- group: HTMLDivElement;
4
- row: HTMLDivElement;
5
- };
6
- declare function createCell(width: number, body?: boolean): HTMLDivElement;
7
- declare function createElement<TagName extends keyof HTMLElementTagNameMap>(tagName: TagName, properties?: Partial<HTMLElementTagNameMap[TagName]>, attributes?: Record<string, string>, style?: Partial<CSSStyleDeclaration>): HTMLElementTagNameMap[TagName];
8
- declare function createRowGroup(): RowGroupWithRow;
9
- declare function createRowGroup(withRow: boolean): HTMLDivElement;
10
- declare function createRow(): HTMLDivElement;
11
- //#endregion
12
- export { createCell, createElement, createRow, createRowGroup };
@@ -1,6 +0,0 @@
1
- import { Key } from "@oscarpalmer/atoms/models";
2
-
3
- //#region src/helpers/misc.helpers.d.ts
4
- declare function getKey(value: unknown): Key | undefined;
5
- //#endregion
6
- export { getKey };
@@ -1,6 +0,0 @@
1
- import * as _oscarpalmer_toretto_style0 from "@oscarpalmer/toretto/style";
2
-
3
- //#region src/helpers/style.helper.d.ts
4
- declare const preventSelection: _oscarpalmer_toretto_style0.StyleToggler;
5
- //#endregion
6
- export { preventSelection };
@@ -1,8 +0,0 @@
1
- import { toggleStyles } from "@oscarpalmer/toretto/style";
2
- //#region src/helpers/style.helper.ts
3
- const preventSelection = toggleStyles(document.body, {
4
- userSelect: "none",
5
- webkitUserSelect: "none"
6
- });
7
- //#endregion
8
- export { preventSelection };
package/dist/index.d.mts DELETED
@@ -1,7 +0,0 @@
1
- import { t as TabelaOptions } from "./tabela.options-RkZvfptB.mjs";
2
- import { Tabela } from "./tabela.mjs";
3
-
4
- //#region src/index.d.ts
5
- declare function tabela(element: HTMLElement, options: TabelaOptions): Tabela;
6
- //#endregion
7
- export { type Tabela, type TabelaOptions, tabela };
@@ -1,2 +0,0 @@
1
- import { O as ColumnManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { ColumnManager };
@@ -1,2 +0,0 @@
1
- import { w as DataManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { DataManager };
@@ -1,222 +0,0 @@
1
- import { GroupComponent, updateGroup } from "../components/group.component.mjs";
2
- import { sortWithGroups } from "./sort.manager.mjs";
3
- import { chunk, select, sort } from "@oscarpalmer/atoms/array";
4
- import { toMap } from "@oscarpalmer/atoms/array/to-map";
5
- import { toRecord } from "@oscarpalmer/atoms/array/to-record";
6
- import { isPlainObject } from "@oscarpalmer/atoms/is";
7
- import { delay } from "@oscarpalmer/atoms/promise/delay";
8
- import { getValue } from "@oscarpalmer/atoms/value/handle";
9
- //#region src/managers/data.manager.ts
10
- var DataManager = class {
11
- handlers = Object.freeze({
12
- add: (data) => void this.add(data, true),
13
- clear: () => void this.clear(),
14
- get: (active) => this.get(active),
15
- remove: (items) => void this.remove(items, true),
16
- synchronize: (data, remove) => void this.synchronize(data, remove),
17
- update: (data) => void this.update(data)
18
- });
19
- state;
20
- get items() {
21
- return this.state.items.active ?? this.state.items.original;
22
- }
23
- get size() {
24
- return this.items.length;
25
- }
26
- constructor(state) {
27
- this.state = {
28
- ...state,
29
- items: { original: [] },
30
- values: {
31
- array: [],
32
- mapped: /* @__PURE__ */ new Map()
33
- }
34
- };
35
- }
36
- async add(data, render) {
37
- const { state } = this;
38
- const groups = [];
39
- const updates = [];
40
- let groupColumn;
41
- let { length } = data;
42
- for (let index = 0; index < length; index += 1) {
43
- const item = data[index];
44
- const key = getValue(item, state.key);
45
- if (state.values.mapped.has(key)) {
46
- updates.push(item);
47
- continue;
48
- }
49
- state.values.array.push(item);
50
- state.values.mapped.set(key, item);
51
- if (!state.managers.group.enabled) continue;
52
- const groupValue = getValue(item, state.managers.group.field);
53
- let group = state.managers.group.get(groupValue);
54
- if (group == null) {
55
- groupColumn ??= state.managers.column.get(state.managers.group.field);
56
- group = new GroupComponent(`${groupColumn?.options.title ?? state.managers.group.field}: ${groupValue}`, groupValue);
57
- state.values.array.push(group);
58
- state.managers.group.add(group);
59
- }
60
- if (!group.expanded) state.managers.group.collapsed.add(key);
61
- group.total += 1;
62
- groups.push(group);
63
- }
64
- length = groups.length;
65
- for (let index = 0; index < length; index += 1) updateGroup(state, groups[index]);
66
- if (updates.length > 0) this.update(updates);
67
- else if (render) this.render();
68
- }
69
- clear() {
70
- if (this.state.values.array.length > 0) this.removeItems([], true, true);
71
- }
72
- destroy() {
73
- const { state } = this;
74
- state.values.mapped.clear();
75
- state.items.active = void 0;
76
- state.items.original.length = 0;
77
- state.values.array.length = 0;
78
- this.handlers = void 0;
79
- this.state = void 0;
80
- }
81
- get(active) {
82
- const { state } = this;
83
- return active ?? false ? select(state.items.active ?? [], (key) => !(key instanceof GroupComponent), (key) => state.values.mapped.get(key)) : state.values.array.filter((item) => !(item instanceof GroupComponent));
84
- }
85
- getIndex(item) {
86
- if (item instanceof GroupComponent) return this.items.indexOf(item);
87
- return this.items.findIndex((value) => value instanceof GroupComponent ? value.key === item : value === item);
88
- }
89
- async remove(items, render) {
90
- const { state } = this;
91
- const keys = items.map((value) => isPlainObject(value) ? getValue(value, state.key) : value);
92
- const { length } = keys;
93
- if (length > 0) return this.removeItems(keys, false, render === true);
94
- }
95
- async removeItems(items, clear, render) {
96
- const { state } = this;
97
- if (clear) {
98
- state.items.active = void 0;
99
- state.items.original = [];
100
- state.values.array = [];
101
- state.values.mapped.clear();
102
- state.managers.row.clear();
103
- if (state.managers.group.enabled) state.managers.group.clear();
104
- return this.render();
105
- }
106
- const groups = [];
107
- const chunked = chunk(items);
108
- const chunkedLength = chunked.length;
109
- for (let chunkedIndex = 0; chunkedIndex < chunkedLength; chunkedIndex += 1) {
110
- const chunk = chunked[chunkedIndex];
111
- const chunkLength = chunk.length;
112
- for (let itemIndex = 0; itemIndex < chunkLength; itemIndex += 1) {
113
- const item = chunk[itemIndex];
114
- const dataIndex = state.items.original.indexOf(item);
115
- let dataValue;
116
- [dataValue] = state.values.array.splice(dataIndex, 1);
117
- state.items.original.splice(dataIndex, 1);
118
- state.managers.row.remove(item);
119
- state.values.mapped.delete(item);
120
- if (!state.managers.group.enabled || item instanceof GroupComponent) continue;
121
- state.managers.group.collapsed.delete(item);
122
- const groupKey = getValue(dataValue, state.managers.group.field);
123
- const group = state.managers.group.get(groupKey);
124
- if (group == null) continue;
125
- group.total -= 1;
126
- if (group.total > 0) {
127
- groups.push(group);
128
- continue;
129
- }
130
- let groupIndex = groups.indexOf(group);
131
- if (groupIndex > -1) groups.splice(groupIndex, 1);
132
- groupIndex = state.values.array.indexOf(group);
133
- if (groupIndex > -1) {
134
- state.items.original.splice(groupIndex, 1);
135
- state.values.array.splice(groupIndex, 1);
136
- }
137
- state.managers.group.remove(group);
138
- if (items.length >= 1e4) await delay(25);
139
- }
140
- }
141
- const { length } = groups;
142
- for (let index = 0; index < length; index += 1) updateGroup(state, groups[index]);
143
- if (render) return this.render();
144
- }
145
- render() {
146
- const { state } = this;
147
- if (state.managers.group.enabled) sortWithGroups(state, state.values.array, [{
148
- direction: "ascending",
149
- key: state.key
150
- }]);
151
- else sort(state.values.array, [{
152
- direction: "ascending",
153
- key: state.key
154
- }]);
155
- state.items.original = state.values.array.map((item) => item instanceof GroupComponent ? item : getValue(item, state.key));
156
- state.values.mapped = toMap(state.values.array.filter((item) => !(item instanceof GroupComponent)), (item) => getValue(item, state.key));
157
- if (Object.keys(state.managers.filter.items).length > 0) state.managers.filter.filter();
158
- else if (state.managers.sort.items.length > 0) state.managers.sort.sort();
159
- else state.managers.render.update(true, true);
160
- }
161
- set(data) {
162
- const { state } = this;
163
- const array = data.slice();
164
- if (state.managers.group.enabled) {
165
- const column = state.managers.column.get(state.managers.group.field);
166
- const grouped = toRecord.arrays(data, state.managers.group.field);
167
- const entries = Object.entries(grouped);
168
- const { length } = entries;
169
- const groups = [];
170
- for (let index = 0; index < length; index += 1) {
171
- const [value, items] = entries[index];
172
- const group = new GroupComponent(`${column?.options.title ?? state.managers.group.field}: ${value}`, value);
173
- group.total = items.length;
174
- groups.push(group);
175
- array.push(group);
176
- }
177
- state.managers.group.set(groups);
178
- }
179
- state.values.array = array;
180
- this.render();
181
- }
182
- async synchronize(data, remove) {
183
- const { state } = this;
184
- const add = [];
185
- const updated = [];
186
- const keys = /* @__PURE__ */ new Set([]);
187
- const { length } = data;
188
- for (let index = 0; index < length; index += 1) {
189
- const object = data[index];
190
- const key = getValue(object, state.key);
191
- if (state.values.mapped.has(key)) updated.push(object);
192
- else add.push(object);
193
- keys.add(key);
194
- }
195
- if (keys.size === 0) return;
196
- if (remove ?? false) {
197
- const toRemove = state.items.original.filter((key) => !(key instanceof GroupComponent) && !keys.has(key));
198
- if (toRemove.length > 0) await this.remove(toRemove, false);
199
- }
200
- await this.update(updated);
201
- if (add.length > 0) await this.add(add, false);
202
- if (add.length > 0 || (remove ?? false)) this.render();
203
- }
204
- async update(data) {
205
- const { state } = this;
206
- const { length } = data;
207
- for (let index = 0; index < length; index += 1) {
208
- const object = data[index];
209
- const key = getValue(object, state.key);
210
- const value = state.values.mapped.get(key);
211
- if (value != null) {
212
- state.values.mapped.set(key, {
213
- ...value,
214
- ...object
215
- });
216
- state.managers.row.update(key);
217
- }
218
- }
219
- }
220
- };
221
- //#endregion
222
- export { DataManager };
@@ -1,2 +0,0 @@
1
- import { C as EventManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { EventManager };
@@ -1,2 +0,0 @@
1
- import { S as FilterManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { FilterManager };
@@ -1,2 +0,0 @@
1
- import { x as GroupManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { GroupManager };
@@ -1,73 +0,0 @@
1
- import { removeGroup } from "../components/group.component.mjs";
2
- import { sort } from "@oscarpalmer/atoms/array";
3
- import { toRecord } from "@oscarpalmer/atoms/array/to-record";
4
- import { isNullableOrWhitespace } from "@oscarpalmer/atoms/is";
5
- import { getString } from "@oscarpalmer/atoms/string";
6
- //#region src/managers/group.manager.ts
7
- var GroupManager = class {
8
- collapsed = /* @__PURE__ */ new Set();
9
- enabled = false;
10
- field;
11
- handlers = Object.freeze({ set: (group) => {
12
- if (group === this.field) return;
13
- this.enabled = !isNullableOrWhitespace(group);
14
- this.field = group ?? "";
15
- this.state.managers.data.set(this.state.managers.data.get());
16
- } });
17
- items = [];
18
- order = {};
19
- constructor(state) {
20
- this.state = state;
21
- if (isNullableOrWhitespace(state.options.grouping)) return;
22
- this.enabled = true;
23
- this.field = state.options.grouping;
24
- }
25
- add(group) {
26
- this.set([...this.items, group]);
27
- }
28
- clear() {
29
- const groups = this.items.splice(0);
30
- const { length } = groups;
31
- for (let index = 0; index < length; index += 1) this.remove(groups[index]);
32
- }
33
- destroy() {
34
- const groups = this.items.splice(0);
35
- const { length } = groups;
36
- for (let index = 0; index < length; index += 1) removeGroup(groups[index]);
37
- this.collapsed.clear();
38
- this.handlers = void 0;
39
- this.state = void 0;
40
- }
41
- get(value) {
42
- const asString = getString(value);
43
- return this.items.find((item) => item.value.stringified === asString);
44
- }
45
- handle(button) {
46
- const value = button.dataset.key?.replace(`tabela_${this.state.id}_group:`, "");
47
- const group = this.get(value);
48
- if (group == null) return;
49
- const { collapsed, items, state } = this;
50
- group.expanded = !group.expanded;
51
- const index = items.indexOf(group);
52
- let first = state.managers.data.state.items.original.indexOf(items[index]) + 1;
53
- const last = items[index + 1] == null ? state.managers.data.state.items.original.length - 1 : state.managers.data.state.items.original.indexOf(items[index + 1]) - 1;
54
- for (; first <= last; first += 1) {
55
- const key = state.managers.data.state.items.original[first];
56
- if (group.expanded) collapsed.delete(key);
57
- else collapsed.add(key);
58
- }
59
- if (Object.keys(state.managers.filter.items).length > 0) state.managers.filter.filter();
60
- else if (state.managers.sort.items.length > 0) state.managers.sort.sort();
61
- else state.managers.render.update(true, true);
62
- }
63
- remove(group) {
64
- removeGroup(group);
65
- this.set(this.items.filter((item) => item !== group));
66
- }
67
- set(items) {
68
- this.items = sort(items, (item) => item.label);
69
- this.order = toRecord(items, (group) => group.value.stringified, (_, index) => index);
70
- }
71
- };
72
- //#endregion
73
- export { GroupManager };
@@ -1,2 +0,0 @@
1
- import { b as NavigationManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { NavigationManager };
@@ -1,2 +0,0 @@
1
- import { g as RenderManager } from "../group.component-Cq1YYbfJ.mjs";
2
- export { RenderManager };