@carbon/ibm-products 1.46.1 → 1.47.0

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/css/index-full-carbon.css +42 -13
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +4 -4
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +4 -1
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +38 -9
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +42 -13
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +4 -4
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/Card/CardFooter.js +2 -2
  18. package/es/components/Datagrid/Datagrid/DatagridRow.js +37 -10
  19. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +18 -4
  20. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +15 -2
  21. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +4 -2
  22. package/es/components/Datagrid/useActionsColumn.js +22 -1
  23. package/es/components/Datagrid/useDefaultStringRenderer.js +1 -1
  24. package/es/components/Datagrid/useNestedRows.js +2 -4
  25. package/es/components/Datagrid/useSelectAllToggle.js +16 -2
  26. package/es/components/Datagrid/useSelectRows.js +17 -3
  27. package/es/components/Datagrid/useStickyColumn.js +19 -5
  28. package/es/components/Datagrid/utils/getArgTypes.js +5 -0
  29. package/es/components/SidePanel/SidePanel.js +14 -5
  30. package/lib/components/Card/CardFooter.js +2 -2
  31. package/lib/components/Datagrid/Datagrid/DatagridRow.js +37 -10
  32. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +20 -3
  33. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +14 -1
  34. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +3 -1
  35. package/lib/components/Datagrid/useActionsColumn.js +22 -1
  36. package/lib/components/Datagrid/useDefaultStringRenderer.js +1 -1
  37. package/lib/components/Datagrid/useNestedRows.js +2 -4
  38. package/lib/components/Datagrid/useSelectAllToggle.js +19 -2
  39. package/lib/components/Datagrid/useSelectRows.js +19 -2
  40. package/lib/components/Datagrid/useStickyColumn.js +18 -4
  41. package/lib/components/Datagrid/utils/getArgTypes.js +5 -0
  42. package/lib/components/SidePanel/SidePanel.js +14 -5
  43. package/package.json +5 -5
  44. package/scss/components/Datagrid/_storybook-styles.scss +26 -0
  45. package/scss/components/Datagrid/styles/_datagrid.scss +22 -3
  46. package/scss/components/Datagrid/styles/_useInlineEdit.scss +4 -0
  47. package/scss/components/Datagrid/styles/_useNestedRows.scss +17 -0
  48. package/scss/components/Datagrid/styles/_useSelectAllToggle.scss +11 -8
  49. package/scss/components/Datagrid/styles/_useStickyColumn.scss +3 -3
  50. package/scss/components/EmptyStates/_empty-state.scss +4 -3
  51. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
@@ -1,22 +1,36 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
5
  var _excluded = ["onChange"];
5
6
  /*
6
7
  * Licensed Materials - Property of IBM
7
8
  * 5724-Q36
8
- * (c) Copyright IBM Corp. 2020
9
+ * (c) Copyright IBM Corp. 2023
9
10
  * US Government Users Restricted Rights - Use, duplication or disclosure
10
11
  * restricted by GSA ADP Schedule Contract with IBM Corp.
11
12
  */
12
13
  // @flow
13
- import React from 'react';
14
+ import React, { useLayoutEffect, useState } from 'react';
14
15
  import { DataTable } from 'carbon-components-react';
15
16
  import cx from 'classnames';
16
17
  import { pkg } from '../../../settings';
17
18
  var blockClass = "".concat(pkg.prefix, "--datagrid");
18
19
  var SelectAll = function SelectAll(datagridState) {
19
20
  var _columns$;
21
+ var _useState = useState(window.innerWidth),
22
+ _useState2 = _slicedToArray(_useState, 2),
23
+ windowSize = _useState2[0],
24
+ setWindowSize = _useState2[1];
25
+ useLayoutEffect(function () {
26
+ function updateSize() {
27
+ setWindowSize(window.innerWidth);
28
+ }
29
+ window.addEventListener('resize', updateSize);
30
+ return function () {
31
+ return window.removeEventListener('resize', updateSize);
32
+ };
33
+ }, []);
20
34
  var isFetching = datagridState.isFetching,
21
35
  getToggleAllRowsSelectedProps = datagridState.getToggleAllRowsSelectedProps,
22
36
  getToggleAllPageRowsSelectedProps = datagridState.getToggleAllPageRowsSelectedProps,
@@ -29,7 +43,7 @@ var SelectAll = function SelectAll(datagridState) {
29
43
  var isFirstColumnStickyLeft = ((_columns$ = columns[0]) === null || _columns$ === void 0 ? void 0 : _columns$.sticky) === 'left' && withStickyColumn;
30
44
  if (hideSelectAll || radio) {
31
45
  return /*#__PURE__*/React.createElement("div", {
32
- className: cx("".concat(blockClass, "__head-hidden-select-all"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft))
46
+ className: cx("".concat(blockClass, "__head-hidden-select-all"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
33
47
  });
34
48
  }
35
49
  var getProps = DatagridPagination ? getToggleAllPageRowsSelectedProps : getToggleAllRowsSelectedProps;
@@ -37,7 +51,7 @@ var SelectAll = function SelectAll(datagridState) {
37
51
  onChange = _getProps.onChange,
38
52
  selectProps = _objectWithoutProperties(_getProps, _excluded);
39
53
  return /*#__PURE__*/React.createElement("div", {
40
- className: cx("".concat(blockClass, "__head-select-all"), "".concat(blockClass, "__checkbox-cell"), _defineProperty({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft))
54
+ className: cx("".concat(blockClass, "__head-select-all"), "".concat(blockClass, "__checkbox-cell"), _defineProperty({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
41
55
  }, /*#__PURE__*/React.createElement(TableSelectAll, _extends({}, selectProps, {
42
56
  name: "".concat(tableId, "-select-all-checkbox-name"),
43
57
  onSelect: onChange,
@@ -11,7 +11,7 @@ var _excluded = ["onChange"];
11
11
  * restricted by GSA ADP Schedule Contract with IBM Corp.
12
12
  */
13
13
  // @flow
14
- import React, { useEffect, useState } from 'react';
14
+ import React, { useEffect, useState, useLayoutEffect } from 'react';
15
15
  import PropTypes from 'prop-types';
16
16
  import cx from 'classnames';
17
17
  import { OverflowMenu, OverflowMenuItem, Checkbox } from 'carbon-components-react';
@@ -45,6 +45,19 @@ var SelectAllWithToggle = function SelectAllWithToggle(_ref) {
45
45
  onSelectAllRows(isAllRowsSelected && selectAllMode === SELECT_ALL_ROWS);
46
46
  }
47
47
  }, [isAllRowsSelected, selectAllMode, onSelectAllRows]);
48
+ var _useState3 = useState(window.innerWidth),
49
+ _useState4 = _slicedToArray(_useState3, 2),
50
+ windowSize = _useState4[0],
51
+ setWindowSize = _useState4[1];
52
+ useLayoutEffect(function () {
53
+ function updateSize() {
54
+ setWindowSize(window.innerWidth);
55
+ }
56
+ window.addEventListener('resize', updateSize);
57
+ return function () {
58
+ return window.removeEventListener('resize', updateSize);
59
+ };
60
+ }, []);
48
61
  var _ref2 = selectAllToggle || {},
49
62
  onSelectAllRows = _ref2.onSelectAllRows,
50
63
  labels = _ref2.labels;
@@ -61,7 +74,7 @@ var SelectAllWithToggle = function SelectAllWithToggle(_ref) {
61
74
  return /*#__PURE__*/React.createElement("th", {
62
75
  role: "columnheader",
63
76
  scope: "col",
64
- className: cx("".concat(blockClass, "__select-all-toggle-on"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft))
77
+ className: cx("".concat(blockClass, "__select-all-toggle-on"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
65
78
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Checkbox, _extends({}, selectProps, {
66
79
  name: "".concat(tableId, "-select-all-checkbox-name"),
67
80
  onClick: function onClick(e) {
@@ -3,7 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
5
  /**
6
- * Copyright IBM Corp. 2022, 2022
6
+ * Copyright IBM Corp. 2022, 2023
7
7
  *
8
8
  * This source code is licensed under the Apache-2.0 license found in the
9
9
  * LICENSE file in the root directory of this source tree.
@@ -57,7 +57,9 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
57
57
  var _useState7 = useState(columnDefinitions
58
58
  // hide the columns without Header, e.g the sticky actions, spacer
59
59
  .filter(function (colDef) {
60
- return !!colDef.Header.props && !colDef.isAction;
60
+ return !!colDef.Header.props && !!colDef.Header.props.title;
61
+ }).filter(function (colDef) {
62
+ return !colDef.isAction;
61
63
  })
62
64
  // only sort the hidden column to the end when modal reopen
63
65
  .sort(function (defA, defB) {
@@ -3,6 +3,8 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
4
  var _excluded = ["id", "itemText", "onClick", "icon"],
5
5
  _excluded2 = ["id", "onClick", "shouldHideMenuItem", "shouldDisableMenuItem", "disabled"];
6
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
8
  /*
7
9
  * Licensed Materials - Property of IBM
8
10
  * 5724-Q36
@@ -97,7 +99,7 @@ var useActionsColumn = function useActionsColumn(hooks) {
97
99
  })))),
98
100
  className: cx((_cx3 = {}, _defineProperty(_cx3, "".concat(blockClass, "__actions-column-cell"), true), _defineProperty(_cx3, "".concat(blockClass, "__cell"), true), _cx3)),
99
101
  style: {
100
- width: 96
102
+ width: rowActions.length > 2 ? 48 : 96
101
103
  }
102
104
  }];
103
105
  }
@@ -106,6 +108,25 @@ var useActionsColumn = function useActionsColumn(hooks) {
106
108
  hooks.getCellProps.push(addActionsMenu);
107
109
  }
108
110
  };
111
+ var useStickyHeaderWidth = function useStickyHeaderWidth(instance) {
112
+ var rowActions = instance.rowActions;
113
+ if (rowActions && Array.isArray(rowActions)) {
114
+ var addHeaderWidth = function addHeaderWidth(props, cellData) {
115
+ var column = cellData.column;
116
+ if (column.isAction) {
117
+ return [props, {
118
+ style: _objectSpread(_objectSpread({}, props.style), {}, {
119
+ width: rowActions.length > 2 ? 48 : 96 // set header width based on action length
120
+ })
121
+ }];
122
+ }
123
+
124
+ return [props];
125
+ };
126
+ hooks.getHeaderProps.push(addHeaderWidth);
127
+ }
128
+ };
129
+ hooks.useInstance.push(useStickyHeaderWidth);
109
130
  hooks.useInstance.push(useAttachActionsOnInstance);
110
131
  };
111
132
  export default useActionsColumn;
@@ -17,7 +17,7 @@ var useDefaultStringRenderer = function useDefaultStringRenderer(hooks) {
17
17
  var StringRenderer = function StringRenderer(tableProps) {
18
18
  var _tableProps$column;
19
19
  return /*#__PURE__*/React.createElement("div", {
20
- className: cx("".concat(blockClass, "__defaultStringRenderer"), _defineProperty({}, "".concat(blockClass, "__defaultStringRenderer--multiline"), (_tableProps$column = tableProps.column) === null || _tableProps$column === void 0 ? void 0 : _tableProps$column.multiLineWrap)),
20
+ className: cx("".concat(blockClass, "__defaultStringRenderer"), _defineProperty({}, "".concat(blockClass, "__defaultStringRenderer--multiline"), ((_tableProps$column = tableProps.column) === null || _tableProps$column === void 0 ? void 0 : _tableProps$column.multiLineWrap) || (tableProps === null || tableProps === void 0 ? void 0 : tableProps.multiLineWrapAll))),
21
21
  title: tableProps.value
22
22
  }, tableProps.value);
23
23
  };
@@ -24,9 +24,7 @@ var useNestedRows = function useNestedRows(hooks) {
24
24
  var row = _ref2.row;
25
25
  return [props, {
26
26
  style: {
27
- marginLeft: "".concat(row.depth > 0 ? marginLeft : 0, "px"),
28
- paddingLeft: "".concat(row.depth === 2 ? marginLeft * (row.depth - 1) + marginLeft - 8 : row.depth > 2 ? marginLeft * (row.depth - 1) + marginLeft : row.depth === 1 ? marginLeft - 16 : 0, "px"),
29
- maxWidth: "calc(100% - ".concat(marginLeft * row.depth, "px)")
27
+ paddingLeft: "".concat(row.depth > 1 ? marginLeft * 2 + (row.depth - 1) * (marginLeft + marginLeft / 3) : row.depth === 1 ? marginLeft * 2 : 0, "px")
30
28
  }
31
29
  }];
32
30
  };
@@ -39,7 +37,7 @@ var useNestedRows = function useNestedRows(hooks) {
39
37
  }) === 0;
40
38
  return [props, {
41
39
  style: {
42
- marginRight: "".concat(isFirstCell && cell.row.depth > 0 ? "-".concat(marginLeft * (cell.row.depth + 1), "px") : '')
40
+ marginRight: "".concat(isFirstCell && cell.row.depth > 0 ? "".concat(-32 * cell.row.depth - 18, "px") : '')
43
41
  }
44
42
  }];
45
43
  };
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  /*
3
4
  * Licensed Materials - Property of IBM
4
5
  * 5724-Q36
@@ -7,7 +8,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
8
  * restricted by GSA ADP Schedule Contract with IBM Corp.
8
9
  */
9
10
  // @flow
10
- import React from 'react';
11
+ import React, { useLayoutEffect, useState } from 'react';
11
12
  import cx from 'classnames';
12
13
  import { selectionColumnId } from './common-column-ids';
13
14
  import SelectAllWithToggle from './Datagrid/DatagridSelectAllWithToggle';
@@ -36,6 +37,19 @@ var useSelectAllWithToggleComponent = function useSelectAllWithToggleComponent(h
36
37
  hooks.useInstance.push(useInstance);
37
38
  };
38
39
  var useAddClassNameToSelectRow = function useAddClassNameToSelectRow(hooks) {
40
+ var _useState = useState(window.innerWidth),
41
+ _useState2 = _slicedToArray(_useState, 2),
42
+ windowSize = _useState2[0],
43
+ setWindowSize = _useState2[1];
44
+ useLayoutEffect(function () {
45
+ function updateSize() {
46
+ setWindowSize(window.innerWidth);
47
+ }
48
+ window.addEventListener('resize', updateSize);
49
+ return function () {
50
+ return window.removeEventListener('resize', updateSize);
51
+ };
52
+ }, []);
39
53
  hooks.getCellProps.push(function (props, data) {
40
54
  var _columns$;
41
55
  var column = data.cell.column;
@@ -46,7 +60,7 @@ var useAddClassNameToSelectRow = function useAddClassNameToSelectRow(hooks) {
46
60
  var isFirstColumnStickyLeft = ((_columns$ = columns[0]) === null || _columns$ === void 0 ? void 0 : _columns$.sticky) === 'left' && withStickyColumn;
47
61
  if (column.id === selectionColumnId && DatagridPagination) {
48
62
  return [props, {
49
- className: cx("".concat(blockClass, "__select-all-toggle-on"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft))
63
+ className: cx("".concat(blockClass, "__select-all-toggle-on"), _defineProperty({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
50
64
  }];
51
65
  }
52
66
  return [props];
@@ -1,5 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
4
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
6
  var _excluded = ["onChange"];
@@ -8,12 +9,12 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
8
9
  /*
9
10
  * Licensed Materials - Property of IBM
10
11
  * 5724-Q36
11
- * (c) Copyright IBM Corp. 2020
12
+ * (c) Copyright IBM Corp. 2023
12
13
  * US Government Users Restricted Rights - Use, duplication or disclosure
13
14
  * restricted by GSA ADP Schedule Contract with IBM Corp.
14
15
  */
15
16
  // @flow
16
- import React from 'react';
17
+ import React, { useLayoutEffect, useState } from 'react';
17
18
  import cx from 'classnames';
18
19
  import { TableSelectRow } from 'carbon-components-react';
19
20
  import { SelectAll } from './Datagrid/DatagridSelectAll';
@@ -72,6 +73,19 @@ var SelectRow = function SelectRow(datagridState) {
72
73
  onRadioSelect = datagridState.onRadioSelect,
73
74
  columns = datagridState.columns,
74
75
  withStickyColumn = datagridState.withStickyColumn;
76
+ var _useState = useState(window.innerWidth),
77
+ _useState2 = _slicedToArray(_useState, 2),
78
+ windowSize = _useState2[0],
79
+ setWindowSize = _useState2[1];
80
+ useLayoutEffect(function () {
81
+ function updateSize() {
82
+ setWindowSize(window.innerWidth);
83
+ }
84
+ window.addEventListener('resize', updateSize);
85
+ return function () {
86
+ return window.removeEventListener('resize', updateSize);
87
+ };
88
+ }, []);
75
89
  var selectDisabled = isFetching || row.getRowProps().selectDisabled;
76
90
  var _row$getToggleRowSele = row.getToggleRowSelectedProps(),
77
91
  onChange = _row$getToggleRowSele.onChange,
@@ -92,7 +106,7 @@ var SelectRow = function SelectRow(datagridState) {
92
106
  },
93
107
  id: "".concat(tableId, "-").concat(row.index),
94
108
  name: "".concat(tableId, "-").concat(row.index, "-name"),
95
- className: cx("".concat(blockClass, "__checkbox-cell"), cellProps.className, _defineProperty({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft)),
109
+ className: cx("".concat(blockClass, "__checkbox-cell"), cellProps.className, _defineProperty({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft && windowSize > 671)),
96
110
  ariaLabel: "".concat(tableId, "-row-").concat(row.index) // TODO: aria label should be i18n'ed
97
111
  ,
98
112
  disabled: selectDisabled
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
5
  /*
@@ -9,7 +10,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
9
10
  * restricted by GSA ADP Schedule Contract with IBM Corp.
10
11
  */
11
12
 
12
- import { useEffect, useRef } from 'react';
13
+ import { useEffect, useRef, useLayoutEffect, useState } from 'react';
13
14
  import debounce from 'lodash/debounce';
14
15
  import cx from 'classnames';
15
16
  import { pkg } from '../../settings';
@@ -20,8 +21,21 @@ var OFFSET_SCROLL_CLASS = "".concat(styleClassPrefix, "-offset-scroll");
20
21
  var useStickyColumn = function useStickyColumn(hooks) {
21
22
  var tableBodyRef = useRef();
22
23
  var stickyHeaderCellRef = useRef();
23
- hooks.getCellProps.push(changeProps.bind(null, 'cell', null));
24
- hooks.getHeaderProps.push(changeProps.bind(null, 'header', stickyHeaderCellRef));
24
+ var _useState = useState(window.innerWidth),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ windowSize = _useState2[0],
27
+ setWindowSize = _useState2[1];
28
+ useLayoutEffect(function () {
29
+ function updateSize() {
30
+ setWindowSize(window.innerWidth);
31
+ }
32
+ window.addEventListener('resize', updateSize);
33
+ return function () {
34
+ return window.removeEventListener('resize', updateSize);
35
+ };
36
+ }, []);
37
+ hooks.getCellProps.push(changeProps.bind(null, 'cell', null, windowSize));
38
+ hooks.getHeaderProps.push(changeProps.bind(null, 'header', stickyHeaderCellRef, windowSize));
25
39
  hooks.getTableBodyProps.push(addTableBodyProps.bind(null, tableBodyRef));
26
40
  hooks.getHeaderGroupProps.push(function (props) {
27
41
  return [props, {
@@ -115,7 +129,7 @@ var addTableBodyProps = function addTableBodyProps(tableBodyRef, props) {
115
129
  ref: tableBodyRef
116
130
  }];
117
131
  };
118
- var changeProps = function changeProps(elementName, headerCellRef, props, data) {
132
+ var changeProps = function changeProps(elementName, headerCellRef, windowSize, props, data) {
119
133
  var column = data.column || data.cell.column;
120
134
  if (column.sticky === 'right') {
121
135
  var _cx;
@@ -128,7 +142,7 @@ var changeProps = function changeProps(elementName, headerCellRef, props, data)
128
142
  if (column.sticky === 'left') {
129
143
  var _data$instance, _cx2;
130
144
  return [props, _objectSpread({
131
- className: cx((_cx2 = {}, _defineProperty(_cx2, "".concat(leftStickyStyleClassPrefix, "-").concat(elementName), true), _defineProperty(_cx2, "".concat(leftStickyStyleClassPrefix, "-").concat(elementName, "--with-extra-select-column"), data === null || data === void 0 ? void 0 : (_data$instance = data.instance) === null || _data$instance === void 0 ? void 0 : _data$instance.withSelectRows), _cx2))
145
+ className: cx((_cx2 = {}, _defineProperty(_cx2, "".concat(leftStickyStyleClassPrefix, "-").concat(elementName), true && windowSize > 671), _defineProperty(_cx2, "".concat(leftStickyStyleClassPrefix, "-").concat(elementName, "--with-extra-select-column"), (data === null || data === void 0 ? void 0 : (_data$instance = data.instance) === null || _data$instance === void 0 ? void 0 : _data$instance.withSelectRows) && windowSize > 671), _cx2))
132
146
  }, headerCellRef && {
133
147
  ref: headerCellRef
134
148
  })];
@@ -95,5 +95,10 @@ export var ARG_TYPES = {
95
95
  name: 'Filter props',
96
96
  control: 'object',
97
97
  description: 'This is an object for all the props passed into the filter flyout and filter panel'
98
+ },
99
+ expandedContentAlign: {
100
+ control: 'select',
101
+ options: ['flex-start', 'space-between'],
102
+ description: 'This sets the alignment of content inside expanded row.'
98
103
  }
99
104
  };
@@ -3,7 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
5
  var _excluded = ["actionToolbarButtons", "actions", "animateTitle", "children", "className", "closeIconDescription", "condensedActions", "currentStep", "includeOverlay", "labelText", "navigationBackIconDescription", "onNavigationBack", "onRequestClose", "onUnmount", "open", "placement", "preventCloseOnClickOutside", "selectorPageContent", "selectorPrimaryFocus", "size", "slideIn", "subtitle", "title"],
6
- _excluded2 = ["label", "kind", "icon", "leading", "disabled", "className", "onClick"];
6
+ _excluded2 = ["label", "kind", "icon", "tooltipPosition", "tooltipAlignment", "leading", "disabled", "className", "onClick"];
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
8
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
9
  /**
@@ -402,6 +402,8 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
402
402
  var label = _ref5.label,
403
403
  kind = _ref5.kind,
404
404
  icon = _ref5.icon,
405
+ tooltipPosition = _ref5.tooltipPosition,
406
+ tooltipAlignment = _ref5.tooltipAlignment,
405
407
  leading = _ref5.leading,
406
408
  disabled = _ref5.disabled,
407
409
  className = _ref5.className,
@@ -413,8 +415,8 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
413
415
  size: "small",
414
416
  renderIcon: icon,
415
417
  iconDescription: label,
416
- tooltipPosition: "bottom",
417
- tooltipAlignment: "center",
418
+ tooltipPosition: tooltipPosition || 'bottom',
419
+ tooltipAlignment: tooltipAlignment || 'center',
418
420
  hasIconOnly: !leading,
419
421
  disabled: disabled,
420
422
  className: cx(["".concat(blockClass, "__action-toolbar-button"), className, (_ref6 = {}, _defineProperty(_ref6, "".concat(blockClass, "__action-toolbar-icon-only-button"), icon && !leading), _defineProperty(_ref6, "".concat(blockClass, "__action-toolbar-leading-button"), leading), _ref6)]),
@@ -495,13 +497,18 @@ SidePanel.propTypes = {
495
497
  leading: PropTypes.bool,
496
498
  icon: PropTypes.object,
497
499
  onClick: PropTypes.func,
498
- kind: PropTypes.oneOf(['ghost', 'tertiary', 'secondary', 'primary'])
500
+ kind: PropTypes.oneOf(['ghost', 'tertiary', 'secondary', 'primary']),
501
+ tooltipAlignment: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
502
+ tooltipPosition: PropTypes.oneOf(['start', 'center', 'end'])
499
503
  })),
500
504
  /**
501
505
  * The primary actions to be shown in the side panel. Each action is
502
506
  * specified as an object with optional fields: 'label' to supply the button
503
507
  * label, 'kind' to select the button kind (must be 'primary', 'secondary' or
504
- * 'ghost'), 'loading' to display a loading indicator, and 'onClick' to
508
+ * 'ghost'), 'tooltipPosition' to select where the tooltip is placed around
509
+ * the button (must be 'top', 'right', 'bottom', or 'left'), 'tooltipAlignment'
510
+ * to select how the tooltip is aligned with the button (must be 'start',
511
+ * 'center', or 'end', 'loading' to display a loading indicator, and 'onClick' to
505
512
  * receive notifications when the button is clicked. Additional fields in the
506
513
  * object will be passed to the Button component, and these can include
507
514
  * 'disabled', 'ref', 'className', and any other Button props. Any other
@@ -512,6 +519,8 @@ SidePanel.propTypes = {
512
519
  */
513
520
  actions: allPropTypes([ActionSet.validateActions(), PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({}, Button.propTypes), {}, {
514
521
  kind: PropTypes.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
522
+ tooltipPosition: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
523
+ tooltipAlignment: PropTypes.oneOf(['start', 'center', 'end']),
515
524
  label: PropTypes.string,
516
525
  loading: PropTypes.bool,
517
526
  // we duplicate this Button prop to improve the DocGen here
@@ -74,13 +74,13 @@ CardFooter.propTypes = {
74
74
  onPrimaryButtonClick: _propTypes.default.func,
75
75
  onSecondaryButtonClick: _propTypes.default.func,
76
76
  primaryButtonHref: _propTypes.default.string,
77
- primaryButtonIcon: _propTypes.default.string,
77
+ primaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
78
78
  primaryButtonKind: _propTypes.default.oneOf(['primary', 'ghost']),
79
79
  primaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
80
80
  primaryButtonText: _propTypes.default.string,
81
81
  productive: _propTypes.default.bool,
82
82
  secondaryButtonHref: _propTypes.default.string,
83
- secondaryButtonIcon: _propTypes.default.string,
83
+ secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
84
84
  secondaryButtonKind: _propTypes.default.oneOf(['secondary', 'ghost']),
85
85
  secondaryButtonText: _propTypes.default.string
86
86
  };
@@ -44,28 +44,55 @@ var DatagridRow = function DatagridRow(datagridState) {
44
44
  }
45
45
  return size;
46
46
  };
47
+ var hoverHandler = function hoverHandler(event) {
48
+ var _hoverRow$style, _hoverRow$style2, _hoverRow$style3;
49
+ var subRowCount = getVisibleNestedRowCount(row);
50
+ var totalNestedRowIndicatorHeight = (0, _layout.px)(subRowCount * rowHeights[rowSize]);
51
+ var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
52
+ hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.classList.add("".concat(blockClass, "__carbon-row-expanded-hover-active"));
53
+ var rowExpanderButton = hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.querySelector(".".concat(blockClass, "__row-expander"));
54
+ var rowSizeValue = rowSize || 'lg';
55
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style = hoverRow.style) === null || _hoverRow$style === void 0 ? void 0 : _hoverRow$style.setProperty("--".concat(blockClass, "--indicator-height"), totalNestedRowIndicatorHeight);
56
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style2 = hoverRow.style) === null || _hoverRow$style2 === void 0 ? void 0 : _hoverRow$style2.setProperty("--".concat(blockClass, "--row-height"), (0, _layout.px)(rowHeights[rowSizeValue]));
57
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style3 = hoverRow.style) === null || _hoverRow$style3 === void 0 ? void 0 : _hoverRow$style3.setProperty("--".concat(blockClass, "--indicator-offset-amount"), (0, _layout.px)((rowExpanderButton === null || rowExpanderButton === void 0 ? void 0 : rowExpanderButton.offsetLeft) || 0));
58
+ };
59
+ var focusRemover = function focusRemover() {
60
+ var elements = document.querySelectorAll(".".concat(blockClass, "__carbon-row-expanded"));
61
+ elements.forEach(function (el) {
62
+ el.classList.remove("".concat(blockClass, "__carbon-row-expanded-hover-active"));
63
+ });
64
+ };
47
65
  return /*#__PURE__*/_react.default.createElement(TableRow, (0, _extends2.default)({
48
66
  className: (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expandable"), row.canExpand), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), _cx))
49
67
  }, row.getRowProps(), {
50
68
  key: row.id,
51
69
  onMouseEnter: function onMouseEnter(event) {
52
- var _hoverRow$style, _hoverRow$style2, _hoverRow$style3;
53
70
  if (!withNestedRows) {
54
71
  return;
55
72
  }
56
- var subRowCount = getVisibleNestedRowCount(row);
57
- var totalNestedRowIndicatorHeight = (0, _layout.px)(subRowCount * rowHeights[rowSize]);
58
- var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
59
- hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.classList.add("".concat(blockClass, "__carbon-row-expanded-hover-active"));
60
- var rowExpanderButton = hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.querySelector(".".concat(blockClass, "__row-expander"));
61
- var rowSizeValue = rowSize || 'lg';
62
- hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style = hoverRow.style) === null || _hoverRow$style === void 0 ? void 0 : _hoverRow$style.setProperty("--".concat(blockClass, "--indicator-height"), totalNestedRowIndicatorHeight);
63
- hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style2 = hoverRow.style) === null || _hoverRow$style2 === void 0 ? void 0 : _hoverRow$style2.setProperty("--".concat(blockClass, "--row-height"), (0, _layout.px)(rowHeights[rowSizeValue]));
64
- hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style3 = hoverRow.style) === null || _hoverRow$style3 === void 0 ? void 0 : _hoverRow$style3.setProperty("--".concat(blockClass, "--indicator-offset-amount"), (0, _layout.px)((rowExpanderButton === null || rowExpanderButton === void 0 ? void 0 : rowExpanderButton.offsetLeft) || 0));
73
+ hoverHandler(event);
65
74
  },
66
75
  onMouseLeave: function onMouseLeave(event) {
67
76
  var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
68
77
  hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.classList.remove("".concat(blockClass, "__carbon-row-expanded-hover-active"));
78
+ },
79
+ onFocus: function onFocus(event) {
80
+ if (!withNestedRows) {
81
+ return;
82
+ }
83
+ hoverHandler(event);
84
+ },
85
+ onBlur: function onBlur() {
86
+ focusRemover();
87
+ },
88
+ onKeyUp: function onKeyUp(event) {
89
+ if (!withNestedRows) {
90
+ return;
91
+ }
92
+ if (event.key === 'Enter' || event.key === 'Space') {
93
+ focusRemover();
94
+ hoverHandler(event);
95
+ }
69
96
  }
70
97
  }), row.cells.map(function (cell, index) {
71
98
  var cellProps = cell.getCellProps();
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -8,14 +9,30 @@ exports.SelectAll = void 0;
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _react = _interopRequireDefault(require("react"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _react = _interopRequireWildcard(require("react"));
12
14
  var _carbonComponentsReact = require("carbon-components-react");
13
15
  var _classnames = _interopRequireDefault(require("classnames"));
14
16
  var _settings = require("../../../settings");
15
17
  var _excluded = ["onChange"];
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
20
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
17
21
  var SelectAll = function SelectAll(datagridState) {
18
22
  var _columns$;
23
+ var _useState = (0, _react.useState)(window.innerWidth),
24
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
25
+ windowSize = _useState2[0],
26
+ setWindowSize = _useState2[1];
27
+ (0, _react.useLayoutEffect)(function () {
28
+ function updateSize() {
29
+ setWindowSize(window.innerWidth);
30
+ }
31
+ window.addEventListener('resize', updateSize);
32
+ return function () {
33
+ return window.removeEventListener('resize', updateSize);
34
+ };
35
+ }, []);
19
36
  var isFetching = datagridState.isFetching,
20
37
  getToggleAllRowsSelectedProps = datagridState.getToggleAllRowsSelectedProps,
21
38
  getToggleAllPageRowsSelectedProps = datagridState.getToggleAllPageRowsSelectedProps,
@@ -28,7 +45,7 @@ var SelectAll = function SelectAll(datagridState) {
28
45
  var isFirstColumnStickyLeft = ((_columns$ = columns[0]) === null || _columns$ === void 0 ? void 0 : _columns$.sticky) === 'left' && withStickyColumn;
29
46
  if (hideSelectAll || radio) {
30
47
  return /*#__PURE__*/_react.default.createElement("div", {
31
- className: (0, _classnames.default)("".concat(blockClass, "__head-hidden-select-all"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft))
48
+ className: (0, _classnames.default)("".concat(blockClass, "__head-hidden-select-all"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
32
49
  });
33
50
  }
34
51
  var getProps = DatagridPagination ? getToggleAllPageRowsSelectedProps : getToggleAllRowsSelectedProps;
@@ -36,7 +53,7 @@ var SelectAll = function SelectAll(datagridState) {
36
53
  onChange = _getProps.onChange,
37
54
  selectProps = (0, _objectWithoutProperties2.default)(_getProps, _excluded);
38
55
  return /*#__PURE__*/_react.default.createElement("div", {
39
- className: (0, _classnames.default)("".concat(blockClass, "__head-select-all"), "".concat(blockClass, "__checkbox-cell"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft))
56
+ className: (0, _classnames.default)("".concat(blockClass, "__head-select-all"), "".concat(blockClass, "__checkbox-cell"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
40
57
  }, /*#__PURE__*/_react.default.createElement(TableSelectAll, (0, _extends2.default)({}, selectProps, {
41
58
  name: "".concat(tableId, "-select-all-checkbox-name"),
42
59
  onSelect: onChange,
@@ -47,6 +47,19 @@ var SelectAllWithToggle = function SelectAllWithToggle(_ref) {
47
47
  onSelectAllRows(isAllRowsSelected && selectAllMode === SELECT_ALL_ROWS);
48
48
  }
49
49
  }, [isAllRowsSelected, selectAllMode, onSelectAllRows]);
50
+ var _useState3 = (0, _react.useState)(window.innerWidth),
51
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
52
+ windowSize = _useState4[0],
53
+ setWindowSize = _useState4[1];
54
+ (0, _react.useLayoutEffect)(function () {
55
+ function updateSize() {
56
+ setWindowSize(window.innerWidth);
57
+ }
58
+ window.addEventListener('resize', updateSize);
59
+ return function () {
60
+ return window.removeEventListener('resize', updateSize);
61
+ };
62
+ }, []);
50
63
  var _ref2 = selectAllToggle || {},
51
64
  onSelectAllRows = _ref2.onSelectAllRows,
52
65
  labels = _ref2.labels;
@@ -63,7 +76,7 @@ var SelectAllWithToggle = function SelectAllWithToggle(_ref) {
63
76
  return /*#__PURE__*/_react.default.createElement("th", {
64
77
  role: "columnheader",
65
78
  scope: "col",
66
- className: (0, _classnames.default)("".concat(blockClass, "__select-all-toggle-on"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft))
79
+ className: (0, _classnames.default)("".concat(blockClass, "__select-all-toggle-on"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__select-all-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
67
80
  }, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({}, selectProps, {
68
81
  name: "".concat(tableId, "-select-all-checkbox-name"),
69
82
  onClick: function onClick(e) {
@@ -59,7 +59,9 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
59
59
  var _useState7 = (0, _react.useState)(columnDefinitions
60
60
  // hide the columns without Header, e.g the sticky actions, spacer
61
61
  .filter(function (colDef) {
62
- return !!colDef.Header.props && !colDef.isAction;
62
+ return !!colDef.Header.props && !!colDef.Header.props.title;
63
+ }).filter(function (colDef) {
64
+ return !colDef.isAction;
63
65
  })
64
66
  // only sort the hidden column to the end when modal reopen
65
67
  .sort(function (defA, defB) {