@carbon/ibm-products 1.13.0 → 1.16.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 (230) hide show
  1. package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css +47 -0
  2. package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css.map +1 -0
  3. package/css/components/Datagrid/styles/addons/RowSizeDropdown.css +20 -0
  4. package/css/components/Datagrid/styles/addons/RowSizeDropdown.css.map +1 -0
  5. package/css/components/Datagrid/styles/datagrid.css +268 -0
  6. package/css/components/Datagrid/styles/datagrid.css.map +1 -0
  7. package/css/components/Datagrid/styles/index.css +513 -0
  8. package/css/components/Datagrid/styles/index.css.map +1 -0
  9. package/css/components/Datagrid/styles/useActionsColumn.css +23 -0
  10. package/css/components/Datagrid/styles/useActionsColumn.css.map +1 -0
  11. package/css/components/Datagrid/styles/useColumnRightAlign.css +28 -0
  12. package/css/components/Datagrid/styles/useColumnRightAlign.css.map +1 -0
  13. package/css/components/Datagrid/styles/useNestedRows.css +15 -0
  14. package/css/components/Datagrid/styles/useNestedRows.css.map +1 -0
  15. package/css/components/Datagrid/styles/useNestedTable.css +25 -0
  16. package/css/components/Datagrid/styles/useNestedTable.css.map +1 -0
  17. package/css/components/Datagrid/styles/useSelectAllToggle.css +28 -0
  18. package/css/components/Datagrid/styles/useSelectAllToggle.css.map +1 -0
  19. package/css/components/Datagrid/styles/useSortableColumns.css +50 -0
  20. package/css/components/Datagrid/styles/useSortableColumns.css.map +1 -0
  21. package/css/components/Datagrid/styles/useStickyColumn.css +35 -0
  22. package/css/components/Datagrid/styles/useStickyColumn.css.map +1 -0
  23. package/css/index-full-carbon.css +611 -10
  24. package/css/index-full-carbon.css.map +1 -1
  25. package/css/index-full-carbon.min.css +3 -3
  26. package/css/index-full-carbon.min.css.map +1 -1
  27. package/css/index-without-carbon-released-only.css +7 -4
  28. package/css/index-without-carbon-released-only.css.map +1 -1
  29. package/css/index-without-carbon-released-only.min.css +2 -2
  30. package/css/index-without-carbon-released-only.min.css.map +1 -1
  31. package/css/index-without-carbon.css +611 -10
  32. package/css/index-without-carbon.css.map +1 -1
  33. package/css/index-without-carbon.min.css +3 -3
  34. package/css/index-without-carbon.min.css.map +1 -1
  35. package/css/index.css +611 -10
  36. package/css/index.css.map +1 -1
  37. package/css/index.min.css +3 -3
  38. package/css/index.min.css.map +1 -1
  39. package/es/components/AddSelect/AddSelect.js +106 -43
  40. package/es/components/AddSelect/AddSelectFilter.js +172 -0
  41. package/es/components/AddSelect/add-select-utils.js +30 -0
  42. package/es/components/DataSpreadsheet/DataSpreadsheet.js +255 -175
  43. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +78 -17
  44. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +65 -20
  45. package/es/components/DataSpreadsheet/hooks/index.js +11 -0
  46. package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +139 -0
  47. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
  48. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -0
  49. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +1 -3
  50. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +20 -8
  51. package/es/components/DataSpreadsheet/utils/generateData.js +17 -9
  52. package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
  53. package/es/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +30 -0
  54. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
  55. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
  56. package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
  57. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +42 -8
  58. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +225 -13
  59. package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
  60. package/es/components/Datagrid/Datagrid/Datagrid.js +70 -0
  61. package/es/components/Datagrid/Datagrid/DatagridBody.js +36 -0
  62. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +19 -0
  63. package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +26 -0
  64. package/es/components/Datagrid/Datagrid/DatagridHead.js +31 -0
  65. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +57 -0
  66. package/es/components/Datagrid/Datagrid/DatagridRefBody.js +37 -0
  67. package/es/components/Datagrid/Datagrid/DatagridRow.js +60 -0
  68. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +50 -0
  69. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +122 -0
  70. package/es/components/Datagrid/Datagrid/DatagridSimpleBody.js +36 -0
  71. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +22 -0
  72. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +87 -0
  73. package/es/components/Datagrid/Datagrid/DraggableElement.js +188 -0
  74. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +78 -0
  75. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +51 -0
  76. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +140 -0
  77. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +157 -0
  78. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +62 -0
  79. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +13 -0
  80. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +9 -0
  81. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +62 -0
  82. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +139 -0
  83. package/es/components/Datagrid/Datagrid/addons/RowSize/index.js +8 -0
  84. package/es/components/Datagrid/Datagrid/index.js +8 -0
  85. package/es/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +6 -0
  86. package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +6 -0
  87. package/es/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +6 -0
  88. package/es/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +6 -0
  89. package/es/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +92 -0
  90. package/es/components/Datagrid/Datagrid.stories/common.js +199 -0
  91. package/es/components/Datagrid/Datagrid.stories/index.js +5 -0
  92. package/es/components/Datagrid/common-column-ids.js +8 -0
  93. package/es/components/Datagrid/index.js +22 -0
  94. package/es/components/Datagrid/useActionsColumn.js +86 -0
  95. package/es/components/Datagrid/useColumnRightAlign.js +52 -0
  96. package/es/components/Datagrid/useCustomizeColumns.js +45 -0
  97. package/es/components/Datagrid/useDatagrid.js +44 -0
  98. package/es/components/Datagrid/useDefaultStringRenderer.js +48 -0
  99. package/es/components/Datagrid/useDisableSelectRows.js +84 -0
  100. package/es/components/Datagrid/useExpandedRow.js +52 -0
  101. package/es/components/Datagrid/useFlexResize.js +51 -0
  102. package/es/components/Datagrid/useFloatingScroll.js +88 -0
  103. package/es/components/Datagrid/useInfiniteScroll.js +54 -0
  104. package/es/components/Datagrid/useNestedRows.js +53 -0
  105. package/es/components/Datagrid/useOnRowClick.js +37 -0
  106. package/es/components/Datagrid/useParentDimensions.js +65 -0
  107. package/es/components/Datagrid/useResizeTable.js +40 -0
  108. package/es/components/Datagrid/useRowExpander.js +34 -0
  109. package/es/components/Datagrid/useRowIsMouseOver.js +61 -0
  110. package/es/components/Datagrid/useRowRenderer.js +30 -0
  111. package/es/components/Datagrid/useRowSize.js +56 -0
  112. package/es/components/Datagrid/useSelectAllToggle.js +74 -0
  113. package/es/components/Datagrid/useSelectRows.js +107 -0
  114. package/es/components/Datagrid/useSkeletonRows.js +32 -0
  115. package/es/components/Datagrid/useSortableColumns.js +110 -0
  116. package/es/components/Datagrid/useStickyColumn.js +183 -0
  117. package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
  118. package/es/components/PageHeader/PageHeader.js +3 -1
  119. package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
  120. package/es/components/TagSet/TagSet.js +13 -6
  121. package/es/components/Tearsheet/TearsheetShell.js +34 -10
  122. package/es/components/index.js +2 -1
  123. package/es/global/js/package-settings.js +4 -2
  124. package/lib/components/AddSelect/AddSelect.js +105 -41
  125. package/lib/components/AddSelect/AddSelectFilter.js +190 -0
  126. package/lib/components/AddSelect/add-select-utils.js +35 -2
  127. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +261 -177
  128. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +79 -23
  129. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +67 -21
  130. package/lib/components/DataSpreadsheet/hooks/index.js +45 -0
  131. package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +151 -0
  132. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
  133. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +79 -0
  134. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +1 -3
  135. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +21 -8
  136. package/lib/components/DataSpreadsheet/utils/generateData.js +17 -9
  137. package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
  138. package/lib/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +40 -0
  139. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
  140. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
  141. package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
  142. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +44 -8
  143. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +235 -20
  144. package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
  145. package/lib/components/Datagrid/Datagrid/Datagrid.js +86 -0
  146. package/lib/components/Datagrid/Datagrid/DatagridBody.js +50 -0
  147. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +31 -0
  148. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +38 -0
  149. package/lib/components/Datagrid/Datagrid/DatagridHead.js +43 -0
  150. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +73 -0
  151. package/lib/components/Datagrid/Datagrid/DatagridRefBody.js +44 -0
  152. package/lib/components/Datagrid/Datagrid/DatagridRow.js +68 -0
  153. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +55 -0
  154. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +139 -0
  155. package/lib/components/Datagrid/Datagrid/DatagridSimpleBody.js +44 -0
  156. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +35 -0
  157. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +101 -0
  158. package/lib/components/Datagrid/Datagrid/DraggableElement.js +210 -0
  159. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +92 -0
  160. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +65 -0
  161. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +166 -0
  162. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +173 -0
  163. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +73 -0
  164. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +25 -0
  165. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +23 -0
  166. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +80 -0
  167. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +160 -0
  168. package/lib/components/Datagrid/Datagrid/addons/RowSize/index.js +15 -0
  169. package/lib/components/Datagrid/Datagrid/index.js +15 -0
  170. package/lib/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +13 -0
  171. package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +13 -0
  172. package/lib/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +13 -0
  173. package/lib/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +13 -0
  174. package/lib/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +112 -0
  175. package/lib/components/Datagrid/Datagrid.stories/common.js +215 -0
  176. package/lib/components/Datagrid/Datagrid.stories/index.js +47 -0
  177. package/lib/components/Datagrid/common-column-ids.js +16 -0
  178. package/lib/components/Datagrid/index.js +127 -0
  179. package/lib/components/Datagrid/useActionsColumn.js +94 -0
  180. package/lib/components/Datagrid/useColumnRightAlign.js +59 -0
  181. package/lib/components/Datagrid/useCustomizeColumns.js +55 -0
  182. package/lib/components/Datagrid/useDatagrid.js +58 -0
  183. package/lib/components/Datagrid/useDefaultStringRenderer.js +54 -0
  184. package/lib/components/Datagrid/useDisableSelectRows.js +92 -0
  185. package/lib/components/Datagrid/useExpandedRow.js +58 -0
  186. package/lib/components/Datagrid/useFlexResize.js +61 -0
  187. package/lib/components/Datagrid/useFloatingScroll.js +101 -0
  188. package/lib/components/Datagrid/useInfiniteScroll.js +67 -0
  189. package/lib/components/Datagrid/useNestedRows.js +65 -0
  190. package/lib/components/Datagrid/useOnRowClick.js +45 -0
  191. package/lib/components/Datagrid/useParentDimensions.js +75 -0
  192. package/lib/components/Datagrid/useResizeTable.js +48 -0
  193. package/lib/components/Datagrid/useRowExpander.js +45 -0
  194. package/lib/components/Datagrid/useRowIsMouseOver.js +66 -0
  195. package/lib/components/Datagrid/useRowRenderer.js +40 -0
  196. package/lib/components/Datagrid/useRowSize.js +67 -0
  197. package/lib/components/Datagrid/useSelectAllToggle.js +88 -0
  198. package/lib/components/Datagrid/useSelectRows.js +119 -0
  199. package/lib/components/Datagrid/useSkeletonRows.js +42 -0
  200. package/lib/components/Datagrid/useSortableColumns.js +117 -0
  201. package/lib/components/Datagrid/useStickyColumn.js +190 -0
  202. package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
  203. package/lib/components/PageHeader/PageHeader.js +3 -1
  204. package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
  205. package/lib/components/TagSet/TagSet.js +13 -6
  206. package/lib/components/Tearsheet/TearsheetShell.js +36 -10
  207. package/lib/components/index.js +9 -1
  208. package/lib/global/js/package-settings.js +4 -2
  209. package/package.json +16 -12
  210. package/scss/components/AboutModal/_about-modal.scss +4 -0
  211. package/scss/components/AddSelect/_add-select.scss +46 -2
  212. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +41 -4
  213. package/scss/components/Datagrid/_datagrid.scss +66 -0
  214. package/scss/components/Datagrid/_index.scss +8 -0
  215. package/scss/components/Datagrid/_storybook-styles.scss +26 -0
  216. package/scss/components/Datagrid/styles/_variables.scss +9 -0
  217. package/scss/components/Datagrid/styles/addons/CustomizeColumnsModal.scss +48 -0
  218. package/scss/components/Datagrid/styles/addons/RowSizeDropdown.scss +23 -0
  219. package/scss/components/Datagrid/styles/datagrid.scss +326 -0
  220. package/scss/components/Datagrid/styles/index.scss +17 -0
  221. package/scss/components/Datagrid/styles/useActionsColumn.scss +24 -0
  222. package/scss/components/Datagrid/styles/useColumnRightAlign.scss +29 -0
  223. package/scss/components/Datagrid/styles/useNestedRows.scss +17 -0
  224. package/scss/components/Datagrid/styles/useNestedTable.scss +28 -0
  225. package/scss/components/Datagrid/styles/useSelectAllToggle.scss +28 -0
  226. package/scss/components/Datagrid/styles/useSortableColumns.scss +55 -0
  227. package/scss/components/Datagrid/styles/useStickyColumn.scss +38 -0
  228. package/scss/components/ExportModal/_export-modal.scss +0 -4
  229. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
  230. package/scss/components/_index.scss +1 -0
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  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
- var _excluded = ["className", "columnInputPlaceholder", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "searchResultsLabel", "textInputLabel", "title"];
5
+ var _excluded = ["className", "clearFiltersText", "columnInputPlaceholder", "description", "globalFilters", "globalFiltersIconDescription", "globalFiltersPlaceholderText", "globalFiltersPrimaryButtonText", "globalFiltersSecondaryButtonText", "globalSearchLabel", "globalSearchPlaceholder", "influencerTitle", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSubmit", "onSubmitButtonText", "open", "portalTarget", "removeIconDescription", "searchResultsLabel", "title"];
6
6
  //
7
7
  // Copyright IBM Corp. 2022
8
8
  //
@@ -12,7 +12,7 @@ var _excluded = ["className", "columnInputPlaceholder", "description", "influenc
12
12
  import React, { forwardRef, useState, useEffect } from 'react';
13
13
  import PropTypes from 'prop-types';
14
14
  import cx from 'classnames';
15
- import { TextInput, Tag } from 'carbon-components-react';
15
+ import { Tag } from 'carbon-components-react';
16
16
  import { Tearsheet, TearsheetNarrow } from '../../components/Tearsheet';
17
17
  import { NoDataEmptyState } from '../../components/EmptyStates/NoDataEmptyState';
18
18
  import { pkg } from '../../settings';
@@ -20,16 +20,24 @@ import { AddSelectSidebar } from './AddSelectSidebar';
20
20
  import { AddSelectBreadcrumbs } from './AddSelectBreadcrumbs';
21
21
  import { AddSelectList } from './AddSelectList';
22
22
  import { AddSelectColumn } from './AddSelectColumn';
23
- import { normalize, flatten } from './add-select-utils';
23
+ import { normalize, flatten, getGlobalFilterValues } from './add-select-utils';
24
+ import { AddSelectFilter } from './AddSelectFilter';
24
25
  var componentName = 'AddSelect';
25
26
  export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
26
27
  var _cx;
27
28
 
28
29
  var className = _ref.className,
30
+ clearFiltersText = _ref.clearFiltersText,
29
31
  columnInputPlaceholder = _ref.columnInputPlaceholder,
30
32
  description = _ref.description,
33
+ globalFilters = _ref.globalFilters,
34
+ globalFiltersIconDescription = _ref.globalFiltersIconDescription,
35
+ globalFiltersPlaceholderText = _ref.globalFiltersPlaceholderText,
36
+ globalFiltersPrimaryButtonText = _ref.globalFiltersPrimaryButtonText,
37
+ globalFiltersSecondaryButtonText = _ref.globalFiltersSecondaryButtonText,
38
+ globalSearchLabel = _ref.globalSearchLabel,
39
+ globalSearchPlaceholder = _ref.globalSearchPlaceholder,
31
40
  influencerTitle = _ref.influencerTitle,
32
- inputPlaceholder = _ref.inputPlaceholder,
33
41
  items = _ref.items,
34
42
  itemsLabel = _ref.itemsLabel,
35
43
  multi = _ref.multi,
@@ -39,13 +47,12 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
39
47
  noSelectionTitle = _ref.noSelectionTitle,
40
48
  onClose = _ref.onClose,
41
49
  onCloseButtonText = _ref.onCloseButtonText,
42
- onSearchFilter = _ref.onSearchFilter,
43
50
  onSubmit = _ref.onSubmit,
44
51
  onSubmitButtonText = _ref.onSubmitButtonText,
45
52
  open = _ref.open,
53
+ portalTarget = _ref.portalTarget,
46
54
  removeIconDescription = _ref.removeIconDescription,
47
55
  searchResultsLabel = _ref.searchResultsLabel,
48
- textInputLabel = _ref.textInputLabel,
49
56
  title = _ref.title,
50
57
  rest = _objectWithoutProperties(_ref, _excluded);
51
58
 
@@ -86,19 +93,39 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
86
93
  flatItems = _useState14[0],
87
94
  setFlatItems = _useState14[1];
88
95
 
96
+ var _useState15 = useState([]),
97
+ _useState16 = _slicedToArray(_useState15, 2),
98
+ globalFilterOpts = _useState16[0],
99
+ setGlobalFilterOpts = _useState16[1];
100
+
101
+ var _useState17 = useState({}),
102
+ _useState18 = _slicedToArray(_useState17, 2),
103
+ appliedGlobalFilters = _useState18[0],
104
+ setAppliedGlobalFilters = _useState18[1];
105
+
89
106
  useEffect(function () {
90
107
  var entries = items.entries; // flatItems is just a single array of all entries including children
91
108
 
92
- setFlatItems(flatten(entries)); // multi select with nested data needs to be normalized
109
+ var flattenedItems = flatten(entries);
110
+
111
+ if (multi) {
112
+ if (globalFilters !== null && globalFilters !== void 0 && globalFilters.length) {
113
+ var globalFilterValues = getGlobalFilterValues(globalFilters, flattenedItems);
114
+ setGlobalFilterOpts(globalFilterValues);
115
+ } // multi select with nested data needs to be normalized
116
+
93
117
 
94
- if (multi && entries.find(function (entry) {
95
- return entry.children;
96
- })) {
97
- var newItems = normalize(items);
98
- setNormalizedItems(newItems);
99
- setUsedNormalizedItems(true);
118
+ if (entries.find(function (entry) {
119
+ return entry.children;
120
+ })) {
121
+ var newItems = normalize(items);
122
+ setNormalizedItems(newItems);
123
+ setUsedNormalizedItems(true);
124
+ }
100
125
  }
101
- }, [items, multi]); // used to generate columns of results for multi select with hierarchy
126
+
127
+ setFlatItems(flattenedItems);
128
+ }, [items, multi, globalFilters]); // used to generate columns of results for multi select with hierarchy
102
129
 
103
130
  var getPages = function getPages() {
104
131
  var pages = [];
@@ -157,11 +184,6 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
157
184
  var results = itemsToFilter.filter(function (item) {
158
185
  if (!searchTerm) {
159
186
  return item;
160
- } // if user provides their own filter function use that
161
-
162
-
163
- if (onSearchFilter) {
164
- return onSearchFilter(item, searchTerm);
165
187
  } // otherwise use the default label filter
166
188
 
167
189
 
@@ -172,11 +194,18 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
172
194
 
173
195
  var getDisplayItems = function getDisplayItems() {
174
196
  if (useNormalizedItems) {
175
- // when global search is in use the results are not in column format
176
- if (searchTerm) {
177
- return flatItems.filter(function (item) {
197
+ // when global search or filter is in use the results are not in column format
198
+ var filters = Object.keys(appliedGlobalFilters);
199
+
200
+ if (searchTerm || filters.length) {
201
+ var results = flatItems.filter(function (item) {
178
202
  return item.title.toLowerCase().includes(searchTerm);
203
+ }).filter(function (item) {
204
+ return filters.every(function (filter) {
205
+ return item[filter] === appliedGlobalFilters[filter];
206
+ });
179
207
  });
208
+ return results;
180
209
  }
181
210
 
182
211
  return getPages();
@@ -197,15 +226,21 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
197
226
  singleSelection: singleSelection
198
227
  }; // handlers
199
228
 
200
- var handleSearch = function handleSearch(e) {
201
- setSearchTerm(e.target.value);
229
+ var handleSearch = function handleSearch(term) {
230
+ setSearchTerm(term);
231
+ };
232
+
233
+ var handleFilter = function handleFilter(filters) {
234
+ setAppliedGlobalFilters(filters);
202
235
  };
203
236
 
204
237
  var submitHandler = function submitHandler() {
205
238
  onSubmit(multi ? multiSelection : singleSelection);
206
239
  };
207
240
 
241
+ var classNames = cx(className, blockClass, (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__single"), !multi), _defineProperty(_cx, "".concat(blockClass, "__multi"), multi), _cx));
208
242
  var commonTearsheetProps = {
243
+ className: classNames,
209
244
  open: open,
210
245
  title: title,
211
246
  description: description,
@@ -219,7 +254,8 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
219
254
  kind: 'primary',
220
255
  onClick: submitHandler,
221
256
  disabled: multi ? multiSelection.length === 0 : !singleSelection
222
- }]
257
+ }],
258
+ portalTarget: portalTarget
223
259
  };
224
260
  var sidebarProps = {
225
261
  influencerTitle: influencerTitle,
@@ -230,7 +266,6 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
230
266
  removeIconDescription: removeIconDescription,
231
267
  setMultiSelection: setMultiSelection
232
268
  };
233
- var classNames = cx(className, blockClass, (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__single"), !multi), _defineProperty(_cx, "".concat(blockClass, "__multi"), multi), _cx));
234
269
 
235
270
  var setShowBreadsCrumbs = function setShowBreadsCrumbs() {
236
271
  if (searchTerm) {
@@ -257,16 +292,26 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
257
292
  };
258
293
 
259
294
  var showBreadsCrumbs = setShowBreadsCrumbs();
260
- var showTags = setShowTags(); // main content
295
+ var showTags = setShowTags();
296
+ var globalFiltersApplied = Object.keys(appliedGlobalFilters).length > 0; // main content
261
297
 
262
298
  var body = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
263
299
  className: "".concat(blockClass, "__header")
264
- }, /*#__PURE__*/React.createElement(TextInput, {
265
- id: "temp-id",
266
- labelText: textInputLabel,
267
- placeholder: inputPlaceholder,
268
- value: searchTerm,
269
- onChange: handleSearch
300
+ }, /*#__PURE__*/React.createElement(AddSelectFilter, {
301
+ inputLabel: globalSearchLabel,
302
+ inputPlaceholder: globalSearchPlaceholder,
303
+ searchTerm: searchTerm,
304
+ handleSearch: handleSearch,
305
+ multi: multi,
306
+ filterOpts: globalFilterOpts,
307
+ handleFilter: handleFilter,
308
+ primaryButtonText: globalFiltersPrimaryButtonText,
309
+ secondaryButtonText: globalFiltersSecondaryButtonText,
310
+ placeholder: globalFiltersPlaceholderText,
311
+ iconDescription: globalFiltersIconDescription,
312
+ appliedFilters: appliedGlobalFilters,
313
+ hasFiltersApplied: globalFiltersApplied,
314
+ clearFiltersText: clearFiltersText
270
315
  }), /*#__PURE__*/React.createElement("div", {
271
316
  className: "".concat(blockClass, "__tag-container")
272
317
  }, showBreadsCrumbs ? /*#__PURE__*/React.createElement(AddSelectBreadcrumbs, {
@@ -278,7 +323,7 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
278
323
  }, searchTerm ? searchResultsLabel : itemsLabel), showTags && /*#__PURE__*/React.createElement(Tag, {
279
324
  type: "gray",
280
325
  size: "sm"
281
- }, itemsToDisplay.length))), useNormalizedItems && !searchTerm ? /*#__PURE__*/React.createElement("div", {
326
+ }, itemsToDisplay.length))), useNormalizedItems && !searchTerm && !globalFiltersApplied ? /*#__PURE__*/React.createElement("div", {
282
327
  className: "".concat(blockClass, "__columns")
283
328
  }, itemsToDisplay.map(function (page, idx) {
284
329
  var _path;
@@ -299,8 +344,7 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
299
344
  title: noResultsTitle
300
345
  }))));
301
346
  return /*#__PURE__*/React.createElement("div", _extends({
302
- ref: ref,
303
- className: classNames
347
+ ref: ref
304
348
  }, rest), multi ? /*#__PURE__*/React.createElement(Tearsheet, _extends({}, commonTearsheetProps, {
305
349
  influencer: multi && /*#__PURE__*/React.createElement(AddSelectSidebar, sidebarProps),
306
350
  influencerPosition: "right"
@@ -308,23 +352,39 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
308
352
  });
309
353
  AddSelect.propTypes = {
310
354
  className: PropTypes.string,
355
+ clearFiltersText: PropTypes.string,
311
356
  columnInputPlaceholder: PropTypes.string,
312
357
  description: PropTypes.string,
358
+ globalFilters: PropTypes.arrayOf(PropTypes.shape({
359
+ id: PropTypes.string,
360
+ label: PropTypes.string
361
+ })),
362
+ globalFiltersIconDescription: PropTypes.string,
363
+ globalFiltersPlaceholderText: PropTypes.string,
364
+ globalFiltersPrimaryButtonText: PropTypes.string,
365
+ globalFiltersSecondaryButtonText: PropTypes.string,
366
+ globalSearchLabel: PropTypes.string,
367
+ globalSearchPlaceholder: PropTypes.string,
313
368
  influencerTitle: PropTypes.string,
314
- inputPlaceholder: PropTypes.string,
315
369
  items: PropTypes.shape({
316
370
  modifiers: PropTypes.shape({
317
371
  label: PropTypes.string,
318
- options: PropTypes.array,
319
- property: PropTypes.string
372
+ options: PropTypes.array
320
373
  }),
321
374
  sortBy: PropTypes.array,
322
375
  filterBy: PropTypes.array,
323
376
  entries: PropTypes.arrayOf(PropTypes.shape({
377
+ avatar: PropTypes.shape({
378
+ alt: PropTypes.string,
379
+ icon: PropTypes.object,
380
+ src: PropTypes.string
381
+ }),
382
+ children: PropTypes.object,
383
+ icon: PropTypes.object,
324
384
  id: PropTypes.string.isRequired,
385
+ subtitle: PropTypes.string,
325
386
  title: PropTypes.string.isRequired,
326
- value: PropTypes.string.isRequired,
327
- children: PropTypes.object
387
+ value: PropTypes.string.isRequired
328
388
  }))
329
389
  }),
330
390
  itemsLabel: PropTypes.string,
@@ -335,13 +395,16 @@ AddSelect.propTypes = {
335
395
  noSelectionTitle: PropTypes.string,
336
396
  onClose: PropTypes.func,
337
397
  onCloseButtonText: PropTypes.string,
338
- onSearchFilter: PropTypes.func,
339
398
  onSubmit: PropTypes.func,
340
399
  onSubmitButtonText: PropTypes.string,
341
400
  open: PropTypes.bool,
401
+
402
+ /**
403
+ * portal target for the all tags modal
404
+ */
405
+ portalTarget: PropTypes.node,
342
406
  removeIconDescription: PropTypes.string,
343
407
  searchResultsLabel: PropTypes.string,
344
- textInputLabel: PropTypes.string,
345
408
  title: PropTypes.string
346
409
  };
347
410
  AddSelect.defaultProps = {
@@ -0,0 +1,172 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+
4
+ 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; }
5
+
6
+ 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; }
7
+
8
+ //
9
+ // Copyright IBM Corp. 2022
10
+ //
11
+ // This source code is licensed under the Apache-2.0 license found in the
12
+ // LICENSE file in the root directory of this source tree.
13
+ //
14
+ import React, { useState } from 'react';
15
+ import { Button, ButtonSet, Dropdown, TextInput, Tag } from 'carbon-components-react';
16
+ import PropTypes from 'prop-types';
17
+ import { Filter16 } from '@carbon/icons-react';
18
+ import { pkg } from '../../settings';
19
+ var componentName = 'AddSelectFilter';
20
+ export var AddSelectFilter = function AddSelectFilter(_ref) {
21
+ var appliedFilters = _ref.appliedFilters,
22
+ clearFiltersText = _ref.clearFiltersText,
23
+ filterOpts = _ref.filterOpts,
24
+ handleFilter = _ref.handleFilter,
25
+ handleSearch = _ref.handleSearch,
26
+ hasFiltersApplied = _ref.hasFiltersApplied,
27
+ iconDescription = _ref.iconDescription,
28
+ inputLabel = _ref.inputLabel,
29
+ inputPlaceholder = _ref.inputPlaceholder,
30
+ multi = _ref.multi,
31
+ placeholder = _ref.placeholder,
32
+ primaryButtonText = _ref.primaryButtonText,
33
+ searchTerm = _ref.searchTerm,
34
+ secondaryButtonText = _ref.secondaryButtonText;
35
+
36
+ var _useState = useState({}),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ filters = _useState2[0],
39
+ setFilters = _useState2[1];
40
+
41
+ var _useState3 = useState(false),
42
+ _useState4 = _slicedToArray(_useState3, 2),
43
+ open = _useState4[0],
44
+ setOpen = _useState4[1];
45
+
46
+ var blockClass = "".concat(pkg.prefix, "--add-select__global-filter");
47
+
48
+ var searchHandler = function searchHandler(e) {
49
+ handleSearch(e.target.value);
50
+ };
51
+
52
+ var onchangeHandler = function onchangeHandler(_ref2, id) {
53
+ var selectedItem = _ref2.selectedItem;
54
+ setFilters(_objectSpread(_objectSpread({}, filters), {}, _defineProperty({}, id, selectedItem)));
55
+ };
56
+ /**
57
+ * this component needs to manage it's own internal state of filters before they're applied
58
+ * setFilters manages the local filter state
59
+ * applyFilters adds the filter state to the parent
60
+ * resetFilters resets the local state
61
+ * clearFilters resets both
62
+ */
63
+
64
+
65
+ var applyFilters = function applyFilters() {
66
+ handleFilter(filters);
67
+ };
68
+
69
+ var resetFilters = function resetFilters() {
70
+ setFilters({});
71
+ };
72
+
73
+ var clearFilters = function clearFilters() {
74
+ resetFilters();
75
+ handleFilter({});
76
+ };
77
+
78
+ var removeTag = function removeTag(key) {
79
+ var newFilters = _objectSpread({}, filters);
80
+
81
+ delete newFilters[key];
82
+ setFilters(newFilters);
83
+ handleFilter(newFilters);
84
+ };
85
+
86
+ var getSelectedItem = function getSelectedItem(id) {
87
+ return filters[id] || '';
88
+ };
89
+
90
+ var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
91
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
92
+ className: "".concat(blockClass, "-search")
93
+ }, /*#__PURE__*/React.createElement(TextInput, {
94
+ id: "temp-id",
95
+ labelText: inputLabel,
96
+ placeholder: inputPlaceholder,
97
+ value: searchTerm,
98
+ onChange: searchHandler
99
+ }), showFilter && /*#__PURE__*/React.createElement(Button, {
100
+ renderIcon: Filter16,
101
+ hasIconOnly: true,
102
+ kind: "ghost",
103
+ onClick: function onClick() {
104
+ return setOpen(!open);
105
+ },
106
+ iconDescription: iconDescription,
107
+ className: "".concat(blockClass, "-toggle"),
108
+ size: "md"
109
+ }), open && /*#__PURE__*/React.createElement("div", {
110
+ className: "".concat(blockClass)
111
+ }, /*#__PURE__*/React.createElement("div", {
112
+ className: "".concat(blockClass, "-content")
113
+ }, /*#__PURE__*/React.createElement("p", null, "Filters"), /*#__PURE__*/React.createElement("div", {
114
+ className: "".concat(blockClass, "-opts")
115
+ }, filterOpts.map(function (filterOpts) {
116
+ return /*#__PURE__*/React.createElement(Dropdown, {
117
+ id: filterOpts.id,
118
+ key: filterOpts.id,
119
+ titleText: filterOpts.label,
120
+ items: filterOpts.opts,
121
+ light: true,
122
+ onChange: function onChange(value) {
123
+ return onchangeHandler(value, filterOpts.id);
124
+ },
125
+ selectedItem: getSelectedItem(filterOpts.id),
126
+ label: placeholder
127
+ });
128
+ }))), /*#__PURE__*/React.createElement(ButtonSet, {
129
+ className: "".concat(blockClass, "-button-set")
130
+ }, /*#__PURE__*/React.createElement(Button, {
131
+ kind: "secondary",
132
+ onClick: resetFilters,
133
+ className: "".concat(blockClass, "-button")
134
+ }, secondaryButtonText), /*#__PURE__*/React.createElement(Button, {
135
+ kind: "primary",
136
+ onClick: applyFilters,
137
+ className: "".concat(blockClass, "-button")
138
+ }, primaryButtonText)))), hasFiltersApplied && /*#__PURE__*/React.createElement("div", {
139
+ className: "".concat(blockClass, "-applied")
140
+ }, Object.keys(appliedFilters).map(function (filterType) {
141
+ return /*#__PURE__*/React.createElement(Tag, {
142
+ key: filterType,
143
+ type: "gray",
144
+ size: "sm",
145
+ onClose: function onClose() {
146
+ return removeTag(filterType);
147
+ },
148
+ filter: true
149
+ }, "".concat(filterType, ": ").concat(appliedFilters[filterType]));
150
+ }), /*#__PURE__*/React.createElement(Button, {
151
+ kind: "ghost",
152
+ size: "sm",
153
+ onClick: clearFilters
154
+ }, clearFiltersText)));
155
+ };
156
+ AddSelectFilter.propTypes = {
157
+ appliedFilters: PropTypes.object,
158
+ clearFiltersText: PropTypes.string,
159
+ filterOpts: PropTypes.array,
160
+ handleFilter: PropTypes.func,
161
+ handleSearch: PropTypes.func,
162
+ hasFiltersApplied: PropTypes.bool,
163
+ iconDescription: PropTypes.string,
164
+ inputLabel: PropTypes.string,
165
+ inputPlaceholder: PropTypes.string,
166
+ multi: PropTypes.bool,
167
+ placeholder: PropTypes.string,
168
+ primaryButtonText: PropTypes.string,
169
+ searchTerm: PropTypes.string,
170
+ secondaryButtonText: PropTypes.string
171
+ };
172
+ AddSelectFilter.displayName = componentName;
@@ -61,4 +61,34 @@ export var flatten = function flatten(entries) {
61
61
 
62
62
  return prev.concat(item).concat(children ? flatten(children.entries) : []);
63
63
  }, []);
64
+ };
65
+ /**
66
+ * takes in a global filters array and a flat list of items
67
+ * it then searches through the items and finds any with the matching filter properties
68
+ * and adds those values to the array
69
+ * globalFilters looks like [{ id: someProperty }]
70
+ * the returned array would look like [{ id: someProperty, opts: [value, value]}]
71
+ * @param {Array} globalFilters - list of filter properties
72
+ * @param {Array} items - items to search through
73
+ * @returns an array of filter values
74
+ */
75
+
76
+ export var getGlobalFilterValues = function getGlobalFilterValues(globalFilters, items) {
77
+ var filterOpts = globalFilters.reduce(function (prevFilter, curFilter) {
78
+ var filterId = curFilter.id;
79
+ var opts = items.reduce(function (prevItem, curItem) {
80
+ var value = curItem[filterId];
81
+
82
+ if (value && !prevItem.includes(value)) {
83
+ prevItem.push(value);
84
+ }
85
+
86
+ return prevItem;
87
+ }, []);
88
+ prevFilter.push(_objectSpread({
89
+ opts: opts
90
+ }, curFilter));
91
+ return prevFilter;
92
+ }, []);
93
+ return filterOpts;
64
94
  };