@hazelcast/ui 1.3.2-next.3 → 1.3.2-next.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 (116) hide show
  1. package/lib/Alert.d.ts +1 -0
  2. package/lib/Alert.js +2 -2
  3. package/lib/Alert.js.map +1 -1
  4. package/lib/AutocompleteField.d.ts +4 -1
  5. package/lib/AutocompleteField.js +6 -7
  6. package/lib/AutocompleteField.js.map +1 -1
  7. package/lib/AutocompleteField.module.scss +16 -0
  8. package/lib/Button.d.ts +2 -2
  9. package/lib/Button.js +1 -1
  10. package/lib/Button.js.map +1 -1
  11. package/lib/Calendar/Calendar.d.ts +5 -1
  12. package/lib/Calendar/Calendar.js +30 -22
  13. package/lib/Calendar/Calendar.js.map +1 -1
  14. package/lib/Calendar/Calendar.module.scss +2 -1
  15. package/lib/Calendar/CalendarRange.d.ts +3 -3
  16. package/lib/Calendar/CalendarRange.js +5 -5
  17. package/lib/Calendar/CalendarRange.js.map +1 -1
  18. package/lib/Calendar/CalendarRange.module.scss +5 -0
  19. package/lib/Calendar/components/CalendarInput.d.ts +4 -2
  20. package/lib/Calendar/components/CalendarInput.js +3 -3
  21. package/lib/Calendar/components/CalendarInput.js.map +1 -1
  22. package/lib/Calendar/components/CalendarTime.js +15 -10
  23. package/lib/Calendar/components/CalendarTime.js.map +1 -1
  24. package/lib/Calendar/components/CalendarTime.module.scss +4 -0
  25. package/lib/Calendar/helpers/consts.js +97 -97
  26. package/lib/Calendar/helpers/consts.js.map +1 -1
  27. package/lib/Card.js +2 -2
  28. package/lib/Card.js.map +1 -1
  29. package/lib/Checkbox.d.ts +2 -1
  30. package/lib/Checkbox.js +2 -2
  31. package/lib/Checkbox.js.map +1 -1
  32. package/lib/FieldHeader.js +3 -3
  33. package/lib/FieldHeader.js.map +1 -1
  34. package/lib/Overlay.d.ts +4 -0
  35. package/lib/Overlay.js +5 -5
  36. package/lib/Overlay.js.map +1 -1
  37. package/lib/Pagination.d.ts +4 -3
  38. package/lib/Pagination.js +7 -7
  39. package/lib/Pagination.js.map +1 -1
  40. package/lib/Popover.d.ts +2 -0
  41. package/lib/Popover.js +10 -5
  42. package/lib/Popover.js.map +1 -1
  43. package/lib/Select/CheckableSelectField.module.scss +1 -1
  44. package/lib/Select/MultiSelectField.js +3 -1
  45. package/lib/Select/MultiSelectField.js.map +1 -1
  46. package/lib/Select/SelectField.d.ts +3 -3
  47. package/lib/Select/SelectField.js +12 -3
  48. package/lib/Select/SelectField.js.map +1 -1
  49. package/lib/Select/SelectField.module.scss +0 -2
  50. package/lib/Table/Cell.d.ts +9 -1
  51. package/lib/Table/Cell.js +27 -8
  52. package/lib/Table/Cell.js.map +1 -1
  53. package/lib/Table/Cell.module.scss +8 -0
  54. package/lib/Table/CellWrapper.d.ts +11 -0
  55. package/lib/Table/CellWrapper.js +17 -0
  56. package/lib/Table/CellWrapper.js.map +1 -0
  57. package/lib/Table/Header.d.ts +4 -1
  58. package/lib/Table/Header.js +46 -7
  59. package/lib/Table/Header.js.map +1 -1
  60. package/lib/Table/Header.module.scss +19 -0
  61. package/lib/Table/Table.d.ts +15 -6
  62. package/lib/Table/Table.js +94 -39
  63. package/lib/Table/Table.js.map +1 -1
  64. package/lib/Table/Table.module.scss +23 -0
  65. package/lib/Table/TableContent.d.ts +26 -0
  66. package/lib/Table/TableContent.js +54 -0
  67. package/lib/Table/TableContent.js.map +1 -0
  68. package/lib/Table/constants.d.ts +2 -0
  69. package/lib/Table/constants.js +3 -0
  70. package/lib/Table/constants.js.map +1 -0
  71. package/lib/Table/features/columnsSelection/columnsSelection.d.ts +19 -0
  72. package/lib/Table/features/columnsSelection/columnsSelection.js +71 -0
  73. package/lib/Table/features/columnsSelection/columnsSelection.js.map +1 -0
  74. package/lib/Table/features/columnsSelection/helpers.d.ts +7 -0
  75. package/lib/Table/features/columnsSelection/helpers.js +26 -0
  76. package/lib/Table/features/columnsSelection/helpers.js.map +1 -0
  77. package/lib/Table/features/columnsSelection/index.d.ts +2 -0
  78. package/lib/Table/features/columnsSelection/index.js +3 -0
  79. package/lib/Table/features/columnsSelection/index.js.map +1 -0
  80. package/lib/Tabs/Tab.d.ts +18 -4
  81. package/lib/Tabs/Tab.js +15 -4
  82. package/lib/Tabs/Tab.js.map +1 -1
  83. package/lib/TimeField.js +4 -12
  84. package/lib/TimeField.js.map +1 -1
  85. package/lib/TimeField.module.scss +0 -87
  86. package/lib/Tooltip.d.ts +2 -2
  87. package/lib/Tooltip.js +2 -12
  88. package/lib/Tooltip.js.map +1 -1
  89. package/lib/hooks/index.d.ts +0 -1
  90. package/lib/hooks/index.js +0 -1
  91. package/lib/hooks/index.js.map +1 -1
  92. package/lib/hooks/useCloseOnResize.d.ts +8 -0
  93. package/lib/hooks/useCloseOnResize.js +16 -0
  94. package/lib/hooks/useCloseOnResize.js.map +1 -0
  95. package/lib/index.d.ts +1 -4
  96. package/lib/index.js +1 -4
  97. package/lib/index.js.map +1 -1
  98. package/lib/utils/portal.d.ts +2 -0
  99. package/lib/utils/portal.js +15 -0
  100. package/lib/utils/portal.js.map +1 -0
  101. package/lib/utils/test.d.ts +3 -1
  102. package/lib/utils/test.js.map +1 -1
  103. package/package.json +6 -9
  104. package/lib/Code.d.ts +0 -8
  105. package/lib/Code.js +0 -16
  106. package/lib/Code.js.map +0 -1
  107. package/lib/CodeEditor.d.ts +0 -28
  108. package/lib/CodeEditor.js +0 -180
  109. package/lib/CodeEditor.js.map +0 -1
  110. package/lib/CodeEditor.module.scss +0 -32
  111. package/lib/CodeEditorFormik.d.ts +0 -9
  112. package/lib/CodeEditorFormik.js +0 -14
  113. package/lib/CodeEditorFormik.js.map +0 -1
  114. package/lib/hooks/useTableCustomizableColumns.d.ts +0 -9
  115. package/lib/hooks/useTableCustomizableColumns.js +0 -23
  116. package/lib/hooks/useTableCustomizableColumns.js.map +0 -1
@@ -9,9 +9,11 @@ import { FieldHeader } from '../FieldHeader';
9
9
  import { Icon } from '../Icon';
10
10
  import { getMenuContainer, getOptionsMap } from './helpers';
11
11
  import { components } from './Common';
12
+ import { components as rsComponents } from 'react-select';
13
+ import { useCloseOnResize } from '../hooks/useCloseOnResize';
12
14
  import styles from './SelectField.module.scss';
13
15
  export const SelectField = (props) => {
14
- const { 'data-test': dataTest, className, disabled, error, errorClassName, helperText, isClearable = false, isCreatable, isSearchable = true, label, labelClassName, showAriaLabel = false, size = 'medium', menuIsOpen, menuPortalTarget = 'body', menuPlacement = 'auto', name, onChange, options, placeholder, required, value, formatGroupLabel, formatOptionLabel, renderMenuFooter, ...iconAndRest } = props;
16
+ const { 'data-test': dataTest, className, disabled, error, errorClassName, helperText, isClearable = false, isCreatable, isSearchable = true, label, labelClassName, showAriaLabel = false, size = 'medium', menuIsOpen, menuPortalTarget = 'body', menuPlacement = 'auto', name, onChange, options, placeholder, required, value, formatGroupLabel, formatOptionLabel, renderMenuFooter, singleValueTooltipVisible = true, ...iconAndRest } = props;
15
17
  const id = useUID();
16
18
  const { iconLeft, iconLeftAriaLabel, iconLeftClassName, iconLeftContainerClassName, ...rest } = iconAndRest;
17
19
  useIsomorphicLayoutEffect(() => {
@@ -36,9 +38,16 @@ export const SelectField = (props) => {
36
38
  const selectRef = useRef();
37
39
  useEffect(() => {
38
40
  if (selectRef.current) {
39
- menuIsOpen ? selectRef.current.focus() : selectRef.current.blur();
41
+ menuIsOpen ? selectRef.current.onMenuOpen() : selectRef.current.onMenuClose();
40
42
  }
41
43
  }, [menuIsOpen]);
44
+ const innerComponents = useMemo(() => singleValueTooltipVisible
45
+ ? components
46
+ : {
47
+ ...components,
48
+ SingleValue: rsComponents.SingleValue,
49
+ }, [singleValueTooltipVisible]);
50
+ useCloseOnResize(selectRef);
42
51
  const selectProps = {
43
52
  ref: selectRef,
44
53
  inputId: id,
@@ -60,7 +69,7 @@ export const SelectField = (props) => {
60
69
  menuIsOpen,
61
70
  menuPlacement,
62
71
  menuPortalTarget: getMenuContainer(menuPortalTarget),
63
- components,
72
+ components: innerComponents,
64
73
  formatGroupLabel,
65
74
  formatOptionLabel,
66
75
  renderMenuFooter,
@@ -1 +1 @@
1
- {"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../src/Select/SelectField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../src/Select/SelectField.tsx"],"names":[],"mappings":"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"}
@@ -31,7 +31,6 @@ $selectGroupHeading: ':global .hz-select-field__group-heading';
31
31
 
32
32
  #{$selectContainer} {
33
33
  flex: 1 1 auto;
34
- overflow: hidden;
35
34
 
36
35
  @include c.typographyBodySmall;
37
36
  }
@@ -94,7 +93,6 @@ $selectGroupHeading: ':global .hz-select-field__group-heading';
94
93
  flex-direction: row;
95
94
  align-items: center;
96
95
  position: relative;
97
- overflow: hidden;
98
96
 
99
97
  .iconLeftContainer {
100
98
  .iconLeft {
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import { FC, RefObject } from 'react';
2
2
  import { TableCellProps } from 'react-table';
3
3
  export declare type CellWarningProps = {
4
4
  align: 'left' | 'right';
@@ -11,7 +11,15 @@ export declare type CellProps = {
11
11
  * you to compare them or add them up quickly in your head.
12
12
  */
13
13
  align?: 'left' | 'right' | 'center';
14
+ selected?: boolean;
14
15
  warning?: string;
15
16
  colSpan?: number;
17
+ cellId?: string;
18
+ selectionStartedRef?: RefObject<boolean>;
19
+ onMouseEnterSelection?: (id: string) => void;
20
+ onClickSelection?: (id: string, modifiers: {
21
+ ctrl: boolean;
22
+ shift: boolean;
23
+ }) => void;
16
24
  } & Omit<TableCellProps, 'key'>;
17
25
  export declare const Cell: FC<CellProps>;
package/lib/Table/Cell.js CHANGED
@@ -13,12 +13,31 @@ export const CellWarning = ({ align, warning }) => {
13
13
  }) },
14
14
  React.createElement(Icon, { icon: AlertTriangle, ariaLabelledBy: id, size: "small" })))));
15
15
  };
16
- export const Cell = ({ align = 'left', warning, colSpan, children, style, className, role }) => (React.createElement("div", { "data-test": "table-cell", className: cn(styles.td, {
17
- [styles.alignLeft]: align === 'left',
18
- [styles.alignRight]: align === 'right',
19
- [styles.alignCenter]: align === 'center',
20
- }, className), "aria-colspan": colSpan, style: style, role: role },
21
- warning && align === 'right' && React.createElement(CellWarning, { warning: warning, align: "right" }),
22
- children,
23
- warning && (align === 'left' || align === 'center') && React.createElement(CellWarning, { warning: warning, align: "left" })));
16
+ export const Cell = ({ align = 'left', warning, colSpan, children, style, className, role, cellId, onClickSelection, selected, onMouseEnterSelection, selectionStartedRef, }) => {
17
+ const handleClick = (e) => {
18
+ if (onClickSelection && cellId) {
19
+ onClickSelection(cellId, {
20
+ shift: e.shiftKey,
21
+ ctrl: e.ctrlKey || e.metaKey,
22
+ });
23
+ }
24
+ };
25
+ const handleMouseEnter = () => {
26
+ if (cellId && onMouseEnterSelection && (selectionStartedRef === null || selectionStartedRef === void 0 ? void 0 : selectionStartedRef.current)) {
27
+ onMouseEnterSelection(cellId);
28
+ }
29
+ };
30
+ return (
31
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events
32
+ React.createElement("div", { "data-test": "table-cell", className: cn(styles.td, {
33
+ [styles.alignLeft]: align === 'left',
34
+ [styles.alignRight]: align === 'right',
35
+ [styles.alignCenter]: align === 'center',
36
+ [styles.selectable]: onClickSelection,
37
+ [styles.selected]: selected,
38
+ }, className), "aria-colspan": colSpan, style: style, role: role, onMouseEnter: onClickSelection ? handleMouseEnter : undefined, onMouseDown: onClickSelection ? handleClick : undefined },
39
+ warning && align === 'right' && React.createElement(CellWarning, { warning: warning, align: "right" }),
40
+ children,
41
+ warning && (align === 'left' || align === 'center') && React.createElement(CellWarning, { warning: warning, align: "left" })));
42
+ };
24
43
  //# sourceMappingURL=Cell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","sourceRoot":"","sources":["../../src/Table/Cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,MAAM,MAAM,oBAAoB,CAAA;AAOvC,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;IAEnB,OAAO,CACL,oBAAC,OAAO,IAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,IAC9B,CAAC,UAAU,EAAE,EAAE,CAAC,CACf,0CACY,sBAAsB,EAChC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;YAChC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM;YAC/B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO;SAClC,CAAC;QAEF,oBAAC,IAAI,IAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAC,OAAO,GAAG,CAC1D,CACP,CACO,CACX,CAAA;AACH,CAAC,CAAA;AAYD,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAC7G,0CACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,MAAM,CAAC,EAAE,EACT;QACE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,MAAM;QACpC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,OAAO;QACtC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,KAAK,QAAQ;KACzC,EACD,SAAS,CACV,kBACa,OAAO,EACrB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI;IAET,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,oBAAC,WAAW,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,OAAO,GAAG;IAC/E,QAAQ;IACR,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,oBAAC,WAAW,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,GAAG,CAClG,CACP,CAAA"}
1
+ {"version":3,"file":"Cell.js","sourceRoot":"","sources":["../../src/Table/Cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,MAAM,MAAM,oBAAoB,CAAA;AAOvC,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;IAEnB,OAAO,CACL,oBAAC,OAAO,IAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,IAC9B,CAAC,UAAU,EAAE,EAAE,CAAC,CACf,0CACY,sBAAsB,EAChC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;YAChC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM;YAC/B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO;SAClC,CAAC;QAEF,oBAAC,IAAI,IAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAC,OAAO,GAAG,CAC1D,CACP,CACO,CACX,CAAA;AACH,CAAC,CAAA;AAiBD,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,EAClC,KAAK,GAAG,MAAM,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,GACpB,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,IAAI,gBAAgB,IAAI,MAAM,EAAE;YAC9B,gBAAgB,CAAC,MAAM,EAAE;gBACvB,KAAK,EAAE,CAAC,CAAC,QAAQ;gBACjB,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO;aAC7B,CAAC,CAAA;SACH;IACH,CAAC,CAAA;IACD,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,MAAM,IAAI,qBAAqB,KAAI,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAO,CAAA,EAAE;YACnE,qBAAqB,CAAC,MAAM,CAAC,CAAA;SAC9B;IACH,CAAC,CAAA;IAED,OAAO;IACL,iEAAiE;IACjE,0CACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,MAAM,CAAC,EAAE,EACT;YACE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,MAAM;YACpC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,OAAO;YACtC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,KAAK,QAAQ;YACxC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB;YACrC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;SAC5B,EACD,SAAS,CACV,kBACa,OAAO,EACrB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAC7D,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAEtD,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,oBAAC,WAAW,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,OAAO,GAAG;QAC/E,QAAQ;QACR,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,oBAAC,WAAW,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,GAAG,CAClG,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -26,6 +26,10 @@
26
26
  justify-content: center;
27
27
  }
28
28
 
29
+ &.selected {
30
+ background: lighten((c.$colorPrimary), 30) !important;
31
+ }
32
+
29
33
  &:not(:last-of-type) {
30
34
  border-right: c.$borderWidth solid c.$colorNeutral;
31
35
  }
@@ -42,3 +46,7 @@
42
46
  margin-right: c.$grid * 2;
43
47
  }
44
48
  }
49
+
50
+ .selectable {
51
+ user-select: none;
52
+ }
@@ -0,0 +1,11 @@
1
+ import { RefObject } from 'react';
2
+ import { ColumnInterface, ColumnInterfaceBasedOnValue, Cell, UseResizeColumnsState } from 'react-table';
3
+ import { CellProps } from './Cell';
4
+ export declare type CellWrapperProps<D extends object> = CellProps & {
5
+ cell: Cell<D>;
6
+ selectable?: boolean;
7
+ column?: ColumnInterface<D> & ColumnInterfaceBasedOnValue;
8
+ selectedColumnValuesRef?: RefObject<string[][]>;
9
+ columnResizing: UseResizeColumnsState<D>['columnResizing'];
10
+ };
11
+ export declare const CellWrapper: <D extends object>(props: CellWrapperProps<D>) => JSX.Element;
@@ -0,0 +1,17 @@
1
+ import React, { useEffect } from 'react';
2
+ import { ROW_EXPANDER_COLUMN_ID } from './constants';
3
+ import { Cell as TableCell } from './Cell';
4
+ import { EnhancedCellRenderer } from './EnhancedRenderers';
5
+ export const CellWrapper = (props) => {
6
+ const { selectable, column, cell, columnResizing, selectedColumnValuesRef, onClickSelection, onMouseEnterSelection, selectionStartedRef, ...rest } = props;
7
+ const isSelectable = selectable && (column === null || column === void 0 ? void 0 : column.id) !== ROW_EXPANDER_COLUMN_ID;
8
+ useEffect(() => {
9
+ if (rest.selected && rest.cellId && (selectedColumnValuesRef === null || selectedColumnValuesRef === void 0 ? void 0 : selectedColumnValuesRef.current)) {
10
+ const [rowIndex, cellIndex] = rest.cellId.split(':');
11
+ selectedColumnValuesRef.current[Number(rowIndex)][Number(cellIndex)] = typeof cell.value !== 'object' ? String(cell.value) : '';
12
+ }
13
+ }, [rest, cell, selectedColumnValuesRef]);
14
+ const content = column ? (React.createElement(EnhancedCellRenderer, { cell: cell, hasCellRenderer: !!column.Cell, columnResizing: columnResizing })) : (cell.render('Cell'));
15
+ return (React.createElement(TableCell, { onClickSelection: isSelectable ? onClickSelection : undefined, selectionStartedRef: isSelectable ? selectionStartedRef : undefined, onMouseEnterSelection: isSelectable ? onMouseEnterSelection : undefined, ...rest }, content));
16
+ };
17
+ //# sourceMappingURL=CellWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellWrapper.js","sourceRoot":"","sources":["../../src/Table/CellWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,SAAS,EAAE,MAAM,OAAO,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAa,IAAI,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAU1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,KAA0B,EAAE,EAAE;IAC1E,MAAM,EACJ,UAAU,EACV,MAAM,EACN,IAAI,EACJ,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,GAAG,IAAI,EACR,GAAG,KAAK,CAAA;IAET,MAAM,YAAY,GAAG,UAAU,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,EAAE,MAAK,sBAAsB,CAAA;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAI,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,OAAO,CAAA,EAAE;YACpE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAA;YAExE,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;SAChI;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CACvB,oBAAC,oBAAoB,IAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,GAAI,CACrG,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACpB,CAAA;IAED,OAAO,CACL,oBAAC,SAAS,IACR,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAC7D,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,EACnE,qBAAqB,EAAE,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,KACnE,IAAI,IAEP,OAAO,CACE,CACb,CAAA;AACH,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { FC, MouseEvent, KeyboardEvent } from 'react';
1
+ import { FC, MouseEvent, KeyboardEvent, DragEvent } from 'react';
2
2
  import { TableHeaderProps, TableResizerProps } from 'react-table';
3
3
  export declare type HeaderProps = {
4
4
  /**
@@ -15,5 +15,8 @@ export declare type HeaderProps = {
15
15
  isResizing: boolean;
16
16
  getResizerProps: (props?: Partial<TableResizerProps>) => TableResizerProps;
17
17
  isLastHeader: boolean;
18
+ index: number;
19
+ onDragStart?: (e: DragEvent) => void;
20
+ onDrop?: (e: DragEvent, index: number) => void;
18
21
  } & Omit<TableHeaderProps, 'key'>;
19
22
  export declare const Header: FC<HeaderProps>;
@@ -1,10 +1,14 @@
1
- import React, { useMemo, useCallback } from 'react';
2
- import { ChevronDown, ChevronUp } from 'react-feather';
1
+ import React, { useMemo, useCallback, useRef } from 'react';
2
+ import { ChevronDown, ChevronUp, Menu } from 'react-feather';
3
3
  import cn from 'classnames';
4
4
  import { Icon } from '../Icon';
5
5
  import { keyIsOneOf } from '../utils/keyboard';
6
6
  import styles from './Header.module.scss';
7
- export const Header = ({ align = 'left', colSpan, children, canSort, isSorted, isSortedDesc, canResize, isResizing, getResizerProps, isLastHeader, onClick, style, className, role, }) => {
7
+ export const Header = ({ align = 'left', colSpan, children, canSort, isSorted, isSortedDesc, canResize, isResizing, getResizerProps, isLastHeader, onClick, style, className, role, index, onDragStart, onDrop, }) => {
8
+ const rootRef = useRef(null);
9
+ const isDragStarterRef = useRef(false);
10
+ const counterRef = useRef(0);
11
+ const draggable = !!onDrop && !!onDragStart;
8
12
  let ariaSort;
9
13
  if (isSorted) {
10
14
  ariaSort = isSortedDesc ? 'descending' : 'ascending';
@@ -13,6 +17,7 @@ export const Header = ({ align = 'left', colSpan, children, canSort, isSorted, i
13
17
  [styles.left]: align === 'left',
14
18
  [styles.right]: align === 'right',
15
19
  }), icon: !isSorted ? ChevronUp : isSortedDesc ? ChevronDown : ChevronUp, ariaLabel: !isSorted ? 'Not Sorted' : isSortedDesc ? 'Descending' : 'Ascending', size: "smallMedium" })), [align, isSorted, isSortedDesc]);
20
+ const DraggableIcon = (React.createElement(Icon, { icon: Menu, size: "small", ariaLabel: "draggable-indicator", className: cn(styles.dragIcon, { [styles.dragIconRight]: align === 'right' }) }));
16
21
  const onKeyPress = useCallback((event) => {
17
22
  event.preventDefault();
18
23
  if (keyIsOneOf(event, 'Enter') && onClick) {
@@ -25,16 +30,50 @@ export const Header = ({ align = 'left', colSpan, children, canSort, isSorted, i
25
30
  onKeyPress: onClick ? onKeyPress : undefined,
26
31
  onClick,
27
32
  };
28
- return (React.createElement("div", { "data-test": "table-header-container", className: cn(styles.container, className), style: style, role: role, "aria-colspan": colSpan, "aria-sort": ariaSort },
29
- React.createElement("div", { "data-test": "table-header-content", className: cn(styles.th, {
33
+ return (React.createElement("div", { ref: rootRef, "data-test": "table-header-container", className: cn(styles.container, className), style: style, role: role, "aria-colspan": colSpan, "aria-sort": ariaSort },
34
+ React.createElement("div", { draggable: draggable, "data-test": "table-header-content", className: cn(styles.th, {
30
35
  [styles.sortable]: canSort,
31
36
  [styles.alignLeft]: align === 'left',
32
37
  [styles.alignRight]: align === 'right',
33
38
  [styles.alignCenter]: align === 'center',
34
- }), ...buttonRoleProps },
39
+ }), onDragStart: draggable
40
+ ? (e) => {
41
+ e.dataTransfer.setData('text/plain', String(index));
42
+ isDragStarterRef.current = true;
43
+ onDragStart && onDragStart(e);
44
+ }
45
+ : undefined, onDragEnd: () => {
46
+ isDragStarterRef.current = false;
47
+ }, onDragOver: (e) => e.preventDefault(), onDragEnter: draggable
48
+ ? (e) => {
49
+ e.preventDefault();
50
+ if (!isDragStarterRef.current && rootRef.current && counterRef.current === 0) {
51
+ rootRef.current.classList.add(styles.dragOver);
52
+ }
53
+ counterRef.current++;
54
+ }
55
+ : undefined, onDragLeave: draggable
56
+ ? () => {
57
+ counterRef.current--;
58
+ if (rootRef.current && counterRef.current === 0) {
59
+ rootRef.current.classList.remove(styles.dragOver);
60
+ }
61
+ }
62
+ : undefined, onDrop: draggable
63
+ ? (e) => {
64
+ onDrop && onDrop(e, index);
65
+ if (rootRef.current) {
66
+ rootRef.current.classList.remove(styles.dragOver);
67
+ }
68
+ isDragStarterRef.current = false;
69
+ counterRef.current = 0;
70
+ }
71
+ : undefined, ...buttonRoleProps },
72
+ draggable && align === 'right' && DraggableIcon,
35
73
  canSort && align === 'right' && Chevron,
36
74
  children,
37
- canSort && (align === 'left' || align === 'center') && Chevron),
75
+ canSort && (align === 'left' || align === 'center') && Chevron,
76
+ draggable && (align === 'left' || align === 'center') && DraggableIcon),
38
77
  canResize && !isLastHeader && (React.createElement("div", { "data-test": "table-header-column-resizer-container", className: styles.resizer, ...getResizerProps() },
39
78
  React.createElement("div", { "data-test": "table-header-column-resizer", className: cn(styles.separator, {
40
79
  [styles.resizing]: isResizing,
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/Table/Header.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/Table/Header.tsx"],"names":[],"mappings":"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"}
@@ -59,6 +59,12 @@
59
59
  &.alignCenter {
60
60
  justify-content: center;
61
61
  }
62
+
63
+ &[draggable='true'] {
64
+ /* doiuse-disable css3-cursors-newer */
65
+ cursor: grabbing;
66
+ /* doiuse-enable css3-cursors-newer */
67
+ }
62
68
  }
63
69
  }
64
70
 
@@ -90,3 +96,16 @@
90
96
  background-color: c.$colorPrimary;
91
97
  }
92
98
  }
99
+
100
+ .dragOver {
101
+ @include h.outlineSimple;
102
+ }
103
+
104
+ .dragIcon {
105
+ margin-left: c.$grid * 2;
106
+ }
107
+
108
+ .dragIconRight {
109
+ margin-left: 0;
110
+ margin-right: c.$grid * 2;
111
+ }
@@ -1,12 +1,15 @@
1
1
  import { DataTestProp } from '@hazelcast/helpers';
2
- import { AnchorHTMLAttributes, FC, ReactChild, ReactElement } from 'react';
3
- import { TableOptions, Row as RowType, Cell as CellType, Column as ColumnType } from 'react-table';
2
+ import { AnchorHTMLAttributes, FC, ReactChild, ReactElement, ReactNode } from 'react';
3
+ import { TableOptions, Row as RowType, Cell as CellType, Column as ColumnType, TableInstance } from 'react-table';
4
4
  import { PaginationProps } from '../Pagination';
5
5
  import { CellProps } from './Cell';
6
6
  import { RowProps } from './Row';
7
- export type { Accessor, Column, Cell, Renderer, Row, CellProps, HeaderGroup, TableInstance } from 'react-table';
7
+ export type { Accessor, Cell, Renderer, Row, CellProps, HeaderGroup, TableInstance, TableState } from 'react-table';
8
+ export declare type Column<T extends object> = ColumnType<T> & {
9
+ canHide?: boolean;
10
+ };
8
11
  declare module 'react-table' {
9
- interface TableOptions<D extends object = {}> extends UsePaginationOptions<D>, UseSortByOptions<D>, UseFiltersOptions<D>, UseRowSelectOptions<D>, UseGroupByOptions<D>, UseResizeColumnsOptions<D>, Record<string, any> {
12
+ interface TableOptions<D extends object = {}> extends UsePaginationOptions<D & UseExpandedRowProps<D>>, UseSortByOptions<D>, UseFiltersOptions<D>, UseRowSelectOptions<D>, UseGroupByOptions<D>, UseExpandedOptions<D>, UseResizeColumnsOptions<D>, Record<string, any> {
10
13
  }
11
14
  interface Hooks<D extends object = {}> extends UseSortByHooks<D>, UseRowSelectHooks<D>, UseGroupByHooks<D> {
12
15
  }
@@ -22,7 +25,7 @@ declare module 'react-table' {
22
25
  }
23
26
  interface Cell<D extends object = {}, V = any> extends UseGroupByCellProps<D>, UseRowStateCellProps<D> {
24
27
  }
25
- interface Row<D extends object = {}> extends UseGroupByRowProps<D>, UseRowSelectRowProps<D> {
28
+ interface Row<D extends object = {}> extends UseGroupByRowProps<D>, UseRowSelectRowProps<D>, UseExpandedRowProps<D> {
26
29
  }
27
30
  }
28
31
  export declare type PaginationOptions = Partial<Pick<PaginationProps, 'pageSizeOptions'>>;
@@ -56,6 +59,7 @@ declare type CustomTableRowClickProps<D extends object> = {
56
59
  };
57
60
  declare type CustomTableProps<D extends object> = {
58
61
  loading?: boolean;
62
+ overlayLoading?: boolean;
59
63
  className?: string;
60
64
  hideHeader?: boolean;
61
65
  searchValue?: string;
@@ -70,6 +74,11 @@ declare type CustomTableProps<D extends object> = {
70
74
  autoResetGlobalFilter?: boolean;
71
75
  pageIndex?: number;
72
76
  onPageChange?: (newPage: number) => void;
77
+ onRowSelect?: (ids: string[]) => void;
78
+ columnsOrdering?: boolean;
79
+ children?: (table: ReactElement, tableInstance: TableInstance<D>) => ReactElement;
80
+ renderRowSubComponent?: (props: RowType<D>) => ReactNode;
81
+ onCopy?: (data: string[][]) => void;
73
82
  } & CustomTableRowClickProps<D> & DataTestProp;
74
83
  export declare type TableProps<D extends object> = TableOptions<D> & ExtendedPaginationProps & ControlledPaginationProps & CustomTableProps<D>;
75
84
  export type { ColumnType, RowType, CellType };
@@ -83,4 +92,4 @@ export type { ColumnType, RowType, CellType };
83
92
  * - Rows can be clickable. If you supply Table with `getHref` function rows will become <a> tags!
84
93
  * - Is able to resize columns out of the box
85
94
  */
86
- export declare const Table: <D extends object>({ "data-test": dataTest, autoResetSortBy, columns, data, defaultColumn, disableSortBy, onPaginationChange, manualPagination, onRenderedContentChange, autoResetPage, hidePagination, pageCount: controlledPageCount, defaultPageSize, paginationOptions, onRowClick, getHref, AnchorComponent, getCustomRowProps, getCustomCellProps, loading, noDataTitle, pageIndex: incomingPageIndex, initialState, className, headerClassName, contentClassName, footerClassName, searchValue, hideHeader, autoResetGlobalFilter, onPageChange, }: TableProps<D>) => ReactElement;
95
+ export declare const Table: <D extends object>({ "data-test": dataTest, autoResetSortBy, columns: propColumns, data, defaultColumn, disableSortBy, onPaginationChange, manualPagination, onRenderedContentChange, autoResetPage, hidePagination, pageCount: controlledPageCount, defaultPageSize, paginationOptions, onRowClick, getHref, AnchorComponent, getCustomRowProps, getCustomCellProps, loading, noDataTitle, pageIndex: incomingPageIndex, initialState, className, headerClassName, contentClassName, footerClassName, searchValue, hideHeader, autoResetGlobalFilter, onPageChange, overlayLoading, onRowSelect, columnsOrdering, autoResetResize, autoResetSelectedRows, children, renderRowSubComponent, autoResetExpanded, onCopy, }: TableProps<D>) => ReactElement;
@@ -1,15 +1,20 @@
1
- import React, { useEffect } from 'react';
1
+ import React, { useCallback, useEffect, useRef, useMemo, } from 'react';
2
2
  import cn from 'classnames';
3
- import { useTable, usePagination, useSortBy, useAsyncDebounce, useResizeColumns, useFlexLayout, useGlobalFilter, } from 'react-table';
4
- import { AlertTriangle } from 'react-feather';
3
+ import { useTable, usePagination, useSortBy, useAsyncDebounce, useResizeColumns, useFlexLayout, useGlobalFilter, useColumnOrder, useExpanded, } from 'react-table';
4
+ import { AlertTriangle, ChevronDown, ChevronUp } from 'react-feather';
5
5
  import { Pagination } from '../Pagination';
6
6
  import { Cell } from './Cell';
7
- import { EnhancedCellRenderer, EnhancedHeaderFooterRenderer } from './EnhancedRenderers';
7
+ import { EnhancedHeaderFooterRenderer } from './EnhancedRenderers';
8
8
  import { Header } from './Header';
9
- import { HeaderRow, LinkRow, Row } from './Row';
9
+ import { HeaderRow, Row } from './Row';
10
10
  import { Loader } from '../Loader';
11
11
  import { EmptyState } from '../EmptyState';
12
12
  import { usePrevious } from '../hooks/usePrevious';
13
+ import { Icon } from '../Icon';
14
+ import { TableContent } from './TableContent';
15
+ import { ROW_EXPANDER_COLUMN_ID } from './constants';
16
+ import { useColumnsSelection } from './features/columnsSelection';
17
+ import { useRefValue } from '../hooks';
13
18
  import styles from './Table.module.scss';
14
19
  import styleConsts from '../../styles/constants/export.module.scss';
15
20
  const column = {
@@ -29,12 +34,34 @@ const column = {
29
34
  * - Is able to resize columns out of the box
30
35
  */
31
36
  // Inspiration here: https://react-table.tanstack.com/docs/examples/basic
32
- export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns, data, defaultColumn = column, disableSortBy, onPaginationChange, manualPagination, onRenderedContentChange, autoResetPage = false, hidePagination = false, pageCount: controlledPageCount, defaultPageSize = 10, paginationOptions, onRowClick, getHref, AnchorComponent, getCustomRowProps, getCustomCellProps, loading, noDataTitle = 'The table is empty', pageIndex: incomingPageIndex, initialState = { pageIndex: incomingPageIndex || 0, pageSize: defaultPageSize }, className = '', headerClassName = '', contentClassName = '', footerClassName = '', searchValue, hideHeader, autoResetGlobalFilter = false, onPageChange, }) => {
37
+ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns: propColumns, data, defaultColumn = column, disableSortBy, onPaginationChange, manualPagination, onRenderedContentChange, autoResetPage = false, hidePagination = false, pageCount: controlledPageCount, defaultPageSize = 10, paginationOptions, onRowClick, getHref, AnchorComponent, getCustomRowProps, getCustomCellProps, loading, noDataTitle = 'The table is empty', pageIndex: incomingPageIndex, initialState = { pageIndex: incomingPageIndex || 0, pageSize: defaultPageSize }, className = '', headerClassName = '', contentClassName = '', footerClassName = '', searchValue, hideHeader, autoResetGlobalFilter = false, onPageChange, overlayLoading, onRowSelect, columnsOrdering = false, autoResetResize = false, autoResetSelectedRows = false, children, renderRowSubComponent, autoResetExpanded = false, onCopy, }) => {
33
38
  var _a;
39
+ const getOncopy = useRefValue(onCopy);
40
+ const draggedColumnRef = useRef(null);
34
41
  const previousIncomingPageIndex = usePrevious(incomingPageIndex);
35
- const { getTableProps, headerGroups, footerGroups, prepareRow, page, canPreviousPage, canNextPage, pageCount, gotoPage, nextPage, previousPage, setPageSize,
36
- // Get the state from the instance
37
- state: { pageIndex, pageSize, columnResizing }, setGlobalFilter, } = useTable({
42
+ // Debounce our `fetchData` call for 200ms.
43
+ // We can use non-null assertion here since we're checking existence of `fetchData` in the `useEffect` below
44
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
45
+ const columns = useMemo(() => {
46
+ if (renderRowSubComponent || data.some((item) => 'subRows' in item)) {
47
+ return [
48
+ {
49
+ width: 60,
50
+ disableResizing: true,
51
+ id: ROW_EXPANDER_COLUMN_ID,
52
+ Cell: ({ row }) => {
53
+ return row.canExpand || renderRowSubComponent ? (React.createElement("div", { tabIndex: 0, role: "button", "data-test": "row-expander", className: styles.expander, ...row.getToggleRowExpandedProps() },
54
+ React.createElement(Icon, { icon: row.isExpanded ? ChevronUp : ChevronDown, ariaLabel: "row-expander" }))) : null;
55
+ },
56
+ },
57
+ ...propColumns,
58
+ ];
59
+ }
60
+ return propColumns;
61
+ }, [propColumns, data, renderRowSubComponent]);
62
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
63
+ const onPaginationChangeDebounced = useAsyncDebounce(onPaginationChange, 200);
64
+ const tableInstance = useTable({
38
65
  columns,
39
66
  data,
40
67
  disableSortBy,
@@ -50,11 +77,50 @@ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns,
50
77
  autoResetPage,
51
78
  defaultColumn,
52
79
  autoResetGlobalFilter,
53
- }, useGlobalFilter, useSortBy, usePagination, useFlexLayout, useResizeColumns);
54
- // Debounce our `fetchData` call for 200ms.
55
- // We can use non-null assertion here since we're checking existence of `fetchData` in the `useEffect` below
56
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
57
- const onPaginationChangeDebounced = useAsyncDebounce(onPaginationChange, 200);
80
+ autoResetResize,
81
+ autoResetSelectedRows,
82
+ autoResetExpanded,
83
+ paginateExpandedRows: false,
84
+ }, useGlobalFilter, useSortBy, useExpanded, usePagination, useFlexLayout, useResizeColumns, useColumnOrder);
85
+ const { getTableProps, headerGroups, footerGroups, prepareRow, page, visibleColumns, canPreviousPage, canNextPage, pageCount, gotoPage, nextPage, previousPage, setPageSize,
86
+ // Get the state from the instance
87
+ state: { pageIndex, pageSize, columnResizing, selectedRowIds }, setGlobalFilter, setColumnOrder, } = tableInstance;
88
+ // drag and drop
89
+ const onDragStart = useCallback((e) => {
90
+ draggedColumnRef.current = Number(e.dataTransfer.getData('text/plain'));
91
+ }, []);
92
+ const onDrop = useCallback((e, columnIndex) => {
93
+ if (draggedColumnRef.current !== null && columnIndex !== draggedColumnRef.current) {
94
+ const newColumns = [...visibleColumns];
95
+ newColumns[columnIndex] = visibleColumns[draggedColumnRef.current];
96
+ newColumns[draggedColumnRef.current] = visibleColumns[columnIndex];
97
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
98
+ setColumnOrder(newColumns.map(({ id, accessor }) => (id || accessor)));
99
+ }
100
+ }, [visibleColumns, setColumnOrder]);
101
+ const columnsSelectionProps = useColumnsSelection({
102
+ rowsPerPage: page.length,
103
+ columnsPerRow: columns.length,
104
+ });
105
+ const { onEndSelection, getSelectedColumns, selectedColumnValuesRef } = columnsSelectionProps;
106
+ const onKeyUp = useCallback((e) => {
107
+ const callback = getOncopy();
108
+ if (callback) {
109
+ const { columns, range } = getSelectedColumns();
110
+ if (columns.size || (range[0] !== undefined && range[0] !== undefined)) {
111
+ if ((e.ctrlKey || e.metaKey) && e.key === 'c') {
112
+ callback(selectedColumnValuesRef === null || selectedColumnValuesRef === void 0 ? void 0 : selectedColumnValuesRef.current);
113
+ }
114
+ }
115
+ }
116
+ }, [getOncopy, getSelectedColumns, selectedColumnValuesRef]);
117
+ useEffect(() => {
118
+ return () => {
119
+ document.body.removeEventListener('mouseup', onEndSelection);
120
+ document.body.removeEventListener('contextmenu', onEndSelection);
121
+ document.body.removeEventListener('keyup', onKeyUp);
122
+ };
123
+ }, [onKeyUp, onEndSelection]);
58
124
  // Listen for changes in pagination and use the state to fetch new data. This is a recommended way to fetch new data: https://react-table.tanstack.com/docs/faq#how-can-i-use-the-table-state-to-fetch-new-data
59
125
  useEffect(() => {
60
126
  if (onPaginationChange) {
@@ -88,6 +154,11 @@ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns,
88
154
  gotoPage(incomingPageIndex);
89
155
  }
90
156
  }, [gotoPage, incomingPageIndex, previousIncomingPageIndex]);
157
+ useEffect(() => {
158
+ if (onRowSelect) {
159
+ onRowSelect(Object.keys(selectedRowIds));
160
+ }
161
+ }, [onRowSelect, selectedRowIds]);
91
162
  const hasData = data.length > 0;
92
163
  // If at least one of the columns has footer then we display the footer row
93
164
  const hasFooter = !loading && hasData && columns.some((col) => !!col.Footer);
@@ -97,7 +168,7 @@ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns,
97
168
  const cellIndexOffset = pageSize * pageIndex + headerIndex;
98
169
  // Total row count.
99
170
  const rowCount = data.length + headerIndex + (hasFooter ? 1 : 0);
100
- return (React.createElement("div", { "data-test": dataTest !== null && dataTest !== void 0 ? dataTest : 'table-wrapper', className: className },
171
+ const content = (React.createElement("div", { "data-test": dataTest !== null && dataTest !== void 0 ? dataTest : 'table-wrapper', className: className },
101
172
  React.createElement("div", { className: cn(styles.container, {
102
173
  [styles.spaceBottom]: !hidePagination,
103
174
  }) },
@@ -106,34 +177,14 @@ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns,
106
177
  const { key: headerGroupKey, ...restHeaderGroupProps } = headerGroup.getHeaderGroupProps();
107
178
  return (React.createElement(HeaderRow, { key: headerGroupKey, ...restHeaderGroupProps, ariaRowIndex: headerIndex }, headerGroup.headers.map((column, i) => {
108
179
  const { key: columnKey, ...restHeaderProps } = column.getHeaderProps(column.getSortByToggleProps());
109
- return (React.createElement(Header, { key: columnKey, align: column.align, canSort: column.canSort, isSorted: column.isSorted, isSortedDesc: column.isSortedDesc, isLastHeader: headerGroup.headers.length === i + 1, canResize: column.canResize, isResizing: column.isResizing, getResizerProps: column.getResizerProps, ...restHeaderProps },
180
+ const isDraggable = columnsOrdering && column.id !== 'expander';
181
+ return (React.createElement(Header, { index: i, key: columnKey, align: column.align, canSort: column.canSort, isSorted: column.isSorted, isSortedDesc: column.isSortedDesc, isLastHeader: headerGroup.headers.length === i + 1, canResize: column.canResize, isResizing: column.isResizing, getResizerProps: column.getResizerProps, onDrop: isDraggable ? onDrop : undefined, onDragStart: onDragStart, ...restHeaderProps },
110
182
  React.createElement(EnhancedHeaderFooterRenderer, { column: column, columnResizing: columnResizing, type: "Header" })));
111
183
  })));
112
184
  }))),
113
- loading ? (React.createElement(Row, { role: "row" },
185
+ !overlayLoading && loading ? (React.createElement(Row, { role: "row" },
114
186
  React.createElement(Cell, { role: "cell", align: "center", colSpan: columns.length, "data-test": "table-loader-cell" },
115
- React.createElement(Loader, null)))) : hasData ? (React.createElement("div", { "data-test": "table-cell-row-group", role: "rowgroup", className: contentClassName }, page.map((row) => {
116
- prepareRow(row);
117
- const { key: rowKey, ...restRowProps } = row.getRowProps(getCustomRowProps === null || getCustomRowProps === void 0 ? void 0 : getCustomRowProps(row));
118
- const cells = row.cells.map((cell, i) => {
119
- const { key: cellKey, ...restCellProps } = cell.getCellProps(getCustomCellProps === null || getCustomCellProps === void 0 ? void 0 : getCustomCellProps(cell));
120
- // We don't want to use cell.column.Cell as that is a ColumnInstance which already has a cell renderer
121
- const column = columns[i];
122
- return (React.createElement(Cell, { key: cellKey, align: cell.column.align, ...restCellProps },
123
- React.createElement(EnhancedCellRenderer, { cell: cell, hasCellRenderer: !!column.Cell, columnResizing: columnResizing })));
124
- });
125
- if (getHref) {
126
- const href = getHref(row);
127
- if (href) {
128
- return (React.createElement(LinkRow, { key: rowKey, AnchorComponent: AnchorComponent, ...restRowProps, ariaRowIndex: row.index + 1 + cellIndexOffset, href: href }, cells));
129
- }
130
- }
131
- return (React.createElement(Row, { key: rowKey, ...restRowProps, ariaRowIndex: row.index + 1 + cellIndexOffset, onClick: onRowClick
132
- ? () => {
133
- onRowClick(row);
134
- }
135
- : undefined }, cells));
136
- }))) : (React.createElement("div", { role: "row" },
187
+ React.createElement(Loader, null)))) : hasData ? (React.createElement(TableContent, { page: page, onCopy: onCopy, getHref: getHref, columns: columns, onKeyUp: onKeyUp, ...columnsSelectionProps, onRowClick: onRowClick, prepareRow: prepareRow, className: contentClassName, columnResizing: columnResizing, AnchorComponent: AnchorComponent, cellIndexOffset: cellIndexOffset, getCustomRowProps: getCustomRowProps, getCustomCellProps: getCustomCellProps, renderRowSubComponent: renderRowSubComponent })) : (React.createElement("div", { role: "row" },
137
188
  React.createElement("div", { role: "cell" },
138
189
  React.createElement(EmptyState, { "data-test": "table-no-data", className: styles.empty, title: noDataTitle, icon: AlertTriangle, iconLabel: "Alert" })))),
139
190
  hasFooter && (React.createElement("div", { "data-test": "table-footer-row-group", role: "rowgroup", className: footerClassName }, footerGroups.map((group) => {
@@ -170,5 +221,9 @@ export const Table = ({ 'data-test': dataTest, autoResetSortBy = false, columns,
170
221
  previousPage();
171
222
  }
172
223
  }, pageSize: pageSize, setPageSize: setPageSize, numberOfItems: data.length, pageSizeOptions: (_a = paginationOptions === null || paginationOptions === void 0 ? void 0 : paginationOptions.pageSizeOptions) !== null && _a !== void 0 ? _a : [5, 10, 20] }))));
224
+ if (children) {
225
+ return children(content, tableInstance);
226
+ }
227
+ return content;
173
228
  };
174
229
  //# sourceMappingURL=Table.js.map