@instructure/quiz-core 18.2.1-rc.3 → 18.2.1-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/es/banks/components/AddToBankModal/presenter.js +1 -1
  2. package/es/banks/components/BankEntry/presenter.js +1 -1
  3. package/es/banks/components/Banks/index.js +2 -1
  4. package/es/banks/components/Banks/presenter.js +63 -24
  5. package/es/banks/components/BanksList/presenter.js +110 -18
  6. package/es/banks/components/SharingModal/asyncSearch.js +4 -7
  7. package/es/building/components/resources/quizEntry/QuizEntryEdit/Footer/presenter.js +2 -2
  8. package/es/common/components/alerts/presenter.js +2 -2
  9. package/es/common/components/layout/sidebar/Stimulus/Title/index.js +2 -2
  10. package/es/common/components/resources/quiz/AddContent/Popover/presenter.js +1 -1
  11. package/es/common/components/resources/stimulus/StimulusShowInfo/index.js +1 -1
  12. package/es/moderating/components/resources/AccommodationsModal/index.js +2 -2
  13. package/es/moderating/components/sidebar/ModerateTray/presenter.js +2 -2
  14. package/lib/banks/components/AddToBankModal/presenter.js +1 -1
  15. package/lib/banks/components/BankEntry/presenter.js +1 -1
  16. package/lib/banks/components/Banks/index.js +2 -1
  17. package/lib/banks/components/Banks/presenter.js +63 -24
  18. package/lib/banks/components/BanksList/presenter.js +111 -18
  19. package/lib/banks/components/SharingModal/asyncSearch.js +4 -6
  20. package/lib/building/components/resources/quizEntry/QuizEntryEdit/Footer/presenter.js +2 -2
  21. package/lib/common/components/alerts/presenter.js +2 -2
  22. package/lib/common/components/layout/sidebar/Stimulus/Title/index.js +2 -2
  23. package/lib/common/components/resources/quiz/AddContent/Popover/presenter.js +1 -1
  24. package/lib/common/components/resources/stimulus/StimulusShowInfo/index.js +1 -1
  25. package/lib/moderating/components/resources/AccommodationsModal/index.js +2 -2
  26. package/lib/moderating/components/sidebar/ModerateTray/presenter.js +2 -2
  27. package/package.json +9 -9
@@ -241,7 +241,7 @@ export var AddToBankModal = /*#__PURE__*/function (_Component) {
241
241
  content = /*#__PURE__*/React.createElement(Flex, null, _ref3, /*#__PURE__*/React.createElement(Flex.Item, {
242
242
  shouldShrink: true
243
243
  }, /*#__PURE__*/React.createElement(Text, {
244
- color: "error"
244
+ color: "danger"
245
245
  }, t('You are attempting to add content containing course links which may not work when used in other courses.'))));
246
246
  } else {
247
247
  content = /*#__PURE__*/React.createElement(Text, {
@@ -619,7 +619,7 @@ export var BankEntry = (_dec = themeable(theme, styles), _dec(_class = (_temp =
619
619
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
620
620
  className: styles.entryEdit
621
621
  }, /*#__PURE__*/React.createElement(WarningWrapper, versioningProps, canEdit && /*#__PURE__*/React.createElement(Alert, {
622
- closeButtonLabel: t('Dismiss'),
622
+ renderCloseButtonLabel: t('Dismiss'),
623
623
  margin: "0 0 medium 0"
624
624
  }, /*#__PURE__*/React.createElement(Text, {
625
625
  color: "primary"
@@ -13,9 +13,10 @@ function mapStateToProps(state, props) {
13
13
  var pageData = state.getIn(['ui', BANKS_BANK_FILTERS], Map());
14
14
  var scopeType = pageData.get('scopeType', (props.scope || {}).type || 'user');
15
15
  var sortBy = pageData.get('sortBy', 'name');
16
- var sortOrder = pageData.get('sortOrder', 'ASC');
16
+ var sortOrder = pageData.get('sortOrder', 'ascending');
17
17
  var searchTerms = pageData.get('searchTerms', null);
18
18
  return {
19
+ itemBankSearchTableEnabled: featureOn('item_bank_search_table'),
19
20
  filtersEnabled: featureOn('improved_bank_sharing'),
20
21
  newItemBankFilterNamesEnabled: featureOn('new_item_bank_filter_names'),
21
22
  usedByCourseEnabled: featureOn('filter_item_banks_used_by_course'),
@@ -42,8 +42,8 @@ var styles = {
42
42
  };
43
43
  import theme from "./theme.js";
44
44
  var sortOrderIcons = {
45
- ASC: IconArrowUpLine,
46
- DESC: IconArrowDownLine
45
+ ascending: IconArrowUpLine,
46
+ descending: IconArrowDownLine
47
47
  };
48
48
 
49
49
  var _ref4 = /*#__PURE__*/React.createElement(Img, {
@@ -93,8 +93,8 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
93
93
  params['sort_by'] = _this.props.sortBy;
94
94
  }
95
95
 
96
- if (_this.props.sortOrder === 'DESC') {
97
- params['sort_order'] = _this.props.sortOrder;
96
+ if (_this.props.sortOrder === 'descending') {
97
+ params['sort_order'] = 'DESC';
98
98
  }
99
99
 
100
100
  if (_this.props.searchTerms) {
@@ -134,13 +134,13 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
134
134
 
135
135
  _this.getSortAssistiveText = function () {
136
136
  return t('Change sort direction. Direction is currently { sortDirection }', {
137
- sortDirection: _this.props.sortOrder === 'ASC' ? t('ascending') : t('descending')
137
+ sortDirection: _this.props.sortOrder === 'ascending' ? t('ascending') : t('descending')
138
138
  });
139
139
  };
140
140
 
141
141
  _this.handleSortingButtonClick = function () {
142
142
  _this.props.merge(BANKS_BANK_FILTERS, {
143
- sortOrder: _this.props.sortOrder === 'ASC' ? 'DESC' : 'ASC'
143
+ sortOrder: _this.props.sortOrder === 'ascending' ? 'descending' : 'ascending'
144
144
  });
145
145
  };
146
146
 
@@ -152,6 +152,22 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
152
152
  });
153
153
  };
154
154
 
155
+ _this.handleTableSortChange = function (sortBy, sortOrder) {
156
+ return function () {
157
+ var newSortOrder = sortOrder;
158
+
159
+ if (_this.props.sortBy === sortBy) {
160
+ // toggle sort order
161
+ sortOrder === 'ascending' ? newSortOrder = 'descending' : newSortOrder = 'ascending';
162
+ }
163
+
164
+ _this.props.merge(BANKS_BANK_FILTERS, {
165
+ sortOrder: newSortOrder,
166
+ sortBy: sortBy
167
+ });
168
+ };
169
+ };
170
+
155
171
  _this.handleSearchInputChange = function (_ref3) {
156
172
  var value = _ref3.target.value;
157
173
 
@@ -164,17 +180,22 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
164
180
 
165
181
  _this.renderRecords = function (recordIds) {
166
182
  return /*#__PURE__*/React.createElement(BanksList, {
167
- focusCreateBankButton: _this.focusCreateBankButton,
168
183
  createBankButton: _this.createBankButton,
169
184
  currentUser: _this.props.currentUser,
185
+ focusCreateBankButton: _this.focusCreateBankButton,
170
186
  getCourseInfo: _this.props.getCourseInfo,
171
187
  getUserInfo: _this.props.getUserInfo,
172
188
  getShareableCourses: _this.props.getShareableCourses,
173
189
  getShareableUsers: _this.props.getShareableUsers,
190
+ isCompact: _this.props.isCompact,
191
+ itemBankSearchTableEnabled: _this.props.itemBankSearchTableEnabled,
174
192
  minChars: _this.props.minChars,
175
193
  navigateToBank: _this.props.navigateToBank,
194
+ onChangeSort: _this.handleTableSortChange,
176
195
  onShare: _this.props.onShare,
177
- recordIds: recordIds
196
+ order: _this.props.sortOrder,
197
+ recordIds: recordIds,
198
+ sort: _this.props.sortBy
178
199
  });
179
200
  };
180
201
 
@@ -236,17 +257,26 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
236
257
  slug: 'course',
237
258
  translation: this.props.newItemBankFilterNamesEnabled ? t('This Course') : t('Course Banks')
238
259
  });
239
- }
260
+ } // display options are displayed when using banks list
261
+ // non-display options are used for sorting of banks table
262
+
240
263
 
241
264
  var sortingCriteriaOptions = [{
242
265
  slug: 'name',
243
- translation: t('Bank Name')
266
+ translation: t('Bank Name'),
267
+ display: true
244
268
  }, {
245
269
  slug: 'last_used',
246
- translation: t('Last Used')
270
+ translation: t('Last Used'),
271
+ display: true
247
272
  }, {
248
273
  slug: 'updated_at',
249
- translation: t('Last Updated')
274
+ translation: t('Last Updated'),
275
+ display: true
276
+ }, {
277
+ slug: 'created_at',
278
+ translation: t('Created Date'),
279
+ display: false
250
280
  }];
251
281
  var searchFiltersSelectOptionIdPrefix = 'banks-search-filters-select-option-';
252
282
  var searchFilters = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -284,7 +314,9 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
284
314
  value: this.props.sortBy,
285
315
  width: "10rem",
286
316
  onChange: this.handleSortByChange
287
- }, sortingCriteriaOptions.map(function (option) {
317
+ }, sortingCriteriaOptions.filter(function (option) {
318
+ return option.display === true;
319
+ }).map(function (option) {
288
320
  return /*#__PURE__*/React.createElement(SimpleSelect.Option, {
289
321
  id: sortingFiltersSelectOptionIdPrefix + option.slug,
290
322
  key: option.slug,
@@ -309,7 +341,7 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
309
341
  className: classNames(styles.filters, styles.borderedBottom)
310
342
  }, /*#__PURE__*/React.createElement("div", {
311
343
  className: styles.filtersRow
312
- }, searchFilters), /*#__PURE__*/React.createElement("div", {
344
+ }, searchFilters), !this.props.itemBankSearchTableEnabled && /*#__PURE__*/React.createElement("div", {
313
345
  className: styles.filtersRow
314
346
  }, sortingFilters));
315
347
  } else {
@@ -317,7 +349,7 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
317
349
  className: classNames(styles.filters, styles.borderedBottom)
318
350
  }, /*#__PURE__*/React.createElement("div", {
319
351
  className: styles.filtersRow
320
- }, searchFilters, sortingFilters));
352
+ }, searchFilters, !this.props.itemBankSearchTableEnabled && sortingFilters));
321
353
  }
322
354
  }
323
355
  }, {
@@ -356,16 +388,21 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
356
388
  });
357
389
  }
358
390
  }, {
359
- key: "render",
360
- value: function render() {
361
- return /*#__PURE__*/React.createElement(Page, null, this.renderNav(), /*#__PURE__*/React.createElement("div", {
362
- className: styles.content
363
- }, this.renderHeader(), this.props.filtersEnabled && this.renderFilters(), /*#__PURE__*/React.createElement(PaginatedCollection, {
391
+ key: "renderBanksSearchResults",
392
+ value: function renderBanksSearchResults() {
393
+ return /*#__PURE__*/React.createElement(PaginatedCollection, {
364
394
  empty: this.emptyPage(),
365
395
  getPage: this.getPage,
366
396
  renderRecords: this.renderRecords,
367
397
  stateKey: BANKS_BANK_PAGINATION
368
- }), /*#__PURE__*/React.createElement(CreateBankModal, {
398
+ });
399
+ }
400
+ }, {
401
+ key: "render",
402
+ value: function render() {
403
+ return /*#__PURE__*/React.createElement(Page, null, this.renderNav(), /*#__PURE__*/React.createElement("div", {
404
+ className: styles.content
405
+ }, this.renderHeader(), this.props.filtersEnabled && this.renderFilters(), this.renderBanksSearchResults(), /*#__PURE__*/React.createElement(CreateBankModal, {
369
406
  itemBanksScope: this.props.scope
370
407
  })));
371
408
  }
@@ -420,7 +457,8 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
420
457
  searchTerms: PropTypes.string,
421
458
  sortBy: PropTypes.string,
422
459
  sortOrder: PropTypes.string,
423
- usedByCourseEnabled: PropTypes.bool
460
+ usedByCourseEnabled: PropTypes.bool,
461
+ itemBankSearchTableEnabled: PropTypes.bool
424
462
  }, _class2.defaultProps = {
425
463
  closeTray: null,
426
464
  currentUser: null,
@@ -440,10 +478,11 @@ export var Banks = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
440
478
  filtersEnabled: false,
441
479
  scopeType: 'user',
442
480
  sortBy: 'name',
443
- sortOrder: 'ASC',
481
+ sortOrder: 'ascending',
444
482
  searchTerms: null,
445
483
  newItemBankFilterNamesEnabled: false,
446
- usedByCourseEnabled: false
484
+ usedByCourseEnabled: false,
485
+ itemBankSearchTableEnabled: false
447
486
  }, _class2.contextTypes = {
448
487
  locale: PropTypes.string
449
488
  }, _temp)) || _class);
@@ -21,6 +21,7 @@ import { Button } from '@instructure/ui-buttons';
21
21
  import { IconEditLine, IconTrashLine, IconShareSolid, IconCopyLine } from '@instructure/ui-icons';
22
22
  import { Alert } from '@instructure/ui-alerts';
23
23
  import { Spinner } from '@instructure/ui-spinner';
24
+ import { Table } from '@instructure/ui-table';
24
25
  import { themeable } from '@instructure/ui-themeable';
25
26
  import { EDIT_BANK_MODAL, withI18nSupport } from '@instructure/quiz-common';
26
27
  import CustomPropTypes from "../../../common/util/CustomPropTypes.js";
@@ -29,25 +30,29 @@ import EditBankModal from "../EditBankModal/index.js";
29
30
  import SharingModal from "../SharingModal/index.js";
30
31
  import t from '@instructure/quiz-i18n/es/format-message';
31
32
  var styles = {
32
- componentId: 'dgJJi',
33
+ componentId: 'DyOOn',
33
34
  template: function template(theme) {
34
- return "\n\n.dgJJi_dIMK{border-bottom:".concat(theme.bankRowBorderWidth || 'inherit', " solid ").concat(theme.bankRowBorderColor || 'inherit', ";display:flex;flex-direction:row}\n\n.dgJJi_Zupb{flex:1;margin:").concat(theme.bankInfoMargin || 'inherit', " 0}\n\n.dgJJi_qnWp{font-size:").concat(theme.bankTitleFontSize || 'inherit', ";padding-bottom:").concat(theme.bankTitlePadding || 'inherit', "}\n\n.dgJJi_ciks{color:").concat(theme.bankDetailsColor || 'inherit', ";font-size:").concat(theme.bankDetailsFontSize || 'inherit', "}\n\n.dgJJi_cCNg{align-items:center;display:flex;flex-direction:row;margin:").concat(theme.bankOptionsMargin || 'inherit', " 0}\n\n.dgJJi_bISW{font-size:").concat(theme.BankOptionIconFontSize || 'inherit', ";margin-right:").concat(theme.BankOptionIconMargin || 'inherit', ";vertical-align:middle}\n\n.dgJJi_AHIw{display:block}\n\n.dgJJi_eTBd{margin-bottom:").concat(theme.deletePrefaceMargin || 'inherit', "}");
35
+ return "\n\n.DyOOn_dIMK{border-bottom:".concat(theme.bankRowBorderWidth || 'inherit', " solid ").concat(theme.bankRowBorderColor || 'inherit', ";display:flex;flex-direction:row}\n\n.DyOOn_Zupb{flex:1;margin:").concat(theme.bankInfoMargin || 'inherit', " 0}\n\n.DyOOn_qnWp{font-size:").concat(theme.bankTitleFontSize || 'inherit', ";padding-bottom:").concat(theme.bankTitlePadding || 'inherit', "}\n\n.DyOOn_ciks{color:").concat(theme.bankDetailsColor || 'inherit', ";font-size:").concat(theme.bankDetailsFontSize || 'inherit', "}\n\n.DyOOn_cCNg{align-items:center;display:flex;flex-direction:row}\n\n.DyOOn_bISW{font-size:").concat(theme.BankOptionIconFontSize || 'inherit', ";margin-right:").concat(theme.BankOptionIconMargin || 'inherit', ";vertical-align:middle}\n\n.DyOOn_AHIw{display:block}\n\n.DyOOn_eTBd{margin-bottom:").concat(theme.deletePrefaceMargin || 'inherit', "}\n\n.DyOOn_fXqC{display:flex;justify-content:space-between}");
35
36
  },
36
- 'bankRow': 'dgJJi_dIMK',
37
- 'bankInfo': 'dgJJi_Zupb',
38
- 'bankTitle': 'dgJJi_qnWp',
39
- 'bankDetails': 'dgJJi_ciks',
40
- 'bankOptions': 'dgJJi_cCNg',
41
- 'bankOptionIcon': 'dgJJi_bISW',
42
- 'deleteAlert': 'dgJJi_AHIw',
43
- 'deletePreface': 'dgJJi_eTBd'
37
+ 'bankRow': 'DyOOn_dIMK',
38
+ 'bankInfo': 'DyOOn_Zupb',
39
+ 'bankTitle': 'DyOOn_qnWp',
40
+ 'bankDetails': 'DyOOn_ciks',
41
+ 'bankOptions': 'DyOOn_cCNg',
42
+ 'bankOptionIcon': 'DyOOn_bISW',
43
+ 'deleteAlert': 'DyOOn_AHIw',
44
+ 'deletePreface': 'DyOOn_eTBd',
45
+ 'rowHeader': 'DyOOn_fXqC'
44
46
  };
45
47
  import theme from "./theme.js";
46
48
 
47
- var _ref4 = /*#__PURE__*/React.createElement(Spinner, {
48
- renderTitle: "Loading",
49
- size: "x-small"
50
- });
49
+ var _ref4 = /*#__PURE__*/React.createElement(Table.Cell, null);
50
+
51
+ var _ref5 = /*#__PURE__*/React.createElement(Table.Cell, null);
52
+
53
+ var _ref6 = /*#__PURE__*/React.createElement(Table.Cell, null);
54
+
55
+ var _ref7 = /*#__PURE__*/React.createElement(Table.Cell, null);
51
56
 
52
57
  export var BanksList = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_withI18nSupport) {
53
58
  _inherits(BanksList, _withI18nSupport);
@@ -237,7 +242,7 @@ export var BanksList = (_dec = themeable(theme, styles), _dec(_class = (_temp =
237
242
  };
238
243
  };
239
244
 
240
- if (bank.status == 'copying') {
245
+ if (bank.status === 'copying') {
241
246
  return /*#__PURE__*/React.createElement("div", {
242
247
  className: styles.bankInfo,
243
248
  "data-automation": "sdk-bank-info",
@@ -313,10 +318,14 @@ export var BanksList = (_dec = themeable(theme, styles), _dec(_class = (_temp =
313
318
  name: bank.title
314
319
  })));
315
320
 
316
- if (bank.status == 'copying') {
321
+ if (bank.status === 'copying') {
317
322
  return /*#__PURE__*/React.createElement("div", {
318
323
  className: styles.bankOptions
319
- }, _ref4);
324
+ }, t('Duplicating'), /*#__PURE__*/React.createElement(Spinner, {
325
+ renderTitle: t('Loading'),
326
+ size: "x-small",
327
+ margin: "0 0 0 small"
328
+ }));
320
329
  } else {
321
330
  return /*#__PURE__*/React.createElement("div", {
322
331
  className: styles.bankOptions
@@ -404,10 +413,93 @@ export var BanksList = (_dec = themeable(theme, styles), _dec(_class = (_temp =
404
413
  updateSharedCount: this.updateSharedCount
405
414
  });
406
415
  }
416
+ }, {
417
+ key: "renderTableRowHeader",
418
+ value: function renderTableRowHeader(bank) {
419
+ var _this3 = this;
420
+
421
+ if (bank.status === 'copying') {
422
+ return /*#__PURE__*/React.createElement(Table.RowHeader, null, /*#__PURE__*/React.createElement("div", {
423
+ className: styles.rowHeader
424
+ }, /*#__PURE__*/React.createElement(Heading, {
425
+ as: "h2",
426
+ level: "reset",
427
+ "data-automation": "sdk-banks-list-bank-title-heading"
428
+ }, bank.title), this.props.isCompact && this.renderBankOptions(bank)));
429
+ } else {
430
+ var navigateToBank = function navigateToBank(bankId) {
431
+ return function () {
432
+ return _this3.props.navigateToBank(bankId);
433
+ };
434
+ };
435
+
436
+ return /*#__PURE__*/React.createElement(Table.RowHeader, null, /*#__PURE__*/React.createElement("div", {
437
+ className: styles.rowHeader
438
+ }, /*#__PURE__*/React.createElement(EditBankModal, {
439
+ workingBank: bank.getWorkingInstance()
440
+ }), /*#__PURE__*/React.createElement(Link, {
441
+ isWithinText: false,
442
+ onClick: navigateToBank(bank.id),
443
+ "data-automation": "sdk-banks-list-bank-title-link"
444
+ }, /*#__PURE__*/React.createElement(Heading, {
445
+ as: "h2",
446
+ level: "reset",
447
+ "data-automation": "sdk-banks-list-bank-title-heading"
448
+ }, bank.title)), this.props.isCompact && this.renderBankOptions(bank)));
449
+ }
450
+ }
451
+ }, {
452
+ key: "renderTableRow",
453
+ value: function renderTableRow(bank) {
454
+ if (bank.status === 'copying') {
455
+ return /*#__PURE__*/React.createElement(Table.Row, {
456
+ key: bank.id
457
+ }, this.renderTableRowHeader(bank), _ref4, _ref5, _ref6, _ref7, !this.props.isCompact && /*#__PURE__*/React.createElement(Table.Cell, {
458
+ textAlign: "end"
459
+ }, this.renderBankOptions(bank)));
460
+ } else {
461
+ return /*#__PURE__*/React.createElement(Table.Row, {
462
+ key: bank.id
463
+ }, this.renderTableRowHeader(bank), /*#__PURE__*/React.createElement(Table.Cell, null, this.formatDateMedium(bank.updatedAt())), /*#__PURE__*/React.createElement(Table.Cell, null, bank.itemEntryCount), /*#__PURE__*/React.createElement(Table.Cell, null, bank.lastUsed() ? this.formatDateMedium(bank.lastUsed()) : ''), /*#__PURE__*/React.createElement(Table.Cell, null, this.formatDateMedium(bank.createdAt())), !this.props.isCompact && /*#__PURE__*/React.createElement(Table.Cell, {
464
+ textAlign: "end"
465
+ }, this.renderBankOptions(bank)));
466
+ }
467
+ }
468
+ }, {
469
+ key: "renderTableSortHeader",
470
+ value: function renderTableSortHeader(headerId, headerText) {
471
+ return /*#__PURE__*/React.createElement(Table.ColHeader, {
472
+ id: headerId,
473
+ key: headerId,
474
+ onRequestSort: this.props.onChangeSort(headerId, this.props.order),
475
+ sortDirection: this.props.sort === headerId ? this.props.order : 'none'
476
+ }, headerText);
477
+ }
478
+ }, {
479
+ key: "renderTable",
480
+ value: function renderTable() {
481
+ var _this4 = this;
482
+
483
+ return /*#__PURE__*/React.createElement(Table, {
484
+ margin: "small 0",
485
+ caption: t('Banks'),
486
+ layout: this.props.isCompact ? 'stacked' : 'auto'
487
+ }, /*#__PURE__*/React.createElement(Table.Head, {
488
+ renderSortLabel: t('Sort By')
489
+ }, /*#__PURE__*/React.createElement(Table.Row, null, this.renderTableSortHeader('name', t('Bank')), this.renderTableSortHeader('updated_at', t('Updated')), /*#__PURE__*/React.createElement(Table.ColHeader, {
490
+ id: "header-num-questions",
491
+ width: "1"
492
+ }, t('Questions')), this.renderTableSortHeader('last_used', t('Last Used')), this.renderTableSortHeader('created_at', t('Created')), !this.props.isCompact && /*#__PURE__*/React.createElement(Table.ColHeader, {
493
+ id: "header-option-links",
494
+ width: "1"
495
+ }, /*#__PURE__*/React.createElement(ScreenReaderContent, null, t('Bank option links'))))), /*#__PURE__*/React.createElement(Table.Body, null, (this.props.banks.toArray() || []).map(function (bank) {
496
+ return _this4.renderTableRow(bank);
497
+ })));
498
+ }
407
499
  }, {
408
500
  key: "render",
409
501
  value: function render() {
410
- return /*#__PURE__*/React.createElement("div", null, this.state.sharingModalBank && this.renderSharingModal(), this.props.banks.toArray().map(this.renderBank));
502
+ return /*#__PURE__*/React.createElement("div", null, this.state.sharingModalBank && this.renderSharingModal(), this.props.itemBankSearchTableEnabled ? this.renderTable() : this.props.banks.toArray().map(this.renderBank));
411
503
  }
412
504
  }]);
413
505
 
@@ -13,12 +13,6 @@ import { Select } from '@instructure/ui-select';
13
13
  import { Spinner } from '@instructure/ui-spinner';
14
14
  import TagWrapper from "../../../common/components/shared/TagWrapper/index.js";
15
15
  import { SHARED_WITH_USER, SHARED_WITH_COURSE, SELECT_EMPTY_OPTION } from '@instructure/quiz-common';
16
-
17
- var _ref3 = /*#__PURE__*/React.createElement(Spinner, {
18
- renderTitle: "Loading",
19
- size: "x-small"
20
- });
21
-
22
16
  export var AsyncSearch = /*#__PURE__*/function (_Component) {
23
17
  _inherits(AsyncSearch, _Component);
24
18
 
@@ -322,7 +316,10 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
322
316
  return groups.length ? groups : /*#__PURE__*/React.createElement(Select.Option, {
323
317
  id: SELECT_EMPTY_OPTION,
324
318
  key: SELECT_EMPTY_OPTION
325
- }, this.state.isLoading ? _ref3 : this.emptyOption());
319
+ }, this.state.isLoading ? /*#__PURE__*/React.createElement(Spinner, {
320
+ renderTitle: t('Loading'),
321
+ size: "x-small"
322
+ }) : this.emptyOption());
326
323
  }
327
324
  }, {
328
325
  key: "render",
@@ -224,10 +224,10 @@ export var QuizEntryEditFooter = (_dec = themeable(theme, styles), _dec(_class =
224
224
  value: function render() {
225
225
  return /*#__PURE__*/React.createElement(View, {
226
226
  as: "div",
227
- background: "light",
227
+ background: "secondary",
228
228
  padding: "xx-small none"
229
229
  }, /*#__PURE__*/React.createElement(Flex, {
230
- wrapItems: true,
230
+ wrap: "wrap",
231
231
  justifyItems: "space-between",
232
232
  alignItems: "center"
233
233
  }, /*#__PURE__*/React.createElement(Flex.Item, {
@@ -52,7 +52,7 @@ export var Alerts = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cl
52
52
  }, /*#__PURE__*/React.createElement(Alert, {
53
53
  variant: "error",
54
54
  onDismiss: closeAlert,
55
- closeButtonLabel: t('Close'),
55
+ renderCloseButtonLabel: t('Close'),
56
56
  transition: "none"
57
57
  }, alert.message));
58
58
  }
@@ -63,7 +63,7 @@ export var Alerts = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cl
63
63
  }, /*#__PURE__*/React.createElement(Alert, {
64
64
  variant: alert.variant,
65
65
  onDismiss: closeAlert,
66
- closeButtonLabel: t('Close'),
66
+ renderCloseButtonLabel: t('Close'),
67
67
  transition: "none"
68
68
  }, alert.message));
69
69
  };
@@ -51,8 +51,8 @@ export var Title = (_dec = themeable(theme, styles), _dec(_class = (_temp = _cla
51
51
  return /*#__PURE__*/React.createElement(AccessibleContent, {
52
52
  alt: title
53
53
  }, /*#__PURE__*/React.createElement(Tooltip, {
54
- tip: title,
55
- variant: "inverse"
54
+ renderTip: title,
55
+ color: "primary"
56
56
  }, this.renderTitle(truncatedTitle)));
57
57
  }
58
58
 
@@ -61,7 +61,7 @@ export var AddContentPopover = (_dec = themeable(theme, styles), _dec(_class = (
61
61
  return /*#__PURE__*/React.createElement(Popover, {
62
62
  on: "click",
63
63
  onToggle: _this.toggle,
64
- show: _this.props.isEditing,
64
+ isShowingContent: _this.props.isEditing,
65
65
  shouldCloseOnEscape: true,
66
66
  shouldContainFocus: true
67
67
  }, /*#__PURE__*/React.createElement(Popover.Trigger, null, _this.renderAddContentButton()), /*#__PURE__*/React.createElement(Popover.Content, null, /*#__PURE__*/React.createElement(AddContentBody, {
@@ -28,7 +28,7 @@ var StimulusShowInfo = /*#__PURE__*/function (_Component) {
28
28
  as: "div",
29
29
  padding: "small",
30
30
  margin: "x-small 0 0 0",
31
- background: "light"
31
+ background: "secondary"
32
32
  }, /*#__PURE__*/React.createElement(View, {
33
33
  as: "div"
34
34
  }, /*#__PURE__*/React.createElement(Text, {
@@ -52,7 +52,7 @@ export var AccommodationModal = /*#__PURE__*/function (_Component) {
52
52
  display: "inline-block",
53
53
  borderRadius: "small",
54
54
  position: "relative",
55
- focused: _this.state.isTruncated && focused,
55
+ withFocusOutline: _this.state.isTruncated && focused,
56
56
  as: "div",
57
57
  tabIndex: _this.state.isTruncated ? 0 : null
58
58
  }, /*#__PURE__*/React.createElement(TruncateText, {
@@ -72,7 +72,7 @@ export var AccommodationModal = /*#__PURE__*/function (_Component) {
72
72
  }
73
73
 
74
74
  return /*#__PURE__*/React.createElement(Heading, null, /*#__PURE__*/React.createElement(ScreenReaderContent, null, studentName), _this.state.isTruncated ? /*#__PURE__*/React.createElement(Tooltip, {
75
- tip: studentName,
75
+ renderTip: studentName,
76
76
  mountNode: mountNode
77
77
  }, _this.renderName) : _this.renderName());
78
78
  };
@@ -88,7 +88,7 @@ export var ModerateTray = /*#__PURE__*/function (_Component) {
88
88
  display: "block",
89
89
  borderRadius: "small",
90
90
  position: "relative",
91
- focused: this.state.isTruncated && focused,
91
+ withFocusOutline: this.state.isTruncated && focused,
92
92
  as: "h2",
93
93
  tabIndex: this.state.isTruncated ? 0 : null
94
94
  }, /*#__PURE__*/React.createElement(ScreenReaderContent, null, this.labelText()), /*#__PURE__*/React.createElement(TruncateText, {
@@ -134,7 +134,7 @@ export var ModerateTray = /*#__PURE__*/function (_Component) {
134
134
  padding: "medium"
135
135
  }, this.state.isTruncated ? /*#__PURE__*/React.createElement(Tooltip, {
136
136
  placement: "start",
137
- tip: this.labelText(),
137
+ renderTip: this.labelText(),
138
138
  mountNode: this.getTrayRef || null
139
139
  }, function (_ref) {
140
140
  var focused = _ref.focused;
@@ -274,7 +274,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
274
274
  content = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, null, _ref3, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
275
275
  shouldShrink: true
276
276
  }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
277
- color: "error"
277
+ color: "danger"
278
278
  }, (0, _formatMessage.default)('You are attempting to add content containing course links which may not work when used in other courses.'))));
279
279
  } else {
280
280
  content = /*#__PURE__*/_react.default.createElement(_uiText.Text, {
@@ -671,7 +671,7 @@ var BankEntry = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
671
671
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
672
672
  className: styles.entryEdit
673
673
  }, /*#__PURE__*/_react.default.createElement(_index9.default, versioningProps, canEdit && /*#__PURE__*/_react.default.createElement(_uiAlerts.Alert, {
674
- closeButtonLabel: (0, _formatMessage.default)('Dismiss'),
674
+ renderCloseButtonLabel: (0, _formatMessage.default)('Dismiss'),
675
675
  margin: "0 0 medium 0"
676
676
  }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
677
677
  color: "primary"
@@ -31,9 +31,10 @@ function mapStateToProps(state, props) {
31
31
  var pageData = state.getIn(['ui', _quizCommon.BANKS_BANK_FILTERS], (0, _immutable.Map)());
32
32
  var scopeType = pageData.get('scopeType', (props.scope || {}).type || 'user');
33
33
  var sortBy = pageData.get('sortBy', 'name');
34
- var sortOrder = pageData.get('sortOrder', 'ASC');
34
+ var sortOrder = pageData.get('sortOrder', 'ascending');
35
35
  var searchTerms = pageData.get('searchTerms', null);
36
36
  return {
37
+ itemBankSearchTableEnabled: (0, _featureCheck.featureOn)('item_bank_search_table'),
37
38
  filtersEnabled: (0, _featureCheck.featureOn)('improved_bank_sharing'),
38
39
  newItemBankFilterNamesEnabled: (0, _featureCheck.featureOn)('new_item_bank_filter_names'),
39
40
  usedByCourseEnabled: (0, _featureCheck.featureOn)('filter_item_banks_used_by_course'),
@@ -80,8 +80,8 @@ var styles = {
80
80
  'searchBarContainer': 'cYUUC_bYSL'
81
81
  };
82
82
  var sortOrderIcons = {
83
- ASC: _uiIcons.IconArrowUpLine,
84
- DESC: _uiIcons.IconArrowDownLine
83
+ ascending: _uiIcons.IconArrowUpLine,
84
+ descending: _uiIcons.IconArrowDownLine
85
85
  };
86
86
 
87
87
  var _ref4 = /*#__PURE__*/_react.default.createElement(_uiImg.Img, {
@@ -130,8 +130,8 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
130
130
  params['sort_by'] = _this.props.sortBy;
131
131
  }
132
132
 
133
- if (_this.props.sortOrder === 'DESC') {
134
- params['sort_order'] = _this.props.sortOrder;
133
+ if (_this.props.sortOrder === 'descending') {
134
+ params['sort_order'] = 'DESC';
135
135
  }
136
136
 
137
137
  if (_this.props.searchTerms) {
@@ -171,13 +171,13 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
171
171
 
172
172
  _this.getSortAssistiveText = function () {
173
173
  return (0, _formatMessage.default)('Change sort direction. Direction is currently { sortDirection }', {
174
- sortDirection: _this.props.sortOrder === 'ASC' ? (0, _formatMessage.default)('ascending') : (0, _formatMessage.default)('descending')
174
+ sortDirection: _this.props.sortOrder === 'ascending' ? (0, _formatMessage.default)('ascending') : (0, _formatMessage.default)('descending')
175
175
  });
176
176
  };
177
177
 
178
178
  _this.handleSortingButtonClick = function () {
179
179
  _this.props.merge(_quizCommon.BANKS_BANK_FILTERS, {
180
- sortOrder: _this.props.sortOrder === 'ASC' ? 'DESC' : 'ASC'
180
+ sortOrder: _this.props.sortOrder === 'ascending' ? 'descending' : 'ascending'
181
181
  });
182
182
  };
183
183
 
@@ -189,6 +189,22 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
189
189
  });
190
190
  };
191
191
 
192
+ _this.handleTableSortChange = function (sortBy, sortOrder) {
193
+ return function () {
194
+ var newSortOrder = sortOrder;
195
+
196
+ if (_this.props.sortBy === sortBy) {
197
+ // toggle sort order
198
+ sortOrder === 'ascending' ? newSortOrder = 'descending' : newSortOrder = 'ascending';
199
+ }
200
+
201
+ _this.props.merge(_quizCommon.BANKS_BANK_FILTERS, {
202
+ sortOrder: newSortOrder,
203
+ sortBy: sortBy
204
+ });
205
+ };
206
+ };
207
+
192
208
  _this.handleSearchInputChange = function (_ref3) {
193
209
  var value = _ref3.target.value;
194
210
 
@@ -201,17 +217,22 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
201
217
 
202
218
  _this.renderRecords = function (recordIds) {
203
219
  return /*#__PURE__*/_react.default.createElement(_index3.default, {
204
- focusCreateBankButton: _this.focusCreateBankButton,
205
220
  createBankButton: _this.createBankButton,
206
221
  currentUser: _this.props.currentUser,
222
+ focusCreateBankButton: _this.focusCreateBankButton,
207
223
  getCourseInfo: _this.props.getCourseInfo,
208
224
  getUserInfo: _this.props.getUserInfo,
209
225
  getShareableCourses: _this.props.getShareableCourses,
210
226
  getShareableUsers: _this.props.getShareableUsers,
227
+ isCompact: _this.props.isCompact,
228
+ itemBankSearchTableEnabled: _this.props.itemBankSearchTableEnabled,
211
229
  minChars: _this.props.minChars,
212
230
  navigateToBank: _this.props.navigateToBank,
231
+ onChangeSort: _this.handleTableSortChange,
213
232
  onShare: _this.props.onShare,
214
- recordIds: recordIds
233
+ order: _this.props.sortOrder,
234
+ recordIds: recordIds,
235
+ sort: _this.props.sortBy
215
236
  });
216
237
  };
217
238
 
@@ -273,17 +294,26 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
273
294
  slug: 'course',
274
295
  translation: this.props.newItemBankFilterNamesEnabled ? (0, _formatMessage.default)('This Course') : (0, _formatMessage.default)('Course Banks')
275
296
  });
276
- }
297
+ } // display options are displayed when using banks list
298
+ // non-display options are used for sorting of banks table
299
+
277
300
 
278
301
  var sortingCriteriaOptions = [{
279
302
  slug: 'name',
280
- translation: (0, _formatMessage.default)('Bank Name')
303
+ translation: (0, _formatMessage.default)('Bank Name'),
304
+ display: true
281
305
  }, {
282
306
  slug: 'last_used',
283
- translation: (0, _formatMessage.default)('Last Used')
307
+ translation: (0, _formatMessage.default)('Last Used'),
308
+ display: true
284
309
  }, {
285
310
  slug: 'updated_at',
286
- translation: (0, _formatMessage.default)('Last Updated')
311
+ translation: (0, _formatMessage.default)('Last Updated'),
312
+ display: true
313
+ }, {
314
+ slug: 'created_at',
315
+ translation: (0, _formatMessage.default)('Created Date'),
316
+ display: false
287
317
  }];
288
318
  var searchFiltersSelectOptionIdPrefix = 'banks-search-filters-select-option-';
289
319
 
@@ -324,7 +354,9 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
324
354
  value: this.props.sortBy,
325
355
  width: "10rem",
326
356
  onChange: this.handleSortByChange
327
- }, sortingCriteriaOptions.map(function (option) {
357
+ }, sortingCriteriaOptions.filter(function (option) {
358
+ return option.display === true;
359
+ }).map(function (option) {
328
360
  return /*#__PURE__*/_react.default.createElement(_uiSimpleSelect.SimpleSelect.Option, {
329
361
  id: sortingFiltersSelectOptionIdPrefix + option.slug,
330
362
  key: option.slug,
@@ -349,7 +381,7 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
349
381
  className: (0, _classnames.default)(styles.filters, styles.borderedBottom)
350
382
  }, /*#__PURE__*/_react.default.createElement("div", {
351
383
  className: styles.filtersRow
352
- }, searchFilters), /*#__PURE__*/_react.default.createElement("div", {
384
+ }, searchFilters), !this.props.itemBankSearchTableEnabled && /*#__PURE__*/_react.default.createElement("div", {
353
385
  className: styles.filtersRow
354
386
  }, sortingFilters));
355
387
  } else {
@@ -357,7 +389,7 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
357
389
  className: (0, _classnames.default)(styles.filters, styles.borderedBottom)
358
390
  }, /*#__PURE__*/_react.default.createElement("div", {
359
391
  className: styles.filtersRow
360
- }, searchFilters, sortingFilters));
392
+ }, searchFilters, !this.props.itemBankSearchTableEnabled && sortingFilters));
361
393
  }
362
394
  }
363
395
  }, {
@@ -396,16 +428,21 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
396
428
  });
397
429
  }
398
430
  }, {
399
- key: "render",
400
- value: function render() {
401
- return /*#__PURE__*/_react.default.createElement(_index.default, null, this.renderNav(), /*#__PURE__*/_react.default.createElement("div", {
402
- className: styles.content
403
- }, this.renderHeader(), this.props.filtersEnabled && this.renderFilters(), /*#__PURE__*/_react.default.createElement(_index2.default, {
431
+ key: "renderBanksSearchResults",
432
+ value: function renderBanksSearchResults() {
433
+ return /*#__PURE__*/_react.default.createElement(_index2.default, {
404
434
  empty: this.emptyPage(),
405
435
  getPage: this.getPage,
406
436
  renderRecords: this.renderRecords,
407
437
  stateKey: _quizCommon.BANKS_BANK_PAGINATION
408
- }), /*#__PURE__*/_react.default.createElement(_index4.default, {
438
+ });
439
+ }
440
+ }, {
441
+ key: "render",
442
+ value: function render() {
443
+ return /*#__PURE__*/_react.default.createElement(_index.default, null, this.renderNav(), /*#__PURE__*/_react.default.createElement("div", {
444
+ className: styles.content
445
+ }, this.renderHeader(), this.props.filtersEnabled && this.renderFilters(), this.renderBanksSearchResults(), /*#__PURE__*/_react.default.createElement(_index4.default, {
409
446
  itemBanksScope: this.props.scope
410
447
  })));
411
448
  }
@@ -459,7 +496,8 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
459
496
  searchTerms: _propTypes.default.string,
460
497
  sortBy: _propTypes.default.string,
461
498
  sortOrder: _propTypes.default.string,
462
- usedByCourseEnabled: _propTypes.default.bool
499
+ usedByCourseEnabled: _propTypes.default.bool,
500
+ itemBankSearchTableEnabled: _propTypes.default.bool
463
501
  }, _class2.defaultProps = {
464
502
  closeTray: null,
465
503
  currentUser: null,
@@ -479,10 +517,11 @@ var Banks = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
479
517
  filtersEnabled: false,
480
518
  scopeType: 'user',
481
519
  sortBy: 'name',
482
- sortOrder: 'ASC',
520
+ sortOrder: 'ascending',
483
521
  searchTerms: null,
484
522
  newItemBankFilterNamesEnabled: false,
485
- usedByCourseEnabled: false
523
+ usedByCourseEnabled: false,
524
+ itemBankSearchTableEnabled: false
486
525
  }, _class2.contextTypes = {
487
526
  locale: _propTypes.default.string
488
527
  }, _temp)) || _class);
@@ -47,6 +47,8 @@ var _uiAlerts = require("@instructure/ui-alerts");
47
47
 
48
48
  var _uiSpinner = require("@instructure/ui-spinner");
49
49
 
50
+ var _uiTable = require("@instructure/ui-table");
51
+
50
52
  var _uiThemeable = require("@instructure/ui-themeable");
51
53
 
52
54
  var _quizCommon = require("@instructure/quiz-common");
@@ -66,24 +68,28 @@ var _theme = _interopRequireDefault(require("./theme.js"));
66
68
  var _dec, _class, _class2, _temp;
67
69
 
68
70
  var styles = {
69
- componentId: 'dgJJi',
71
+ componentId: 'DyOOn',
70
72
  template: function template(theme) {
71
- return "\n\n.dgJJi_dIMK{border-bottom:".concat(theme.bankRowBorderWidth || 'inherit', " solid ").concat(theme.bankRowBorderColor || 'inherit', ";display:flex;flex-direction:row}\n\n.dgJJi_Zupb{flex:1;margin:").concat(theme.bankInfoMargin || 'inherit', " 0}\n\n.dgJJi_qnWp{font-size:").concat(theme.bankTitleFontSize || 'inherit', ";padding-bottom:").concat(theme.bankTitlePadding || 'inherit', "}\n\n.dgJJi_ciks{color:").concat(theme.bankDetailsColor || 'inherit', ";font-size:").concat(theme.bankDetailsFontSize || 'inherit', "}\n\n.dgJJi_cCNg{align-items:center;display:flex;flex-direction:row;margin:").concat(theme.bankOptionsMargin || 'inherit', " 0}\n\n.dgJJi_bISW{font-size:").concat(theme.BankOptionIconFontSize || 'inherit', ";margin-right:").concat(theme.BankOptionIconMargin || 'inherit', ";vertical-align:middle}\n\n.dgJJi_AHIw{display:block}\n\n.dgJJi_eTBd{margin-bottom:").concat(theme.deletePrefaceMargin || 'inherit', "}");
73
+ return "\n\n.DyOOn_dIMK{border-bottom:".concat(theme.bankRowBorderWidth || 'inherit', " solid ").concat(theme.bankRowBorderColor || 'inherit', ";display:flex;flex-direction:row}\n\n.DyOOn_Zupb{flex:1;margin:").concat(theme.bankInfoMargin || 'inherit', " 0}\n\n.DyOOn_qnWp{font-size:").concat(theme.bankTitleFontSize || 'inherit', ";padding-bottom:").concat(theme.bankTitlePadding || 'inherit', "}\n\n.DyOOn_ciks{color:").concat(theme.bankDetailsColor || 'inherit', ";font-size:").concat(theme.bankDetailsFontSize || 'inherit', "}\n\n.DyOOn_cCNg{align-items:center;display:flex;flex-direction:row}\n\n.DyOOn_bISW{font-size:").concat(theme.BankOptionIconFontSize || 'inherit', ";margin-right:").concat(theme.BankOptionIconMargin || 'inherit', ";vertical-align:middle}\n\n.DyOOn_AHIw{display:block}\n\n.DyOOn_eTBd{margin-bottom:").concat(theme.deletePrefaceMargin || 'inherit', "}\n\n.DyOOn_fXqC{display:flex;justify-content:space-between}");
72
74
  },
73
- 'bankRow': 'dgJJi_dIMK',
74
- 'bankInfo': 'dgJJi_Zupb',
75
- 'bankTitle': 'dgJJi_qnWp',
76
- 'bankDetails': 'dgJJi_ciks',
77
- 'bankOptions': 'dgJJi_cCNg',
78
- 'bankOptionIcon': 'dgJJi_bISW',
79
- 'deleteAlert': 'dgJJi_AHIw',
80
- 'deletePreface': 'dgJJi_eTBd'
75
+ 'bankRow': 'DyOOn_dIMK',
76
+ 'bankInfo': 'DyOOn_Zupb',
77
+ 'bankTitle': 'DyOOn_qnWp',
78
+ 'bankDetails': 'DyOOn_ciks',
79
+ 'bankOptions': 'DyOOn_cCNg',
80
+ 'bankOptionIcon': 'DyOOn_bISW',
81
+ 'deleteAlert': 'DyOOn_AHIw',
82
+ 'deletePreface': 'DyOOn_eTBd',
83
+ 'rowHeader': 'DyOOn_fXqC'
81
84
  };
82
85
 
83
- var _ref4 = /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
84
- renderTitle: "Loading",
85
- size: "x-small"
86
- });
86
+ var _ref4 = /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null);
87
+
88
+ var _ref5 = /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null);
89
+
90
+ var _ref6 = /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null);
91
+
92
+ var _ref7 = /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null);
87
93
 
88
94
  var BanksList = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_withI18nSupport) {
89
95
  (0, _inherits2.default)(BanksList, _withI18nSupport);
@@ -273,7 +279,7 @@ var BanksList = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
273
279
  };
274
280
  };
275
281
 
276
- if (bank.status == 'copying') {
282
+ if (bank.status === 'copying') {
277
283
  return /*#__PURE__*/_react.default.createElement("div", {
278
284
  className: styles.bankInfo,
279
285
  "data-automation": "sdk-bank-info",
@@ -350,10 +356,14 @@ var BanksList = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
350
356
  name: bank.title
351
357
  })));
352
358
 
353
- if (bank.status == 'copying') {
359
+ if (bank.status === 'copying') {
354
360
  return /*#__PURE__*/_react.default.createElement("div", {
355
361
  className: styles.bankOptions
356
- }, _ref4);
362
+ }, (0, _formatMessage.default)('Duplicating'), /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
363
+ renderTitle: (0, _formatMessage.default)('Loading'),
364
+ size: "x-small",
365
+ margin: "0 0 0 small"
366
+ }));
357
367
  } else {
358
368
  return /*#__PURE__*/_react.default.createElement("div", {
359
369
  className: styles.bankOptions
@@ -443,10 +453,93 @@ var BanksList = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
443
453
  updateSharedCount: this.updateSharedCount
444
454
  });
445
455
  }
456
+ }, {
457
+ key: "renderTableRowHeader",
458
+ value: function renderTableRowHeader(bank) {
459
+ var _this3 = this;
460
+
461
+ if (bank.status === 'copying') {
462
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table.RowHeader, null, /*#__PURE__*/_react.default.createElement("div", {
463
+ className: styles.rowHeader
464
+ }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
465
+ as: "h2",
466
+ level: "reset",
467
+ "data-automation": "sdk-banks-list-bank-title-heading"
468
+ }, bank.title), this.props.isCompact && this.renderBankOptions(bank)));
469
+ } else {
470
+ var navigateToBank = function navigateToBank(bankId) {
471
+ return function () {
472
+ return _this3.props.navigateToBank(bankId);
473
+ };
474
+ };
475
+
476
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table.RowHeader, null, /*#__PURE__*/_react.default.createElement("div", {
477
+ className: styles.rowHeader
478
+ }, /*#__PURE__*/_react.default.createElement(_index2.default, {
479
+ workingBank: bank.getWorkingInstance()
480
+ }), /*#__PURE__*/_react.default.createElement(_uiLink.Link, {
481
+ isWithinText: false,
482
+ onClick: navigateToBank(bank.id),
483
+ "data-automation": "sdk-banks-list-bank-title-link"
484
+ }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
485
+ as: "h2",
486
+ level: "reset",
487
+ "data-automation": "sdk-banks-list-bank-title-heading"
488
+ }, bank.title)), this.props.isCompact && this.renderBankOptions(bank)));
489
+ }
490
+ }
491
+ }, {
492
+ key: "renderTableRow",
493
+ value: function renderTableRow(bank) {
494
+ if (bank.status === 'copying') {
495
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table.Row, {
496
+ key: bank.id
497
+ }, this.renderTableRowHeader(bank), _ref4, _ref5, _ref6, _ref7, !this.props.isCompact && /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, {
498
+ textAlign: "end"
499
+ }, this.renderBankOptions(bank)));
500
+ } else {
501
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table.Row, {
502
+ key: bank.id
503
+ }, this.renderTableRowHeader(bank), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null, this.formatDateMedium(bank.updatedAt())), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null, bank.itemEntryCount), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null, bank.lastUsed() ? this.formatDateMedium(bank.lastUsed()) : ''), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, null, this.formatDateMedium(bank.createdAt())), !this.props.isCompact && /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, {
504
+ textAlign: "end"
505
+ }, this.renderBankOptions(bank)));
506
+ }
507
+ }
508
+ }, {
509
+ key: "renderTableSortHeader",
510
+ value: function renderTableSortHeader(headerId, headerText) {
511
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table.ColHeader, {
512
+ id: headerId,
513
+ key: headerId,
514
+ onRequestSort: this.props.onChangeSort(headerId, this.props.order),
515
+ sortDirection: this.props.sort === headerId ? this.props.order : 'none'
516
+ }, headerText);
517
+ }
518
+ }, {
519
+ key: "renderTable",
520
+ value: function renderTable() {
521
+ var _this4 = this;
522
+
523
+ return /*#__PURE__*/_react.default.createElement(_uiTable.Table, {
524
+ margin: "small 0",
525
+ caption: (0, _formatMessage.default)('Banks'),
526
+ layout: this.props.isCompact ? 'stacked' : 'auto'
527
+ }, /*#__PURE__*/_react.default.createElement(_uiTable.Table.Head, {
528
+ renderSortLabel: (0, _formatMessage.default)('Sort By')
529
+ }, /*#__PURE__*/_react.default.createElement(_uiTable.Table.Row, null, this.renderTableSortHeader('name', (0, _formatMessage.default)('Bank')), this.renderTableSortHeader('updated_at', (0, _formatMessage.default)('Updated')), /*#__PURE__*/_react.default.createElement(_uiTable.Table.ColHeader, {
530
+ id: "header-num-questions",
531
+ width: "1"
532
+ }, (0, _formatMessage.default)('Questions')), this.renderTableSortHeader('last_used', (0, _formatMessage.default)('Last Used')), this.renderTableSortHeader('created_at', (0, _formatMessage.default)('Created')), !this.props.isCompact && /*#__PURE__*/_react.default.createElement(_uiTable.Table.ColHeader, {
533
+ id: "header-option-links",
534
+ width: "1"
535
+ }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.ScreenReaderContent, null, (0, _formatMessage.default)('Bank option links'))))), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Body, null, (this.props.banks.toArray() || []).map(function (bank) {
536
+ return _this4.renderTableRow(bank);
537
+ })));
538
+ }
446
539
  }, {
447
540
  key: "render",
448
541
  value: function render() {
449
- return /*#__PURE__*/_react.default.createElement("div", null, this.state.sharingModalBank && this.renderSharingModal(), this.props.banks.toArray().map(this.renderBank));
542
+ return /*#__PURE__*/_react.default.createElement("div", null, this.state.sharingModalBank && this.renderSharingModal(), this.props.itemBankSearchTableEnabled ? this.renderTable() : this.props.banks.toArray().map(this.renderBank));
450
543
  }
451
544
  }]);
452
545
  BanksList.displayName = "BanksList";
@@ -39,11 +39,6 @@ var _index = _interopRequireDefault(require("../../../common/components/shared/T
39
39
 
40
40
  var _quizCommon = require("@instructure/quiz-common");
41
41
 
42
- var _ref3 = /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
43
- renderTitle: "Loading",
44
- size: "x-small"
45
- });
46
-
47
42
  var AsyncSearch = /*#__PURE__*/function (_Component) {
48
43
  (0, _inherits2.default)(AsyncSearch, _Component);
49
44
 
@@ -346,7 +341,10 @@ var AsyncSearch = /*#__PURE__*/function (_Component) {
346
341
  return groups.length ? groups : /*#__PURE__*/_react.default.createElement(_uiSelect.Select.Option, {
347
342
  id: _quizCommon.SELECT_EMPTY_OPTION,
348
343
  key: _quizCommon.SELECT_EMPTY_OPTION
349
- }, this.state.isLoading ? _ref3 : this.emptyOption());
344
+ }, this.state.isLoading ? /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
345
+ renderTitle: (0, _formatMessage.default)('Loading'),
346
+ size: "x-small"
347
+ }) : this.emptyOption());
350
348
  }
351
349
  }, {
352
350
  key: "render",
@@ -254,10 +254,10 @@ var QuizEntryEditFooter = (_dec = (0, _uiThemeable.themeable)(_theme.default, st
254
254
  value: function render() {
255
255
  return /*#__PURE__*/_react.default.createElement(_uiView.View, {
256
256
  as: "div",
257
- background: "light",
257
+ background: "secondary",
258
258
  padding: "xx-small none"
259
259
  }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
260
- wrapItems: true,
260
+ wrap: "wrap",
261
261
  justifyItems: "space-between",
262
262
  alignItems: "center"
263
263
  }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
@@ -75,7 +75,7 @@ var Alerts = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
75
75
  }, /*#__PURE__*/_react.default.createElement(_uiAlerts.Alert, {
76
76
  variant: "error",
77
77
  onDismiss: closeAlert,
78
- closeButtonLabel: (0, _formatMessage.default)('Close'),
78
+ renderCloseButtonLabel: (0, _formatMessage.default)('Close'),
79
79
  transition: "none"
80
80
  }, alert.message));
81
81
  }
@@ -86,7 +86,7 @@ var Alerts = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
86
86
  }, /*#__PURE__*/_react.default.createElement(_uiAlerts.Alert, {
87
87
  variant: alert.variant,
88
88
  onDismiss: closeAlert,
89
- closeButtonLabel: (0, _formatMessage.default)('Close'),
89
+ renderCloseButtonLabel: (0, _formatMessage.default)('Close'),
90
90
  transition: "none"
91
91
  }, alert.message));
92
92
  };
@@ -71,8 +71,8 @@ var Title = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_c
71
71
  return /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
72
72
  alt: title
73
73
  }, /*#__PURE__*/_react.default.createElement(_uiTooltip.Tooltip, {
74
- tip: title,
75
- variant: "inverse"
74
+ renderTip: title,
75
+ color: "primary"
76
76
  }, this.renderTitle(truncatedTitle)));
77
77
  }
78
78
 
@@ -86,7 +86,7 @@ var AddContentPopover = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
86
86
  return /*#__PURE__*/_react.default.createElement(_uiPopover.Popover, {
87
87
  on: "click",
88
88
  onToggle: _this.toggle,
89
- show: _this.props.isEditing,
89
+ isShowingContent: _this.props.isEditing,
90
90
  shouldCloseOnEscape: true,
91
91
  shouldContainFocus: true
92
92
  }, /*#__PURE__*/_react.default.createElement(_uiPopover.Popover.Trigger, null, _this.renderAddContentButton()), /*#__PURE__*/_react.default.createElement(_uiPopover.Popover.Content, null, /*#__PURE__*/_react.default.createElement(_index2.default, {
@@ -48,7 +48,7 @@ var StimulusShowInfo = /*#__PURE__*/function (_Component) {
48
48
  as: "div",
49
49
  padding: "small",
50
50
  margin: "x-small 0 0 0",
51
- background: "light"
51
+ background: "secondary"
52
52
  }, /*#__PURE__*/_react.default.createElement(_uiView.View, {
53
53
  as: "div"
54
54
  }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
@@ -77,7 +77,7 @@ var AccommodationModal = /*#__PURE__*/function (_Component) {
77
77
  display: "inline-block",
78
78
  borderRadius: "small",
79
79
  position: "relative",
80
- focused: _this.state.isTruncated && focused,
80
+ withFocusOutline: _this.state.isTruncated && focused,
81
81
  as: "div",
82
82
  tabIndex: _this.state.isTruncated ? 0 : null
83
83
  }, /*#__PURE__*/_react.default.createElement(_uiTruncateText.TruncateText, {
@@ -97,7 +97,7 @@ var AccommodationModal = /*#__PURE__*/function (_Component) {
97
97
  }
98
98
 
99
99
  return /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, null, /*#__PURE__*/_react.default.createElement(_uiA11yContent.ScreenReaderContent, null, studentName), _this.state.isTruncated ? /*#__PURE__*/_react.default.createElement(_uiTooltip.Tooltip, {
100
- tip: studentName,
100
+ renderTip: studentName,
101
101
  mountNode: mountNode
102
102
  }, _this.renderName) : _this.renderName());
103
103
  };
@@ -113,7 +113,7 @@ var ModerateTray = /*#__PURE__*/function (_Component) {
113
113
  display: "block",
114
114
  borderRadius: "small",
115
115
  position: "relative",
116
- focused: this.state.isTruncated && focused,
116
+ withFocusOutline: this.state.isTruncated && focused,
117
117
  as: "h2",
118
118
  tabIndex: this.state.isTruncated ? 0 : null
119
119
  }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.ScreenReaderContent, null, this.labelText()), /*#__PURE__*/_react.default.createElement(_uiTruncateText.TruncateText, {
@@ -159,7 +159,7 @@ var ModerateTray = /*#__PURE__*/function (_Component) {
159
159
  padding: "medium"
160
160
  }, this.state.isTruncated ? /*#__PURE__*/_react.default.createElement(_uiTooltip.Tooltip, {
161
161
  placement: "start",
162
- tip: this.labelText(),
162
+ renderTip: this.labelText(),
163
163
  mountNode: this.getTrayRef || null
164
164
  }, function (_ref) {
165
165
  var focused = _ref.focused;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "18.2.1-rc.3+5badd9b9f",
3
+ "version": "18.2.1-rc.5+e6c543201",
4
4
  "license": "MIT",
5
5
  "description": "The Quiz React SDK by Instructure Inc.",
6
6
  "author": "Instructure, Inc. Engineering and Product Design",
@@ -42,11 +42,11 @@
42
42
  "dependencies": {
43
43
  "@instructure/grading-utils": "^1.0.0",
44
44
  "@instructure/outcomes-ui": "^2.1.9",
45
- "@instructure/quiz-common": "18.2.1-rc.3+5badd9b9f",
46
- "@instructure/quiz-i18n": "18.2.1-rc.3+5badd9b9f",
47
- "@instructure/quiz-interactions": "18.2.1-rc.3+5badd9b9f",
48
- "@instructure/quiz-number-input": "18.2.1-rc.3+5badd9b9f",
49
- "@instructure/quiz-rce": "18.2.1-rc.3+5badd9b9f",
45
+ "@instructure/quiz-common": "18.2.1-rc.5+e6c543201",
46
+ "@instructure/quiz-i18n": "18.2.1-rc.5+e6c543201",
47
+ "@instructure/quiz-interactions": "18.2.1-rc.5+e6c543201",
48
+ "@instructure/quiz-number-input": "18.2.1-rc.5+e6c543201",
49
+ "@instructure/quiz-rce": "18.2.1-rc.5+e6c543201",
50
50
  "@instructure/ui-a11y-content": "^7.20.0",
51
51
  "@instructure/ui-alerts": "^7.20.0",
52
52
  "@instructure/ui-avatar": "^7.20.0",
@@ -107,7 +107,7 @@
107
107
  "eventemitter3": "^3.1.0",
108
108
  "humps": "^2.0.0",
109
109
  "immutable": "^3.8.1",
110
- "instructure-validations": "18.2.1-rc.3+5badd9b9f",
110
+ "instructure-validations": "18.2.1-rc.5+e6c543201",
111
111
  "ipaddr.js": "^1.5.4",
112
112
  "isomorphic-fetch": "^2.2.0",
113
113
  "isuuid": "^0.1.0",
@@ -158,7 +158,7 @@
158
158
  "intl": "^1.2.4",
159
159
  "jquery": "^2.2.3",
160
160
  "most-subject": "^5.3.0",
161
- "quiz-presets": "18.2.1-rc.3+5badd9b9f",
161
+ "quiz-presets": "18.2.1-rc.5+e6c543201",
162
162
  "react": "^16.8.6",
163
163
  "react-addons-test-utils": "^15.6.2",
164
164
  "react-dom": "^16.8.6",
@@ -174,5 +174,5 @@
174
174
  "publishConfig": {
175
175
  "access": "public"
176
176
  },
177
- "gitHead": "5badd9b9ff7affd155df7fa64e894861b843ae32"
177
+ "gitHead": "e6c5432010054a85b9ff7ced508614d42cd74938"
178
178
  }