@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.
Files changed (34) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts +1 -0
  3. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -1
  4. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +3 -2
  5. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
  6. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts +1 -0
  7. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -1
  8. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js +27 -0
  9. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -1
  10. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js +15 -0
  11. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -1
  12. package/dist/components/table/Table.d.ts +1 -0
  13. package/dist/components/table/Table.d.ts.map +1 -1
  14. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.d.ts +7 -0
  15. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.d.ts.map +1 -1
  16. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.js +3 -3
  17. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.js.map +1 -1
  18. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts +15 -0
  19. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -1
  20. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +185 -0
  21. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -1
  22. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.d.ts.map +1 -1
  23. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.js +22 -0
  24. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.test.js.map +1 -1
  25. package/dist/index.css +9 -0
  26. package/dist/index.css.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/formField/inputs/selectDropdown/SelectDropdown.stories.tsx +35 -0
  29. package/src/components/formField/inputs/selectDropdown/SelectDropdown.test.tsx +41 -0
  30. package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +4 -0
  31. package/src/components/formField/inputs/selectDropdown/selectDropdown.scss +10 -0
  32. package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +212 -0
  33. package/src/components/table/cellRenderers/SelectDropdownCellRenderer.test.tsx +37 -0
  34. 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 initialSelectedValues = valueStr ? [valueStr] : [];
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
- initialSelectedValues={initialSelectedValues}
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(