@laerdal/life-react-components 1.3.2-dev.4 → 1.3.2-dev.7

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 (81) hide show
  1. package/dist/esm/Button/Iconbutton.js +0 -1
  2. package/dist/esm/Button/Iconbutton.js.map +1 -1
  3. package/dist/esm/Dropdown/CommonStyling.js +4 -0
  4. package/dist/esm/Dropdown/CommonStyling.js.map +1 -1
  5. package/dist/esm/Dropdown/DropdownButton.js +5 -2
  6. package/dist/esm/Dropdown/DropdownButton.js.map +1 -1
  7. package/dist/esm/Dropdown/DropdownFilter.js.map +1 -1
  8. package/dist/esm/HyperLink/HyperLink.js +2 -1
  9. package/dist/esm/HyperLink/HyperLink.js.map +1 -1
  10. package/dist/esm/InputFields/Checkbox.js +23 -13
  11. package/dist/esm/InputFields/Checkbox.js.map +1 -1
  12. package/dist/esm/Table/Table.js +115 -181
  13. package/dist/esm/Table/Table.js.map +1 -1
  14. package/dist/esm/Table/TableBody.js +145 -0
  15. package/dist/esm/Table/TableBody.js.map +1 -0
  16. package/dist/esm/Table/TableFooter.js +67 -0
  17. package/dist/esm/Table/TableFooter.js.map +1 -0
  18. package/dist/esm/Table/TableHeaders.js +66 -0
  19. package/dist/esm/Table/TableHeaders.js.map +1 -0
  20. package/dist/esm/Table/TableStyles.js +175 -150
  21. package/dist/esm/Table/TableStyles.js.map +1 -1
  22. package/dist/esm/Table/__tests__/Table.test.js +0 -21
  23. package/dist/esm/Table/__tests__/Table.test.js.map +1 -1
  24. package/dist/js/Button/Iconbutton.d.ts +2 -2
  25. package/dist/js/Button/Iconbutton.js +0 -1
  26. package/dist/js/Button/Iconbutton.js.map +1 -1
  27. package/dist/js/Dropdown/CommonStyling.js +1 -1
  28. package/dist/js/Dropdown/CommonStyling.js.map +1 -1
  29. package/dist/js/Dropdown/DropdownButton.d.ts +1 -1
  30. package/dist/js/Dropdown/DropdownButton.js +5 -2
  31. package/dist/js/Dropdown/DropdownButton.js.map +1 -1
  32. package/dist/js/Dropdown/DropdownButtonTypes.d.ts +1 -0
  33. package/dist/js/Dropdown/DropdownFilter.d.ts +1 -1
  34. package/dist/js/Dropdown/DropdownFilter.js.map +1 -1
  35. package/dist/js/HyperLink/HyperLink.d.ts +1 -1
  36. package/dist/js/HyperLink/HyperLink.js +2 -2
  37. package/dist/js/HyperLink/HyperLink.js.map +1 -1
  38. package/dist/js/InputFields/Checkbox.d.ts +3 -2
  39. package/dist/js/InputFields/Checkbox.js +13 -11
  40. package/dist/js/InputFields/Checkbox.js.map +1 -1
  41. package/dist/js/Table/Table.js +145 -209
  42. package/dist/js/Table/Table.js.map +1 -1
  43. package/dist/js/Table/TableBody.d.ts +9 -0
  44. package/dist/js/Table/TableBody.js +176 -0
  45. package/dist/js/Table/TableBody.js.map +1 -0
  46. package/dist/js/Table/TableFooter.d.ts +13 -0
  47. package/dist/js/Table/TableFooter.js +88 -0
  48. package/dist/js/Table/TableFooter.js.map +1 -0
  49. package/dist/js/Table/TableHeaders.d.ts +9 -0
  50. package/dist/js/Table/TableHeaders.js +87 -0
  51. package/dist/js/Table/TableHeaders.js.map +1 -0
  52. package/dist/js/Table/TableStyles.d.ts +0 -7
  53. package/dist/js/Table/TableStyles.js +5 -31
  54. package/dist/js/Table/TableStyles.js.map +1 -1
  55. package/dist/js/Table/TableTypes.d.ts +23 -16
  56. package/dist/js/Table/__tests__/Table.test.js +8 -30
  57. package/dist/js/Table/__tests__/Table.test.js.map +1 -1
  58. package/dist/umd/Button/Iconbutton.js +0 -1
  59. package/dist/umd/Button/Iconbutton.js.map +1 -1
  60. package/dist/umd/Dropdown/CommonStyling.js +4 -0
  61. package/dist/umd/Dropdown/CommonStyling.js.map +1 -1
  62. package/dist/umd/Dropdown/DropdownButton.js +5 -2
  63. package/dist/umd/Dropdown/DropdownButton.js.map +1 -1
  64. package/dist/umd/Dropdown/DropdownFilter.js.map +1 -1
  65. package/dist/umd/HyperLink/HyperLink.js +2 -1
  66. package/dist/umd/HyperLink/HyperLink.js.map +1 -1
  67. package/dist/umd/InputFields/Checkbox.js +23 -13
  68. package/dist/umd/InputFields/Checkbox.js.map +1 -1
  69. package/dist/umd/Table/Table.js +141 -188
  70. package/dist/umd/Table/Table.js.map +1 -1
  71. package/dist/umd/Table/TableBody.js +281 -0
  72. package/dist/umd/Table/TableBody.js.map +1 -0
  73. package/dist/umd/Table/TableFooter.js +90 -0
  74. package/dist/umd/Table/TableFooter.js.map +1 -0
  75. package/dist/umd/Table/TableHeaders.js +103 -0
  76. package/dist/umd/Table/TableHeaders.js.map +1 -0
  77. package/dist/umd/Table/TableStyles.js +179 -155
  78. package/dist/umd/Table/TableStyles.js.map +1 -1
  79. package/dist/umd/Table/__tests__/Table.test.js +0 -21
  80. package/dist/umd/Table/__tests__/Table.test.js.map +1 -1
  81. package/package.json +1 -1
@@ -135,7 +135,7 @@
135
135
  }
136
136
  }
137
137
 
138
- &:not(.disabled):focus {
138
+ &:not(.disabled):not(.readonly):focus {
139
139
  outline: none;
140
140
 
141
141
  .checkbox-icon {
@@ -148,7 +148,7 @@
148
148
  }
149
149
  }
150
150
 
151
- &:not(.disabled):hover {
151
+ &:not(.disabled):not(.readonly):hover {
152
152
  .checkbox-icon {
153
153
  background-color: ${_styles.COLORS.primary_20};
154
154
 
@@ -158,7 +158,7 @@
158
158
  }
159
159
  }
160
160
 
161
- &:not(.disabled):active {
161
+ &:not(.disabled):not(.readonly):active {
162
162
  .checkbox-icon {
163
163
  background: ${_styles.COLORS.primary_100};
164
164
  box-shadow: none;
@@ -169,6 +169,14 @@
169
169
  }
170
170
  }
171
171
 
172
+ &.readonly{
173
+ cursor: inherit;
174
+ .checkbox-icon,
175
+ .checkbox-label {
176
+ pointer-events: none;
177
+ }
178
+ }
179
+
172
180
  &.disabled {
173
181
  box-shadow: none;
174
182
  cursor: not-allowed;
@@ -200,20 +208,21 @@
200
208
  margin,
201
209
  size,
202
210
  semiSelected,
203
- children
211
+ children,
212
+ readonly
204
213
  }, ref) => {
205
214
  const onKeyPress = e => {
206
- if (e.keyCode === 13 && !disabled) {
207
- select(!selected);
215
+ if (e.keyCode === 13 && !disabled && !readonly) {
216
+ select && select(!selected);
208
217
  }
209
218
  };
210
219
 
211
220
  const handleClick = () => {
212
- if (disabled) {
221
+ if (disabled || readonly) {
213
222
  return;
214
223
  }
215
224
 
216
- select(!selected);
225
+ select && select(!selected);
217
226
  };
218
227
 
219
228
  size = size ?? _types.Size.Medium;
@@ -221,9 +230,9 @@
221
230
  key: id,
222
231
  ref: ref,
223
232
  disabled: disabled,
224
- className: size.toString().toLowerCase().concat(disabled ? ' disabled' : ''),
233
+ className: size.toString().toLowerCase().concat(disabled ? ' disabled' : '').concat(readonly ? ' readonly' : ''),
225
234
  selected: selected,
226
- tabIndex: disabled ? -1 : 0,
235
+ tabIndex: disabled || readonly ? -1 : 0,
227
236
  showWarning: showWarning,
228
237
  margin: margin,
229
238
  onClick: handleClick,
@@ -250,15 +259,16 @@
250
259
  }, children));
251
260
  });
252
261
  Checkbox.propTypes = {
253
- id: _propTypes2.default.string.isRequired,
262
+ id: _propTypes2.default.string,
254
263
  selected: _propTypes2.default.bool.isRequired,
255
- select: _propTypes2.default.func.isRequired,
264
+ select: _propTypes2.default.func,
256
265
  label: _propTypes2.default.string,
257
266
  showWarning: _propTypes2.default.bool,
258
267
  disabled: _propTypes2.default.bool,
259
268
  margin: _propTypes2.default.string,
260
269
  iconPointerEventsTransparent: _propTypes2.default.bool,
261
- semiSelected: _propTypes2.default.bool
270
+ semiSelected: _propTypes2.default.bool,
271
+ readonly: _propTypes2.default.bool
262
272
  };
263
273
  exports.default = Checkbox;
264
274
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/InputFields/Checkbox.tsx"],"names":["StyledCheckBox","styled","div","props","margin","COLORS","black","neutral_600","ComponentSStyling","ComponentTextStyle","ComponentMStyling","ComponentLStyling","white","primary_500","primary_20","primary_700","primary_100","primary_800","neutral_300","id","selected","select","label","showWarning","disabled","iconPointerEventsTransparent","semiSelected","Checkbox","children","onKeyPress","e","handleClick","size","Size"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport styled from 'styled-components';\nimport {CheckboxOff, CheckboxOn, CheckboxSemi} from '../icons/systemicons/SystemIcons';\nimport {COLORS, ComponentTextStyle} from '../styles';\nimport { Size } from '../types';\nimport {ComponentLStyling, ComponentMStyling, ComponentSStyling} from '../styles/typography';\n\nconst StyledCheckBox = styled.div<{ disabled?: boolean; showWarning?: boolean; selected?: boolean; margin?: string }>`\n display: flex;\n width: 100%;\n min-height: 48px;\n min-width: 48px;\n\n ${props => (props.margin ? `margin: ${props.margin};` : '')}\n cursor: pointer;\n\n color: ${COLORS.black};\n\n .pointerTransparent {\n pointer-events: none;\n }\n\n .checkbox-icon {\n margin: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n height: 36px;\n min-width: 36px;\n border-radius: 50%;\n\n svg {\n color: ${props => (props.selected ? COLORS.primary_500 : props.showWarning ? COLORS.warning_400 : COLORS.neutral_600)};\n }\n }\n\n .checkbox-label {\n user-select: none;\n cursor: inherit;\n }\n\n &.small {\n ${ComponentSStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 14px;\n }\n }\n\n &.medium {\n ${ComponentMStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 12px;\n }\n }\n\n &.large {\n ${ComponentLStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 12px;\n }\n }\n\n &:not(.disabled):focus {\n outline: none;\n\n .checkbox-icon {\n background-color: ${COLORS.white};\n box-shadow: 0 0 8px ${COLORS.primary_500}, 0px 4px 12px rgba(46, 127, 161, 0.25);\n\n svg {\n color: ${COLORS.neutral_600};\n }\n }\n }\n\n &:not(.disabled):hover {\n .checkbox-icon {\n background-color: ${COLORS.primary_20};\n\n svg {\n color: ${COLORS.primary_700};\n }\n }\n }\n\n &:not(.disabled):active {\n .checkbox-icon {\n background: ${COLORS.primary_100};\n box-shadow: none;\n\n svg {\n color: ${COLORS.primary_800};\n }\n }\n }\n\n &.disabled {\n box-shadow: none;\n cursor: not-allowed;\n\n color: ${COLORS.neutral_300};\n\n .checkbox-icon,\n .checkbox-label {\n pointer-events: none;\n }\n\n .checkbox-icon{\n background-color: ${COLORS.white};\n }\n\n .checkbox-icon svg {\n color: ${COLORS.neutral_300};\n }\n }\n`;\n\ninterface Props {\n id: string;\n selected: boolean;\n select: (selected: boolean) => void;\n label?: string;\n showWarning?: boolean;\n disabled?: boolean;\n margin?: string;\n size?: Size;\n iconPointerEventsTransparent?: boolean;\n semiSelected?: boolean;\n}\n\nconst Checkbox = React.forwardRef<HTMLDivElement, Props>(({\n id,\n selected,\n select,\n label,\n showWarning,\n iconPointerEventsTransparent,\n disabled,\n margin,\n size,\n semiSelected,\n children\n }, ref) => {\n const onKeyPress = (e: any) => {\n if (e.keyCode === 13 && !disabled) {\n select(!selected);\n }\n };\n\n const handleClick = () => {\n if (disabled) {\n return;\n }\n select(!selected);\n };\n\n size = size ?? Size.Medium;\n\n return (\n <StyledCheckBox key={id}\n ref={ref}\n disabled={disabled}\n className={size.toString().toLowerCase().concat(disabled ? ' disabled' : '')}\n selected={selected}\n tabIndex={disabled ? -1 : 0}\n showWarning={showWarning}\n margin={margin}\n onClick={handleClick}\n onKeyDown={onKeyPress}\n onMouseDown={e => e.preventDefault()}>\n <div id={id} className={'checkbox-icon'}>\n {\n selected\n ? <CheckboxOn className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n : semiSelected\n ? <CheckboxSemi className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n : <CheckboxOff className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n }\n </div>\n {\n label &&\n (\n <label className={'checkbox-label'}\n htmlFor={id}>\n {label}\n </label>\n )\n }\n {\n !label &&\n <label className={'checkbox-label'}\n htmlFor={id}>\n {children}\n </label>\n }\n </StyledCheckBox>\n );\n});\n\nexport default Checkbox;\n"],"file":"Checkbox.js"}
1
+ {"version":3,"sources":["../../../src/InputFields/Checkbox.tsx"],"names":["StyledCheckBox","styled","div","props","margin","COLORS","black","neutral_600","ComponentSStyling","ComponentTextStyle","ComponentMStyling","ComponentLStyling","white","primary_500","primary_20","primary_700","primary_100","primary_800","neutral_300","id","selected","select","label","showWarning","disabled","iconPointerEventsTransparent","semiSelected","readonly","Checkbox","onKeyPress","e","handleClick","size","Size"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport styled from 'styled-components';\nimport {CheckboxOff, CheckboxOn, CheckboxSemi} from '../icons/systemicons/SystemIcons';\nimport {COLORS, ComponentTextStyle} from '../styles';\nimport { Size } from '../types';\nimport {ComponentLStyling, ComponentMStyling, ComponentSStyling} from '../styles/typography';\n\nconst StyledCheckBox = styled.div<{ disabled?: boolean; showWarning?: boolean; selected?: boolean; margin?: string }>`\n display: flex;\n width: 100%;\n min-height: 48px;\n min-width: 48px;\n\n ${props => (props.margin ? `margin: ${props.margin};` : '')}\n cursor: pointer;\n\n color: ${COLORS.black};\n\n .pointerTransparent {\n pointer-events: none;\n }\n\n .checkbox-icon {\n margin: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n height: 36px;\n min-width: 36px;\n border-radius: 50%;\n\n svg {\n color: ${props => (props.selected ? COLORS.primary_500 : props.showWarning ? COLORS.warning_400 : COLORS.neutral_600)};\n }\n }\n\n .checkbox-label {\n user-select: none;\n cursor: inherit;\n }\n\n &.small {\n ${ComponentSStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 14px;\n }\n }\n\n &.medium {\n ${ComponentMStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 12px;\n }\n }\n\n &.large {\n ${ComponentLStyling(ComponentTextStyle.Regular, COLORS.black)}\n .checkbox-label {\n padding-top: 12px;\n }\n }\n\n &:not(.disabled):not(.readonly):focus {\n outline: none;\n\n .checkbox-icon {\n background-color: ${COLORS.white};\n box-shadow: 0 0 8px ${COLORS.primary_500}, 0px 4px 12px rgba(46, 127, 161, 0.25);\n\n svg {\n color: ${COLORS.neutral_600};\n }\n }\n }\n\n &:not(.disabled):not(.readonly):hover {\n .checkbox-icon {\n background-color: ${COLORS.primary_20};\n\n svg {\n color: ${COLORS.primary_700};\n }\n }\n }\n\n &:not(.disabled):not(.readonly):active {\n .checkbox-icon {\n background: ${COLORS.primary_100};\n box-shadow: none;\n\n svg {\n color: ${COLORS.primary_800};\n }\n }\n }\n\n &.readonly{\n cursor: inherit;\n .checkbox-icon,\n .checkbox-label {\n pointer-events: none;\n }\n }\n \n &.disabled {\n box-shadow: none;\n cursor: not-allowed;\n\n color: ${COLORS.neutral_300};\n\n .checkbox-icon,\n .checkbox-label {\n pointer-events: none;\n }\n\n .checkbox-icon{\n background-color: ${COLORS.white};\n }\n\n .checkbox-icon svg {\n color: ${COLORS.neutral_300};\n }\n }\n`;\n\ninterface Props {\n id?: string;\n selected: boolean;\n select?: (selected: boolean) => void;\n label?: string;\n showWarning?: boolean;\n disabled?: boolean;\n margin?: string;\n size?: Size;\n iconPointerEventsTransparent?: boolean;\n semiSelected?: boolean;\n readonly?: boolean;\n}\n\nconst Checkbox = React.forwardRef<HTMLDivElement, Props>(({\n id,\n selected,\n select,\n label,\n showWarning,\n iconPointerEventsTransparent,\n disabled,\n margin,\n size,\n semiSelected,\n children,\n readonly\n }, ref) => {\n const onKeyPress = (e: any) => {\n if (e.keyCode === 13 && !disabled && !readonly) {\n select && select(!selected);\n }\n };\n\n const handleClick = () => {\n if (disabled || readonly) {\n return;\n }\n select && select(!selected);\n };\n\n size = size ?? Size.Medium;\n\n return (\n <StyledCheckBox key={id}\n ref={ref}\n disabled={disabled}\n className={size.toString().toLowerCase().concat(disabled ? ' disabled' : '').concat(readonly ? ' readonly' : '')}\n selected={selected}\n tabIndex={disabled || readonly ? -1 : 0}\n showWarning={showWarning}\n margin={margin}\n onClick={handleClick}\n onKeyDown={onKeyPress}\n onMouseDown={e => e.preventDefault()}>\n <div id={id} className={'checkbox-icon'}>\n {\n selected\n ? <CheckboxOn className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n : semiSelected\n ? <CheckboxSemi className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n : <CheckboxOff className={iconPointerEventsTransparent ? \"pointerTransparent\" : \"\"} size=\"24px\"/>\n }\n </div>\n {\n label &&\n (\n <label className={'checkbox-label'}\n htmlFor={id}>\n {label}\n </label>\n )\n }\n {\n !label &&\n <label className={'checkbox-label'}\n htmlFor={id}>\n {children}\n </label>\n }\n </StyledCheckBox>\n );\n});\n\nexport default Checkbox;\n"],"file":"Checkbox.js"}
@@ -1,16 +1,16 @@
1
1
  (function (global, factory) {
2
2
  if (typeof define === "function" && define.amd) {
3
- define(["exports", "react", "../icons/systemicons/SystemIcons", "../icons/index", "../Dropdown/index", "../Button/index", "../types", "../styles", "./TableStyles", "../LoadingIndicator"], factory);
3
+ define(["exports", "react", "../types", "./TableStyles", "../LoadingIndicator", "./TableHeaders", "./TableFooter", "./TableBody"], factory);
4
4
  } else if (typeof exports !== "undefined") {
5
- factory(exports, require("react"), require("../icons/systemicons/SystemIcons"), require("../icons/index"), require("../Dropdown/index"), require("../Button/index"), require("../types"), require("../styles"), require("./TableStyles"), require("../LoadingIndicator"));
5
+ factory(exports, require("react"), require("../types"), require("./TableStyles"), require("../LoadingIndicator"), require("./TableHeaders"), require("./TableFooter"), require("./TableBody"));
6
6
  } else {
7
7
  var mod = {
8
8
  exports: {}
9
9
  };
10
- factory(mod.exports, global.react, global.SystemIcons, global.index, global.index, global.index, global.types, global.styles, global.TableStyles, global.LoadingIndicator);
10
+ factory(mod.exports, global.react, global.types, global.TableStyles, global.LoadingIndicator, global.TableHeaders, global.TableFooter, global.TableBody);
11
11
  global.undefined = mod.exports;
12
12
  }
13
- })(this, function (exports, _react, _SystemIcons, _index, _index2, _index3, _types, _styles, _TableStyles, _LoadingIndicator) {
13
+ })(this, function (exports, _react, _types, _TableStyles, _LoadingIndicator, _TableHeaders, _TableFooter, _TableBody) {
14
14
  "use strict";
15
15
 
16
16
  Object.defineProperty(exports, "__esModule", {
@@ -19,6 +19,18 @@
19
19
 
20
20
  var React = _interopRequireWildcard(_react);
21
21
 
22
+ var _TableHeaders2 = _interopRequireDefault(_TableHeaders);
23
+
24
+ var _TableFooter2 = _interopRequireDefault(_TableFooter);
25
+
26
+ var _TableBody2 = _interopRequireDefault(_TableBody);
27
+
28
+ function _interopRequireDefault(obj) {
29
+ return obj && obj.__esModule ? obj : {
30
+ default: obj
31
+ };
32
+ }
33
+
22
34
  function _getRequireWildcardCache(nodeInterop) {
23
35
  if (typeof WeakMap !== "function") return null;
24
36
  var cacheBabelInterop = new WeakMap();
@@ -69,37 +81,44 @@
69
81
  return newObj;
70
82
  }
71
83
 
84
+ function _extends() {
85
+ _extends = Object.assign || function (target) {
86
+ for (var i = 1; i < arguments.length; i++) {
87
+ var source = arguments[i];
88
+
89
+ for (var key in source) {
90
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
91
+ target[key] = source[key];
92
+ }
93
+ }
94
+ }
95
+
96
+ return target;
97
+ };
98
+
99
+ return _extends.apply(this, arguments);
100
+ }
72
101
  /**
73
102
  * Import React libraries.
74
103
  */
75
104
 
76
- /**
77
- * Import custom components.
78
- */
79
105
 
80
- /**
81
- * Import custom styles.
82
- */
106
+ const Table = props => {
107
+ let {
108
+ onPreviousPageClick,
109
+ onNextPageClick,
110
+ onRowsPerPageChange,
111
+ onTriggerSortingChange,
112
+ columns,
113
+ rows,
114
+ remoteOperations,
115
+ pagination,
116
+ showLoadingIndicator,
117
+ selectable,
118
+ multiSelect,
119
+ keyExpr
120
+ } = props; // States used within the component
83
121
 
84
- /**
85
- * Import custom types.
86
- */
87
- const Table = ({
88
- rowClick,
89
- linkClick,
90
- iconClick,
91
- previousPageClick,
92
- nextPageClick,
93
- rowsPerPageChange,
94
- triggerSortingChange,
95
- title,
96
- columns,
97
- rows,
98
- remotePagination,
99
- pagination,
100
- showLoadingIndicator
101
- }) => {
102
- // States used within the component
103
122
  const [rowsPerPage, setRowsPerPage] = React.useState(10);
104
123
  const [filteredRows, setFilteredRows] = React.useState([]);
105
124
  const [currentPageRows, setCurrentPageRows] = React.useState([]);
@@ -109,13 +128,29 @@
109
128
  const [from, setFrom] = React.useState();
110
129
  const [to, setTo] = React.useState();
111
130
  const [total, setTotal] = React.useState();
131
+ const [selectAllState, setSelectAllState] = React.useState('none');
132
+ const [selected, setSelected] = React.useState(multiSelect ? [] : undefined);
133
+ React.useEffect(() => {
134
+ setSelected(props.selectedRows || (multiSelect ? [] : undefined));
135
+ }, [props.selectedRows, multiSelect]);
136
+ /**
137
+ * update select all checkbox state
138
+ */
139
+
140
+ React.useEffect(() => {
141
+ if (multiSelect) {
142
+ const currentList = currentPageRows.map(row => keyExpr ? row[keyExpr] : row);
143
+ const count = selected.filter(item => currentList.includes(item)).length;
144
+ setSelectAllState(count === currentList.length ? 'all' : count > 0 ? 'some' : 'none');
145
+ }
146
+ }, [currentPageRows, multiSelect, selected, keyExpr]);
112
147
  /**
113
148
  * Takes care of local pagination.
114
149
  * Works only in case remote pagination is not defined or is set to false.
115
150
  */
116
151
 
117
152
  React.useEffect(() => {
118
- if (!remotePagination) {
153
+ if (!remoteOperations) {
119
154
  // Let's retrieve temporary filtered rows and update globally filtered rows
120
155
  const tmpFilteredRows = filterAndSortRows();
121
156
  setFilteredRows(tmpFilteredRows);
@@ -129,14 +164,14 @@
129
164
 
130
165
  setCurrentPageRows(tmpFilteredRows.slice(rowsFrom, rowsTo));
131
166
  }
132
- }, [rowsPerPage, rows, currentPage, columns, sortedColumn, sortedDirection, remotePagination]);
167
+ }, [rowsPerPage, rows, currentPage, columns, sortedColumn, sortedDirection, remoteOperations]);
133
168
  /**
134
169
  * Takes care of remote pagination.
135
170
  * Works only in case remote pagination is set to true.
136
171
  */
137
172
 
138
173
  React.useEffect(() => {
139
- if (remotePagination) {
174
+ if (remoteOperations) {
140
175
  setCurrentPageRows(rows); // Let's assign pagination values
141
176
 
142
177
  setFrom(pagination?.from);
@@ -145,7 +180,7 @@
145
180
  setCurrentPage(pagination?.currentPage);
146
181
  setRowsPerPage(pagination?.rowsPerPage);
147
182
  }
148
- }, [remotePagination, pagination, rows]);
183
+ }, [remoteOperations, pagination, rows]);
149
184
  /**
150
185
  * Filters out a rows by specific column filters and sorts them if any sorting is set.
151
186
  * @returns Filtered and sorted rows.
@@ -214,8 +249,8 @@
214
249
  setSortedColumn(column.key);
215
250
  setSortedDirection('desc'); // Let's trigger remote sorting trigger function
216
251
 
217
- if (remotePagination && triggerSortingChange) {
218
- triggerSortingChange(column.key, 'desc');
252
+ if (remoteOperations && onTriggerSortingChange) {
253
+ onTriggerSortingChange(column.key, 'desc');
219
254
  }
220
255
  } else {
221
256
  tmpColumn.sortingDirection = 'asc'; // Update sorted column and direction
@@ -223,8 +258,8 @@
223
258
  setSortedColumn(column.key);
224
259
  setSortedDirection('asc'); // Let's trigger remote sorting trigger function
225
260
 
226
- if (remotePagination && triggerSortingChange) {
227
- triggerSortingChange(column.key, 'asc');
261
+ if (remoteOperations && onTriggerSortingChange) {
262
+ onTriggerSortingChange(column.key, 'asc');
228
263
  }
229
264
  }
230
265
  } else {
@@ -234,8 +269,8 @@
234
269
  setSortedColumn(column.key);
235
270
  setSortedDirection('asc'); // Let's trigger remote sorting trigger function
236
271
 
237
- if (remotePagination && triggerSortingChange) {
238
- triggerSortingChange(column.key, 'asc');
272
+ if (remoteOperations && onTriggerSortingChange) {
273
+ onTriggerSortingChange(column.key, 'asc');
239
274
  }
240
275
  }
241
276
  } else if (tmpColumn.sortingDirection !== undefined) {
@@ -252,10 +287,10 @@
252
287
 
253
288
 
254
289
  const previousPage = () => {
255
- if (remotePagination) {
290
+ if (remoteOperations) {
256
291
  // Let's inform parent component about page change
257
- if (previousPageClick) {
258
- previousPageClick();
292
+ if (onPreviousPageClick) {
293
+ onPreviousPageClick();
259
294
  }
260
295
  } else {
261
296
  // Let's change the page within the component
@@ -268,10 +303,10 @@
268
303
 
269
304
 
270
305
  const nextPage = () => {
271
- if (remotePagination) {
306
+ if (remoteOperations) {
272
307
  // Let's inform parent component about page change
273
- if (nextPageClick) {
274
- nextPageClick();
308
+ if (onNextPageClick) {
309
+ onNextPageClick();
275
310
  }
276
311
  } else {
277
312
  // Let's change the page within the component
@@ -286,10 +321,10 @@
286
321
 
287
322
  const changeRowsPerPage = value => {
288
323
  // Let's check if we are using remote pagination
289
- if (remotePagination) {
324
+ if (remoteOperations) {
290
325
  // Inform parent component about rows per page change
291
- if (rowsPerPageChange) {
292
- rowsPerPageChange(parseInt(value));
326
+ if (onRowsPerPageChange) {
327
+ onRowsPerPageChange(value);
293
328
  }
294
329
  } else {
295
330
  // Let's reset current page to 1
@@ -297,172 +332,90 @@
297
332
  } // Let's set rows per page
298
333
 
299
334
 
300
- setRowsPerPage(parseInt(value));
301
- };
302
- /**
303
- * Renders the table header.
304
- */
305
-
306
-
307
- const renderHeader = () => {
308
- return /*#__PURE__*/React.createElement("thead", null, title && /*#__PURE__*/React.createElement("tr", {
309
- "data-testid": "TestTableHeaderRow"
310
- }, /*#__PURE__*/React.createElement(_TableStyles.TableHeaderRowCol, {
311
- colSpan: columns.length
312
- }, /*#__PURE__*/React.createElement("div", null, title, /*#__PURE__*/React.createElement(_SystemIcons.MoreVertical, {
313
- size: "18px",
314
- color: _styles.COLORS.neutral_600
315
- })))), /*#__PURE__*/React.createElement("tr", {
316
- "data-testid": "TestTableColumnHeaderRow"
317
- }, columns.map(column => /*#__PURE__*/React.createElement(_TableStyles.TableColumnHeaderCol, {
318
- onClick: () => sortTableColumn(column),
319
- key: column.key,
320
- style: {
321
- width: column.width
322
- },
323
- className: `${column.sortable ? 'sortable' : ''} ${!title ? 'no-border' : ''} ${column.justify ? `justify-${column.justify}` : ''}`
324
- }, column.name, column.sortingDirection === 'asc' ? /*#__PURE__*/React.createElement(_SystemIcons.ArrowLineUp, {
325
- size: "20px"
326
- }) : column.sortingDirection === 'desc' ? /*#__PURE__*/React.createElement(_SystemIcons.ArrowLineDown, {
327
- size: "20px"
328
- }) : ''))));
335
+ setRowsPerPage(value);
329
336
  };
330
337
  /**
331
- * Function which is called when a mouse click happens on a link to pass data to the parent component.
338
+ * Function which is called when a mouse click happens on a row to pass data to the parent component.
332
339
  * @param row - Row in which the link is located.
333
- * @param key - Key of the column for which the link is set.
334
- * @param event - Click event handler.
335
340
  */
336
341
 
337
342
 
338
- const onLinkClick = (row, key, event) => {
339
- if (linkClick) {
340
- event.stopPropagation();
341
- linkClick(row, key);
342
- }
343
- };
344
- /**
345
- * Function which is called when a mouse click happens on an icon to pass data to the parent component.
346
- * @param row - Row in which the icon is located.
347
- * @param key - Key of the column for which the icon is set.
348
- * @param event - Click event handler.
349
- */
343
+ const onRowClick = row => {
344
+ const selectedText = window?.getSelection()?.toString();
350
345
 
346
+ if (selectedText?.length === 0 && selectable) {
347
+ const value = keyExpr ? row[keyExpr] : row;
348
+ let currentSelection = value;
351
349
 
352
- const onIconClick = (row, key, event) => {
353
- if (iconClick) {
354
- event.stopPropagation();
355
- iconClick(row, key);
356
- }
357
- };
358
- /**
359
- * Function which is called when a mouse click happens on a row to pass data to the parent component.
360
- * @param row - Row in which the link is located.
361
- */
350
+ if (!!multiSelect) {
351
+ const existing = selected?.indexOf(value);
362
352
 
353
+ if (existing > -1) {
354
+ currentSelection = [...selected];
355
+ currentSelection.splice(existing, 1);
356
+ } else {
357
+ currentSelection = [...selected, currentSelection];
358
+ }
359
+ }
363
360
 
364
- const onRowClick = row => {
365
- const selectedText = window?.getSelection()?.toString(); // Let's trigger row click only if we haven't selected any text and action exists
366
-
367
- if (selectedText?.length === 0 && rowClick) {
368
- rowClick(row);
361
+ setSelected(currentSelection);
362
+ props.onSelectionChange && props.onSelectionChange(currentSelection);
369
363
  }
370
364
  };
371
365
  /**
372
- * Renders the table body.
366
+ * Function which is called when user clicks checkbox to select or deselect all rows.
373
367
  */
374
368
 
375
369
 
376
- const renderBody = () => {
377
- return /*#__PURE__*/React.createElement("tbody", null, currentPageRows.length > 0 ? currentPageRows.map((row, index) => /*#__PURE__*/React.createElement(_TableStyles.TableDataRow, {
378
- key: `row_${index}`,
379
- onClick: () => onRowClick(row),
380
- "data-testid": "TestTableDataRow"
381
- }, columns.map(column => /*#__PURE__*/React.createElement(_TableStyles.TableDataCol, {
382
- key: `row_${index}_${column.key}`,
383
- style: column.colorFn ? {
384
- color: column.colorFn(row, column.key),
385
- maxWidth: column.width
386
- } : {
387
- maxWidth: column.width
388
- },
389
- className: `${column.shortenText && `truncate-text`} ${column.justify ? `justify-${column.justify}` : ''} `,
390
- title: column.shortenText && row[column.key]
391
- }, column.isLink && row[column.key] ? /*#__PURE__*/React.createElement(_index3.Button, {
392
- size: _types.Size.Small,
393
- variant: "tertiary",
394
- onClick: event => onLinkClick(row, column.key, event),
395
- style: column.colorFn && {
396
- color: column.colorFn(row, column.key)
397
- }
398
- }, row[column.key]) : column.isIcon && column.icon ? /*#__PURE__*/React.createElement(_index3.IconButton, {
399
- variant: "secondary",
400
- shape: "circular",
401
- useTransparentBackground: true,
402
- action: event => onIconClick(row, column.key, event)
403
- }, _index.SystemIcons[column.icon]({
404
- size: '24',
405
- className: 'icon'
406
- })) : column.customContent ? column.customContent(row, column.key) : row[column.key])))) : /*#__PURE__*/React.createElement(_TableStyles.TableDataRow, {
407
- className: "no-rows",
408
- "data-testid": "TestTableNoDataRow"
409
- }, /*#__PURE__*/React.createElement(_TableStyles.TableDataCol, {
410
- colSpan: columns.length,
411
- className: "center"
412
- }, "There are no rows to display")));
413
- };
414
- /**
415
- * Renders the table footer.
416
- */
370
+ const onSelectAllClick = () => {
371
+ const currentList = currentPageRows.map(row => keyExpr ? row[keyExpr] : row);
372
+
373
+ switch (selectAllState) {
374
+ case 'all':
375
+ setSelected([...selected].filter(item => !currentList.includes(item)));
376
+ setSelectAllState('none');
377
+ break;
417
378
 
379
+ case 'none':
380
+ setSelected([...selected, ...currentList]);
381
+ setSelectAllState('all');
382
+ break;
418
383
 
419
- const renderFooter = () => {
420
- // Define local values used within the footer
421
- const rowsPerPageValues = ['10', '20', '50', '100'];
422
- return /*#__PURE__*/React.createElement("tfoot", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement(_TableStyles.TableFooterCol, {
423
- colSpan: columns.length,
424
- "data-testid": "TestTableFooterRow"
425
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("span", null, "Rows per page: "), /*#__PURE__*/React.createElement(_index2.DropdownFilter, {
426
- id: "rows-per-page",
427
- list: rowsPerPageValues.map(x => ({
428
- label: x
429
- })),
430
- disableSorting: true,
431
- onSelect: value => changeRowsPerPage(value),
432
- initalValue: rowsPerPage.toString(),
433
- isButton: true
434
- }), /*#__PURE__*/React.createElement("span", {
435
- className: "current-page-info"
436
- }, total === 0 ? 0 : from, "-", to, " of ", total), /*#__PURE__*/React.createElement("div", {
437
- className: "controls"
438
- }, /*#__PURE__*/React.createElement(_index3.IconButton, {
439
- variant: "secondary",
440
- shape: "circular",
441
- action: () => previousPage(),
442
- disabled: from === 1
443
- }, /*#__PURE__*/React.createElement(_SystemIcons.ChevronLeft, {
444
- size: "24",
445
- color: _styles.COLORS.neutral_600
446
- })), /*#__PURE__*/React.createElement(_index3.IconButton, {
447
- variant: "secondary",
448
- shape: "circular",
449
- action: () => nextPage(),
450
- disabled: to === total
451
- }, /*#__PURE__*/React.createElement(_SystemIcons.ChevronRight, {
452
- size: "24",
453
- color: _styles.COLORS.neutral_600
454
- })))))));
384
+ case 'some':
385
+ setSelected([...selected, ...currentList.filter(item => !selected.includes(item))]);
386
+ setSelectAllState('all');
387
+ break;
388
+ }
455
389
  };
456
390
  /**
457
391
  * Return Table component.
458
392
  */
459
393
 
460
394
 
461
- return /*#__PURE__*/React.createElement(_TableStyles.TableWrapper, null, /*#__PURE__*/React.createElement(_TableStyles.TableContainer, {
395
+ return /*#__PURE__*/React.createElement(_TableStyles.TableWrapper, null, /*#__PURE__*/React.createElement("table", {
462
396
  cellPadding: "0",
463
397
  cellSpacing: "0",
464
- "data-testid": "TestTable"
465
- }, renderHeader(), renderBody(), renderFooter()), showLoadingIndicator && /*#__PURE__*/React.createElement(_TableStyles.TableLoadingIndicator, null, /*#__PURE__*/React.createElement(_LoadingIndicator.LoadingIndicator, {
398
+ "data-testid": "TestTable",
399
+ className: 'table'
400
+ }, /*#__PURE__*/React.createElement(_TableHeaders2.default, _extends({}, props, {
401
+ sortByColumn: sortTableColumn,
402
+ onSelectAllClick: onSelectAllClick,
403
+ selectAllState: selectAllState
404
+ })), /*#__PURE__*/React.createElement(_TableBody2.default, _extends({}, props, {
405
+ currentPageRows: currentPageRows,
406
+ selected: selected,
407
+ onRowClick: onRowClick
408
+ })), /*#__PURE__*/React.createElement(_TableFooter2.default, _extends({}, props, {
409
+ onRowsPerPageChange: changeRowsPerPage,
410
+ rowsPerPage: rowsPerPage,
411
+ from: from,
412
+ to: to,
413
+ total: total,
414
+ nextPage: nextPage,
415
+ prevPage: previousPage
416
+ }))), showLoadingIndicator && /*#__PURE__*/React.createElement("div", {
417
+ className: 'table-spinner'
418
+ }, /*#__PURE__*/React.createElement(_LoadingIndicator.LoadingIndicator, {
466
419
  size: _types.Size.Medium,
467
420
  color: "#ffffff"
468
421
  })));