@arbor-education/design-system.components 0.20.0 → 0.21.1
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/CHANGELOG.md +12 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts +1 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +3 -2
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts +1 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js +27 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js +15 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -1
- package/dist/components/table/Table.d.ts +1 -0
- package/dist/components/table/Table.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.d.ts +7 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.js +3 -3
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.js.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts +15 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +185 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.js +22 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.js.map +1 -1
- package/dist/index.css +9 -0
- package/dist/index.css.map +1 -1
- package/package.json +1 -1
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.stories.tsx +35 -0
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.test.tsx +41 -0
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +4 -0
- package/src/components/formField/inputs/selectDropdown/selectDropdown.scss +10 -0
- package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +212 -0
- package/src/components/table/cellRenderers/SelectDropdownCellRenderer.test.tsx +37 -0
- package/src/components/table/cellRenderers/SelectDropdownCellRenderer.tsx +11 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, test, vi } from 'vitest';
|
|
2
2
|
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import userEvent from '@testing-library/user-event';
|
|
3
4
|
import '@testing-library/jest-dom/vitest';
|
|
4
5
|
import type { CustomCellRendererProps } from 'ag-grid-react';
|
|
5
6
|
import type { GridApi } from 'ag-grid-community';
|
|
@@ -19,6 +20,8 @@ const createMockProps = (
|
|
|
19
20
|
overrides: Partial<CustomCellRendererProps> & {
|
|
20
21
|
backgroundColor?: string;
|
|
21
22
|
fillCell?: boolean;
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
iconClickOnly?: boolean;
|
|
22
25
|
} = {},
|
|
23
26
|
) => ({
|
|
24
27
|
value: 'option1',
|
|
@@ -105,6 +108,40 @@ describe('SelectDropdownCellRenderer', () => {
|
|
|
105
108
|
});
|
|
106
109
|
});
|
|
107
110
|
|
|
111
|
+
describe('iconClickOnly', () => {
|
|
112
|
+
test('defaults to false — modifier is not applied', () => {
|
|
113
|
+
render(<SelectDropdownCellRenderer {...createMockProps()} />);
|
|
114
|
+
expect(screen.getByRole('button')).not.toHaveClass('ds-select-dropdown--icon-click-only');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('applies the icon-click-only modifier when opted in', () => {
|
|
118
|
+
render(
|
|
119
|
+
<SelectDropdownCellRenderer
|
|
120
|
+
{...createMockProps({ iconClickOnly: true })}
|
|
121
|
+
/>,
|
|
122
|
+
);
|
|
123
|
+
expect(screen.getByRole('button')).toHaveClass('ds-select-dropdown--icon-click-only');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test('clicking the trigger opens the dropdown', async () => {
|
|
127
|
+
render(<SelectDropdownCellRenderer {...createMockProps({ value: '' })} />);
|
|
128
|
+
await userEvent.click(screen.getByRole('button'));
|
|
129
|
+
expect(await screen.findByText('Option 1')).toBeInTheDocument();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('updates the displayed label when the value prop changes (e.g. on paste)', () => {
|
|
134
|
+
const { rerender } = render(
|
|
135
|
+
<SelectDropdownCellRenderer {...createMockProps({ value: 'option1' })} />,
|
|
136
|
+
);
|
|
137
|
+
expect(screen.getByRole('button')).toHaveTextContent('Option 1');
|
|
138
|
+
|
|
139
|
+
rerender(
|
|
140
|
+
<SelectDropdownCellRenderer {...createMockProps({ value: 'option2' })} />,
|
|
141
|
+
);
|
|
142
|
+
expect(screen.getByRole('button')).toHaveTextContent('Option 2');
|
|
143
|
+
});
|
|
144
|
+
|
|
108
145
|
test('applies both modifiers when backgroundColor and fillCell are set together', () => {
|
|
109
146
|
const { container } = render(
|
|
110
147
|
<SelectDropdownCellRenderer
|
|
@@ -17,6 +17,13 @@ type SelectDropdownCellRendererProps = CustomCellRendererProps
|
|
|
17
17
|
& {
|
|
18
18
|
backgroundColor?: string;
|
|
19
19
|
fillCell?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* When true, only the chevron icon opens the dropdown so the rest
|
|
22
|
+
* of the cell remains free for ag-grid cell/range selection and
|
|
23
|
+
* copy-paste. Defaults to false — set it via `cellRendererParams`
|
|
24
|
+
* to opt in per column.
|
|
25
|
+
*/
|
|
26
|
+
iconClickOnly?: boolean;
|
|
20
27
|
};
|
|
21
28
|
|
|
22
29
|
type SelectDropdownCellRendererOption = Omit<
|
|
@@ -44,6 +51,7 @@ export const SelectDropdownCellRenderer = (
|
|
|
44
51
|
alwaysShowPlaceholder = false,
|
|
45
52
|
backgroundColor,
|
|
46
53
|
fillCell = false,
|
|
54
|
+
iconClickOnly = false,
|
|
47
55
|
} = props;
|
|
48
56
|
|
|
49
57
|
const textContrast = backgroundColor ? getTextContrast(backgroundColor) : null;
|
|
@@ -65,7 +73,7 @@ export const SelectDropdownCellRenderer = (
|
|
|
65
73
|
}));
|
|
66
74
|
|
|
67
75
|
const valueStr = value != null && value !== '' ? String(value) : '';
|
|
68
|
-
const
|
|
76
|
+
const selectedValues = valueStr ? [valueStr] : [];
|
|
69
77
|
|
|
70
78
|
const [isOpen, setIsOpen] = useState(false);
|
|
71
79
|
|
|
@@ -100,10 +108,11 @@ export const SelectDropdownCellRenderer = (
|
|
|
100
108
|
alwaysShowPlaceholder={alwaysShowPlaceholder}
|
|
101
109
|
options={normalisedOptions}
|
|
102
110
|
placeholder={placeholder}
|
|
103
|
-
|
|
111
|
+
selectedValues={selectedValues}
|
|
104
112
|
open={isOpen}
|
|
105
113
|
onOpenChange={setIsOpen}
|
|
106
114
|
multiple={false}
|
|
115
|
+
iconClickOnly={iconClickOnly}
|
|
107
116
|
onSelectionChange={(newValue) => {
|
|
108
117
|
if (column && newValue[0] != null) {
|
|
109
118
|
const selectedOption = rawOptions.find(
|