@datarailsshared/dr_renderer 1.5.150 → 1.5.159
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/package.json +5 -2
- package/src/charts/dr_donut_chart.d.ts +79 -0
- package/src/charts/dr_donut_chart.js +7 -2
- package/src/charts/dr_gauge_categories_summary_chart.d.ts +136 -0
- package/src/charts/dr_gauge_chart.d.ts +18 -0
- package/src/charts/dr_gauge_chart.js +31 -0
- package/src/dr-renderer-helpers.d.ts +18 -0
- package/src/dr-renderer-helpers.js +2 -2
- package/src/dr_pivottable.d.ts +2 -0
- package/src/dr_pivottable.js +32 -75
- package/src/errors.js +1 -0
- package/src/{types/graph-table-renderer.d.ts → graph-table-renderer.d.ts} +57 -4
- package/src/graph-table-renderer.js +74 -2
- package/src/highcharts_renderer.d.ts +5 -0
- package/src/highcharts_renderer.js +1 -0
- package/src/index.d.ts +83 -86
- package/src/index.js +77 -3
- package/src/novix_renderer.d.ts +2 -0
- package/src/novix_renderer.js +7 -0
- package/src/options/builders.js +1 -0
- package/src/options/constants.js +1 -0
- package/src/options/elements.js +1 -0
- package/src/options/helpers.js +1 -0
- package/src/options/index.js +1 -0
- package/src/options/presets.js +1 -0
- package/src/pivot-table/freeze-panes/constants.d.ts +26 -0
- package/src/pivot-table/freeze-panes/constants.js +42 -0
- package/src/pivot-table/freeze-panes/freeze-panes.css +282 -0
- package/src/pivot-table/freeze-panes/index.d.ts +115 -0
- package/src/pivot-table/freeze-panes/index.js +143 -0
- package/src/pivot-table/freeze-panes/sticky-strategy.d.ts +38 -0
- package/src/pivot-table/freeze-panes/sticky-strategy.js +247 -0
- package/src/pivot-table/freeze-panes/transform-strategy.d.ts +61 -0
- package/src/pivot-table/freeze-panes/transform-strategy.js +131 -0
- package/src/pivot.css +2 -98
- package/src/published_items_renderer.d.ts +10 -0
- package/src/seriesPointStyles-helper.d.ts +2 -0
- package/src/smart_queries_helper.d.ts +12 -0
- package/src/value.formatter.d.ts +3 -0
- package/tests/dr-renderer-helpers.test.js +29 -0
- package/tests/pivot-table/freeze-panes/constants.test.js +92 -0
- package/tests/pivot-table/freeze-panes/index.test.js +193 -0
- package/tests/pivot-table/freeze-panes/sticky-strategy.test.js +542 -0
- package/tests/pivot-table/freeze-panes/transform-strategy.test.js +304 -0
- package/tsconfig.json +7 -10
- package/src/types/index.d.ts +0 -12
- package/tsconfig.tsbuildinfo +0 -1
- /package/src/{types/errors.d.ts → errors.d.ts} +0 -0
- /package/src/{types/options → options}/builders.d.ts +0 -0
- /package/src/{types/options → options}/constants.d.ts +0 -0
- /package/src/{types/options → options}/elements.d.ts +0 -0
- /package/src/{types/options → options}/helpers.d.ts +0 -0
- /package/src/{types/options → options}/index.d.ts +0 -0
- /package/src/{types/options → options}/presets.d.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const {
|
|
2
|
+
FREEZE_PANES_MODES,
|
|
3
|
+
TRANSFORM_CSS_CLASSES,
|
|
4
|
+
STICKY_CSS_CLASSES,
|
|
5
|
+
FREEZE_PANES_THRESHOLD,
|
|
6
|
+
FREEZE_PANES_THRESHOLD_CHECK_DEBOUNCE_MS,
|
|
7
|
+
} = require('../../../src/pivot-table/freeze-panes/constants');
|
|
8
|
+
|
|
9
|
+
describe('freeze-panes/constants', () => {
|
|
10
|
+
describe('FREEZE_PANES_MODES', () => {
|
|
11
|
+
it('should have TRANSFORM mode with value "transform"', () => {
|
|
12
|
+
expect(FREEZE_PANES_MODES.TRANSFORM).toBe('transform');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should have STICKY mode with value "sticky"', () => {
|
|
16
|
+
expect(FREEZE_PANES_MODES.STICKY).toBe('sticky');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('should only have two modes', () => {
|
|
20
|
+
expect(Object.keys(FREEZE_PANES_MODES)).toHaveLength(2);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe('TRANSFORM_CSS_CLASSES', () => {
|
|
25
|
+
it('should have AXIS class', () => {
|
|
26
|
+
expect(TRANSFORM_CSS_CLASSES.AXIS).toBe('axis-freeze-pane');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should have VERTICAL class', () => {
|
|
30
|
+
expect(TRANSFORM_CSS_CLASSES.VERTICAL).toBe('vertical-freeze-pane');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should have HORIZONTAL class', () => {
|
|
34
|
+
expect(TRANSFORM_CSS_CLASSES.HORIZONTAL).toBe('horizontal-freeze-pane');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should have exactly three classes', () => {
|
|
38
|
+
expect(Object.keys(TRANSFORM_CSS_CLASSES)).toHaveLength(3);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe('STICKY_CSS_CLASSES', () => {
|
|
43
|
+
it('should have CONTAINER class', () => {
|
|
44
|
+
expect(STICKY_CSS_CLASSES.CONTAINER).toBe('sticky-freeze-panes-container');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('should have AXIS class', () => {
|
|
48
|
+
expect(STICKY_CSS_CLASSES.AXIS).toBe('sticky-axis-freeze-pane');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should have VERTICAL class', () => {
|
|
52
|
+
expect(STICKY_CSS_CLASSES.VERTICAL).toBe('sticky-vertical-freeze-pane');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('should have HORIZONTAL class', () => {
|
|
56
|
+
expect(STICKY_CSS_CLASSES.HORIZONTAL).toBe('sticky-horizontal-freeze-pane');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should have ROWS_DISABLED class', () => {
|
|
60
|
+
expect(STICKY_CSS_CLASSES.ROWS_DISABLED).toBe('freeze-panes-rows-disabled');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('should have COLUMNS_DISABLED class', () => {
|
|
64
|
+
expect(STICKY_CSS_CLASSES.COLUMNS_DISABLED).toBe('freeze-panes-columns-disabled');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should have exactly six classes', () => {
|
|
68
|
+
expect(Object.keys(STICKY_CSS_CLASSES)).toHaveLength(6);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
describe('FREEZE_PANES_THRESHOLD', () => {
|
|
73
|
+
it('should be 0.7 (70%)', () => {
|
|
74
|
+
expect(FREEZE_PANES_THRESHOLD).toBe(0.7);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('should be a number between 0 and 1', () => {
|
|
78
|
+
expect(FREEZE_PANES_THRESHOLD).toBeGreaterThan(0);
|
|
79
|
+
expect(FREEZE_PANES_THRESHOLD).toBeLessThanOrEqual(1);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe('FREEZE_PANES_THRESHOLD_CHECK_DEBOUNCE_MS', () => {
|
|
84
|
+
it('should be 150 milliseconds', () => {
|
|
85
|
+
expect(FREEZE_PANES_THRESHOLD_CHECK_DEBOUNCE_MS).toBe(150);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('should be a positive number', () => {
|
|
89
|
+
expect(FREEZE_PANES_THRESHOLD_CHECK_DEBOUNCE_MS).toBeGreaterThan(0);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
const freezePanes = require('../../../src/pivot-table/freeze-panes/index');
|
|
2
|
+
const { FREEZE_PANES_MODES, STICKY_CSS_CLASSES, TRANSFORM_CSS_CLASSES } = require('../../../src/pivot-table/freeze-panes/constants');
|
|
3
|
+
|
|
4
|
+
describe('freeze-panes/index', () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
// Reset mode to default before each test
|
|
7
|
+
freezePanes.setMode(FREEZE_PANES_MODES.STICKY);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
describe('setMode / getMode', () => {
|
|
11
|
+
it('should return sticky as default mode', () => {
|
|
12
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.STICKY);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should set mode to transform', () => {
|
|
16
|
+
freezePanes.setMode(FREEZE_PANES_MODES.TRANSFORM);
|
|
17
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.TRANSFORM);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should set mode to sticky', () => {
|
|
21
|
+
freezePanes.setMode(FREEZE_PANES_MODES.TRANSFORM);
|
|
22
|
+
freezePanes.setMode(FREEZE_PANES_MODES.STICKY);
|
|
23
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.STICKY);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should not change mode for invalid value', () => {
|
|
27
|
+
freezePanes.setMode('invalid');
|
|
28
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.STICKY);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should not change mode for null', () => {
|
|
32
|
+
freezePanes.setMode(null);
|
|
33
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.STICKY);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should not change mode for undefined', () => {
|
|
37
|
+
freezePanes.setMode(undefined);
|
|
38
|
+
expect(freezePanes.getMode()).toBe(FREEZE_PANES_MODES.STICKY);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe('parseOptions', () => {
|
|
43
|
+
it('should parse enabled option when freeze_panes is true', () => {
|
|
44
|
+
const result = freezePanes.parseOptions({ freeze_panes: true });
|
|
45
|
+
expect(result.enabled).toBe(true);
|
|
46
|
+
expect(result.mode).toBe(FREEZE_PANES_MODES.STICKY);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should parse disabled option when freeze_panes is false', () => {
|
|
50
|
+
const result = freezePanes.parseOptions({ freeze_panes: false });
|
|
51
|
+
expect(result.enabled).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('should parse disabled option when freeze_panes is undefined', () => {
|
|
55
|
+
const result = freezePanes.parseOptions({});
|
|
56
|
+
expect(result.enabled).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should parse disabled option when freeze_panes is null', () => {
|
|
60
|
+
const result = freezePanes.parseOptions({ freeze_panes: null });
|
|
61
|
+
expect(result.enabled).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should use global mode configuration', () => {
|
|
65
|
+
freezePanes.setMode(FREEZE_PANES_MODES.TRANSFORM);
|
|
66
|
+
const result = freezePanes.parseOptions({ freeze_panes: true });
|
|
67
|
+
expect(result.mode).toBe(FREEZE_PANES_MODES.TRANSFORM);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should handle truthy values for freeze_panes', () => {
|
|
71
|
+
const result = freezePanes.parseOptions({ freeze_panes: 1 });
|
|
72
|
+
expect(result.enabled).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('should handle falsy values for freeze_panes', () => {
|
|
76
|
+
const result = freezePanes.parseOptions({ freeze_panes: 0 });
|
|
77
|
+
expect(result.enabled).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe('getClassStrings', () => {
|
|
82
|
+
describe('sticky mode', () => {
|
|
83
|
+
it('should return sticky class strings when enabled', () => {
|
|
84
|
+
const options = { enabled: true, mode: FREEZE_PANES_MODES.STICKY };
|
|
85
|
+
const result = freezePanes.getClassStrings(options);
|
|
86
|
+
|
|
87
|
+
expect(result.horizontal).toBe(' ' + STICKY_CSS_CLASSES.HORIZONTAL);
|
|
88
|
+
expect(result.vertical).toBe(' ' + STICKY_CSS_CLASSES.VERTICAL);
|
|
89
|
+
expect(result.axis).toBe(' ' + STICKY_CSS_CLASSES.AXIS);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should return empty strings when disabled', () => {
|
|
93
|
+
const options = { enabled: false, mode: FREEZE_PANES_MODES.STICKY };
|
|
94
|
+
const result = freezePanes.getClassStrings(options);
|
|
95
|
+
|
|
96
|
+
expect(result.horizontal).toBe('');
|
|
97
|
+
expect(result.vertical).toBe('');
|
|
98
|
+
expect(result.axis).toBe('');
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe('transform mode', () => {
|
|
103
|
+
it('should return transform class strings when enabled', () => {
|
|
104
|
+
const options = { enabled: true, mode: FREEZE_PANES_MODES.TRANSFORM };
|
|
105
|
+
const result = freezePanes.getClassStrings(options);
|
|
106
|
+
|
|
107
|
+
expect(result.horizontal).toBe(' ' + TRANSFORM_CSS_CLASSES.HORIZONTAL);
|
|
108
|
+
expect(result.vertical).toBe(' ' + TRANSFORM_CSS_CLASSES.VERTICAL);
|
|
109
|
+
expect(result.axis).toBe(' ' + TRANSFORM_CSS_CLASSES.AXIS);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('should return empty strings when disabled', () => {
|
|
113
|
+
const options = { enabled: false, mode: FREEZE_PANES_MODES.TRANSFORM };
|
|
114
|
+
const result = freezePanes.getClassStrings(options);
|
|
115
|
+
|
|
116
|
+
expect(result.horizontal).toBe('');
|
|
117
|
+
expect(result.vertical).toBe('');
|
|
118
|
+
expect(result.axis).toBe('');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe('initialize', () => {
|
|
124
|
+
let container;
|
|
125
|
+
|
|
126
|
+
beforeEach(() => {
|
|
127
|
+
container = document.createElement('div');
|
|
128
|
+
document.body.appendChild(container);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
afterEach(() => {
|
|
132
|
+
document.body.removeChild(container);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('should return undefined when not enabled', () => {
|
|
136
|
+
const options = { enabled: false, mode: FREEZE_PANES_MODES.STICKY };
|
|
137
|
+
const result = freezePanes.initialize(container, options, { rowAttrsLength: 2 });
|
|
138
|
+
expect(result).toBeUndefined();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('should return destroy function for sticky mode when enabled', () => {
|
|
142
|
+
const table = document.createElement('table');
|
|
143
|
+
table.className = 'pvtTable';
|
|
144
|
+
table.innerHTML = '<thead><tr><th>Header</th></tr></thead><tbody><tr><td>Cell</td></tr></tbody>';
|
|
145
|
+
container.appendChild(table);
|
|
146
|
+
|
|
147
|
+
// Mock ResizeObserver
|
|
148
|
+
const mockDisconnect = jest.fn();
|
|
149
|
+
global.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
150
|
+
observe: jest.fn(),
|
|
151
|
+
disconnect: mockDisconnect,
|
|
152
|
+
}));
|
|
153
|
+
|
|
154
|
+
const options = { enabled: true, mode: FREEZE_PANES_MODES.STICKY };
|
|
155
|
+
const result = freezePanes.initialize(container, options, { rowAttrsLength: 1 });
|
|
156
|
+
|
|
157
|
+
expect(result).toBeDefined();
|
|
158
|
+
expect(result.destroy).toBeInstanceOf(Function);
|
|
159
|
+
|
|
160
|
+
result.destroy();
|
|
161
|
+
expect(mockDisconnect).toHaveBeenCalled();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should return object with destroy function for transform mode when enabled', () => {
|
|
165
|
+
const table = document.createElement('table');
|
|
166
|
+
table.className = 'pvtTable';
|
|
167
|
+
container.appendChild(table);
|
|
168
|
+
|
|
169
|
+
const options = { enabled: true, mode: FREEZE_PANES_MODES.TRANSFORM };
|
|
170
|
+
const result = freezePanes.initialize(container, options, { rowAttrsLength: 1 });
|
|
171
|
+
|
|
172
|
+
expect(result).toBeDefined();
|
|
173
|
+
expect(result).toHaveProperty('destroy');
|
|
174
|
+
expect(typeof result.destroy).toBe('function');
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('should apply container class for sticky mode', () => {
|
|
178
|
+
const table = document.createElement('table');
|
|
179
|
+
table.className = 'pvtTable';
|
|
180
|
+
container.appendChild(table);
|
|
181
|
+
|
|
182
|
+
global.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
183
|
+
observe: jest.fn(),
|
|
184
|
+
disconnect: jest.fn(),
|
|
185
|
+
}));
|
|
186
|
+
|
|
187
|
+
const options = { enabled: true, mode: FREEZE_PANES_MODES.STICKY };
|
|
188
|
+
freezePanes.initialize(container, options, { rowAttrsLength: 1 });
|
|
189
|
+
|
|
190
|
+
expect(container.classList.contains(STICKY_CSS_CLASSES.CONTAINER)).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
});
|