box-ui-elements 20.0.1-beta.1 → 20.0.1-beta.1.1

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.
@@ -93,6 +93,10 @@ function makeSelectable(BaseTable) {
93
93
  key: 'down',
94
94
  description: React.createElement(FormattedMessage, messages.downDescription),
95
95
  handler: event => {
96
+ if (this.isQuickFilter(event)) {
97
+ return;
98
+ }
99
+
96
100
  const {
97
101
  data
98
102
  } = this.props;
@@ -110,6 +114,10 @@ function makeSelectable(BaseTable) {
110
114
  key: 'up',
111
115
  description: React.createElement(FormattedMessage, messages.upDescription),
112
116
  handler: event => {
117
+ if (this.isQuickFilter(event)) {
118
+ return;
119
+ }
120
+
113
121
  const {
114
122
  focusedIndex = 0
115
123
  } = this.state;
@@ -166,7 +174,7 @@ function makeSelectable(BaseTable) {
166
174
  key: 'right',
167
175
  description: React.createElement(FormattedMessage, messages.downDescription),
168
176
  handler: event => {
169
- if (this.isTargetSlider(event)) {
177
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
170
178
  return;
171
179
  }
172
180
 
@@ -187,7 +195,7 @@ function makeSelectable(BaseTable) {
187
195
  key: 'left',
188
196
  description: React.createElement(FormattedMessage, messages.upDescription),
189
197
  handler: event => {
190
- if (this.isTargetSlider(event)) {
198
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
191
199
  return;
192
200
  }
193
201
 
@@ -205,7 +213,7 @@ function makeSelectable(BaseTable) {
205
213
  key: 'down',
206
214
  description: React.createElement(FormattedMessage, messages.downDescription),
207
215
  handler: event => {
208
- if (this.isTargetSlider(event)) {
216
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
209
217
  return;
210
218
  }
211
219
 
@@ -227,7 +235,7 @@ function makeSelectable(BaseTable) {
227
235
  key: 'up',
228
236
  description: React.createElement(FormattedMessage, messages.upDescription),
229
237
  handler: event => {
230
- if (this.isTargetSlider(event)) {
238
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
231
239
  return;
232
240
  }
233
241
 
@@ -581,6 +589,12 @@ function makeSelectable(BaseTable) {
581
589
  return ((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.role) === 'slider';
582
590
  });
583
591
 
592
+ _defineProperty(this, "isQuickFilter", event => {
593
+ var _event$target2;
594
+
595
+ return ((_event$target2 = event.target) === null || _event$target2 === void 0 ? void 0 : _event$target2.dataset) && 'radixCollectionItem' in event.target.dataset;
596
+ });
597
+
584
598
  this.anchorIndex = 0;
585
599
  this.searchString = '';
586
600
  this.searchTimeout = null; // we have to store the previously focused index because a focus event
@@ -148,6 +148,10 @@ function makeSelectable(BaseTable) {
148
148
  key: 'down',
149
149
  description: <FormattedMessage {...messages.downDescription} />,
150
150
  handler: event => {
151
+ if (this.isQuickFilter(event)) {
152
+ return;
153
+ }
154
+
151
155
  const { data } = this.props;
152
156
  const { focusedIndex } = this.state;
153
157
 
@@ -163,6 +167,10 @@ function makeSelectable(BaseTable) {
163
167
  key: 'up',
164
168
  description: <FormattedMessage {...messages.upDescription} />,
165
169
  handler: event => {
170
+ if (this.isQuickFilter(event)) {
171
+ return;
172
+ }
173
+
166
174
  const { focusedIndex = 0 } = this.state;
167
175
 
168
176
  event.preventDefault();
@@ -213,7 +221,7 @@ function makeSelectable(BaseTable) {
213
221
  key: 'right',
214
222
  description: <FormattedMessage {...messages.downDescription} />,
215
223
  handler: event => {
216
- if (this.isTargetSlider(event)) {
224
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
217
225
  return;
218
226
  }
219
227
 
@@ -232,7 +240,7 @@ function makeSelectable(BaseTable) {
232
240
  key: 'left',
233
241
  description: <FormattedMessage {...messages.upDescription} />,
234
242
  handler: event => {
235
- if (this.isTargetSlider(event)) {
243
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
236
244
  return;
237
245
  }
238
246
 
@@ -249,7 +257,7 @@ function makeSelectable(BaseTable) {
249
257
  key: 'down',
250
258
  description: <FormattedMessage {...messages.downDescription} />,
251
259
  handler: event => {
252
- if (this.isTargetSlider(event)) {
260
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
253
261
  return;
254
262
  }
255
263
 
@@ -268,7 +276,7 @@ function makeSelectable(BaseTable) {
268
276
  key: 'up',
269
277
  description: <FormattedMessage {...messages.upDescription} />,
270
278
  handler: event => {
271
- if (this.isTargetSlider(event)) {
279
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
272
280
  return;
273
281
  }
274
282
 
@@ -604,6 +612,9 @@ function makeSelectable(BaseTable) {
604
612
 
605
613
  isTargetSlider = event => event.target?.role === 'slider';
606
614
 
615
+ // Workaround for focus conflicting with Blueprint components in Search Quick Filters, not needed once Blueprint table is integrated
616
+ isQuickFilter = event => event.target?.dataset && 'radixCollectionItem' in event.target.dataset;
617
+
607
618
  render() {
608
619
  const { className, data } = this.props;
609
620
  const { focusedIndex } = this.state;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/table/makeSelectable.js"],"names":["PropTypes","React","Component","Set","ImmutablePropTypes","classNames","FormattedMessage","Hotkeys","HotkeyRecord","messages","shiftSelect","SEARCH_TIMER_DURATION","makeSelectable","BaseTable","originalDisplayName","displayName","name","SelectableTable","constructor","props","focusedIndex","undefined","selectedItems","newFocusedIndex","onSelect","previousIndex","state","setState","isSet","toJS","hotkeyType","key","description","shiftXDescription","handler","selectToggle","type","selectAllDescription","event","data","preventDefault","deselectAllDescription","downDescription","Math","min","length","upDescription","max","shiftDownDescription","handleShiftKeyDown","shiftUpDescription","isTargetSlider","gridColumnCount","handleShiftKeyDownForGrid","enableHotkeys","isGridView","hotkeys","viewSpecificHotKeyConfigs","getGridViewHotKeyConfigs","getListViewHotKeyConfigs","getSharedHotkeyConfigs","loadedData","rowIndex","getProcessedProps","has","delete","add","anchorIndex","selectedRows","reduce","rows","item","i","push","newSelectedRows","newSelectedItems","map","size","index","metaKey","ctrlKey","shiftKey","selectRange","selectOne","blurTimerID","setTimeout","clearFocus","clearTimeout","boundary","focusedIndexData","newFocusedIndexData","union","selectedItemIndecies","sourceIndex","targetIndex","dataSize","isSourceSelected","isTargetSelected","selectedItemIndices","isContiguousSelection","newSelectedItemIndices","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","nativeEvent","role","componentDidMount","document","addEventListener","handleKeyboardSearch","componentDidUpdate","prevProps","prevState","onFocus","componentWillUnmount","removeEventListener","render","className","focusedItem","getHotkeyConfigs","handleCheckboxClick","handleRowClick","handleRowFocus","handleTableBlur","handleTableFocus","array","isRequired","number","bool","func","oneOfType","set"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { Set } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport classNames from 'classnames';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Hotkeys, HotkeyRecord } from '../hotkeys';\nimport messages from './messages';\nimport shiftSelect from './shiftSelect';\n\nconst SEARCH_TIMER_DURATION = 1000;\n\nfunction makeSelectable(BaseTable) {\n const originalDisplayName = BaseTable.displayName || BaseTable.name || 'Table';\n\n return class SelectableTable extends Component {\n static displayName = `Selectable(${originalDisplayName})`;\n\n static propTypes = {\n className: PropTypes.string,\n /** Array of unique IDs of the items in the table. Each item should be a string or number, in the order they appear in the table. */\n data: PropTypes.array.isRequired,\n gridColumnCount: PropTypes.number,\n isGridView: PropTypes.bool,\n /** Called when focus changes. `(focusedIndex: number) => void` */\n onFocus: PropTypes.func,\n /** Called when selection changes. `(selectedItems: Array<string> | Array<number> | Set<string> | Set<number>) => void` */\n onSelect: PropTypes.func.isRequired,\n /**\n * Array of strings for keyboard search corresponding to the data prop. If not provided, keyboard search won't work.\n * Example: data = ['f_123', 'f_456'], and corresponding searchStrings = ['file.png', 'another file.pdf']\n */\n searchStrings: PropTypes.array,\n /**\n * Array of IDs that are currently selected, in any order.\n * If you pass a native JS array, then your onSelect function will be called with a native JS array;\n * likewise, if you pass an ImmutableJS Set, then your onSelect function will be called\n * with an ImmutableJS Set.\n */\n selectedItems: PropTypes.oneOfType([PropTypes.array, ImmutablePropTypes.set]),\n /** Array of unique IDs of the items in the table that are loaded and accessible. If not provided, this will default to all data */\n loadedData: PropTypes.array,\n enableHotkeys: PropTypes.bool,\n /** Translated type for hotkeys. If not provided, then the hotkeys will not appear in the help modal. */\n hotkeyType: PropTypes.string,\n };\n\n static defaultProps = {\n selectedItems: new Set(),\n };\n\n constructor(props) {\n super(props);\n\n this.anchorIndex = 0;\n\n this.searchString = '';\n this.searchTimeout = null;\n\n // we have to store the previously focused index because a focus event\n // will be fired before the click event; thus, in the click handler,\n // the focusedItem will already be the new item\n this.previousIndex = 0;\n\n this.blurTimerID = null;\n }\n\n state = {\n focusedIndex: undefined,\n };\n\n componentDidMount() {\n document.addEventListener('keypress', this.handleKeyboardSearch);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.focusedIndex !== this.state.focusedIndex && this.props.onFocus) {\n this.props.onFocus(this.state.focusedIndex);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('keypress', this.handleKeyboardSearch);\n clearTimeout(this.blurTimerID);\n }\n\n onSelect = (selectedItems, newFocusedIndex) => {\n const { onSelect } = this.props;\n\n this.previousIndex = this.state.focusedIndex || 0;\n\n this.setState({\n focusedIndex: newFocusedIndex,\n });\n\n if (onSelect) {\n // If selectedItems were given as an Immutable Set, they should also be returned as one,\n // and vice versa if they were given as a native JS array\n onSelect(Set.isSet(this.props.selectedItems) ? selectedItems : selectedItems.toJS());\n }\n };\n\n getSharedHotkeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'shift+x',\n description: <FormattedMessage {...messages.shiftXDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n this.selectToggle(focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: ['meta+a', 'ctrl+a'],\n description: <FormattedMessage {...messages.selectAllDescription} />,\n handler: event => {\n const { data } = this.props;\n\n event.preventDefault();\n\n this.onSelect(new Set(data), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'esc',\n description: <FormattedMessage {...messages.deselectAllDescription} />,\n handler: () => {\n this.onSelect(new Set(), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getListViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDown(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDown(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getGridViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'right',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n if (this.isTargetSlider(event)) {\n return;\n }\n\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'left',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n if (this.isTargetSlider(event)) {\n return;\n }\n\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n if (this.isTargetSlider(event)) {\n return;\n }\n\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + gridColumnCount, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n if (this.isTargetSlider(event)) {\n return;\n }\n\n const { gridColumnCount } = this.props;\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+right',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+left',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + gridColumnCount, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getHotkeyConfigs = () => {\n const { enableHotkeys, isGridView, gridColumnCount } = this.props;\n\n if (!enableHotkeys && !this.hotkeys) {\n this.hotkeys = [];\n }\n\n if (!this.hotkeys) {\n const viewSpecificHotKeyConfigs =\n isGridView && gridColumnCount !== undefined\n ? this.getGridViewHotKeyConfigs()\n : this.getListViewHotKeyConfigs();\n\n this.hotkeys = [...this.getSharedHotkeyConfigs(), ...viewSpecificHotKeyConfigs];\n }\n\n return this.hotkeys;\n };\n\n getProcessedProps = () => {\n const { data, loadedData, selectedItems } = this.props;\n return {\n ...this.props,\n loadedData: loadedData ? Set(loadedData) : Set(data),\n selectedItems: Set.isSet(selectedItems) ? selectedItems : new Set(selectedItems),\n };\n };\n\n hotkeys = null;\n\n selectToggle = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n if (selectedItems.has(data[rowIndex])) {\n this.onSelect(selectedItems.delete(data[rowIndex]), rowIndex);\n } else {\n this.onSelect(selectedItems.add(data[rowIndex]), rowIndex);\n }\n\n this.anchorIndex = rowIndex;\n };\n\n selectRange = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're shift-clicking the same row\n if (rowIndex === this.previousIndex) {\n return;\n }\n\n // Converts set of items to set of indices to do some slicing magic\n const selectedRows = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n const newSelectedRows = shiftSelect(selectedRows, this.previousIndex, rowIndex, this.anchorIndex);\n\n // Converts set back to set of items\n const newSelectedItems = newSelectedRows.map(i => data[i]);\n\n this.onSelect(newSelectedItems, rowIndex);\n };\n\n selectOne = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're clicking on a row that we've already selected\n // This allows us to use the native onDoubleClick handler because we're referencing the\n // same DOM node on double-click.\n if (selectedItems.has(data[rowIndex]) && selectedItems.size === 1) {\n return;\n }\n\n this.onSelect(new Set([data[rowIndex]]), rowIndex);\n this.anchorIndex = rowIndex;\n };\n\n clearFocus = () => {\n this.setState({\n focusedIndex: undefined,\n });\n };\n\n handleRowClick = (event, index) => {\n if (event.metaKey || event.ctrlKey) {\n this.selectToggle(index);\n } else if (event.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectOne(index);\n }\n };\n\n handleRowFocus = (event, index) => {\n const { selectedItems } = this.getProcessedProps();\n this.onSelect(selectedItems, index);\n };\n\n handleTableBlur = () => {\n const { focusedIndex } = this.state;\n if (focusedIndex !== undefined) {\n // table may get focus back right away in the same tick, in which case we shouldn't clear focus\n this.blurTimerID = setTimeout(this.clearFocus);\n }\n };\n\n handleTableFocus = () => {\n clearTimeout(this.blurTimerID);\n };\n\n handleShiftKeyDown = (newFocusedIndex, boundary) => {\n const { data, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n const focusedIndexData = data[focusedIndex];\n const newFocusedIndexData = data[newFocusedIndex];\n\n // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(focusedIndexData)) {\n return;\n }\n\n // if both the target and source are not selected, select them both\n if (!selectedItems.has(focusedIndexData) && !selectedItems.has(newFocusedIndexData)) {\n this.onSelect(selectedItems.union([focusedIndexData, newFocusedIndexData]), newFocusedIndex);\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(newFocusedIndexData)) {\n this.onSelect(selectedItems.add(newFocusedIndexData), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(newFocusedIndexData) && selectedItems.has(focusedIndexData)) {\n this.onSelect(selectedItems.delete(focusedIndexData), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(focusedIndexData), newFocusedIndex);\n };\n\n isContiguousSelection = (selectedItemIndecies, sourceIndex, targetIndex) => {\n if (sourceIndex < targetIndex && selectedItemIndecies.has(sourceIndex - 1)) {\n return true;\n }\n if (targetIndex < sourceIndex && selectedItemIndecies.has(sourceIndex + 1)) {\n return true;\n }\n return false;\n };\n\n handleShiftKeyDownForGrid = newFocusedIndex => {\n const { data, loadedData, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n const dataSize = data.length;\n const targetIndex = newFocusedIndex < 0 ? 0 : Math.min(newFocusedIndex, dataSize - 1);\n const isSourceSelected = selectedItems.has(data[focusedIndex]);\n const isTargetSelected = selectedItems.has(data[targetIndex]);\n\n // if data is not loaded, we don't want it to be able to be selected\n if (!loadedData.has(data[targetIndex])) {\n return;\n }\n\n const selectedItemIndices = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n // reset the anchor on a new selection block\n if (\n !isSourceSelected &&\n !isTargetSelected &&\n // if we are starting a new mass selection adjacent selected block, we want to connect them\n !this.isContiguousSelection(selectedItemIndices, focusedIndex, targetIndex)\n ) {\n this.anchorIndex = focusedIndex;\n }\n\n const newSelectedItemIndices = shiftSelect(\n selectedItemIndices,\n focusedIndex,\n targetIndex,\n this.anchorIndex,\n );\n\n const newSelectedItems = newSelectedItemIndices.map(i => data[i]);\n\n this.onSelect(newSelectedItems, targetIndex);\n };\n\n handleKeyboardSearch = event => {\n const { searchStrings } = this.props;\n\n if (!searchStrings) {\n return;\n }\n\n if (\n event.target.hasAttribute('contenteditable') ||\n event.target.nodeName === 'INPUT' ||\n event.target.nodeName === 'TEXTAREA'\n ) {\n return;\n }\n\n // character keys have a value for event.which\n if (event.which === 0) {\n return;\n }\n\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchString += event.key;\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, SEARCH_TIMER_DURATION);\n\n const index = searchStrings.findIndex(\n string =>\n string\n .trim()\n .toLowerCase()\n .indexOf(this.searchString) === 0,\n );\n\n if (index !== -1) {\n this.setState({ focusedIndex: index });\n }\n };\n\n handleCheckboxClick = (event, index) => {\n if (event.nativeEvent.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectToggle(index);\n }\n };\n\n isTargetSlider = event => event.target?.role === 'slider';\n\n render() {\n const { className, data } = this.props;\n const { focusedIndex } = this.state;\n const focusedItem = data[focusedIndex];\n\n return (\n <Hotkeys configs={this.getHotkeyConfigs()}>\n <BaseTable\n {...this.props}\n className={classNames(className, 'is-selectable')}\n focusedIndex={focusedIndex}\n focusedItem={focusedItem}\n onCheckboxClick={this.handleCheckboxClick}\n onRowClick={this.handleRowClick}\n onRowFocus={this.handleRowFocus}\n onTableBlur={this.handleTableBlur}\n onTableFocus={this.handleTableFocus}\n />\n </Hotkeys>\n );\n }\n };\n}\n\nexport default makeSelectable;\n"],"file":"makeSelectable.js"}
1
+ {"version":3,"sources":["../../../src/components/table/makeSelectable.js"],"names":["PropTypes","React","Component","Set","ImmutablePropTypes","classNames","FormattedMessage","Hotkeys","HotkeyRecord","messages","shiftSelect","SEARCH_TIMER_DURATION","makeSelectable","BaseTable","originalDisplayName","displayName","name","SelectableTable","constructor","props","focusedIndex","undefined","selectedItems","newFocusedIndex","onSelect","previousIndex","state","setState","isSet","toJS","hotkeyType","key","description","shiftXDescription","handler","selectToggle","type","selectAllDescription","event","data","preventDefault","deselectAllDescription","downDescription","isQuickFilter","Math","min","length","upDescription","max","shiftDownDescription","handleShiftKeyDown","shiftUpDescription","isTargetSlider","gridColumnCount","handleShiftKeyDownForGrid","enableHotkeys","isGridView","hotkeys","viewSpecificHotKeyConfigs","getGridViewHotKeyConfigs","getListViewHotKeyConfigs","getSharedHotkeyConfigs","loadedData","rowIndex","getProcessedProps","has","delete","add","anchorIndex","selectedRows","reduce","rows","item","i","push","newSelectedRows","newSelectedItems","map","size","index","metaKey","ctrlKey","shiftKey","selectRange","selectOne","blurTimerID","setTimeout","clearFocus","clearTimeout","boundary","focusedIndexData","newFocusedIndexData","union","selectedItemIndecies","sourceIndex","targetIndex","dataSize","isSourceSelected","isTargetSelected","selectedItemIndices","isContiguousSelection","newSelectedItemIndices","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","nativeEvent","role","dataset","componentDidMount","document","addEventListener","handleKeyboardSearch","componentDidUpdate","prevProps","prevState","onFocus","componentWillUnmount","removeEventListener","render","className","focusedItem","getHotkeyConfigs","handleCheckboxClick","handleRowClick","handleRowFocus","handleTableBlur","handleTableFocus","array","isRequired","number","bool","func","oneOfType","set"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { Set } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport classNames from 'classnames';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Hotkeys, HotkeyRecord } from '../hotkeys';\nimport messages from './messages';\nimport shiftSelect from './shiftSelect';\n\nconst SEARCH_TIMER_DURATION = 1000;\n\nfunction makeSelectable(BaseTable) {\n const originalDisplayName = BaseTable.displayName || BaseTable.name || 'Table';\n\n return class SelectableTable extends Component {\n static displayName = `Selectable(${originalDisplayName})`;\n\n static propTypes = {\n className: PropTypes.string,\n /** Array of unique IDs of the items in the table. Each item should be a string or number, in the order they appear in the table. */\n data: PropTypes.array.isRequired,\n gridColumnCount: PropTypes.number,\n isGridView: PropTypes.bool,\n /** Called when focus changes. `(focusedIndex: number) => void` */\n onFocus: PropTypes.func,\n /** Called when selection changes. `(selectedItems: Array<string> | Array<number> | Set<string> | Set<number>) => void` */\n onSelect: PropTypes.func.isRequired,\n /**\n * Array of strings for keyboard search corresponding to the data prop. If not provided, keyboard search won't work.\n * Example: data = ['f_123', 'f_456'], and corresponding searchStrings = ['file.png', 'another file.pdf']\n */\n searchStrings: PropTypes.array,\n /**\n * Array of IDs that are currently selected, in any order.\n * If you pass a native JS array, then your onSelect function will be called with a native JS array;\n * likewise, if you pass an ImmutableJS Set, then your onSelect function will be called\n * with an ImmutableJS Set.\n */\n selectedItems: PropTypes.oneOfType([PropTypes.array, ImmutablePropTypes.set]),\n /** Array of unique IDs of the items in the table that are loaded and accessible. If not provided, this will default to all data */\n loadedData: PropTypes.array,\n enableHotkeys: PropTypes.bool,\n /** Translated type for hotkeys. If not provided, then the hotkeys will not appear in the help modal. */\n hotkeyType: PropTypes.string,\n };\n\n static defaultProps = {\n selectedItems: new Set(),\n };\n\n constructor(props) {\n super(props);\n\n this.anchorIndex = 0;\n\n this.searchString = '';\n this.searchTimeout = null;\n\n // we have to store the previously focused index because a focus event\n // will be fired before the click event; thus, in the click handler,\n // the focusedItem will already be the new item\n this.previousIndex = 0;\n\n this.blurTimerID = null;\n }\n\n state = {\n focusedIndex: undefined,\n };\n\n componentDidMount() {\n document.addEventListener('keypress', this.handleKeyboardSearch);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.focusedIndex !== this.state.focusedIndex && this.props.onFocus) {\n this.props.onFocus(this.state.focusedIndex);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('keypress', this.handleKeyboardSearch);\n clearTimeout(this.blurTimerID);\n }\n\n onSelect = (selectedItems, newFocusedIndex) => {\n const { onSelect } = this.props;\n\n this.previousIndex = this.state.focusedIndex || 0;\n\n this.setState({\n focusedIndex: newFocusedIndex,\n });\n\n if (onSelect) {\n // If selectedItems were given as an Immutable Set, they should also be returned as one,\n // and vice versa if they were given as a native JS array\n onSelect(Set.isSet(this.props.selectedItems) ? selectedItems : selectedItems.toJS());\n }\n };\n\n getSharedHotkeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'shift+x',\n description: <FormattedMessage {...messages.shiftXDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n this.selectToggle(focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: ['meta+a', 'ctrl+a'],\n description: <FormattedMessage {...messages.selectAllDescription} />,\n handler: event => {\n const { data } = this.props;\n\n event.preventDefault();\n\n this.onSelect(new Set(data), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'esc',\n description: <FormattedMessage {...messages.deselectAllDescription} />,\n handler: () => {\n this.onSelect(new Set(), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getListViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n if (this.isQuickFilter(event)) {\n return;\n }\n\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n if (this.isQuickFilter(event)) {\n return;\n }\n\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDown(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDown(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getGridViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'right',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n if (this.isTargetSlider(event) || this.isQuickFilter(event)) {\n return;\n }\n\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'left',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n if (this.isTargetSlider(event) || this.isQuickFilter(event)) {\n return;\n }\n\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n if (this.isTargetSlider(event) || this.isQuickFilter(event)) {\n return;\n }\n\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + gridColumnCount, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n if (this.isTargetSlider(event) || this.isQuickFilter(event)) {\n return;\n }\n\n const { gridColumnCount } = this.props;\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+right',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+left',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + gridColumnCount, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getHotkeyConfigs = () => {\n const { enableHotkeys, isGridView, gridColumnCount } = this.props;\n\n if (!enableHotkeys && !this.hotkeys) {\n this.hotkeys = [];\n }\n\n if (!this.hotkeys) {\n const viewSpecificHotKeyConfigs =\n isGridView && gridColumnCount !== undefined\n ? this.getGridViewHotKeyConfigs()\n : this.getListViewHotKeyConfigs();\n\n this.hotkeys = [...this.getSharedHotkeyConfigs(), ...viewSpecificHotKeyConfigs];\n }\n\n return this.hotkeys;\n };\n\n getProcessedProps = () => {\n const { data, loadedData, selectedItems } = this.props;\n return {\n ...this.props,\n loadedData: loadedData ? Set(loadedData) : Set(data),\n selectedItems: Set.isSet(selectedItems) ? selectedItems : new Set(selectedItems),\n };\n };\n\n hotkeys = null;\n\n selectToggle = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n if (selectedItems.has(data[rowIndex])) {\n this.onSelect(selectedItems.delete(data[rowIndex]), rowIndex);\n } else {\n this.onSelect(selectedItems.add(data[rowIndex]), rowIndex);\n }\n\n this.anchorIndex = rowIndex;\n };\n\n selectRange = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're shift-clicking the same row\n if (rowIndex === this.previousIndex) {\n return;\n }\n\n // Converts set of items to set of indices to do some slicing magic\n const selectedRows = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n const newSelectedRows = shiftSelect(selectedRows, this.previousIndex, rowIndex, this.anchorIndex);\n\n // Converts set back to set of items\n const newSelectedItems = newSelectedRows.map(i => data[i]);\n\n this.onSelect(newSelectedItems, rowIndex);\n };\n\n selectOne = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're clicking on a row that we've already selected\n // This allows us to use the native onDoubleClick handler because we're referencing the\n // same DOM node on double-click.\n if (selectedItems.has(data[rowIndex]) && selectedItems.size === 1) {\n return;\n }\n\n this.onSelect(new Set([data[rowIndex]]), rowIndex);\n this.anchorIndex = rowIndex;\n };\n\n clearFocus = () => {\n this.setState({\n focusedIndex: undefined,\n });\n };\n\n handleRowClick = (event, index) => {\n if (event.metaKey || event.ctrlKey) {\n this.selectToggle(index);\n } else if (event.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectOne(index);\n }\n };\n\n handleRowFocus = (event, index) => {\n const { selectedItems } = this.getProcessedProps();\n this.onSelect(selectedItems, index);\n };\n\n handleTableBlur = () => {\n const { focusedIndex } = this.state;\n if (focusedIndex !== undefined) {\n // table may get focus back right away in the same tick, in which case we shouldn't clear focus\n this.blurTimerID = setTimeout(this.clearFocus);\n }\n };\n\n handleTableFocus = () => {\n clearTimeout(this.blurTimerID);\n };\n\n handleShiftKeyDown = (newFocusedIndex, boundary) => {\n const { data, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n const focusedIndexData = data[focusedIndex];\n const newFocusedIndexData = data[newFocusedIndex];\n\n // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(focusedIndexData)) {\n return;\n }\n\n // if both the target and source are not selected, select them both\n if (!selectedItems.has(focusedIndexData) && !selectedItems.has(newFocusedIndexData)) {\n this.onSelect(selectedItems.union([focusedIndexData, newFocusedIndexData]), newFocusedIndex);\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(newFocusedIndexData)) {\n this.onSelect(selectedItems.add(newFocusedIndexData), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(newFocusedIndexData) && selectedItems.has(focusedIndexData)) {\n this.onSelect(selectedItems.delete(focusedIndexData), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(focusedIndexData), newFocusedIndex);\n };\n\n isContiguousSelection = (selectedItemIndecies, sourceIndex, targetIndex) => {\n if (sourceIndex < targetIndex && selectedItemIndecies.has(sourceIndex - 1)) {\n return true;\n }\n if (targetIndex < sourceIndex && selectedItemIndecies.has(sourceIndex + 1)) {\n return true;\n }\n return false;\n };\n\n handleShiftKeyDownForGrid = newFocusedIndex => {\n const { data, loadedData, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n const dataSize = data.length;\n const targetIndex = newFocusedIndex < 0 ? 0 : Math.min(newFocusedIndex, dataSize - 1);\n const isSourceSelected = selectedItems.has(data[focusedIndex]);\n const isTargetSelected = selectedItems.has(data[targetIndex]);\n\n // if data is not loaded, we don't want it to be able to be selected\n if (!loadedData.has(data[targetIndex])) {\n return;\n }\n\n const selectedItemIndices = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n // reset the anchor on a new selection block\n if (\n !isSourceSelected &&\n !isTargetSelected &&\n // if we are starting a new mass selection adjacent selected block, we want to connect them\n !this.isContiguousSelection(selectedItemIndices, focusedIndex, targetIndex)\n ) {\n this.anchorIndex = focusedIndex;\n }\n\n const newSelectedItemIndices = shiftSelect(\n selectedItemIndices,\n focusedIndex,\n targetIndex,\n this.anchorIndex,\n );\n\n const newSelectedItems = newSelectedItemIndices.map(i => data[i]);\n\n this.onSelect(newSelectedItems, targetIndex);\n };\n\n handleKeyboardSearch = event => {\n const { searchStrings } = this.props;\n\n if (!searchStrings) {\n return;\n }\n\n if (\n event.target.hasAttribute('contenteditable') ||\n event.target.nodeName === 'INPUT' ||\n event.target.nodeName === 'TEXTAREA'\n ) {\n return;\n }\n\n // character keys have a value for event.which\n if (event.which === 0) {\n return;\n }\n\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchString += event.key;\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, SEARCH_TIMER_DURATION);\n\n const index = searchStrings.findIndex(\n string =>\n string\n .trim()\n .toLowerCase()\n .indexOf(this.searchString) === 0,\n );\n\n if (index !== -1) {\n this.setState({ focusedIndex: index });\n }\n };\n\n handleCheckboxClick = (event, index) => {\n if (event.nativeEvent.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectToggle(index);\n }\n };\n\n isTargetSlider = event => event.target?.role === 'slider';\n\n // Workaround for focus conflicting with Blueprint components in Search Quick Filters, not needed once Blueprint table is integrated\n isQuickFilter = event => event.target?.dataset && 'radixCollectionItem' in event.target.dataset;\n\n render() {\n const { className, data } = this.props;\n const { focusedIndex } = this.state;\n const focusedItem = data[focusedIndex];\n\n return (\n <Hotkeys configs={this.getHotkeyConfigs()}>\n <BaseTable\n {...this.props}\n className={classNames(className, 'is-selectable')}\n focusedIndex={focusedIndex}\n focusedItem={focusedItem}\n onCheckboxClick={this.handleCheckboxClick}\n onRowClick={this.handleRowClick}\n onRowFocus={this.handleRowFocus}\n onTableBlur={this.handleTableBlur}\n onTableFocus={this.handleTableFocus}\n />\n </Hotkeys>\n );\n }\n };\n}\n\nexport default makeSelectable;\n"],"file":"makeSelectable.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "box-ui-elements",
3
- "version": "20.0.1-beta.1",
3
+ "version": "20.0.1-beta.1.1",
4
4
  "description": "Box UI Elements",
5
5
  "author": "Box (https://www.box.com/)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -68,7 +68,7 @@
68
68
  "lint:css": "stylelint \"src/**/*.scss\" --syntax scss",
69
69
  "prebuild:es": "npm-run-all copy:styles ts:defs copy:flow",
70
70
  "release": "yarn release:beta",
71
- "release:beta": "DIST=beta BRANCH=master ./scripts/release.sh",
71
+ "release:beta": "DIST=beta BRANCH=hotfix-v20.0.1-beta.1 ./scripts/release.sh",
72
72
  "release:hotfix": "DIST=latest HOTFIX=true ./scripts/release.sh",
73
73
  "release:latest": "DIST=latest BRANCH=master ./scripts/release.sh",
74
74
  "release:next": "DIST=next BRANCH=next ./scripts/release.sh",
@@ -93,47 +93,17 @@
93
93
  "last 2 Edge versions",
94
94
  "last 2 iOS versions"
95
95
  ],
96
- "development": [
97
- "last 1 Chrome versions",
98
- "last 1 Firefox versions",
99
- "last 1 Safari versions"
100
- ]
96
+ "development": ["last 1 Chrome versions", "last 1 Firefox versions", "last 1 Safari versions"]
101
97
  },
102
98
  "lint-staged": {
103
- "*.js": [
104
- "eslint --fix",
105
- "git add"
106
- ],
107
- "*.ts": [
108
- "eslint --ext=.ts --fix",
109
- "git add"
110
- ],
111
- "*.tsx": [
112
- "eslint --ext=.tsx --fix",
113
- "git add"
114
- ],
115
- "*.md": [
116
- "prettier --write --parser=markdown",
117
- "git add"
118
- ],
119
- "*.json": [
120
- "prettier --write --parser=json",
121
- "git add"
122
- ],
123
- "*.html": [
124
- "prettier --write --parser=html",
125
- "git add"
126
- ],
127
- "*.scss": [
128
- "prettier --write --parser=scss",
129
- "stylelint --syntax scss --fix",
130
- "git add"
131
- ],
132
- "*.css": [
133
- "prettier --write --parser=css",
134
- "stylelint --syntax css --fix",
135
- "git add"
136
- ]
99
+ "*.js": ["eslint --fix", "git add"],
100
+ "*.ts": ["eslint --ext=.ts --fix", "git add"],
101
+ "*.tsx": ["eslint --ext=.tsx --fix", "git add"],
102
+ "*.md": ["prettier --write --parser=markdown", "git add"],
103
+ "*.json": ["prettier --write --parser=json", "git add"],
104
+ "*.html": ["prettier --write --parser=html", "git add"],
105
+ "*.scss": ["prettier --write --parser=scss", "stylelint --syntax scss --fix", "git add"],
106
+ "*.css": ["prettier --write --parser=css", "stylelint --syntax css --fix", "git add"]
137
107
  },
138
108
  "husky": {
139
109
  "hooks": {
@@ -423,8 +393,6 @@
423
393
  }
424
394
  },
425
395
  "msw": {
426
- "workerDirectory": [
427
- ".storybook/public"
428
- ]
396
+ "workerDirectory": [".storybook/public"]
429
397
  }
430
398
  }
@@ -148,6 +148,10 @@ function makeSelectable(BaseTable) {
148
148
  key: 'down',
149
149
  description: <FormattedMessage {...messages.downDescription} />,
150
150
  handler: event => {
151
+ if (this.isQuickFilter(event)) {
152
+ return;
153
+ }
154
+
151
155
  const { data } = this.props;
152
156
  const { focusedIndex } = this.state;
153
157
 
@@ -163,6 +167,10 @@ function makeSelectable(BaseTable) {
163
167
  key: 'up',
164
168
  description: <FormattedMessage {...messages.upDescription} />,
165
169
  handler: event => {
170
+ if (this.isQuickFilter(event)) {
171
+ return;
172
+ }
173
+
166
174
  const { focusedIndex = 0 } = this.state;
167
175
 
168
176
  event.preventDefault();
@@ -213,7 +221,7 @@ function makeSelectable(BaseTable) {
213
221
  key: 'right',
214
222
  description: <FormattedMessage {...messages.downDescription} />,
215
223
  handler: event => {
216
- if (this.isTargetSlider(event)) {
224
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
217
225
  return;
218
226
  }
219
227
 
@@ -232,7 +240,7 @@ function makeSelectable(BaseTable) {
232
240
  key: 'left',
233
241
  description: <FormattedMessage {...messages.upDescription} />,
234
242
  handler: event => {
235
- if (this.isTargetSlider(event)) {
243
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
236
244
  return;
237
245
  }
238
246
 
@@ -249,7 +257,7 @@ function makeSelectable(BaseTable) {
249
257
  key: 'down',
250
258
  description: <FormattedMessage {...messages.downDescription} />,
251
259
  handler: event => {
252
- if (this.isTargetSlider(event)) {
260
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
253
261
  return;
254
262
  }
255
263
 
@@ -268,7 +276,7 @@ function makeSelectable(BaseTable) {
268
276
  key: 'up',
269
277
  description: <FormattedMessage {...messages.upDescription} />,
270
278
  handler: event => {
271
- if (this.isTargetSlider(event)) {
279
+ if (this.isTargetSlider(event) || this.isQuickFilter(event)) {
272
280
  return;
273
281
  }
274
282
 
@@ -604,6 +612,9 @@ function makeSelectable(BaseTable) {
604
612
 
605
613
  isTargetSlider = event => event.target?.role === 'slider';
606
614
 
615
+ // Workaround for focus conflicting with Blueprint components in Search Quick Filters, not needed once Blueprint table is integrated
616
+ isQuickFilter = event => event.target?.dataset && 'radixCollectionItem' in event.target.dataset;
617
+
607
618
  render() {
608
619
  const { className, data } = this.props;
609
620
  const { focusedIndex } = this.state;
@@ -42,10 +42,6 @@ describe('features/virtualized-table-renderers/lastModifiedByCellRenderer', () =
42
42
  expect(lastModifiedByCellRenderer(intl)(cellRendererParams)).toBe('--');
43
43
  });
44
44
 
45
- test('should render a LastModifiedByCell', () => {
46
- expect(lastModifiedByCellRenderer(intl)(cellRendererParams)).toMatchSnapshot();
47
- });
48
-
49
45
  test('should call support functions with appropriate values', () => {
50
46
  const { cellData } = cellRendererParams;
51
47
  const { modified_at, modified_by } = cellData;
@@ -1,3 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`features/virtualized-table-renderers/lastModifiedByCellRenderer should render a LastModifiedByCell 1`] = `"4 years ago by 123-Rando-a@a.com"`;