@tcn/ui-table 1.0.4 → 2.0.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 (89) hide show
  1. package/dist/__stories__/aip_table.stories.js +3 -3
  2. package/dist/__stories__/aip_table.stories.js.map +1 -1
  3. package/dist/__stories__/demo.stories.d.ts +6 -0
  4. package/dist/__stories__/demo.stories.js +73 -0
  5. package/dist/__stories__/demo.stories.js.map +1 -0
  6. package/dist/__stories__/sample_data.d.ts +16 -0
  7. package/dist/__stories__/sample_data.js +231 -1
  8. package/dist/__stories__/sample_data.js.map +1 -1
  9. package/dist/__stories__/table.stories.d.ts +1 -0
  10. package/dist/__stories__/table.stories.js +44 -7
  11. package/dist/__stories__/table.stories.js.map +1 -1
  12. package/dist/_components/cells/header_cell.js +8 -9
  13. package/dist/_components/cells/header_cell.js.map +1 -1
  14. package/dist/_components/global_search.d.ts +8 -0
  15. package/dist/_components/global_search.js +10 -0
  16. package/dist/_components/global_search.js.map +1 -0
  17. package/dist/_components/global_search_presenter.d.ts +11 -0
  18. package/dist/_components/global_search_presenter.js +19 -0
  19. package/dist/_components/global_search_presenter.js.map +1 -0
  20. package/dist/_components/table/table.d.ts +3 -6
  21. package/dist/_components/table/table.js +5 -5
  22. package/dist/_components/table/table.js.map +1 -1
  23. package/dist/_components/table/table.module.css +4 -0
  24. package/dist/_components/table_filter_panel/field_filters/date_field_filter.d.ts +5 -0
  25. package/dist/_components/table_filter_panel/field_filters/date_field_filter.js +34 -0
  26. package/dist/_components/table_filter_panel/field_filters/date_field_filter.js.map +1 -0
  27. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.d.ts +22 -0
  28. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.js +93 -0
  29. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.js.map +1 -0
  30. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.test.d.ts +1 -0
  31. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.test.js +434 -0
  32. package/dist/_components/table_filter_panel/field_filters/date_field_filter_presenter.test.js.map +1 -0
  33. package/dist/_components/table_filter_panel/field_filters/field_filter_props.d.ts +4 -0
  34. package/dist/_components/table_filter_panel/field_filters/field_filter_props.js +2 -0
  35. package/dist/_components/table_filter_panel/field_filters/field_filter_props.js.map +1 -0
  36. package/dist/_components/table_filter_panel/field_filters/field_filter_strategy.d.ts +12 -0
  37. package/dist/_components/table_filter_panel/field_filters/field_filter_strategy.js +2 -0
  38. package/dist/_components/table_filter_panel/field_filters/field_filter_strategy.js.map +1 -0
  39. package/dist/_components/table_filter_panel/field_filters/number_field_filter.d.ts +3 -0
  40. package/dist/_components/table_filter_panel/field_filters/number_field_filter.js +24 -0
  41. package/dist/_components/table_filter_panel/field_filters/number_field_filter.js.map +1 -0
  42. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.d.ts +23 -0
  43. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.js +60 -0
  44. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.js.map +1 -0
  45. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.test.d.ts +1 -0
  46. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.test.js +347 -0
  47. package/dist/_components/table_filter_panel/field_filters/number_field_filter_presenter.test.js.map +1 -0
  48. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter.d.ts +5 -0
  49. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter.js +32 -0
  50. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter.js.map +1 -0
  51. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.d.ts +22 -0
  52. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.js +93 -0
  53. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.js.map +1 -0
  54. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.d.ts +1 -0
  55. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.js +452 -0
  56. package/dist/_components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.js.map +1 -0
  57. package/dist/_components/table_filter_panel/field_filters/string_field_filter.d.ts +3 -0
  58. package/dist/_components/table_filter_panel/field_filters/string_field_filter.js +29 -0
  59. package/dist/_components/table_filter_panel/field_filters/string_field_filter.js.map +1 -0
  60. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.d.ts +24 -0
  61. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.js +61 -0
  62. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.js.map +1 -0
  63. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.test.d.ts +1 -0
  64. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.test.js +232 -0
  65. package/dist/_components/table_filter_panel/field_filters/string_field_filter_presenter.test.js.map +1 -0
  66. package/dist/_components/table_filter_panel/field_filters/use_field_filter_strategy.d.ts +4 -0
  67. package/dist/_components/table_filter_panel/field_filters/use_field_filter_strategy.js +20 -0
  68. package/dist/_components/table_filter_panel/field_filters/use_field_filter_strategy.js.map +1 -0
  69. package/dist/_components/table_filter_panel/table_filter_panel.d.ts +10 -0
  70. package/dist/_components/table_filter_panel/table_filter_panel.js +12 -0
  71. package/dist/_components/table_filter_panel/table_filter_panel.js.map +1 -0
  72. package/dist/_components/table_filter_panel/table_filter_panel.stories.d.ts +6 -0
  73. package/dist/_components/table_filter_panel/table_filter_panel.stories.js +25 -0
  74. package/dist/_components/table_filter_panel/table_filter_panel.stories.js.map +1 -0
  75. package/dist/_components/table_filter_panel/table_filter_panel_presenter.d.ts +15 -0
  76. package/dist/_components/table_filter_panel/table_filter_panel_presenter.js +63 -0
  77. package/dist/_components/table_filter_panel/table_filter_panel_presenter.js.map +1 -0
  78. package/dist/_components/table_filter_panel/types.d.ts +2 -0
  79. package/dist/_components/table_filter_panel/types.js +2 -0
  80. package/dist/_components/table_filter_panel/types.js.map +1 -0
  81. package/dist/_components/table_pager.js +7 -3
  82. package/dist/_components/table_pager.js.map +1 -1
  83. package/dist/index.d.ts +9 -1
  84. package/dist/index.js +7 -1
  85. package/dist/index.js.map +1 -1
  86. package/package.json +11 -8
  87. package/dist/_components/table_search.d.ts +0 -8
  88. package/dist/_components/table_search.js +0 -8
  89. package/dist/_components/table_search.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { Signal } from '@tcn/state';
2
+ export class DateFieldFilterPresenter {
3
+ _fieldName;
4
+ _fieldFilterRegistry = null;
5
+ _startDate = new Signal(null);
6
+ _endDate = new Signal(null);
7
+ _onChangeHandlers = new Set();
8
+ _broadcasts = {
9
+ startDate: this._startDate.broadcast,
10
+ endDate: this._endDate.broadcast,
11
+ };
12
+ constructor(fieldName) {
13
+ this._fieldName = fieldName;
14
+ }
15
+ get broadcasts() {
16
+ return this._broadcasts;
17
+ }
18
+ getFilterString() {
19
+ const startDate = this._startDate.get();
20
+ const endDate = this._endDate.get();
21
+ if (startDate && endDate) {
22
+ return `(${this._fieldName} >= '${startDate.toISOString()}' AND ${this._fieldName} <= '${endDate.toISOString()}')`;
23
+ }
24
+ else if (startDate) {
25
+ return `${this._fieldName} >= '${startDate.toISOString()}'`;
26
+ }
27
+ else if (endDate) {
28
+ return `${this._fieldName} <= '${endDate.toISOString()}'`;
29
+ }
30
+ return '';
31
+ }
32
+ onChange(handler) {
33
+ this._onChangeHandlers.add(handler);
34
+ return () => {
35
+ this._onChangeHandlers.delete(handler);
36
+ };
37
+ }
38
+ setStartDate(startDate) {
39
+ this._startDate.set(startDate);
40
+ this._onChangeHandlers.forEach(handler => handler());
41
+ }
42
+ setEndDate(endDate) {
43
+ this._endDate.set(endDate);
44
+ this._onChangeHandlers.forEach(handler => handler());
45
+ }
46
+ setFieldRegistry(fieldFilterRegistry) {
47
+ this._fieldFilterRegistry = fieldFilterRegistry;
48
+ fieldFilterRegistry.registerFieldFilter(this._fieldName, this);
49
+ }
50
+ setFilterState(filterAst) {
51
+ const fieldNodes = filterAst.findAll(n => n.name === 'plain-field' && n.value === this._fieldName);
52
+ if (fieldNodes.length === 0) {
53
+ return;
54
+ }
55
+ if (fieldNodes.length === 1) {
56
+ const operatorNode = fieldNodes[0].parent?.children[1];
57
+ const valueNode = fieldNodes[0].parent?.children[2];
58
+ if (operatorNode?.value === '>=' && valueNode != null) {
59
+ this.setStartDate(new Date(valueNode?.value.slice(1, -1)));
60
+ }
61
+ else if (operatorNode?.value === '<=' && valueNode != null) {
62
+ this.setEndDate(new Date(valueNode?.value.slice(1, -1)));
63
+ }
64
+ return;
65
+ }
66
+ if (fieldNodes.length === 2) {
67
+ const operatorOneNode = fieldNodes[0].parent?.children[1];
68
+ const operatorTwoNode = fieldNodes[1].parent?.children[1];
69
+ const valueOneNode = fieldNodes[0].parent?.children[2];
70
+ const valueTwoNode = fieldNodes[1].parent?.children[2];
71
+ if (operatorOneNode?.value === '>=' &&
72
+ operatorTwoNode?.value === '<=' &&
73
+ valueOneNode != null &&
74
+ valueTwoNode != null) {
75
+ this.setStartDate(new Date(valueOneNode?.value.slice(1, -1)));
76
+ this.setEndDate(new Date(valueTwoNode?.value.slice(1, -1)));
77
+ }
78
+ else if (operatorOneNode?.value === '<=' &&
79
+ operatorTwoNode?.value === '>=' &&
80
+ valueOneNode != null &&
81
+ valueTwoNode != null) {
82
+ this.setEndDate(new Date(valueOneNode?.value.slice(1, -1)));
83
+ this.setStartDate(new Date(valueTwoNode?.value.slice(1, -1)));
84
+ }
85
+ }
86
+ }
87
+ dispose() {
88
+ this._fieldFilterRegistry?.unregisterFieldFilter(this._fieldName);
89
+ this._fieldFilterRegistry = null;
90
+ this._onChangeHandlers.clear();
91
+ }
92
+ }
93
+ //# sourceMappingURL=date_field_filter_presenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date_field_filter_presenter.js","sourceRoot":"","sources":["../../../../src/_components/table_filter_panel/field_filters/date_field_filter_presenter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,434 @@
1
+ import { DateFieldFilterPresenter } from "./date_field_filter_presenter.js";
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ describe('DateFieldFilterPresenter', () => {
4
+ let presenter;
5
+ let mockFieldRegistry;
6
+ let testStartDate;
7
+ let testEndDate;
8
+ beforeEach(() => {
9
+ presenter = new DateFieldFilterPresenter('test_field');
10
+ mockFieldRegistry = {
11
+ registerFieldFilter: vi.fn(),
12
+ unregisterFieldFilter: vi.fn(),
13
+ };
14
+ // Create fixed test dates for consistent testing
15
+ testStartDate = new Date('2023-01-01T00:00:00.000Z');
16
+ testEndDate = new Date('2023-12-31T23:59:59.999Z');
17
+ });
18
+ describe('constructor', () => {
19
+ it('should initialize with the correct field name', () => {
20
+ const presenter = new DateFieldFilterPresenter('custom_field');
21
+ expect(presenter.getFilterString()).toBe('');
22
+ });
23
+ it('should initialize with default values', () => {
24
+ expect(presenter.getFilterString()).toBe('');
25
+ });
26
+ });
27
+ describe('setStartDate', () => {
28
+ it('should set the start date when setStartDate is called with a Date', () => {
29
+ presenter.setStartDate(testStartDate);
30
+ expect(presenter.getFilterString()).toBe(`test_field >= '${testStartDate.toISOString()}'`);
31
+ });
32
+ it('should set the start date when setStartDate is called with null', () => {
33
+ presenter.setStartDate(testStartDate);
34
+ presenter.setStartDate(null);
35
+ expect(presenter.getFilterString()).toBe('');
36
+ });
37
+ it('should handle epoch date', () => {
38
+ const epochDate = new Date(0);
39
+ presenter.setStartDate(epochDate);
40
+ expect(presenter.getFilterString()).toBe(`test_field >= '${epochDate.toISOString()}'`);
41
+ });
42
+ it('should handle future date', () => {
43
+ const futureDate = new Date('2030-01-01T00:00:00.000Z');
44
+ presenter.setStartDate(futureDate);
45
+ expect(presenter.getFilterString()).toBe(`test_field >= '${futureDate.toISOString()}'`);
46
+ });
47
+ it('should handle past date', () => {
48
+ const pastDate = new Date('1990-01-01T00:00:00.000Z');
49
+ presenter.setStartDate(pastDate);
50
+ expect(presenter.getFilterString()).toBe(`test_field >= '${pastDate.toISOString()}'`);
51
+ });
52
+ it('should trigger onChange handlers when start date is set', () => {
53
+ const onChangeHandler = vi.fn();
54
+ presenter.onChange(onChangeHandler);
55
+ presenter.setStartDate(testStartDate);
56
+ expect(onChangeHandler).toHaveBeenCalledTimes(1);
57
+ });
58
+ });
59
+ describe('setEndDate', () => {
60
+ it('should set the end date when setEndDate is called with a Date', () => {
61
+ presenter.setEndDate(testEndDate);
62
+ expect(presenter.getFilterString()).toBe(`test_field <= '${testEndDate.toISOString()}'`);
63
+ });
64
+ it('should set the end date when setEndDate is called with null', () => {
65
+ presenter.setEndDate(testEndDate);
66
+ presenter.setEndDate(null);
67
+ expect(presenter.getFilterString()).toBe('');
68
+ });
69
+ it('should handle epoch date', () => {
70
+ const epochDate = new Date(0);
71
+ presenter.setEndDate(epochDate);
72
+ expect(presenter.getFilterString()).toBe(`test_field <= '${epochDate.toISOString()}'`);
73
+ });
74
+ it('should handle future date', () => {
75
+ const futureDate = new Date('2030-01-01T00:00:00.000Z');
76
+ presenter.setEndDate(futureDate);
77
+ expect(presenter.getFilterString()).toBe(`test_field <= '${futureDate.toISOString()}'`);
78
+ });
79
+ it('should handle past date', () => {
80
+ const pastDate = new Date('1990-01-01T00:00:00.000Z');
81
+ presenter.setEndDate(pastDate);
82
+ expect(presenter.getFilterString()).toBe(`test_field <= '${pastDate.toISOString()}'`);
83
+ });
84
+ it('should trigger onChange handlers when end date is set', () => {
85
+ const onChangeHandler = vi.fn();
86
+ presenter.onChange(onChangeHandler);
87
+ presenter.setEndDate(testEndDate);
88
+ expect(onChangeHandler).toHaveBeenCalledTimes(1);
89
+ });
90
+ });
91
+ describe('getFilterString', () => {
92
+ it('should return empty string when both dates are null', () => {
93
+ expect(presenter.getFilterString()).toBe('');
94
+ });
95
+ it('should return start date filter when only start date is set', () => {
96
+ presenter.setStartDate(testStartDate);
97
+ expect(presenter.getFilterString()).toBe(`test_field >= '${testStartDate.toISOString()}'`);
98
+ });
99
+ it('should return end date filter when only end date is set', () => {
100
+ presenter.setEndDate(testEndDate);
101
+ expect(presenter.getFilterString()).toBe(`test_field <= '${testEndDate.toISOString()}'`);
102
+ });
103
+ it('should return range filter when both dates are set', () => {
104
+ presenter.setStartDate(testStartDate);
105
+ presenter.setEndDate(testEndDate);
106
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${testStartDate.toISOString()}' AND test_field <= '${testEndDate.toISOString()}')`);
107
+ });
108
+ it('should handle same start and end date', () => {
109
+ const sameDate = new Date('2023-06-15T12:00:00.000Z');
110
+ presenter.setStartDate(sameDate);
111
+ presenter.setEndDate(sameDate);
112
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${sameDate.toISOString()}' AND test_field <= '${sameDate.toISOString()}')`);
113
+ });
114
+ it('should handle dates with milliseconds', () => {
115
+ const dateWithMs = new Date('2023-06-15T12:30:45.123Z');
116
+ presenter.setStartDate(dateWithMs);
117
+ presenter.setEndDate(dateWithMs);
118
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${dateWithMs.toISOString()}' AND test_field <= '${dateWithMs.toISOString()}')`);
119
+ });
120
+ it('should handle dates with different timezones (converted to UTC)', () => {
121
+ const localDate = new Date('2023-06-15T12:00:00');
122
+ presenter.setStartDate(localDate);
123
+ presenter.setEndDate(localDate);
124
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${localDate.toISOString()}' AND test_field <= '${localDate.toISOString()}')`);
125
+ });
126
+ });
127
+ describe('onChange', () => {
128
+ it('should register onChange handler and return unsubscribe function', () => {
129
+ const onChangeHandler = vi.fn();
130
+ const unsubscribe = presenter.onChange(onChangeHandler);
131
+ presenter.setStartDate(testStartDate);
132
+ expect(onChangeHandler).toHaveBeenCalledTimes(1);
133
+ unsubscribe();
134
+ presenter.setEndDate(testEndDate);
135
+ expect(onChangeHandler).toHaveBeenCalledTimes(1); // Should not be called again
136
+ });
137
+ it('should handle multiple onChange handlers', () => {
138
+ const handler1 = vi.fn();
139
+ const handler2 = vi.fn();
140
+ presenter.onChange(handler1);
141
+ presenter.onChange(handler2);
142
+ presenter.setStartDate(testStartDate);
143
+ expect(handler1).toHaveBeenCalledTimes(1);
144
+ expect(handler2).toHaveBeenCalledTimes(1);
145
+ });
146
+ it('should handle removing onChange handlers', () => {
147
+ const handler1 = vi.fn();
148
+ const handler2 = vi.fn();
149
+ const unsubscribe1 = presenter.onChange(handler1);
150
+ presenter.onChange(handler2);
151
+ unsubscribe1();
152
+ presenter.setEndDate(testEndDate);
153
+ expect(handler1).not.toHaveBeenCalled();
154
+ expect(handler2).toHaveBeenCalledTimes(1);
155
+ });
156
+ it('should trigger handlers for both start and end date changes', () => {
157
+ const onChangeHandler = vi.fn();
158
+ presenter.onChange(onChangeHandler);
159
+ presenter.setStartDate(testStartDate);
160
+ presenter.setEndDate(testEndDate);
161
+ expect(onChangeHandler).toHaveBeenCalledTimes(2);
162
+ });
163
+ });
164
+ describe('setFieldRegistry', () => {
165
+ it('should register the field filter with the registry', () => {
166
+ presenter.setFieldRegistry(mockFieldRegistry);
167
+ expect(mockFieldRegistry.registerFieldFilter).toHaveBeenCalledWith('test_field', presenter);
168
+ });
169
+ it('should store the field registry reference', () => {
170
+ presenter.setFieldRegistry(mockFieldRegistry);
171
+ // Test that dispose can call unregisterFieldFilter
172
+ presenter.dispose();
173
+ expect(mockFieldRegistry.unregisterFieldFilter).toHaveBeenCalledWith('test_field');
174
+ });
175
+ });
176
+ describe('setFilterState', () => {
177
+ it('should parse single start date filter from AST', () => {
178
+ const mockAst = {
179
+ findAll: vi.fn().mockReturnValue([
180
+ {
181
+ name: 'plain-field',
182
+ value: 'test_field',
183
+ parent: {
184
+ name: 'infix-expression',
185
+ children: [
186
+ { name: 'plain-field', value: 'test_field' },
187
+ { name: 'operator', value: '>=' },
188
+ { name: 'string', value: '"2023-01-01T00:00:00.000Z"' },
189
+ ],
190
+ },
191
+ },
192
+ ]),
193
+ };
194
+ presenter.setFilterState(mockAst);
195
+ expect(presenter.getFilterString()).toBe(`test_field >= '${testStartDate.toISOString()}'`);
196
+ });
197
+ it('should parse single end date filter from AST', () => {
198
+ const mockAst = {
199
+ findAll: vi.fn().mockReturnValue([
200
+ {
201
+ name: 'plain-field',
202
+ value: 'test_field',
203
+ parent: {
204
+ name: 'infix-expression',
205
+ children: [
206
+ { name: 'plain-field', value: 'test_field' },
207
+ { name: 'operator', value: '<=' },
208
+ { name: 'string', value: '"2023-12-31T23:59:59.999Z"' },
209
+ ],
210
+ },
211
+ },
212
+ ]),
213
+ };
214
+ presenter.setFilterState(mockAst);
215
+ expect(presenter.getFilterString()).toBe(`test_field <= '${testEndDate.toISOString()}'`);
216
+ });
217
+ it('should parse range filter with start >= and end <= from AST', () => {
218
+ const mockAst = {
219
+ findAll: vi.fn().mockReturnValue([
220
+ {
221
+ name: 'plain-field',
222
+ value: 'test_field',
223
+ parent: {
224
+ name: 'infix-expression',
225
+ children: [
226
+ { name: 'plain-field', value: 'test_field' },
227
+ { name: 'operator', value: '>=' },
228
+ { name: 'string', value: '"2023-01-01T00:00:00.000Z"' },
229
+ ],
230
+ },
231
+ },
232
+ {
233
+ name: 'plain-field',
234
+ value: 'test_field',
235
+ parent: {
236
+ name: 'infix-expression',
237
+ children: [
238
+ { name: 'plain-field', value: 'test_field' },
239
+ { name: 'operator', value: '<=' },
240
+ { name: 'string', value: '"2023-12-31T23:59:59.999Z"' },
241
+ ],
242
+ },
243
+ },
244
+ ]),
245
+ };
246
+ presenter.setFilterState(mockAst);
247
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${testStartDate.toISOString()}' AND test_field <= '${testEndDate.toISOString()}')`);
248
+ });
249
+ it('should parse range filter with end <= and start >= from AST (reversed order)', () => {
250
+ const mockAst = {
251
+ findAll: vi.fn().mockReturnValue([
252
+ {
253
+ name: 'plain-field',
254
+ value: 'test_field',
255
+ parent: {
256
+ name: 'infix-expression',
257
+ children: [
258
+ { name: 'plain-field', value: 'test_field' },
259
+ { name: 'operator', value: '<=' },
260
+ { name: 'string', value: '"2023-12-31T23:59:59.999Z"' },
261
+ ],
262
+ },
263
+ },
264
+ {
265
+ name: 'plain-field',
266
+ value: 'test_field',
267
+ parent: {
268
+ name: 'infix-expression',
269
+ children: [
270
+ { name: 'plain-field', value: 'test_field' },
271
+ { name: 'operator', value: '>=' },
272
+ { name: 'string', value: '"2023-01-01T00:00:00.000Z"' },
273
+ ],
274
+ },
275
+ },
276
+ ]),
277
+ };
278
+ presenter.setFilterState(mockAst);
279
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${testStartDate.toISOString()}' AND test_field <= '${testEndDate.toISOString()}')`);
280
+ });
281
+ it('should handle case when field is not found in AST', () => {
282
+ const mockAst = {
283
+ findAll: vi.fn().mockReturnValue([]),
284
+ };
285
+ presenter.setStartDate(testStartDate);
286
+ presenter.setEndDate(testEndDate);
287
+ presenter.setFilterState(mockAst);
288
+ // Should not change existing state
289
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${testStartDate.toISOString()}' AND test_field <= '${testEndDate.toISOString()}')`);
290
+ });
291
+ it('should handle case when field node has no parent', () => {
292
+ const mockAst = {
293
+ findAll: vi.fn().mockReturnValue([
294
+ {
295
+ name: 'plain-field',
296
+ value: 'test_field',
297
+ parent: null,
298
+ },
299
+ ]),
300
+ };
301
+ presenter.setStartDate(testStartDate);
302
+ presenter.setEndDate(testEndDate);
303
+ presenter.setFilterState(mockAst);
304
+ // Should not change existing state
305
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${testStartDate.toISOString()}' AND test_field <= '${testEndDate.toISOString()}')`);
306
+ });
307
+ it('should parse dates with milliseconds from AST', () => {
308
+ const dateWithMs = new Date('2023-06-15T12:30:45.123Z');
309
+ const mockAst = {
310
+ findAll: vi.fn().mockReturnValue([
311
+ {
312
+ name: 'plain-field',
313
+ value: 'test_field',
314
+ parent: {
315
+ name: 'infix-expression',
316
+ children: [
317
+ { name: 'plain-field', value: 'test_field' },
318
+ { name: 'operator', value: '>=' },
319
+ { name: 'string', value: `"${dateWithMs.toISOString()}"` },
320
+ ],
321
+ },
322
+ },
323
+ {
324
+ name: 'plain-field',
325
+ value: 'test_field',
326
+ parent: {
327
+ name: 'infix-expression',
328
+ children: [
329
+ { name: 'plain-field', value: 'test_field' },
330
+ { name: 'operator', value: '<=' },
331
+ { name: 'string', value: `"${dateWithMs.toISOString()}"` },
332
+ ],
333
+ },
334
+ },
335
+ ]),
336
+ };
337
+ presenter.setFilterState(mockAst);
338
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${dateWithMs.toISOString()}' AND test_field <= '${dateWithMs.toISOString()}')`);
339
+ });
340
+ it('should ignore non-range operators', () => {
341
+ const mockAst = {
342
+ findAll: vi.fn().mockReturnValue([
343
+ {
344
+ name: 'plain-field',
345
+ value: 'test_field',
346
+ parent: {
347
+ name: 'infix-expression',
348
+ children: [
349
+ { name: 'plain-field', value: 'test_field' },
350
+ { name: 'operator', value: '=' },
351
+ { name: 'string', value: '"2023-06-15T12:00:00.000Z"' },
352
+ ],
353
+ },
354
+ },
355
+ ]),
356
+ };
357
+ presenter.setFilterState(mockAst);
358
+ // Should not change existing state
359
+ expect(presenter.getFilterString()).toBe('');
360
+ });
361
+ });
362
+ describe('dispose', () => {
363
+ it('should unregister field filter from registry when registry is set', () => {
364
+ presenter.setFieldRegistry(mockFieldRegistry);
365
+ presenter.dispose();
366
+ expect(mockFieldRegistry.unregisterFieldFilter).toHaveBeenCalledWith('test_field');
367
+ });
368
+ it('should not call unregisterFieldFilter when no registry is set', () => {
369
+ presenter.dispose();
370
+ expect(mockFieldRegistry.unregisterFieldFilter).not.toHaveBeenCalled();
371
+ });
372
+ it('should clear onChange handlers', () => {
373
+ const onChangeHandler = vi.fn();
374
+ presenter.onChange(onChangeHandler);
375
+ presenter.dispose();
376
+ presenter.setStartDate(testStartDate);
377
+ expect(onChangeHandler).not.toHaveBeenCalled();
378
+ });
379
+ it('should clear field registry reference', () => {
380
+ presenter.setFieldRegistry(mockFieldRegistry);
381
+ presenter.dispose();
382
+ // Should not call unregisterFieldFilter again
383
+ presenter.dispose();
384
+ expect(mockFieldRegistry.unregisterFieldFilter).toHaveBeenCalledTimes(1);
385
+ });
386
+ });
387
+ describe('edge cases and error handling', () => {
388
+ it('should handle rapid successive date changes', () => {
389
+ const onChangeHandler = vi.fn();
390
+ presenter.onChange(onChangeHandler);
391
+ const date1 = new Date('2023-01-01T00:00:00.000Z');
392
+ const date2 = new Date('2023-06-15T12:00:00.000Z');
393
+ const date3 = new Date('2023-12-31T23:59:59.999Z');
394
+ presenter.setStartDate(date1);
395
+ presenter.setEndDate(date3);
396
+ presenter.setStartDate(date2);
397
+ presenter.setEndDate(date3);
398
+ expect(onChangeHandler).toHaveBeenCalledTimes(4);
399
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${date2.toISOString()}' AND test_field <= '${date3.toISOString()}')`);
400
+ });
401
+ it('should handle very old dates', () => {
402
+ const oldDate = new Date('1900-01-01T00:00:00.000Z');
403
+ presenter.setStartDate(oldDate);
404
+ presenter.setEndDate(oldDate);
405
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${oldDate.toISOString()}' AND test_field <= '${oldDate.toISOString()}')`);
406
+ });
407
+ it('should handle very future dates', () => {
408
+ const futureDate = new Date('2100-01-01T00:00:00.000Z');
409
+ presenter.setStartDate(futureDate);
410
+ presenter.setEndDate(futureDate);
411
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${futureDate.toISOString()}' AND test_field <= '${futureDate.toISOString()}')`);
412
+ });
413
+ it('should handle dates with different timezones', () => {
414
+ const utcDate = new Date('2023-06-15T12:00:00.000Z');
415
+ const localDate = new Date('2023-06-15T12:00:00');
416
+ presenter.setStartDate(utcDate);
417
+ presenter.setEndDate(localDate);
418
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${utcDate.toISOString()}' AND test_field <= '${localDate.toISOString()}')`);
419
+ });
420
+ it('should handle leap year dates', () => {
421
+ const leapYearDate = new Date('2024-02-29T12:00:00.000Z');
422
+ presenter.setStartDate(leapYearDate);
423
+ presenter.setEndDate(leapYearDate);
424
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${leapYearDate.toISOString()}' AND test_field <= '${leapYearDate.toISOString()}')`);
425
+ });
426
+ it('should handle daylight saving time transitions', () => {
427
+ const dstDate = new Date('2023-03-12T02:00:00.000Z');
428
+ presenter.setStartDate(dstDate);
429
+ presenter.setEndDate(dstDate);
430
+ expect(presenter.getFilterString()).toBe(`(test_field >= '${dstDate.toISOString()}' AND test_field <= '${dstDate.toISOString()}')`);
431
+ });
432
+ });
433
+ });
434
+ //# sourceMappingURL=date_field_filter_presenter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date_field_filter_presenter.test.js","sourceRoot":"","sources":["../../../../src/_components/table_filter_panel/field_filters/date_field_filter_presenter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type FieldFilterProps = {
2
+ fieldName: string;
3
+ label: string;
4
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=field_filter_props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field_filter_props.js","sourceRoot":"","sources":["../../../../src/_components/table_filter_panel/field_filters/field_filter_props.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Node } from 'clarity-pattern-parser';
2
+ export interface FieldFilterRegistry {
3
+ registerFieldFilter: (fieldName: string, fieldFilter: FieldFilterStrategy) => void;
4
+ unregisterFieldFilter: (fieldName: string) => void;
5
+ }
6
+ export interface FieldFilterStrategy {
7
+ getFilterString: () => string;
8
+ onChange: (handler: () => void) => () => void;
9
+ setFieldRegistry: (fieldRegistry: FieldFilterRegistry) => void;
10
+ dispose: () => void;
11
+ setFilterState: (filterAst: Node) => void;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=field_filter_strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field_filter_strategy.js","sourceRoot":"","sources":["../../../../src/_components/table_filter_panel/field_filters/field_filter_strategy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { FieldFilterProps } from "./field_filter_props.js";
3
+ export declare function NumberFieldFilter({ fieldName, label }: FieldFilterProps): React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { CrossCircleIcon } from '@tcn/icons/cross_circle_icon';
2
+ import { useSignalValue } from '@tcn/state';
3
+ import { Button } from '@tcn/ui-actions';
4
+ import { Input, Option, Select } from '@tcn/ui-inputs';
5
+ import { Box, HStack, VStack } from '@tcn/ui-layout';
6
+ import { Title } from '@tcn/ui-typography';
7
+ import React from 'react';
8
+ import { NumberFieldFilterPresenter } from "./number_field_filter_presenter.js";
9
+ import { useFieldFilterStrategy } from "./use_field_filter_strategy.js";
10
+ const operators = ['>=', '>', '<=', '<', '=', '!='];
11
+ export function NumberFieldFilter({ fieldName, label }) {
12
+ const presenter = useFieldFilterStrategy(NumberFieldFilterPresenter, fieldName);
13
+ const value = useSignalValue(presenter.broadcasts.value);
14
+ const operator = useSignalValue(presenter.broadcasts.operator);
15
+ return (React.createElement(VStack, { gap: "4px" },
16
+ React.createElement(Box, { width: "flex" },
17
+ React.createElement(Title, { size: "md" }, label)),
18
+ React.createElement(HStack, { width: "flex" },
19
+ React.createElement(Select, { value: operator, onChange: value => presenter.setOperator(value), width: "50px" }, operators.map(operator => (React.createElement(Option, { key: operator, value: operator, label: operator }, operator)))),
20
+ React.createElement(Input, { type: "number", value: String(value ?? ''), onChange: value => presenter.setValue(Number(value)) }),
21
+ React.createElement(Button, { onClick: () => presenter.setValue(null), hierarchy: "tertiary", disabled: value == null },
22
+ React.createElement(CrossCircleIcon, null)))));
23
+ }
24
+ //# sourceMappingURL=number_field_filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number_field_filter.js","sourceRoot":"","sources":["../../../../src/_components/table_filter_panel/field_filters/number_field_filter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,2CAA0F;AAC/H,OAAO,EAAE,sBAAsB,EAAE,uCAAsF;AAGvH,MAAM,SAAS,GAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAE1E,MAAM,UAAU,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAoB;IACtE,MAAM,SAAS,GAAG,sBAAsB,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE/D,OAAO,CACL,oBAAC,MAAM,IAAC,GAAG,EAAC,KAAK;QACf,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;YACf,oBAAC,KAAK,IAAC,IAAI,EAAC,IAAI,IAAE,KAAK,CAAS,CAC5B;QACN,oBAAC,MAAM,IAAC,KAAK,EAAC,MAAM;YAClB,oBAAC,MAAM,IACL,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,KAA2B,CAAC,EACrE,KAAK,EAAC,MAAM,IAEX,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CACzB,oBAAC,MAAM,IAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,IACpD,QAAQ,CACF,CACV,CAAC,CACK;YACT,oBAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAC1B,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GACpD;YACF,oBAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EACvC,SAAS,EAAC,UAAU,EACpB,QAAQ,EAAE,KAAK,IAAI,IAAI;gBAEvB,oBAAC,eAAe,OAAG,CACZ,CACF,CACF,CACV,CAAC;AACJ,CAAC"}