box-ui-elements 16.0.1-beta.2 → 16.1.0-beta.2

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.
@@ -544,6 +544,14 @@ function makeSelectable(BaseTable) {
544
544
  }
545
545
  });
546
546
 
547
+ _defineProperty(_assertThisInitialized(_this), "handleCheckboxClick", function (event, index) {
548
+ if (event.nativeEvent.shiftKey) {
549
+ _this.selectRange(index);
550
+ } else {
551
+ _this.selectToggle(index);
552
+ }
553
+ });
554
+
547
555
  _this.anchorIndex = 0;
548
556
  _this.searchString = '';
549
557
  _this.searchTimeout = null; // we have to store the previously focused index because a focus event
@@ -587,6 +595,7 @@ function makeSelectable(BaseTable) {
587
595
  className: classNames(className, 'is-selectable'),
588
596
  focusedIndex: focusedIndex,
589
597
  focusedItem: focusedItem,
598
+ onCheckboxClick: this.handleCheckboxClick,
590
599
  onRowClick: this.handleRowClick,
591
600
  onRowFocus: this.handleRowFocus,
592
601
  onTableBlur: this.handleTableBlur,
@@ -569,6 +569,14 @@ function makeSelectable(BaseTable) {
569
569
  }
570
570
  };
571
571
 
572
+ handleCheckboxClick = (event, index) => {
573
+ if (event.nativeEvent.shiftKey) {
574
+ this.selectRange(index);
575
+ } else {
576
+ this.selectToggle(index);
577
+ }
578
+ };
579
+
572
580
  render() {
573
581
  const { className, data } = this.props;
574
582
  const { focusedIndex } = this.state;
@@ -581,6 +589,7 @@ function makeSelectable(BaseTable) {
581
589
  className={classNames(className, 'is-selectable')}
582
590
  focusedIndex={focusedIndex}
583
591
  focusedItem={focusedItem}
592
+ onCheckboxClick={this.handleCheckboxClick}
584
593
  onRowClick={this.handleRowClick}
585
594
  onRowFocus={this.handleRowFocus}
586
595
  onTableBlur={this.handleTableBlur}
@@ -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","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","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","selectedItemIndecies","sourceIndex","targetIndex","dataSize","isSourceSelected","isTargetSelected","selectedItemIndices","isContiguousSelection","newSelectedItemIndices","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","document","addEventListener","handleKeyboardSearch","prevProps","prevState","onFocus","removeEventListener","className","focusedItem","getHotkeyConfigs","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 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 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 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 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 // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(data[focusedIndex])) {\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(data[newFocusedIndex])) {\n this.onSelect(selectedItems.add(data[newFocusedIndex]), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(data[newFocusedIndex]) && selectedItems.has(data[focusedIndex])) {\n this.onSelect(selectedItems.delete(data[focusedIndex]), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(data[focusedIndex]), 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 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 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","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","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","selectedItemIndecies","sourceIndex","targetIndex","dataSize","isSourceSelected","isTargetSelected","selectedItemIndices","isContiguousSelection","newSelectedItemIndices","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","nativeEvent","document","addEventListener","handleKeyboardSearch","prevProps","prevState","onFocus","removeEventListener","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 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 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 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 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 // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(data[focusedIndex])) {\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(data[newFocusedIndex])) {\n this.onSelect(selectedItems.add(data[newFocusedIndex]), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(data[newFocusedIndex]) && selectedItems.has(data[focusedIndex])) {\n this.onSelect(selectedItems.delete(data[focusedIndex]), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(data[focusedIndex]), 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 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/i18n/ja-JP.js CHANGED
@@ -98,8 +98,8 @@ export default {
98
98
  "be.contentSidebar.activityFeed.commmon.showOriginalMessage": "オリジナルを表示",
99
99
  "be.contentSidebar.activityFeed.common.activityStatusResolved": "解決済み",
100
100
  "be.contentSidebar.activityFeed.common.editedMessage": "(編集済み)",
101
- "be.contentSidebar.activityFeed.common.seeLessMessage": "表示を減らす",
102
- "be.contentSidebar.activityFeed.common.seeMoreMessage": "表示を増やす",
101
+ "be.contentSidebar.activityFeed.common.seeLessMessage": "一部を表示",
102
+ "be.contentSidebar.activityFeed.common.seeMoreMessage": "さらに表示",
103
103
  "be.contentSidebar.activityFeed.common.translateMessage": "翻訳する",
104
104
  "be.contentSidebar.activityFeed.task.taskAnyAffordanceTooltip": "担当者のうち1人がタスクを実行すればこのタスクは完了となります",
105
105
  "be.contentSidebar.activityFeed.task.taskDeleteMenuItem": "タスクを削除",
@@ -197,9 +197,9 @@ be.contentSidebar.activityFeed.common.activityStatusResolved = 解決済み
197
197
  # Label indicating that message was edited, should be lowercase
198
198
  be.contentSidebar.activityFeed.common.editedMessage = (編集済み)
199
199
  # See less button for hiding part of long message
200
- be.contentSidebar.activityFeed.common.seeLessMessage = 表示を減らす
200
+ be.contentSidebar.activityFeed.common.seeLessMessage = 一部を表示
201
201
  # See more button for showing whole long message
202
- be.contentSidebar.activityFeed.common.seeMoreMessage = 表示を増やす
202
+ be.contentSidebar.activityFeed.common.seeMoreMessage = さらに表示
203
203
  # Translate button for translating comment
204
204
  be.contentSidebar.activityFeed.common.translateMessage = 翻訳する
205
205
  # Tooltip text for any task icon, explaining that the task only needs one assignee to complete.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "box-ui-elements",
3
- "version": "16.0.1-beta.2",
3
+ "version": "16.1.0-beta.2",
4
4
  "description": "Box UI Elements",
5
5
  "author": "Box (https://www.box.com/)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -246,6 +246,30 @@ describe('components/table/makeSelectable', () => {
246
246
  });
247
247
  });
248
248
 
249
+ describe('handleCheckboxClick()', () => {
250
+ test('should call selectRange() when shift key pressed', () => {
251
+ const wrapper = getWrapper();
252
+ const instance = wrapper.instance();
253
+
254
+ const index = 1;
255
+
256
+ instance.selectRange = sandbox.mock().withArgs(index);
257
+
258
+ instance.handleCheckboxClick({ nativeEvent: { shiftKey: true } }, index);
259
+ });
260
+
261
+ test('should call selectToggle() when no modifier key pressed', () => {
262
+ const wrapper = getWrapper();
263
+ const instance = wrapper.instance();
264
+
265
+ const index = 1;
266
+
267
+ instance.selectToggle = sandbox.mock().withArgs(index);
268
+
269
+ instance.handleCheckboxClick({ nativeEvent: {} }, index);
270
+ });
271
+ });
272
+
249
273
  describe('handleRowFocus()', () => {
250
274
  test('should call onSelect() with correct args', () => {
251
275
  const wrapper = getWrapper({
@@ -1224,6 +1248,7 @@ describe('components/table/makeSelectable', () => {
1224
1248
 
1225
1249
  const table = wrapper.find('Table');
1226
1250
  expect(table.hasClass('is-selectable')).toBe(true);
1251
+ expect(table.prop('onCheckboxClick')).toEqual(instance.handleCheckboxClick);
1227
1252
  expect(table.prop('onRowClick')).toEqual(wrapper.instance().handleRowClick);
1228
1253
  expect(table.prop('onRowFocus')).toEqual(wrapper.instance().handleRowFocus);
1229
1254
  expect(table.prop('focusedItem')).toEqual('b');
@@ -569,6 +569,14 @@ function makeSelectable(BaseTable) {
569
569
  }
570
570
  };
571
571
 
572
+ handleCheckboxClick = (event, index) => {
573
+ if (event.nativeEvent.shiftKey) {
574
+ this.selectRange(index);
575
+ } else {
576
+ this.selectToggle(index);
577
+ }
578
+ };
579
+
572
580
  render() {
573
581
  const { className, data } = this.props;
574
582
  const { focusedIndex } = this.state;
@@ -581,6 +589,7 @@ function makeSelectable(BaseTable) {
581
589
  className={classNames(className, 'is-selectable')}
582
590
  focusedIndex={focusedIndex}
583
591
  focusedItem={focusedItem}
592
+ onCheckboxClick={this.handleCheckboxClick}
584
593
  onRowClick={this.handleRowClick}
585
594
  onRowFocus={this.handleRowFocus}
586
595
  onTableBlur={this.handleTableBlur}