@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
@@ -41,7 +41,9 @@ var _AddSelectColumn = require("./AddSelectColumn");
41
41
 
42
42
  var _addSelectUtils = require("./add-select-utils");
43
43
 
44
- var _excluded = ["className", "columnInputPlaceholder", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "searchResultsLabel", "textInputLabel", "title"];
44
+ var _AddSelectFilter = require("./AddSelectFilter");
45
+
46
+ 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"];
45
47
 
46
48
  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); }
47
49
 
@@ -52,10 +54,17 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
52
54
  var _cx;
53
55
 
54
56
  var className = _ref.className,
57
+ clearFiltersText = _ref.clearFiltersText,
55
58
  columnInputPlaceholder = _ref.columnInputPlaceholder,
56
59
  description = _ref.description,
60
+ globalFilters = _ref.globalFilters,
61
+ globalFiltersIconDescription = _ref.globalFiltersIconDescription,
62
+ globalFiltersPlaceholderText = _ref.globalFiltersPlaceholderText,
63
+ globalFiltersPrimaryButtonText = _ref.globalFiltersPrimaryButtonText,
64
+ globalFiltersSecondaryButtonText = _ref.globalFiltersSecondaryButtonText,
65
+ globalSearchLabel = _ref.globalSearchLabel,
66
+ globalSearchPlaceholder = _ref.globalSearchPlaceholder,
57
67
  influencerTitle = _ref.influencerTitle,
58
- inputPlaceholder = _ref.inputPlaceholder,
59
68
  items = _ref.items,
60
69
  itemsLabel = _ref.itemsLabel,
61
70
  multi = _ref.multi,
@@ -65,13 +74,12 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
65
74
  noSelectionTitle = _ref.noSelectionTitle,
66
75
  onClose = _ref.onClose,
67
76
  onCloseButtonText = _ref.onCloseButtonText,
68
- onSearchFilter = _ref.onSearchFilter,
69
77
  onSubmit = _ref.onSubmit,
70
78
  onSubmitButtonText = _ref.onSubmitButtonText,
71
79
  open = _ref.open,
80
+ portalTarget = _ref.portalTarget,
72
81
  removeIconDescription = _ref.removeIconDescription,
73
82
  searchResultsLabel = _ref.searchResultsLabel,
74
- textInputLabel = _ref.textInputLabel,
75
83
  title = _ref.title,
76
84
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
77
85
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select"); // hooks
@@ -111,19 +119,39 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
111
119
  flatItems = _useState14[0],
112
120
  setFlatItems = _useState14[1];
113
121
 
122
+ var _useState15 = (0, _react.useState)([]),
123
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
124
+ globalFilterOpts = _useState16[0],
125
+ setGlobalFilterOpts = _useState16[1];
126
+
127
+ var _useState17 = (0, _react.useState)({}),
128
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
129
+ appliedGlobalFilters = _useState18[0],
130
+ setAppliedGlobalFilters = _useState18[1];
131
+
114
132
  (0, _react.useEffect)(function () {
115
133
  var entries = items.entries; // flatItems is just a single array of all entries including children
116
134
 
117
- setFlatItems((0, _addSelectUtils.flatten)(entries)); // multi select with nested data needs to be normalized
135
+ var flattenedItems = (0, _addSelectUtils.flatten)(entries);
136
+
137
+ if (multi) {
138
+ if (globalFilters !== null && globalFilters !== void 0 && globalFilters.length) {
139
+ var globalFilterValues = (0, _addSelectUtils.getGlobalFilterValues)(globalFilters, flattenedItems);
140
+ setGlobalFilterOpts(globalFilterValues);
141
+ } // multi select with nested data needs to be normalized
118
142
 
119
- if (multi && entries.find(function (entry) {
120
- return entry.children;
121
- })) {
122
- var newItems = (0, _addSelectUtils.normalize)(items);
123
- setNormalizedItems(newItems);
124
- setUsedNormalizedItems(true);
143
+
144
+ if (entries.find(function (entry) {
145
+ return entry.children;
146
+ })) {
147
+ var newItems = (0, _addSelectUtils.normalize)(items);
148
+ setNormalizedItems(newItems);
149
+ setUsedNormalizedItems(true);
150
+ }
125
151
  }
126
- }, [items, multi]); // used to generate columns of results for multi select with hierarchy
152
+
153
+ setFlatItems(flattenedItems);
154
+ }, [items, multi, globalFilters]); // used to generate columns of results for multi select with hierarchy
127
155
 
128
156
  var getPages = function getPages() {
129
157
  var pages = [];
@@ -182,11 +210,6 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
182
210
  var results = itemsToFilter.filter(function (item) {
183
211
  if (!searchTerm) {
184
212
  return item;
185
- } // if user provides their own filter function use that
186
-
187
-
188
- if (onSearchFilter) {
189
- return onSearchFilter(item, searchTerm);
190
213
  } // otherwise use the default label filter
191
214
 
192
215
 
@@ -197,11 +220,18 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
197
220
 
198
221
  var getDisplayItems = function getDisplayItems() {
199
222
  if (useNormalizedItems) {
200
- // when global search is in use the results are not in column format
201
- if (searchTerm) {
202
- return flatItems.filter(function (item) {
223
+ // when global search or filter is in use the results are not in column format
224
+ var filters = Object.keys(appliedGlobalFilters);
225
+
226
+ if (searchTerm || filters.length) {
227
+ var results = flatItems.filter(function (item) {
203
228
  return item.title.toLowerCase().includes(searchTerm);
229
+ }).filter(function (item) {
230
+ return filters.every(function (filter) {
231
+ return item[filter] === appliedGlobalFilters[filter];
232
+ });
204
233
  });
234
+ return results;
205
235
  }
206
236
 
207
237
  return getPages();
@@ -222,15 +252,21 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
222
252
  singleSelection: singleSelection
223
253
  }; // handlers
224
254
 
225
- var handleSearch = function handleSearch(e) {
226
- setSearchTerm(e.target.value);
255
+ var handleSearch = function handleSearch(term) {
256
+ setSearchTerm(term);
257
+ };
258
+
259
+ var handleFilter = function handleFilter(filters) {
260
+ setAppliedGlobalFilters(filters);
227
261
  };
228
262
 
229
263
  var submitHandler = function submitHandler() {
230
264
  onSubmit(multi ? multiSelection : singleSelection);
231
265
  };
232
266
 
267
+ var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx));
233
268
  var commonTearsheetProps = {
269
+ className: classNames,
234
270
  open: open,
235
271
  title: title,
236
272
  description: description,
@@ -244,7 +280,8 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
244
280
  kind: 'primary',
245
281
  onClick: submitHandler,
246
282
  disabled: multi ? multiSelection.length === 0 : !singleSelection
247
- }]
283
+ }],
284
+ portalTarget: portalTarget
248
285
  };
249
286
  var sidebarProps = {
250
287
  influencerTitle: influencerTitle,
@@ -255,7 +292,6 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
255
292
  removeIconDescription: removeIconDescription,
256
293
  setMultiSelection: setMultiSelection
257
294
  };
258
- var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx));
259
295
 
260
296
  var setShowBreadsCrumbs = function setShowBreadsCrumbs() {
261
297
  if (searchTerm) {
@@ -282,16 +318,26 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
282
318
  };
283
319
 
284
320
  var showBreadsCrumbs = setShowBreadsCrumbs();
285
- var showTags = setShowTags(); // main content
321
+ var showTags = setShowTags();
322
+ var globalFiltersApplied = Object.keys(appliedGlobalFilters).length > 0; // main content
286
323
 
287
324
  var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
288
325
  className: "".concat(blockClass, "__header")
289
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
290
- id: "temp-id",
291
- labelText: textInputLabel,
292
- placeholder: inputPlaceholder,
293
- value: searchTerm,
294
- onChange: handleSearch
326
+ }, /*#__PURE__*/_react.default.createElement(_AddSelectFilter.AddSelectFilter, {
327
+ inputLabel: globalSearchLabel,
328
+ inputPlaceholder: globalSearchPlaceholder,
329
+ searchTerm: searchTerm,
330
+ handleSearch: handleSearch,
331
+ multi: multi,
332
+ filterOpts: globalFilterOpts,
333
+ handleFilter: handleFilter,
334
+ primaryButtonText: globalFiltersPrimaryButtonText,
335
+ secondaryButtonText: globalFiltersSecondaryButtonText,
336
+ placeholder: globalFiltersPlaceholderText,
337
+ iconDescription: globalFiltersIconDescription,
338
+ appliedFilters: appliedGlobalFilters,
339
+ hasFiltersApplied: globalFiltersApplied,
340
+ clearFiltersText: clearFiltersText
295
341
  }), /*#__PURE__*/_react.default.createElement("div", {
296
342
  className: "".concat(blockClass, "__tag-container")
297
343
  }, showBreadsCrumbs ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
@@ -303,7 +349,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
303
349
  }, searchTerm ? searchResultsLabel : itemsLabel), showTags && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
304
350
  type: "gray",
305
351
  size: "sm"
306
- }, itemsToDisplay.length))), useNormalizedItems && !searchTerm ? /*#__PURE__*/_react.default.createElement("div", {
352
+ }, itemsToDisplay.length))), useNormalizedItems && !searchTerm && !globalFiltersApplied ? /*#__PURE__*/_react.default.createElement("div", {
307
353
  className: "".concat(blockClass, "__columns")
308
354
  }, itemsToDisplay.map(function (page, idx) {
309
355
  var _path;
@@ -325,8 +371,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
325
371
  }))));
326
372
 
327
373
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
328
- ref: ref,
329
- className: classNames
374
+ ref: ref
330
375
  }, rest), multi ? /*#__PURE__*/_react.default.createElement(_Tearsheet.Tearsheet, (0, _extends2.default)({}, commonTearsheetProps, {
331
376
  influencer: multi && /*#__PURE__*/_react.default.createElement(_AddSelectSidebar.AddSelectSidebar, sidebarProps),
332
377
  influencerPosition: "right"
@@ -335,23 +380,39 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
335
380
  exports.AddSelect = AddSelect;
336
381
  AddSelect.propTypes = {
337
382
  className: _propTypes.default.string,
383
+ clearFiltersText: _propTypes.default.string,
338
384
  columnInputPlaceholder: _propTypes.default.string,
339
385
  description: _propTypes.default.string,
386
+ globalFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
387
+ id: _propTypes.default.string,
388
+ label: _propTypes.default.string
389
+ })),
390
+ globalFiltersIconDescription: _propTypes.default.string,
391
+ globalFiltersPlaceholderText: _propTypes.default.string,
392
+ globalFiltersPrimaryButtonText: _propTypes.default.string,
393
+ globalFiltersSecondaryButtonText: _propTypes.default.string,
394
+ globalSearchLabel: _propTypes.default.string,
395
+ globalSearchPlaceholder: _propTypes.default.string,
340
396
  influencerTitle: _propTypes.default.string,
341
- inputPlaceholder: _propTypes.default.string,
342
397
  items: _propTypes.default.shape({
343
398
  modifiers: _propTypes.default.shape({
344
399
  label: _propTypes.default.string,
345
- options: _propTypes.default.array,
346
- property: _propTypes.default.string
400
+ options: _propTypes.default.array
347
401
  }),
348
402
  sortBy: _propTypes.default.array,
349
403
  filterBy: _propTypes.default.array,
350
404
  entries: _propTypes.default.arrayOf(_propTypes.default.shape({
405
+ avatar: _propTypes.default.shape({
406
+ alt: _propTypes.default.string,
407
+ icon: _propTypes.default.object,
408
+ src: _propTypes.default.string
409
+ }),
410
+ children: _propTypes.default.object,
411
+ icon: _propTypes.default.object,
351
412
  id: _propTypes.default.string.isRequired,
413
+ subtitle: _propTypes.default.string,
352
414
  title: _propTypes.default.string.isRequired,
353
- value: _propTypes.default.string.isRequired,
354
- children: _propTypes.default.object
415
+ value: _propTypes.default.string.isRequired
355
416
  }))
356
417
  }),
357
418
  itemsLabel: _propTypes.default.string,
@@ -362,13 +423,16 @@ AddSelect.propTypes = {
362
423
  noSelectionTitle: _propTypes.default.string,
363
424
  onClose: _propTypes.default.func,
364
425
  onCloseButtonText: _propTypes.default.string,
365
- onSearchFilter: _propTypes.default.func,
366
426
  onSubmit: _propTypes.default.func,
367
427
  onSubmitButtonText: _propTypes.default.string,
368
428
  open: _propTypes.default.bool,
429
+
430
+ /**
431
+ * portal target for the all tags modal
432
+ */
433
+ portalTarget: _propTypes.default.node,
369
434
  removeIconDescription: _propTypes.default.string,
370
435
  searchResultsLabel: _propTypes.default.string,
371
- textInputLabel: _propTypes.default.string,
372
436
  title: _propTypes.default.string
373
437
  };
374
438
  AddSelect.defaultProps = {
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.AddSelectFilter = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _carbonComponentsReact = require("carbon-components-react");
19
+
20
+ var _propTypes = _interopRequireDefault(require("prop-types"));
21
+
22
+ var _iconsReact = require("@carbon/icons-react");
23
+
24
+ var _settings = require("../../settings");
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ 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; }
31
+
32
+ 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) { (0, _defineProperty2.default)(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; }
33
+
34
+ var componentName = 'AddSelectFilter';
35
+
36
+ var AddSelectFilter = function AddSelectFilter(_ref) {
37
+ var appliedFilters = _ref.appliedFilters,
38
+ clearFiltersText = _ref.clearFiltersText,
39
+ filterOpts = _ref.filterOpts,
40
+ handleFilter = _ref.handleFilter,
41
+ handleSearch = _ref.handleSearch,
42
+ hasFiltersApplied = _ref.hasFiltersApplied,
43
+ iconDescription = _ref.iconDescription,
44
+ inputLabel = _ref.inputLabel,
45
+ inputPlaceholder = _ref.inputPlaceholder,
46
+ multi = _ref.multi,
47
+ placeholder = _ref.placeholder,
48
+ primaryButtonText = _ref.primaryButtonText,
49
+ searchTerm = _ref.searchTerm,
50
+ secondaryButtonText = _ref.secondaryButtonText;
51
+
52
+ var _useState = (0, _react.useState)({}),
53
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
54
+ filters = _useState2[0],
55
+ setFilters = _useState2[1];
56
+
57
+ var _useState3 = (0, _react.useState)(false),
58
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
59
+ open = _useState4[0],
60
+ setOpen = _useState4[1];
61
+
62
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__global-filter");
63
+
64
+ var searchHandler = function searchHandler(e) {
65
+ handleSearch(e.target.value);
66
+ };
67
+
68
+ var onchangeHandler = function onchangeHandler(_ref2, id) {
69
+ var selectedItem = _ref2.selectedItem;
70
+ setFilters(_objectSpread(_objectSpread({}, filters), {}, (0, _defineProperty2.default)({}, id, selectedItem)));
71
+ };
72
+ /**
73
+ * this component needs to manage it's own internal state of filters before they're applied
74
+ * setFilters manages the local filter state
75
+ * applyFilters adds the filter state to the parent
76
+ * resetFilters resets the local state
77
+ * clearFilters resets both
78
+ */
79
+
80
+
81
+ var applyFilters = function applyFilters() {
82
+ handleFilter(filters);
83
+ };
84
+
85
+ var resetFilters = function resetFilters() {
86
+ setFilters({});
87
+ };
88
+
89
+ var clearFilters = function clearFilters() {
90
+ resetFilters();
91
+ handleFilter({});
92
+ };
93
+
94
+ var removeTag = function removeTag(key) {
95
+ var newFilters = _objectSpread({}, filters);
96
+
97
+ delete newFilters[key];
98
+ setFilters(newFilters);
99
+ handleFilter(newFilters);
100
+ };
101
+
102
+ var getSelectedItem = function getSelectedItem(id) {
103
+ return filters[id] || '';
104
+ };
105
+
106
+ var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
107
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
108
+ className: "".concat(blockClass, "-search")
109
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
110
+ id: "temp-id",
111
+ labelText: inputLabel,
112
+ placeholder: inputPlaceholder,
113
+ value: searchTerm,
114
+ onChange: searchHandler
115
+ }), showFilter && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
116
+ renderIcon: _iconsReact.Filter16,
117
+ hasIconOnly: true,
118
+ kind: "ghost",
119
+ onClick: function onClick() {
120
+ return setOpen(!open);
121
+ },
122
+ iconDescription: iconDescription,
123
+ className: "".concat(blockClass, "-toggle"),
124
+ size: "md"
125
+ }), open && /*#__PURE__*/_react.default.createElement("div", {
126
+ className: "".concat(blockClass)
127
+ }, /*#__PURE__*/_react.default.createElement("div", {
128
+ className: "".concat(blockClass, "-content")
129
+ }, /*#__PURE__*/_react.default.createElement("p", null, "Filters"), /*#__PURE__*/_react.default.createElement("div", {
130
+ className: "".concat(blockClass, "-opts")
131
+ }, filterOpts.map(function (filterOpts) {
132
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, {
133
+ id: filterOpts.id,
134
+ key: filterOpts.id,
135
+ titleText: filterOpts.label,
136
+ items: filterOpts.opts,
137
+ light: true,
138
+ onChange: function onChange(value) {
139
+ return onchangeHandler(value, filterOpts.id);
140
+ },
141
+ selectedItem: getSelectedItem(filterOpts.id),
142
+ label: placeholder
143
+ });
144
+ }))), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ButtonSet, {
145
+ className: "".concat(blockClass, "-button-set")
146
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
147
+ kind: "secondary",
148
+ onClick: resetFilters,
149
+ className: "".concat(blockClass, "-button")
150
+ }, secondaryButtonText), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
151
+ kind: "primary",
152
+ onClick: applyFilters,
153
+ className: "".concat(blockClass, "-button")
154
+ }, primaryButtonText)))), hasFiltersApplied && /*#__PURE__*/_react.default.createElement("div", {
155
+ className: "".concat(blockClass, "-applied")
156
+ }, Object.keys(appliedFilters).map(function (filterType) {
157
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
158
+ key: filterType,
159
+ type: "gray",
160
+ size: "sm",
161
+ onClose: function onClose() {
162
+ return removeTag(filterType);
163
+ },
164
+ filter: true
165
+ }, "".concat(filterType, ": ").concat(appliedFilters[filterType]));
166
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
167
+ kind: "ghost",
168
+ size: "sm",
169
+ onClick: clearFilters
170
+ }, clearFiltersText)));
171
+ };
172
+
173
+ exports.AddSelectFilter = AddSelectFilter;
174
+ AddSelectFilter.propTypes = {
175
+ appliedFilters: _propTypes.default.object,
176
+ clearFiltersText: _propTypes.default.string,
177
+ filterOpts: _propTypes.default.array,
178
+ handleFilter: _propTypes.default.func,
179
+ handleSearch: _propTypes.default.func,
180
+ hasFiltersApplied: _propTypes.default.bool,
181
+ iconDescription: _propTypes.default.string,
182
+ inputLabel: _propTypes.default.string,
183
+ inputPlaceholder: _propTypes.default.string,
184
+ multi: _propTypes.default.bool,
185
+ placeholder: _propTypes.default.string,
186
+ primaryButtonText: _propTypes.default.string,
187
+ searchTerm: _propTypes.default.string,
188
+ secondaryButtonText: _propTypes.default.string
189
+ };
190
+ AddSelectFilter.displayName = componentName;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.normalize = exports.flatten = void 0;
8
+ exports.normalize = exports.getGlobalFilterValues = exports.flatten = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -74,5 +74,38 @@ var flatten = function flatten(entries) {
74
74
  return prev.concat(item).concat(children ? flatten(children.entries) : []);
75
75
  }, []);
76
76
  };
77
+ /**
78
+ * takes in a global filters array and a flat list of items
79
+ * it then searches through the items and finds any with the matching filter properties
80
+ * and adds those values to the array
81
+ * globalFilters looks like [{ id: someProperty }]
82
+ * the returned array would look like [{ id: someProperty, opts: [value, value]}]
83
+ * @param {Array} globalFilters - list of filter properties
84
+ * @param {Array} items - items to search through
85
+ * @returns an array of filter values
86
+ */
87
+
88
+
89
+ exports.flatten = flatten;
90
+
91
+ var getGlobalFilterValues = function getGlobalFilterValues(globalFilters, items) {
92
+ var filterOpts = globalFilters.reduce(function (prevFilter, curFilter) {
93
+ var filterId = curFilter.id;
94
+ var opts = items.reduce(function (prevItem, curItem) {
95
+ var value = curItem[filterId];
96
+
97
+ if (value && !prevItem.includes(value)) {
98
+ prevItem.push(value);
99
+ }
100
+
101
+ return prevItem;
102
+ }, []);
103
+ prevFilter.push(_objectSpread({
104
+ opts: opts
105
+ }, curFilter));
106
+ return prevFilter;
107
+ }, []);
108
+ return filterOpts;
109
+ };
77
110
 
78
- exports.flatten = flatten;
111
+ exports.getGlobalFilterValues = getGlobalFilterValues;