@arbor-education/design-system.components 0.25.7 → 0.25.9

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 (51) hide show
  1. package/.github/CODEOWNERS +1 -0
  2. package/.snyk +3 -0
  3. package/CHANGELOG.md +12 -0
  4. package/CODEOWNERS +2 -1
  5. package/dist/components/datePicker/DatePicker.d.ts.map +1 -1
  6. package/dist/components/datePicker/DatePicker.js +8 -6
  7. package/dist/components/datePicker/DatePicker.js.map +1 -1
  8. package/dist/components/datePicker/DatePickerCalendar.d.ts +10 -0
  9. package/dist/components/datePicker/DatePickerCalendar.d.ts.map +1 -0
  10. package/dist/components/datePicker/DatePickerCalendar.js +9 -0
  11. package/dist/components/datePicker/DatePickerCalendar.js.map +1 -0
  12. package/dist/components/dateTimePicker/DateTimePicker.d.ts.map +1 -1
  13. package/dist/components/dateTimePicker/DateTimePicker.js +11 -8
  14. package/dist/components/dateTimePicker/DateTimePicker.js.map +1 -1
  15. package/dist/components/table/Table.d.ts +6 -0
  16. package/dist/components/table/Table.d.ts.map +1 -1
  17. package/dist/components/table/Table.js +3 -0
  18. package/dist/components/table/Table.js.map +1 -1
  19. package/dist/components/table/Table.stories.d.ts +1 -0
  20. package/dist/components/table/Table.stories.d.ts.map +1 -1
  21. package/dist/components/table/Table.stories.js +41 -0
  22. package/dist/components/table/Table.stories.js.map +1 -1
  23. package/dist/components/table/cellRenderers/NumberInputCellRenderer.d.ts +10 -0
  24. package/dist/components/table/cellRenderers/NumberInputCellRenderer.d.ts.map +1 -0
  25. package/dist/components/table/cellRenderers/NumberInputCellRenderer.js +13 -0
  26. package/dist/components/table/cellRenderers/NumberInputCellRenderer.js.map +1 -0
  27. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.d.ts +90 -0
  28. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.d.ts.map +1 -0
  29. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js +243 -0
  30. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js.map +1 -0
  31. package/dist/components/table/cellRenderers/NumberInputCellRenderer.test.d.ts +2 -0
  32. package/dist/components/table/cellRenderers/NumberInputCellRenderer.test.d.ts.map +1 -0
  33. package/dist/components/table/cellRenderers/NumberInputCellRenderer.test.js +72 -0
  34. package/dist/components/table/cellRenderers/NumberInputCellRenderer.test.js.map +1 -0
  35. package/dist/index.css +0 -33
  36. package/dist/index.css.map +1 -1
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/components/datePicker/DatePicker.tsx +30 -35
  43. package/src/components/datePicker/DatePickerCalendar.tsx +46 -0
  44. package/src/components/dateTimePicker/DateTimePicker.tsx +66 -38
  45. package/src/components/dateTimePicker/dateTimePicker.scss +0 -2
  46. package/src/components/table/Table.stories.tsx +45 -0
  47. package/src/components/table/Table.tsx +3 -0
  48. package/src/components/table/cellRenderers/NumberInputCellRenderer.stories.tsx +346 -0
  49. package/src/components/table/cellRenderers/NumberInputCellRenderer.test.tsx +99 -0
  50. package/src/components/table/cellRenderers/NumberInputCellRenderer.tsx +36 -0
  51. package/src/index.ts +1 -0
@@ -0,0 +1,99 @@
1
+ import { describe, expect, test, vi } from 'vitest';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom/vitest';
4
+ import userEvent from '@testing-library/user-event';
5
+ import type { CustomCellRendererProps } from 'ag-grid-react';
6
+ import { NumberInputCellRenderer } from './NumberInputCellRenderer.js';
7
+
8
+ const createMockProps = (overrides: Partial<CustomCellRendererProps & { value: number | null; min?: number; max?: number; disabled?: boolean }> = {}): CustomCellRendererProps => ({
9
+ value: 0,
10
+ node: { setDataValue: vi.fn() },
11
+ colDef: { field: 'count' },
12
+ ...overrides,
13
+ } as unknown as CustomCellRendererProps);
14
+
15
+ describe('NumberInputCellRenderer', () => {
16
+ test('renders a number input', () => {
17
+ render(<NumberInputCellRenderer {...createMockProps()} />);
18
+ expect(screen.getByRole('textbox')).toBeInTheDocument();
19
+ });
20
+
21
+ test('renders the supplied value in the input', () => {
22
+ render(<NumberInputCellRenderer {...createMockProps({ value: 42 })} />);
23
+ expect(screen.getByRole('textbox')).toHaveValue('42');
24
+ });
25
+
26
+ test('renders null value as 0', () => {
27
+ render(<NumberInputCellRenderer {...createMockProps({ value: null })} />);
28
+ expect(screen.getByRole('textbox')).toHaveValue('0');
29
+ });
30
+
31
+ test('disables the input when disabled prop is true', () => {
32
+ render(<NumberInputCellRenderer {...createMockProps({ disabled: true })} />);
33
+ expect(screen.getByRole('textbox')).toBeDisabled();
34
+ });
35
+
36
+ test('minus button is disabled when value equals min', () => {
37
+ render(<NumberInputCellRenderer {...createMockProps({ value: 5, min: 5 })} />);
38
+ expect(screen.getByRole('button', { name: 'Minus button' })).toBeDisabled();
39
+ });
40
+
41
+ test('plus button is disabled when value equals max', () => {
42
+ render(<NumberInputCellRenderer {...createMockProps({ value: 10, max: 10 })} />);
43
+ expect(screen.getByRole('button', { name: 'Plus button' })).toBeDisabled();
44
+ });
45
+
46
+ test('calls node.setDataValue with the updated value when the input changes', async () => {
47
+ const setDataValue = vi.fn();
48
+ render(
49
+ <NumberInputCellRenderer
50
+ {...createMockProps({
51
+ value: 5,
52
+ node: { setDataValue } as unknown as CustomCellRendererProps['node'],
53
+ colDef: { field: 'count' },
54
+ })}
55
+ />,
56
+ );
57
+ setDataValue.mockClear();
58
+
59
+ await userEvent.click(screen.getByRole('button', { name: 'Plus button' }));
60
+
61
+ expect(setDataValue).toHaveBeenCalledWith('count', 6);
62
+ });
63
+
64
+ test('calls node.setDataValue with 0 when the input is cleared', async () => {
65
+ const setDataValue = vi.fn();
66
+ render(
67
+ <NumberInputCellRenderer
68
+ {...createMockProps({
69
+ value: 5,
70
+ node: { setDataValue } as unknown as CustomCellRendererProps['node'],
71
+ colDef: { field: 'count' },
72
+ })}
73
+ />,
74
+ );
75
+ setDataValue.mockClear();
76
+
77
+ await userEvent.clear(screen.getByRole('textbox'));
78
+
79
+ expect(setDataValue).toHaveBeenCalledWith('count', 0);
80
+ });
81
+
82
+ test('does not call node.setDataValue when colDef.field is undefined', async () => {
83
+ const setDataValue = vi.fn();
84
+ render(
85
+ <NumberInputCellRenderer
86
+ {...createMockProps({
87
+ value: 5,
88
+ node: { setDataValue } as unknown as CustomCellRendererProps['node'],
89
+ colDef: {},
90
+ })}
91
+ />,
92
+ );
93
+ setDataValue.mockClear();
94
+
95
+ await userEvent.click(screen.getByRole('button', { name: 'Plus button' }));
96
+
97
+ expect(setDataValue).not.toHaveBeenCalled();
98
+ });
99
+ });
@@ -0,0 +1,36 @@
1
+ import type { CustomCellRendererProps } from 'ag-grid-react';
2
+ import { NumberInput } from 'Components/formField/inputs/number/NumberInput';
3
+
4
+ type NumberInputCellRendererProps = {
5
+ value: number | null;
6
+ min?: number;
7
+ max?: number;
8
+ disabled?: boolean;
9
+ } & CustomCellRendererProps;
10
+
11
+ export const NumberInputCellRenderer = (
12
+ props: NumberInputCellRendererProps,
13
+ ) => {
14
+ const { value, min, max, disabled, node, colDef = {} } = props;
15
+
16
+ return (
17
+ <div className="cell-input-wrapper">
18
+ <NumberInput
19
+ min={min}
20
+ max={max}
21
+ disabled={disabled}
22
+ value={value ?? 0}
23
+ onChange={(e) => {
24
+ if (!colDef.field) {
25
+ return;
26
+ }
27
+ const next = parseFloat(e.currentTarget.value);
28
+ node.setDataValue(
29
+ colDef.field,
30
+ Number.isFinite(next) ? next : 0,
31
+ );
32
+ }}
33
+ />
34
+ </div>
35
+ );
36
+ };
package/src/index.ts CHANGED
@@ -69,6 +69,7 @@ export { DSDefaultColDef } from 'Components/table/DSDefaultColDef';
69
69
  export { GridApiContext } from 'Components/table/GridApiContext';
70
70
  export { NumberCellEditor } from 'Components/table/cellEditors/NumberCellEditor';
71
71
  export { CheckboxCellRenderer } from 'Components/table/cellRenderers/CheckboxCellRenderer';
72
+ export { NumberInputCellRenderer } from 'Components/table/cellRenderers/NumberInputCellRenderer';
72
73
  export { Table } from 'Components/table/Table';
73
74
  export { Tabs } from 'Components/tabs/Tabs';
74
75
  export { Tag } from 'Components/tag/Tag';