@axinom/mosaic-ui 0.34.0-rc.3 → 0.34.0-rc.30

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 (88) hide show
  1. package/dist/components/Explorer/Explorer.d.ts.map +1 -1
  2. package/dist/components/Filters/Filter/Filter.d.ts +2 -1
  3. package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
  4. package/dist/components/Filters/Filters.d.ts.map +1 -1
  5. package/dist/components/Filters/Filters.model.d.ts +2 -0
  6. package/dist/components/Filters/Filters.model.d.ts.map +1 -1
  7. package/dist/components/FormElements/Checkbox/Checkbox.d.ts.map +1 -1
  8. package/dist/components/FormElements/Checkbox/CheckboxField.d.ts +1 -1
  9. package/dist/components/FormElements/Checkbox/CheckboxField.d.ts.map +1 -1
  10. package/dist/components/FormElements/CustomTags/CustomTagsField.d.ts.map +1 -1
  11. package/dist/components/FormElements/DateTimeField/DateTimeTextField.d.ts +1 -1
  12. package/dist/components/FormElements/DateTimeField/DateTimeTextField.d.ts.map +1 -1
  13. package/dist/components/FormElements/DynamicDataListControl/DynamicDataListField.d.ts.map +1 -1
  14. package/dist/components/FormElements/FileUploadControl/FileUploadControl.d.ts.map +1 -1
  15. package/dist/components/FormElements/FileUploadControl/FileUploadField.d.ts.map +1 -1
  16. package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.d.ts +1 -1
  17. package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.d.ts.map +1 -1
  18. package/dist/components/FormElements/SingleLineText/SingleLineText.d.ts.map +1 -1
  19. package/dist/components/List/List.d.ts.map +1 -1
  20. package/dist/components/List/List.model.d.ts +2 -0
  21. package/dist/components/List/List.model.d.ts.map +1 -1
  22. package/dist/components/List/ListHeader/ListHeader.d.ts +7 -1
  23. package/dist/components/List/ListHeader/ListHeader.d.ts.map +1 -1
  24. package/dist/components/List/ListHeader/useResize.d.ts +18 -0
  25. package/dist/components/List/ListHeader/useResize.d.ts.map +1 -0
  26. package/dist/components/List/ListRow/ListRow.d.ts.map +1 -1
  27. package/dist/components/List/ListRow/ListRowLoader.d.ts +2 -2
  28. package/dist/components/List/ListRow/ListRowLoader.d.ts.map +1 -1
  29. package/dist/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.d.ts.map +1 -1
  30. package/dist/components/List/useColumnsSize.d.ts +21 -0
  31. package/dist/components/List/useColumnsSize.d.ts.map +1 -0
  32. package/dist/index.es.js +3 -3
  33. package/dist/index.es.js.map +1 -1
  34. package/dist/index.js +3 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/initialize.d.ts +3 -3
  37. package/dist/initialize.d.ts.map +1 -1
  38. package/package.json +3 -3
  39. package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.spec.tsx +2 -2
  40. package/src/components/Explorer/Explorer.stories.tsx +16 -0
  41. package/src/components/Explorer/Explorer.tsx +33 -31
  42. package/src/components/Filters/Filter/Filter.spec.tsx +24 -1
  43. package/src/components/Filters/Filter/Filter.tsx +6 -0
  44. package/src/components/Filters/Filters.model.ts +3 -0
  45. package/src/components/Filters/Filters.stories.tsx +9 -0
  46. package/src/components/Filters/Filters.tsx +1 -0
  47. package/src/components/FormElements/BooleanView/BooleanViewField.scss +4 -6
  48. package/src/components/FormElements/BooleanView/BooleanViewField.spec.tsx +6 -6
  49. package/src/components/FormElements/BooleanView/BooleanViewField.tsx +1 -1
  50. package/src/components/FormElements/Checkbox/Checkbox.tsx +1 -1
  51. package/src/components/FormElements/Checkbox/CheckboxField.tsx +4 -5
  52. package/src/components/FormElements/CustomTags/CustomTags.scss +15 -4
  53. package/src/components/FormElements/CustomTags/CustomTags.spec.tsx +3 -3
  54. package/src/components/FormElements/CustomTags/CustomTags.tsx +3 -3
  55. package/src/components/FormElements/CustomTags/CustomTagsField.tsx +1 -2
  56. package/src/components/FormElements/DateTimeField/DateTimeTextField.tsx +3 -3
  57. package/src/components/FormElements/DynamicDataListControl/DynamicDataListField.tsx +1 -2
  58. package/src/components/FormElements/FileUploadControl/FileUploadControl.spec.tsx +35 -0
  59. package/src/components/FormElements/FileUploadControl/FileUploadControl.tsx +2 -0
  60. package/src/components/FormElements/FileUploadControl/FileUploadField.tsx +1 -2
  61. package/src/components/FormElements/FormElementContainer/FormElementContainer.scss +2 -0
  62. package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.tsx +1 -1
  63. package/src/components/FormElements/Radio/RadioField.tsx +2 -2
  64. package/src/components/FormElements/SingleLineText/SingleLineText.spec.tsx +5 -4
  65. package/src/components/FormElements/SingleLineText/SingleLineText.tsx +6 -1
  66. package/src/components/FormElements/Tags/Tags.scss +1 -1
  67. package/src/components/FormElements/ToggleButton/ToggleButton.scss +18 -7
  68. package/src/components/FormStation/FormStation.spec.tsx +12 -6
  69. package/src/components/FormStation/FormStation.tsx +6 -6
  70. package/src/components/InlineMenu/InlineMenu.scss +20 -5
  71. package/src/components/LandingPageTiles/TileLarge/TileLarge.scss +11 -6
  72. package/src/components/List/List.model.ts +3 -0
  73. package/src/components/List/List.scss +0 -2
  74. package/src/components/List/List.stories.tsx +1 -1
  75. package/src/components/List/List.tsx +17 -55
  76. package/src/components/List/ListHeader/ListHeader.scss +23 -10
  77. package/src/components/List/ListHeader/ListHeader.spec.tsx +56 -0
  78. package/src/components/List/ListHeader/ListHeader.tsx +43 -9
  79. package/src/components/List/ListHeader/useResize.ts +108 -0
  80. package/src/components/List/ListRow/ListRow.scss +8 -12
  81. package/src/components/List/ListRow/ListRow.spec.tsx +5 -21
  82. package/src/components/List/ListRow/ListRow.tsx +16 -32
  83. package/src/components/List/ListRow/ListRowLoader.tsx +14 -4
  84. package/src/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.scss +10 -8
  85. package/src/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.tsx +3 -1
  86. package/src/components/List/useColumnsSize.ts +120 -0
  87. package/src/initialize.ts +4 -4
  88. package/src/styles/variables.scss +11 -0
@@ -0,0 +1,108 @@
1
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import { Data } from '../../../types';
3
+ import { Column } from '../List.model';
4
+
5
+ /**
6
+ * Handles the resizing logic of the columns
7
+ * @param columns The list of column definitions
8
+ * @param onColumnSizesChanged Callback that will be called when the column sizes change
9
+ * @returns an object containing the refs to the columns (add these to all column header elements)
10
+ * and the mouseDown handler (add this to the element that should be used to resize the column)
11
+ */
12
+ export const useResize = <T extends Data>(
13
+ columns: Column<T>[],
14
+ onColumnSizesChanged: (columnSizes: string) => void,
15
+ ): {
16
+ cols: {
17
+ ref: React.RefObject<HTMLTableCellElement>;
18
+ orgSize: string | undefined;
19
+ }[];
20
+ mouseDown: (index: number) => void;
21
+ } => {
22
+ const minCellWidth = 50;
23
+
24
+ const cols = useMemo(
25
+ () =>
26
+ [
27
+ ...columns,
28
+ { size: 'auto' }, // Last column for action buttons and checkbox, etc
29
+ ].map((col) => ({
30
+ ref: React.createRef<HTMLTableCellElement>(),
31
+ orgSize: col.size,
32
+ })),
33
+ [columns],
34
+ );
35
+
36
+ const [activeIndex, setActiveIndex] = useState<number | undefined>(undefined);
37
+ const resizeStart = React.useRef<
38
+ { mouse: number; width: number } | undefined
39
+ >(undefined);
40
+
41
+ const mouseMove = useCallback(
42
+ (e) => {
43
+ if (activeIndex !== undefined) {
44
+ const elem = cols[activeIndex].ref.current;
45
+ if (!elem) {
46
+ return;
47
+ }
48
+
49
+ if (!resizeStart.current) {
50
+ resizeStart.current = {
51
+ mouse: e.clientX,
52
+ width: elem.offsetWidth,
53
+ };
54
+ }
55
+
56
+ const start = resizeStart.current;
57
+ if (!start) {
58
+ return;
59
+ }
60
+
61
+ const gridColumns = cols.map((col, i) => {
62
+ if (!col.ref.current) {
63
+ return col.orgSize;
64
+ }
65
+
66
+ if (i === activeIndex) {
67
+ const width = start.width + e.clientX - start.mouse;
68
+ if (width >= minCellWidth) {
69
+ return `${width}px`;
70
+ }
71
+ }
72
+ return `${col.ref.current.offsetWidth}px`;
73
+ });
74
+
75
+ onColumnSizesChanged(gridColumns.join(' '));
76
+ }
77
+ },
78
+ [activeIndex, cols, onColumnSizesChanged],
79
+ );
80
+
81
+ const mouseDown = (index: number): void => {
82
+ setActiveIndex(index);
83
+ };
84
+
85
+ const removeListeners = useCallback(() => {
86
+ window.removeEventListener('mousemove', mouseMove);
87
+ window.removeEventListener('mouseup', removeListeners);
88
+ }, [mouseMove]);
89
+
90
+ const mouseUp = useCallback(() => {
91
+ setActiveIndex(undefined);
92
+ resizeStart.current = undefined;
93
+ removeListeners();
94
+ }, [setActiveIndex, removeListeners]);
95
+
96
+ useEffect(() => {
97
+ if (activeIndex !== undefined) {
98
+ window.addEventListener('mousemove', mouseMove);
99
+ window.addEventListener('mouseup', mouseUp);
100
+ }
101
+
102
+ return () => {
103
+ removeListeners();
104
+ };
105
+ }, [activeIndex, mouseMove, mouseUp, removeListeners]);
106
+
107
+ return { cols, mouseDown };
108
+ };
@@ -3,9 +3,6 @@
3
3
  .columnsRoot {
4
4
  padding: 1px 0px 1px 5px;
5
5
  display: grid;
6
- grid-template-columns: repeat(auto-fit, minmax(20px, 1fr));
7
- grid-auto-rows: 50px;
8
- column-gap: 5px;
9
6
  justify-items: left;
10
7
  align-items: center;
11
8
  border-bottom: var(--explorer-list-row-border, $explorer-list-row-border);
@@ -30,6 +27,13 @@
30
27
  }
31
28
  }
32
29
 
30
+ .cellWrapper {
31
+ display: grid;
32
+ align-content: center;
33
+ width: 100%;
34
+ height: 100%;
35
+ }
36
+
33
37
  .cell {
34
38
  white-space: nowrap;
35
39
  text-overflow: ellipsis;
@@ -47,15 +51,7 @@
47
51
  }
48
52
 
49
53
  .link {
50
- display: grid;
51
- grid-template-columns: repeat(auto-fit, minmax(20px, 1fr));
52
- column-gap: 5px;
53
-
54
- width: 100%;
55
-
56
- justify-items: left;
57
- align-items: center;
58
-
54
+ display: contents;
59
55
  color: inherit;
60
56
  text-decoration: none;
61
57
  }
@@ -51,7 +51,7 @@ describe('ListRow', () => {
51
51
  <ListRow {...mockProps} columns={expectedColumns} />,
52
52
  );
53
53
 
54
- const actualColumns = wrapper.find('.cell');
54
+ const actualColumns = wrapper.find('.cellWrapper');
55
55
 
56
56
  // Check amount of rendered columns
57
57
  expect(actualColumns).toHaveLength(expectedColumns.length);
@@ -87,7 +87,7 @@ describe('ListRow', () => {
87
87
  />,
88
88
  );
89
89
 
90
- const actualColumns = wrapper.find('.cell');
90
+ const actualColumns = wrapper.find('.cellWrapper');
91
91
  // Check amount of rendered columns
92
92
  expect(actualColumns).toHaveLength(2);
93
93
 
@@ -119,21 +119,21 @@ describe('ListRow', () => {
119
119
  // @ts-expect-error Typings to not match up
120
120
  <ListRow {...mockProps} data={rowData} columns={expectedColumns} />,
121
121
  );
122
- const actualColumns = wrapper.find('.cell');
122
+ const actualColumns = wrapper.find('.cellWrapper');
123
123
  expect(actualColumns.at(0).text()).toBe('Changed: something');
124
124
  });
125
125
 
126
126
  it('shows empty field if a value required in a column is not present on the data object', () => {
127
127
  const expectedColumns: Column<TestExplorerData>[] = [
128
128
  // @ts-expect-error intentional bad property
129
- { propertyName: 'doesnt exist', size: '1fr', label: 'desc' },
129
+ { propertyName: "doesn't exist", size: '1fr', label: 'desc' },
130
130
  ];
131
131
 
132
132
  const wrapper = shallow(
133
133
  <ListRow {...mockProps} columns={expectedColumns} />,
134
134
  );
135
135
 
136
- const actualColumns = wrapper.find('.cell');
136
+ const actualColumns = wrapper.find('.cellWrapper');
137
137
 
138
138
  // Check amount of rendered columns
139
139
  expect(actualColumns).toHaveLength(1);
@@ -514,22 +514,6 @@ describe('ListRow', () => {
514
514
 
515
515
  expect(link.exists()).toBe(false);
516
516
  });
517
-
518
- it('receives list row height', () => {
519
- const height = '55px';
520
- const wrapper = shallow(
521
- <ListRow
522
- {...mockProps}
523
- onItemClicked="http://this.is.a.test.url"
524
- selectionMode={ListSelectMode.None}
525
- rowHeight={height}
526
- />,
527
- );
528
-
529
- const link = wrapper.find(Link);
530
-
531
- expect(link.prop('style')?.gridTemplateRows).toBe(height);
532
- });
533
517
  });
534
518
 
535
519
  describe('tooltip', () => {
@@ -1,7 +1,7 @@
1
1
  import clsx from 'clsx';
2
2
  import { LocationDescriptor } from 'history';
3
3
  import React, { PropsWithChildren, useCallback, useRef } from 'react';
4
- import { Link, useHistory } from 'react-router-dom';
4
+ import { Link } from 'react-router-dom';
5
5
  import { noop } from '../../../helpers/utils';
6
6
  import { Data } from '../../../types/data';
7
7
  import { getTooltipText } from '../../../utils/ToolTipHelpers';
@@ -140,14 +140,13 @@ export const ListRow = <T extends Data>({
140
140
  isRowDisabled = false,
141
141
  inlineMenuActions,
142
142
  }: PropsWithChildren<ListRowProps<T>>): JSX.Element => {
143
- const customStyles = {
143
+ const customRootStyles = {
144
144
  gridAutoRows: rowHeight,
145
- gridTemplateColumns: columnSizes,
146
145
  gridColumnGap: columnGap,
147
146
  justifyItems: horizontalTextAlign,
148
147
  alignItems: verticalTextAlign,
148
+ gridTemplateColumns: columnSizes,
149
149
  } as React.CSSProperties;
150
- const history = useHistory();
151
150
 
152
151
  // Trigger based on: https://www.youtube.com/watch?v=NZKUirTtxcg
153
152
  const onTriggeredHandler = useCallback(() => {
@@ -196,14 +195,6 @@ export const ListRow = <T extends Data>({
196
195
  const isLinkable: boolean =
197
196
  selectionMode === ListSelectMode.None &&
198
197
  typeof onItemClicked !== 'function';
199
- const allColumns: string[] = columnSizes.split(' ');
200
- const columnsWithoutActions: string[] = allColumns.slice(0, -1);
201
- const cssStyles: React.CSSProperties = {
202
- ...customStyles,
203
- gridTemplateColumns: isLinkable
204
- ? `1fr ${allColumns.slice(-1)}`
205
- : columnSizes,
206
- };
207
198
 
208
199
  const generateCells: JSX.Element[] = columns.map((column: Column<T>) => {
209
200
  const columnData: React.ReactNode = renderData<T>(
@@ -213,16 +204,17 @@ export const ListRow = <T extends Data>({
213
204
  );
214
205
 
215
206
  return (
216
- <div
217
- key={column.propertyName as string}
218
- className={classes.cell}
219
- title={
220
- column.tooltip !== false ? getTooltipText(columnData) : undefined
221
- }
222
- data-test-id={`list-entry-property:${column.propertyName as string}`}
223
- style={{ justifySelf: column.horizontalColumnAlign }}
224
- >
225
- {columnData}
207
+ <div key={column.propertyName as string} className={classes.cellWrapper}>
208
+ <div
209
+ className={classes.cell}
210
+ title={
211
+ column.tooltip !== false ? getTooltipText(columnData) : undefined
212
+ }
213
+ data-test-id={`list-entry-property:${column.propertyName as string}`}
214
+ style={{ justifySelf: column.horizontalColumnAlign }}
215
+ >
216
+ {columnData}
217
+ </div>
226
218
  </div>
227
219
  );
228
220
  });
@@ -237,7 +229,7 @@ export const ListRow = <T extends Data>({
237
229
  [classes.selected]: itemSelected && showItemCheckbox,
238
230
  [classes.disabled]: isRowDisabled,
239
231
  })}
240
- style={cssStyles}
232
+ style={customRootStyles}
241
233
  onClick={() => {
242
234
  onItemClickedHandler(data);
243
235
  }}
@@ -246,14 +238,7 @@ export const ListRow = <T extends Data>({
246
238
  >
247
239
  {/* Items */}
248
240
  {isLinkable ? (
249
- <Link
250
- to={onItemClicked as string}
251
- className={classes.link}
252
- style={{
253
- gridTemplateColumns: columnsWithoutActions.join(' '),
254
- gridTemplateRows: rowHeight,
255
- }}
256
- >
241
+ <Link to={onItemClicked as string} className={classes.link}>
257
242
  {generateCells}
258
243
  </Link>
259
244
  ) : (
@@ -285,7 +270,6 @@ export const ListRow = <T extends Data>({
285
270
  icon={IconName.ChevronRight}
286
271
  height={actionSize}
287
272
  width={actionSize}
288
- onButtonClicked={onItemClicked as () => void}
289
273
  dataTestId="list-entry-action"
290
274
  />
291
275
  ))}
@@ -5,9 +5,9 @@ import { Loader } from '../../Loaders/Loader/Loader';
5
5
  import classes from './ListRow.scss';
6
6
 
7
7
  export interface ListRowLoaderProps<T extends Data> {
8
- /** Spacing between columns */
8
+ /** Spacing of columns */
9
9
  columnSizes: string;
10
- /** Header row height */
10
+ /** Space between columns */
11
11
  columnGap: string;
12
12
  /** List row height */
13
13
  rowHeight: string;
@@ -36,13 +36,23 @@ export const ListRowLoader = <T extends Data>({
36
36
  className={classes.columnsRoot}
37
37
  style={{
38
38
  ...customRowStyles,
39
- opacity: (rows - i) / rows,
39
+ //opacity: (rows - i) / rows,
40
40
  }}
41
41
  >
42
42
  {columns.map((column) => {
43
43
  const loaderWidth = getSize(column.size);
44
44
  return (
45
- <div key={column.propertyName as string} className={classes.cell}>
45
+ <div
46
+ key={column.propertyName as string}
47
+ className={classes.cell}
48
+ style={{
49
+ opacity:
50
+ (rows -
51
+ i -
52
+ 0.5) /* - 0.5 to make the loaders slightly more faint */ /
53
+ rows,
54
+ }}
55
+ >
46
56
  <Loader
47
57
  showLoader={true}
48
58
  height={textLoaderHeight}
@@ -1,15 +1,17 @@
1
1
  @import '../../../../../styles/common.scss';
2
2
 
3
- .green {
4
- background-color: var(--boolean-dot-true-color, $boolean-dot-true-color);
3
+ .circle {
5
4
  height: var(--boolean-dot-size, $boolean-dot-size);
6
5
  width: var(--boolean-dot-size, $boolean-dot-size);
6
+ min-width: var(--boolean-dot-size, $boolean-dot-size);
7
+ min-height: var(--boolean-dot-size, $boolean-dot-size);
7
8
  border-radius: 100%;
8
- }
9
9
 
10
- .red {
11
- background-color: var(--boolean-dot-false-color, $boolean-dot-false-color);
12
- height: var(--boolean-dot-size, $boolean-dot-size);
13
- width: var(--boolean-dot-size, $boolean-dot-size);
14
- border-radius: 100%;
10
+ &.green {
11
+ background-color: var(--boolean-dot-true-color, $boolean-dot-true-color);
12
+ }
13
+
14
+ &.red {
15
+ background-color: var(--boolean-dot-false-color, $boolean-dot-false-color);
16
+ }
15
17
  }
@@ -16,5 +16,7 @@ import classes from './BooleanDotRenderer.scss';
16
16
  *
17
17
  */
18
18
  export const BooleanDotRenderer = (val: unknown): JSX.Element => (
19
- <div className={clsx(val ? [classes.green] : [classes.red])}></div>
19
+ <div
20
+ className={clsx(classes.circle, val ? [classes.green] : [classes.red])}
21
+ ></div>
20
22
  );
@@ -0,0 +1,120 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { Data } from '../../types';
3
+ import { Column, ListSelectMode } from './List.model';
4
+
5
+ /**
6
+ * Generates a combined string of all columns.columnSize values, to be used as CSS value
7
+ * @param columns The list of columns that should be used
8
+ * @returns a string of all column sizes of the array, combined
9
+ */
10
+ const getColumnsSizeDefinition = function <T extends Data>(
11
+ columns: Column<T>[],
12
+ showActionButton: boolean,
13
+ selectMode: ListSelectMode,
14
+ showInlineMenu: boolean,
15
+ ): string {
16
+ const columnSizeDefinition = columns.map((column) => column.size ?? '1fr');
17
+
18
+ const hasActionsColumn = hasActionColumn(
19
+ selectMode,
20
+ showActionButton,
21
+ showInlineMenu,
22
+ );
23
+
24
+ if (hasActionsColumn) {
25
+ columnSizeDefinition.push(
26
+ getActionsColumnSizePx(showInlineMenu, showActionButton),
27
+ );
28
+ }
29
+
30
+ return columnSizeDefinition.join(' ');
31
+ };
32
+
33
+ const getActionsColumnSizePx = (...enableActions: boolean[]): string => {
34
+ const enabledActionsCount = enableActions.filter(
35
+ (actionEnabled) => actionEnabled,
36
+ ).length;
37
+
38
+ const defaultActionSizePx = 50;
39
+ const defaultActionsRawGapPx = 8;
40
+ const calculateMultiActionsColumnSizePx = (actionsCount: number): number => {
41
+ return (
42
+ defaultActionSizePx * actionsCount +
43
+ defaultActionsRawGapPx * (actionsCount - 1)
44
+ );
45
+ };
46
+
47
+ const sizePx =
48
+ enabledActionsCount > 1
49
+ ? calculateMultiActionsColumnSizePx(enabledActionsCount)
50
+ : defaultActionSizePx;
51
+
52
+ return `${sizePx}px`;
53
+ };
54
+
55
+ /**
56
+ * Covers the concern of managing the column sizes for the list component
57
+ * @param columns input definition of columns
58
+ * @param showActionButton whether the action button is shown
59
+ * @param selectMode current select mode
60
+ * @param showInlineMenu whether the inline menu is shown
61
+ * @returns an object containing the columnSizes (CSS grid-template-columns),
62
+ * a reset function (to reset to the initial column sizes)
63
+ * and a setter function (to update the column sizes)
64
+ */
65
+ export const useColumnsSize = <T extends Data>(
66
+ columns: Column<T>[],
67
+ showActionButton: boolean,
68
+ selectMode: ListSelectMode,
69
+ showInlineMenu: boolean,
70
+ ): {
71
+ columnSizes: string;
72
+ resetColumnSizes: () => void;
73
+ setColumnSizes: React.Dispatch<React.SetStateAction<string>>;
74
+ hasActionColumn: boolean;
75
+ } => {
76
+ const [orgColumnSizes, setOrgColumnSizes] = useState<string>(
77
+ getColumnsSizeDefinition(
78
+ columns,
79
+ showActionButton,
80
+ selectMode,
81
+ showInlineMenu,
82
+ ),
83
+ );
84
+ const [columnSizes, setColumnSizes] = useState<string>(orgColumnSizes);
85
+
86
+ useEffect(() => {
87
+ setOrgColumnSizes(
88
+ getColumnsSizeDefinition(
89
+ columns,
90
+ showActionButton,
91
+ selectMode,
92
+ showInlineMenu,
93
+ ),
94
+ );
95
+ }, [columns, selectMode, showActionButton, showInlineMenu]);
96
+
97
+ const resetColumnSizes = (): void => {
98
+ setColumnSizes(orgColumnSizes);
99
+ };
100
+
101
+ return {
102
+ columnSizes,
103
+ resetColumnSizes,
104
+ setColumnSizes,
105
+ hasActionColumn: hasActionColumn(
106
+ selectMode,
107
+ showActionButton,
108
+ showInlineMenu,
109
+ ),
110
+ };
111
+ };
112
+ function hasActionColumn(
113
+ selectMode: ListSelectMode,
114
+ showActionButton: boolean,
115
+ showInlineMenu: boolean,
116
+ ): boolean {
117
+ return (
118
+ selectMode !== ListSelectMode.None || showActionButton || showInlineMenu
119
+ );
120
+ }
package/src/initialize.ts CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  ShowNotification,
6
6
  } from './types/ui-config';
7
7
 
8
- export enum IndicatorType {
8
+ export enum SaveIndicatorType {
9
9
  Saving = 'saving',
10
10
  Inactive = 'inactive',
11
11
  Dirty = 'dirty',
@@ -21,8 +21,8 @@ export let removeIndicator: RemoveIndicator | (() => void) =
21
21
 
22
22
  export let on: CustomEventEmitter['on'] | (() => void) = polyfill('on');
23
23
 
24
- export let setSaveIndicator: (type: IndicatorType) => void =
25
- polyfill('showSaveIndicator');
24
+ export let setSaveIndicator: (type: SaveIndicatorType) => void =
25
+ polyfill('setSaveIndicator');
26
26
 
27
27
  /**
28
28
  * Passes the PiralApi methods to the UI library.
@@ -43,7 +43,7 @@ export interface UiConfig {
43
43
  addIndicator: AddIndicator;
44
44
  removeIndicator: RemoveIndicator;
45
45
  on: CustomEventEmitter['on'];
46
- setSaveIndicator: (type: IndicatorType) => void;
46
+ setSaveIndicator: (type: SaveIndicatorType) => void;
47
47
  }
48
48
 
49
49
  function polyfill(methodName: string): () => void {
@@ -183,6 +183,9 @@ $tag-border-color-2: $blue;
183
183
  $tag-icon-color: $blue;
184
184
  $tag-font-color: $dark-gray;
185
185
  $tag-background-color: $light-gray-2;
186
+ $tag-enter-color: rgba($blue, 0.25);
187
+ $tag-plus-button-bg-color: $blue;
188
+ $tag-plus-button-hover-stroke-color: $blue;
186
189
  $form-error-color: $red;
187
190
  $select-arrow-color: $blue;
188
191
  $select-disabled-arrow-color: $gray;
@@ -201,6 +204,14 @@ $select-background-color: white;
201
204
  $form-indicator-color: $green;
202
205
  $radio-hover-stroke-color: $blue;
203
206
  $radio-checked-fill-color: $blue;
207
+ $toggle-button-stroke-color: $blue;
208
+ $toggle-button-off-text-color: $blue;
209
+ $toggle-button-on-bg-color: $blue;
210
+
211
+ /* Inline Menu */
212
+ $inline-menu-button-stroke-color: $blue;
213
+ $inline-menu-button-hover-bg-color: $blue;
214
+ $inline-menu-button-selected-bg-color: $blue;
204
215
 
205
216
  /* Date Time Picker*/
206
217
  $calendar-tile-active: $blue;