@instructure/quiz-core 20.7.1-rc.9 → 20.8.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/es/banks/api/banks.js +36 -8
- package/es/banks/components/Banks/presenter.js +10 -1
- package/es/banks/components/BanksList/presenter.js +5 -0
- package/es/banks/components/SharingModal/ShareList/index.js +20 -9
- package/es/banks/components/SharingModal/asyncSearch.js +65 -6
- package/es/banks/components/SharingModal/presenter.js +6 -2
- package/es/building/components/resources/BanksTray/presenter.js +7 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/presenter.js +90 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/presenter.js +255 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared/ChoiceGroupTypeTable → NumericType}/theme.js +1 -2
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/presenter.js +23 -59
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/ChoiceGroupTypeTable/styles.js +10 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +11 -35
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/index.js +120 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/styles.js +38 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/theme.js +11 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/index.js +55 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +14 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +8 -2
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/presenter.js +104 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/{ChoiceGroupTypeTable → ExpandableCard}/styles.js +3 -2
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/theme.js +7 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +4 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +52 -2
- package/lib/banks/api/banks.js +35 -7
- package/lib/banks/components/Banks/presenter.js +10 -1
- package/lib/banks/components/BanksList/presenter.js +5 -0
- package/lib/banks/components/SharingModal/ShareList/index.js +19 -8
- package/lib/banks/components/SharingModal/asyncSearch.js +64 -5
- package/lib/banks/components/SharingModal/presenter.js +6 -2
- package/lib/building/components/resources/BanksTray/presenter.js +7 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/presenter.js +113 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/presenter.js +281 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared/ChoiceGroupTypeTable → NumericType}/theme.js +1 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/presenter.js +27 -64
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/ChoiceGroupTypeTable/styles.js +18 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +15 -39
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/index.js +140 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/styles.js +46 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/theme.js +19 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/index.js +80 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +20 -4
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +8 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/presenter.js +124 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/{ChoiceGroupTypeTable → ExpandableCard}/styles.js +3 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/theme.js +15 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +4 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +68 -3
- package/package.json +10 -10
- /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{RichFillBlankType → NumericType}/styles.js +0 -0
- /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/index.js +0 -0
- /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/{theme.js → ChoiceGroupTypeTable/theme.js} +0 -0
- /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{RichFillBlankType → NumericType}/styles.js +0 -0
- /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/index.js +0 -0
- /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/{theme.js → ChoiceGroupTypeTable/theme.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [20.8.0](https://gerrit.instructure.com/quizzes-ui/compare/v20.7.0...v20.8.0) (2024-02-28)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **Banks:** Sort By dropdown uses header names instead of ids ([a01b932](https://gerrit.instructure.com/quizzes-ui/commits/a01b93266a5146e60789cc91185333143897a8be))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **item-analysis:** adapt aggregation table ([89cc091](https://gerrit.instructure.com/quizzes-ui/commits/89cc0912a287d55922fb75a4c343b663875be5d9))
|
|
17
|
+
* **item-analysis:** answer frequency summary for essay and file-upload questions ([fa18909](https://gerrit.instructure.com/quizzes-ui/commits/fa1890974baa639fabfc8e64371fef39cfc57bc8))
|
|
18
|
+
* **quiz-core:** Add IA afs numeric ([9b86625](https://gerrit.instructure.com/quizzes-ui/commits/9b8662538d9fadf02ab2c441074cdc5f67aaca22))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
6
24
|
# [20.7.0](https://gerrit.instructure.com/quizzes-ui/compare/v20.6.0...v20.7.0) (2024-02-22)
|
|
7
25
|
|
|
8
26
|
|
package/es/banks/api/banks.js
CHANGED
|
@@ -11,7 +11,7 @@ import { clear, newActiveBankEntry, newActiveBank } from "../../common/actions/u
|
|
|
11
11
|
import t from '@instructure/quiz-i18n/es/format-message';
|
|
12
12
|
import { handleError } from "../../common/api/helpers.js";
|
|
13
13
|
import { removeFromPolling } from "./copyingBanksPoller.js";
|
|
14
|
-
import { BANKS_BANK_PAGINATION, BANKS_BANK_ENTRY_PAGINATION, DELETE_BANK_CALL, UPDATE_BANK_CALL, CAN_EDIT, READ_ONLY, REMOVED_ACCESS, SHARED_WITH_USER, SHARED_WITH_COURSE } from '@instructure/quiz-common';
|
|
14
|
+
import { BANKS_BANK_PAGINATION, BANKS_BANK_ENTRY_PAGINATION, DELETE_BANK_CALL, UPDATE_BANK_CALL, CAN_EDIT, READ_ONLY, REMOVED_ACCESS, SHARED_WITH_USER, SHARED_WITH_COURSE, SHARED_WITH_ACCOUNT } from '@instructure/quiz-common';
|
|
15
15
|
import { noop } from 'lodash';
|
|
16
16
|
import { NIL } from 'uuid';
|
|
17
17
|
var banksApiEndpoint = '/api/banks';
|
|
@@ -226,10 +226,10 @@ export var shareBank = function shareBank(_shareBank) {
|
|
|
226
226
|
};
|
|
227
227
|
dispatch(handleShareBankResponse(sharedBank));
|
|
228
228
|
});
|
|
229
|
-
} else
|
|
229
|
+
} else {
|
|
230
230
|
var sharedBank = {
|
|
231
231
|
id: sharedBankInfo.id,
|
|
232
|
-
entityType:
|
|
232
|
+
entityType: _shareBank.entityType,
|
|
233
233
|
entityId: _shareBank.entityId,
|
|
234
234
|
title: _shareBank.title,
|
|
235
235
|
permission: sharedBankInfo.permission,
|
|
@@ -272,10 +272,8 @@ export var getSharedBank = function getSharedBank(bankId, entityType, entityId)
|
|
|
272
272
|
});
|
|
273
273
|
};
|
|
274
274
|
};
|
|
275
|
-
export var getSharedBanks = function getSharedBanks(bank, getUserInfo, getCourseInfo) {
|
|
275
|
+
export var getSharedBanks = function getSharedBanks(bank, getUserInfo, getCourseInfo, getAccountInfo) {
|
|
276
276
|
var url = "".concat(banksApiEndpoint, "/").concat(bank.id, "/shared_banks");
|
|
277
|
-
var userSharedBanks = [];
|
|
278
|
-
var courseSharedBanks = [];
|
|
279
277
|
return function (dispatch, getState) {
|
|
280
278
|
var fetcher = new Fetcher({
|
|
281
279
|
onError: handleError(dispatch, t('Failed to fetch shared banks.'))
|
|
@@ -290,8 +288,10 @@ export var getSharedBanks = function getSharedBanks(bank, getUserInfo, getCourse
|
|
|
290
288
|
permission: CAN_EDIT,
|
|
291
289
|
bank_id: bank.id
|
|
292
290
|
});
|
|
293
|
-
}
|
|
291
|
+
} // USERS
|
|
292
|
+
|
|
294
293
|
|
|
294
|
+
var userSharedBanks = [];
|
|
295
295
|
var userUuids = sharedBanksInfo.filter(function (sb) {
|
|
296
296
|
return sb.entity_type === SHARED_WITH_USER;
|
|
297
297
|
}).map(function (sb) {
|
|
@@ -316,7 +316,9 @@ export var getSharedBanks = function getSharedBanks(bank, getUserInfo, getCourse
|
|
|
316
316
|
}
|
|
317
317
|
});
|
|
318
318
|
dispatch(handleShareBanksResponse(userSharedBanks));
|
|
319
|
-
});
|
|
319
|
+
}); // COURSES
|
|
320
|
+
|
|
321
|
+
var courseSharedBanks = [];
|
|
320
322
|
var courseUuids = sharedBanksInfo.filter(function (sb) {
|
|
321
323
|
return sb.entity_type === SHARED_WITH_COURSE;
|
|
322
324
|
}).map(function (sb) {
|
|
@@ -340,6 +342,32 @@ export var getSharedBanks = function getSharedBanks(bank, getUserInfo, getCourse
|
|
|
340
342
|
}
|
|
341
343
|
});
|
|
342
344
|
dispatch(handleShareBanksResponse(courseSharedBanks));
|
|
345
|
+
}); // ACCOUNTS
|
|
346
|
+
|
|
347
|
+
var accountSharedBanks = [];
|
|
348
|
+
var accountUuids = sharedBanksInfo.filter(function (sb) {
|
|
349
|
+
return sb.entity_type === SHARED_WITH_ACCOUNT;
|
|
350
|
+
}).map(function (sb) {
|
|
351
|
+
return sb.entity_id;
|
|
352
|
+
});
|
|
353
|
+
getAccountInfo(accountUuids).then(function (accountsInfo) {
|
|
354
|
+
accountsInfo.forEach(function (accountInfo) {
|
|
355
|
+
var sharedBankInfo = sharedBanksInfo.find(function (sb) {
|
|
356
|
+
return sb.entity_type === SHARED_WITH_ACCOUNT && sb.entity_id === accountInfo.uuid;
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
if (sharedBankInfo) {
|
|
360
|
+
accountSharedBanks.push({
|
|
361
|
+
id: sharedBankInfo.id,
|
|
362
|
+
entityType: sharedBankInfo.entity_type,
|
|
363
|
+
entityId: sharedBankInfo.entity_id,
|
|
364
|
+
title: accountInfo.name,
|
|
365
|
+
permission: sharedBankInfo.permission,
|
|
366
|
+
bankId: sharedBankInfo.bank_id
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
dispatch(handleShareBanksResponse(accountSharedBanks));
|
|
343
371
|
});
|
|
344
372
|
});
|
|
345
373
|
};
|
|
@@ -173,8 +173,10 @@ export var Banks = (_dec = withStyle(generateStyle, generateComponentTheme), _de
|
|
|
173
173
|
focusCreateBankButton: _this.focusCreateBankButton,
|
|
174
174
|
getCourseInfo: _this.props.getCourseInfo,
|
|
175
175
|
getUserInfo: _this.props.getUserInfo,
|
|
176
|
+
getSubaccountInfo: _this.props.getSubaccountInfo,
|
|
176
177
|
getShareableCourses: _this.props.getShareableCourses,
|
|
177
178
|
getShareableUsers: _this.props.getShareableUsers,
|
|
179
|
+
getShareableSubaccounts: _this.props.getShareableSubaccounts,
|
|
178
180
|
isCompact: _this.props.isCompact,
|
|
179
181
|
itemBankSearchTableEnabled: _this.props.itemBankSearchTableEnabled,
|
|
180
182
|
minChars: _this.props.minChars,
|
|
@@ -402,6 +404,7 @@ export var Banks = (_dec = withStyle(generateStyle, generateComponentTheme), _de
|
|
|
402
404
|
createBank: PropTypes.func.isRequired,
|
|
403
405
|
currentUser: PropTypes.shape({
|
|
404
406
|
bank_admin: PropTypes.bool,
|
|
407
|
+
can_share_banks_with_subaccounts: PropTypes.bool,
|
|
405
408
|
email: PropTypes.string,
|
|
406
409
|
enrollment_names: PropTypes.arrayOf(PropTypes.string),
|
|
407
410
|
full_name: PropTypes.string,
|
|
@@ -419,7 +422,11 @@ export var Banks = (_dec = withStyle(generateStyle, generateComponentTheme), _de
|
|
|
419
422
|
getShareableCourses: PropTypes.func,
|
|
420
423
|
// from consumer
|
|
421
424
|
getShareableUsers: PropTypes.func,
|
|
422
|
-
// from consumer
|
|
425
|
+
// from consumer
|
|
426
|
+
getShareableSubaccounts: PropTypes.func,
|
|
427
|
+
// from consumer
|
|
428
|
+
getSubaccountInfo: PropTypes.func,
|
|
429
|
+
// from consumer
|
|
423
430
|
getCourseAssignments: PropTypes.func,
|
|
424
431
|
// from consumer
|
|
425
432
|
isCompact: PropTypes.bool,
|
|
@@ -456,6 +463,8 @@ export var Banks = (_dec = withStyle(generateStyle, generateComponentTheme), _de
|
|
|
456
463
|
getShareableCourses: null,
|
|
457
464
|
getShareableUsers: null,
|
|
458
465
|
getCourseAssignments: null,
|
|
466
|
+
getShareableSubaccounts: null,
|
|
467
|
+
getSubaccountInfo: null,
|
|
459
468
|
minChars: void 0,
|
|
460
469
|
isCompact: false,
|
|
461
470
|
navigateToBuild: null,
|
|
@@ -399,6 +399,7 @@ export var BanksList = (_dec = withStyle(generateStyle, generateComponentTheme),
|
|
|
399
399
|
focusCreateBankButton: this.props.focusCreateBankButton,
|
|
400
400
|
getCourseInfo: this.props.getCourseInfo,
|
|
401
401
|
getUserInfo: this.props.getUserInfo,
|
|
402
|
+
getSubaccountInfo: this.props.getSubaccountInfo,
|
|
402
403
|
isOpen: this.state.sharingModalOpen,
|
|
403
404
|
minChars: this.props.minChars,
|
|
404
405
|
modalTrigger: this.sharingButtons[this.state.sharingModalBank.id],
|
|
@@ -406,6 +407,7 @@ export var BanksList = (_dec = withStyle(generateStyle, generateComponentTheme),
|
|
|
406
407
|
onShare: this.props.onShare,
|
|
407
408
|
getShareableCourses: this.props.getShareableCourses,
|
|
408
409
|
getShareableUsers: this.props.getShareableUsers,
|
|
410
|
+
getShareableSubaccounts: this.props.getShareableSubaccounts,
|
|
409
411
|
updateSharedCount: this.updateSharedCount
|
|
410
412
|
});
|
|
411
413
|
}
|
|
@@ -510,6 +512,7 @@ export var BanksList = (_dec = withStyle(generateStyle, generateComponentTheme),
|
|
|
510
512
|
createBankCloneJob: PropTypes.func.isRequired,
|
|
511
513
|
currentUser: PropTypes.shape({
|
|
512
514
|
bank_admin: PropTypes.bool,
|
|
515
|
+
can_share_banks_with_subaccounts: PropTypes.bool,
|
|
513
516
|
email: PropTypes.string,
|
|
514
517
|
enrollment_names: PropTypes.arrayOf(PropTypes.string),
|
|
515
518
|
full_name: PropTypes.string,
|
|
@@ -523,6 +526,7 @@ export var BanksList = (_dec = withStyle(generateStyle, generateComponentTheme),
|
|
|
523
526
|
getUserInfo: PropTypes.func,
|
|
524
527
|
getShareableCourses: PropTypes.func,
|
|
525
528
|
getShareableUsers: PropTypes.func,
|
|
529
|
+
getShareableSubaccounts: PropTypes.func,
|
|
526
530
|
minChars: PropTypes.number,
|
|
527
531
|
navigateToBank: PropTypes.func.isRequired,
|
|
528
532
|
onShare: PropTypes.func,
|
|
@@ -538,6 +542,7 @@ export var BanksList = (_dec = withStyle(generateStyle, generateComponentTheme),
|
|
|
538
542
|
getUserInfo: null,
|
|
539
543
|
getShareableCourses: null,
|
|
540
544
|
getShareableUsers: null,
|
|
545
|
+
getShareableSubaccounts: null,
|
|
541
546
|
minChars: void 0,
|
|
542
547
|
locale: null,
|
|
543
548
|
timezone: null,
|
|
@@ -22,7 +22,7 @@ import { ContextualIconButton } from "../ContextualIconButton/index.js";
|
|
|
22
22
|
import RootAccountSharing from "../RootAccountSharing.js";
|
|
23
23
|
import { SimpleSelect } from '@instructure/ui-simple-select';
|
|
24
24
|
import generateStyle from "./styles.js";
|
|
25
|
-
import { CAN_EDIT, READ_ONLY, REMOVED_ACCESS, SHARED_WITH_USER, SHARED_WITH_COURSE } from '@instructure/quiz-common';
|
|
25
|
+
import { CAN_EDIT, READ_ONLY, REMOVED_ACCESS, SHARED_WITH_USER, SHARED_WITH_COURSE, SHARED_WITH_ACCOUNT } from '@instructure/quiz-common';
|
|
26
26
|
import t from '@instructure/quiz-i18n/es/format-message';
|
|
27
27
|
|
|
28
28
|
var _ref4 = jsx(IconCoursesLine, {
|
|
@@ -148,11 +148,10 @@ export var ShareList = (_dec = withStyle(generateStyle, null), _dec(_class = (_t
|
|
|
148
148
|
}, {
|
|
149
149
|
key: "render",
|
|
150
150
|
value: function render() {
|
|
151
|
-
var _this$props$currentUs;
|
|
152
|
-
|
|
153
151
|
var _this$props = this.props,
|
|
154
152
|
shares = _this$props.shares,
|
|
155
|
-
subAccountBankSharingEnabled = _this$props.subAccountBankSharingEnabled
|
|
153
|
+
subAccountBankSharingEnabled = _this$props.subAccountBankSharingEnabled,
|
|
154
|
+
currentUser = _this$props.currentUser;
|
|
156
155
|
var newEntityIds = this.props.newEntities.map(function (e) {
|
|
157
156
|
return e.get('id');
|
|
158
157
|
});
|
|
@@ -165,6 +164,9 @@ export var ShareList = (_dec = withStyle(generateStyle, null), _dec(_class = (_t
|
|
|
165
164
|
var existingCourses = existingShares.filter(function (s) {
|
|
166
165
|
return s.get('entityType') === SHARED_WITH_COURSE;
|
|
167
166
|
});
|
|
167
|
+
var existingAccounts = existingShares.filter(function (s) {
|
|
168
|
+
return s.get('entityType') === SHARED_WITH_ACCOUNT;
|
|
169
|
+
});
|
|
168
170
|
return jsx("div", {
|
|
169
171
|
className: "fs-mask"
|
|
170
172
|
}, !subAccountBankSharingEnabled && jsx(Text, {
|
|
@@ -199,16 +201,24 @@ export var ShareList = (_dec = withStyle(generateStyle, null), _dec(_class = (_t
|
|
|
199
201
|
lineHeight: "double"
|
|
200
202
|
}, t('Currently shared with')), jsx(Grid, {
|
|
201
203
|
vAlign: "middle"
|
|
202
|
-
}, existingCourses.map(this.renderEntity))), subAccountBankSharingEnabled && jsx(Tabs.Panel, {
|
|
203
|
-
renderTitle: t('Accounts'
|
|
204
|
+
}, existingCourses.map(this.renderEntity))), subAccountBankSharingEnabled && ((currentUser === null || currentUser === void 0 ? void 0 : currentUser.bank_admin) || (currentUser === null || currentUser === void 0 ? void 0 : currentUser.can_share_banks_with_subaccounts)) && jsx(Tabs.Panel, {
|
|
205
|
+
renderTitle: t('Accounts ({ accountsCount })', {
|
|
206
|
+
accountsCount: existingAccounts.size
|
|
207
|
+
}),
|
|
204
208
|
isSelected: this.state.selectedTabIndex === 2,
|
|
205
209
|
padding: "large small small small"
|
|
206
|
-
}, (
|
|
210
|
+
}, (currentUser === null || currentUser === void 0 ? void 0 : currentUser.bank_admin) && jsx(RootAccountSharing, {
|
|
207
211
|
accountName: this.props.accountName,
|
|
208
212
|
onShareChange: this.props.onToggleAccountShare,
|
|
209
213
|
onShareTypeChange: this.props.onAccountPermissionChange,
|
|
210
214
|
accountPermission: this.props.accountPermission
|
|
211
|
-
})))
|
|
215
|
+
}), (currentUser === null || currentUser === void 0 ? void 0 : currentUser.can_share_banks_with_subaccounts) && this.props.renderSearchSection(SHARED_WITH_ACCOUNT), jsx(Text, {
|
|
216
|
+
as: "div",
|
|
217
|
+
weight: "bold",
|
|
218
|
+
lineHeight: "double"
|
|
219
|
+
}, t('Currently shared with')), jsx(Grid, {
|
|
220
|
+
vAlign: "middle"
|
|
221
|
+
}, existingAccounts.map(this.renderEntity))))));
|
|
212
222
|
}
|
|
213
223
|
}]);
|
|
214
224
|
|
|
@@ -217,7 +227,8 @@ export var ShareList = (_dec = withStyle(generateStyle, null), _dec(_class = (_t
|
|
|
217
227
|
}(Component), _class2.propTypes = {
|
|
218
228
|
canEdit: PropTypes.bool.isRequired,
|
|
219
229
|
currentUser: PropTypes.shape({
|
|
220
|
-
bank_admin: PropTypes.bool
|
|
230
|
+
bank_admin: PropTypes.bool,
|
|
231
|
+
can_share_banks_with_subaccounts: PropTypes.bool
|
|
221
232
|
}),
|
|
222
233
|
improvedBankSharingEnabled: PropTypes.bool.isRequired,
|
|
223
234
|
newEntities: ImmutablePropTypes.list,
|
|
@@ -12,7 +12,7 @@ import t from '@instructure/quiz-i18n/es/format-message';
|
|
|
12
12
|
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
|
-
import { SHARED_WITH_USER, SHARED_WITH_COURSE, SELECT_EMPTY_OPTION } from '@instructure/quiz-common';
|
|
15
|
+
import { SHARED_WITH_USER, SHARED_WITH_COURSE, SHARED_WITH_ACCOUNT, SELECT_EMPTY_OPTION } from '@instructure/quiz-common';
|
|
16
16
|
export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
17
17
|
_inherits(AsyncSearch, _Component);
|
|
18
18
|
|
|
@@ -34,6 +34,7 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
34
34
|
isShowingOptions: false,
|
|
35
35
|
isLoading: false,
|
|
36
36
|
highlightedOptionId: null,
|
|
37
|
+
shareableSubaccounts: [],
|
|
37
38
|
shareableCourses: [],
|
|
38
39
|
shareableUsers: []
|
|
39
40
|
};
|
|
@@ -45,7 +46,7 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
_this.handleHideOptions = function () {
|
|
48
|
-
var allOptions = [].concat(_toConsumableArray(_this.filterOptions(_this.state.shareableCourses)), _toConsumableArray(_this.filterOptions(_this.state.shareableUsers))); // an option matching user input exists
|
|
49
|
+
var allOptions = [].concat(_toConsumableArray(_this.filterOptions(_this.state.shareableSubaccounts)), _toConsumableArray(_this.filterOptions(_this.state.shareableCourses)), _toConsumableArray(_this.filterOptions(_this.state.shareableUsers))); // an option matching user input exists
|
|
49
50
|
|
|
50
51
|
if (allOptions.length === 1) {
|
|
51
52
|
var onlyOption = allOptions[0]; // automatically select the matching option
|
|
@@ -166,7 +167,8 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
166
167
|
|
|
167
168
|
_this.search = debounce(_this.props.debounceDelay, function (value) {
|
|
168
169
|
var shouldSearchPeople = !_this.props.searchType || _this.props.searchType === SHARED_WITH_USER;
|
|
169
|
-
var shouldSearchCourses = !_this.props.searchType || _this.props.searchType === SHARED_WITH_COURSE;
|
|
170
|
+
var shouldSearchCourses = !_this.props.searchType || _this.props.searchType === SHARED_WITH_COURSE;
|
|
171
|
+
var shouldSearchSubaccounts = _this.props.searchType === SHARED_WITH_ACCOUNT; // TODO add the promise cancellation for avoiding having disordered requests
|
|
170
172
|
|
|
171
173
|
if (shouldSearchPeople) {
|
|
172
174
|
_this.props.getShareableUsers(value).then(function (shareableUsers) {
|
|
@@ -191,6 +193,18 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
191
193
|
});
|
|
192
194
|
});
|
|
193
195
|
}
|
|
196
|
+
|
|
197
|
+
if (shouldSearchSubaccounts) {
|
|
198
|
+
_this.props.getShareableSubaccounts(value).then(function (shareableSubaccounts) {
|
|
199
|
+
var filteredAccounts = _this.filterOptions(shareableSubaccounts);
|
|
200
|
+
|
|
201
|
+
_this.setState({
|
|
202
|
+
shareableSubaccounts: shareableSubaccounts,
|
|
203
|
+
highlightedOptionId: filteredAccounts.length ? filteredAccounts[0].uuid : _this.state.highlightedOptionId,
|
|
204
|
+
isLoading: false
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
194
208
|
});
|
|
195
209
|
return _this;
|
|
196
210
|
}
|
|
@@ -218,6 +232,16 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
218
232
|
});
|
|
219
233
|
}
|
|
220
234
|
|
|
235
|
+
var account = find({
|
|
236
|
+
uuid: id
|
|
237
|
+
}, this.state.shareableSubaccounts);
|
|
238
|
+
|
|
239
|
+
if (account) {
|
|
240
|
+
return _objectSpread(_objectSpread({}, account), {}, {
|
|
241
|
+
entityType: SHARED_WITH_ACCOUNT
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
221
245
|
return find({
|
|
222
246
|
uuid: id
|
|
223
247
|
}, this.props.selectedOption);
|
|
@@ -232,7 +256,7 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
232
256
|
key: option.uuid,
|
|
233
257
|
id: option.uuid,
|
|
234
258
|
index: index,
|
|
235
|
-
text: option.fullName || option.title,
|
|
259
|
+
text: option.fullName || option.title || option.name,
|
|
236
260
|
onClick: _this2.dismissTag
|
|
237
261
|
});
|
|
238
262
|
});
|
|
@@ -284,6 +308,24 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
284
308
|
}, course.title);
|
|
285
309
|
}));
|
|
286
310
|
}
|
|
311
|
+
}, {
|
|
312
|
+
key: "renderSubaccountsOptions",
|
|
313
|
+
value: function renderSubaccountsOptions(subaccounts) {
|
|
314
|
+
var _this6 = this;
|
|
315
|
+
|
|
316
|
+
return /*#__PURE__*/React.createElement(Select.Group, {
|
|
317
|
+
key: SHARED_WITH_ACCOUNT,
|
|
318
|
+
renderLabel: t('Accounts')
|
|
319
|
+
}, subaccounts.map(function (subaccount) {
|
|
320
|
+
return /*#__PURE__*/React.createElement(Select.Option, {
|
|
321
|
+
// eslint-disable-next-line react/jsx-no-literals
|
|
322
|
+
"data-automation": "sdk-item-bank-option-subaccount-".concat(subaccount.uuid),
|
|
323
|
+
id: subaccount.uuid,
|
|
324
|
+
key: subaccount.uuid,
|
|
325
|
+
isHighlighted: subaccount.uuid === _this6.state.highlightedOptionId
|
|
326
|
+
}, subaccount.name);
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
287
329
|
}, {
|
|
288
330
|
key: "emptyOption",
|
|
289
331
|
value: function emptyOption() {
|
|
@@ -313,6 +355,12 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
313
355
|
groups.push(this.renderCoursesOptions(courses));
|
|
314
356
|
}
|
|
315
357
|
|
|
358
|
+
var subaccounts = this.filterOptions(this.state.shareableSubaccounts);
|
|
359
|
+
|
|
360
|
+
if (subaccounts.length) {
|
|
361
|
+
groups.push(this.renderSubaccountsOptions(subaccounts));
|
|
362
|
+
}
|
|
363
|
+
|
|
316
364
|
return groups.length ? groups : /*#__PURE__*/React.createElement(Select.Option, {
|
|
317
365
|
id: SELECT_EMPTY_OPTION,
|
|
318
366
|
key: SELECT_EMPTY_OPTION
|
|
@@ -321,17 +369,27 @@ export var AsyncSearch = /*#__PURE__*/function (_Component) {
|
|
|
321
369
|
size: "x-small"
|
|
322
370
|
}) : this.emptyOption());
|
|
323
371
|
}
|
|
372
|
+
}, {
|
|
373
|
+
key: "placeholder",
|
|
374
|
+
value: function placeholder() {
|
|
375
|
+
if (this.props.searchType === SHARED_WITH_ACCOUNT) {
|
|
376
|
+
return t('Enter subaccount name');
|
|
377
|
+
} else if (this.props.searchType === SHARED_WITH_COURSE) {
|
|
378
|
+
return t('Enter course name or course id');
|
|
379
|
+
} else {
|
|
380
|
+
return t('Enter name or login id');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
324
383
|
}, {
|
|
325
384
|
key: "render",
|
|
326
385
|
value: function render() {
|
|
327
386
|
var _this$state = this.state,
|
|
328
387
|
inputValue = _this$state.inputValue,
|
|
329
388
|
isShowingOptions = _this$state.isShowingOptions;
|
|
330
|
-
var placeholder = this.props.searchType === SHARED_WITH_COURSE ? t('Enter course name or course id') : t('Enter name or login id');
|
|
331
389
|
return /*#__PURE__*/React.createElement(Select, {
|
|
332
390
|
"data-automation": "sdk-item-bank-share-input",
|
|
333
391
|
renderLabel: t('Share With'),
|
|
334
|
-
placeholder: placeholder,
|
|
392
|
+
placeholder: this.placeholder(),
|
|
335
393
|
inputValue: inputValue,
|
|
336
394
|
isShowingOptions: isShowingOptions,
|
|
337
395
|
inputRef: this.setInputRef,
|
|
@@ -357,6 +415,7 @@ AsyncSearch.propTypes = {
|
|
|
357
415
|
onSelectionChange: PropTypes.func.isRequired,
|
|
358
416
|
getShareableCourses: PropTypes.func.isRequired,
|
|
359
417
|
getShareableUsers: PropTypes.func.isRequired,
|
|
418
|
+
getShareableSubaccounts: PropTypes.func.isRequired,
|
|
360
419
|
searchType: PropTypes.string,
|
|
361
420
|
selectedOption: PropTypes.arrayOf(PropTypes.shape({
|
|
362
421
|
avatar: PropTypes.string,
|
|
@@ -81,7 +81,7 @@ export var SharingModalPresenter = (_dec = withStyle(generateStyle, generateComp
|
|
|
81
81
|
var size = _this.props.sharedBanks.size;
|
|
82
82
|
|
|
83
83
|
if (size >= 0 && size !== _this.props.bank.sharedCount || size === 0) {
|
|
84
|
-
_this.props.getSharedBanks(_this.props.bank, _this.props.getUserInfo, _this.props.getCourseInfo);
|
|
84
|
+
_this.props.getSharedBanks(_this.props.bank, _this.props.getUserInfo, _this.props.getCourseInfo, _this.props.getSubaccountInfo);
|
|
85
85
|
} else {
|
|
86
86
|
// eslint-disable-next-line react/no-did-mount-set-state
|
|
87
87
|
_this.setState({
|
|
@@ -253,7 +253,7 @@ export var SharingModalPresenter = (_dec = withStyle(generateStyle, generateComp
|
|
|
253
253
|
id: entity.uuid,
|
|
254
254
|
entityType: entity.entityType,
|
|
255
255
|
entityId: entity.uuid,
|
|
256
|
-
title: entity.fullName || entity.title,
|
|
256
|
+
title: entity.fullName || entity.title || entity.name,
|
|
257
257
|
avatar: entity.avatar,
|
|
258
258
|
email: entity.email,
|
|
259
259
|
permission: _this.state.searchPermission
|
|
@@ -377,6 +377,7 @@ export var SharingModalPresenter = (_dec = withStyle(generateStyle, generateComp
|
|
|
377
377
|
}, jsx(Grid.Row, null, jsx(Grid.Col, null, jsx(AsyncSearch, {
|
|
378
378
|
getShareableCourses: _this.props.getShareableCourses,
|
|
379
379
|
getShareableUsers: _this.props.getShareableUsers,
|
|
380
|
+
getShareableSubaccounts: _this.props.getShareableSubaccounts,
|
|
380
381
|
improvedBankSharingEnabled: _this.props.improvedBankSharingEnabled,
|
|
381
382
|
minChars: _this.props.minChars,
|
|
382
383
|
onSelectionChange: _this.handleSearchSelectionChange,
|
|
@@ -565,6 +566,7 @@ export var SharingModalPresenter = (_dec = withStyle(generateStyle, generateComp
|
|
|
565
566
|
bank: ImmutablePropTypes.record.isRequired,
|
|
566
567
|
currentUser: PropTypes.shape({
|
|
567
568
|
bank_admin: PropTypes.bool,
|
|
569
|
+
can_share_banks_with_subaccounts: PropTypes.bool,
|
|
568
570
|
email: PropTypes.string,
|
|
569
571
|
enrollment_names: PropTypes.arrayOf(PropTypes.string),
|
|
570
572
|
full_name: PropTypes.string,
|
|
@@ -578,6 +580,8 @@ export var SharingModalPresenter = (_dec = withStyle(generateStyle, generateComp
|
|
|
578
580
|
getShareableUsers: PropTypes.func.isRequired,
|
|
579
581
|
getSharedBanks: PropTypes.func.isRequired,
|
|
580
582
|
getUserInfo: PropTypes.func.isRequired,
|
|
583
|
+
getShareableSubaccounts: PropTypes.func.isRequired,
|
|
584
|
+
getSubaccountInfo: PropTypes.func.isRequired,
|
|
581
585
|
improvedBankSharingEnabled: PropTypes.bool,
|
|
582
586
|
isOpen: PropTypes.bool,
|
|
583
587
|
minChars: PropTypes.number,
|
|
@@ -108,8 +108,10 @@ export var BanksTray = /*#__PURE__*/function (_Component) {
|
|
|
108
108
|
getCourseInfo: this.props.getCourseInfo,
|
|
109
109
|
getCourseAssignments: this.props.getCourseAssignments,
|
|
110
110
|
getUserInfo: this.props.getUserInfo,
|
|
111
|
+
getSubaccountInfo: this.props.getSubaccountInfo,
|
|
111
112
|
getShareableCourses: this.props.getShareableCourses,
|
|
112
113
|
getShareableUsers: this.props.getShareableUsers,
|
|
114
|
+
getShareableSubaccounts: this.props.getShareableSubaccounts,
|
|
113
115
|
minChars: this.props.minChars,
|
|
114
116
|
onShare: this.props.onShare,
|
|
115
117
|
scope: this.props.itemBanksScope
|
|
@@ -171,6 +173,7 @@ BanksTray.propTypes = {
|
|
|
171
173
|
clear: PropTypes.func.isRequired,
|
|
172
174
|
currentUser: PropTypes.shape({
|
|
173
175
|
bank_admin: PropTypes.bool,
|
|
176
|
+
can_share_banks_with_subaccounts: PropTypes.bool,
|
|
174
177
|
email: PropTypes.string,
|
|
175
178
|
enrollment_names: PropTypes.arrayOf(PropTypes.string),
|
|
176
179
|
full_name: PropTypes.string,
|
|
@@ -182,6 +185,8 @@ BanksTray.propTypes = {
|
|
|
182
185
|
getUserInfo: PropTypes.func,
|
|
183
186
|
getShareableCourses: PropTypes.func,
|
|
184
187
|
getShareableUsers: PropTypes.func,
|
|
188
|
+
getShareableSubaccounts: PropTypes.func,
|
|
189
|
+
getSubaccountInfo: PropTypes.func,
|
|
185
190
|
minChars: PropTypes.number,
|
|
186
191
|
newActiveBank: PropTypes.func.isRequired,
|
|
187
192
|
newActiveBankEntry: PropTypes.func.isRequired,
|
|
@@ -204,6 +209,8 @@ BanksTray.defaultProps = {
|
|
|
204
209
|
currentUser: null,
|
|
205
210
|
getShareableCourses: null,
|
|
206
211
|
getShareableUsers: null,
|
|
212
|
+
getShareableSubaccounts: null,
|
|
213
|
+
getSubaccountInfo: null,
|
|
207
214
|
minChars: void 0,
|
|
208
215
|
getCourseInfo: null,
|
|
209
216
|
getCourseAssignments: null,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ChoiceTypeWithInfo as default } from "./presenter.js";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
3
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
4
|
+
import React, { Component } from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import { choiceTypeObject } from "../../../propTypes.js";
|
|
7
|
+
import { Flex } from '@instructure/ui-flex';
|
|
8
|
+
import ChoiceTypeTable from "../../shared/ChoiceTypeTable/index.js";
|
|
9
|
+
import { Text } from '@instructure/ui-text';
|
|
10
|
+
import t from '@instructure/quiz-i18n/es/format-message';
|
|
11
|
+
export var ChoiceTypeWithInfo = /*#__PURE__*/function (_Component) {
|
|
12
|
+
_inherits(ChoiceTypeWithInfo, _Component);
|
|
13
|
+
|
|
14
|
+
var _super = _createSuper(ChoiceTypeWithInfo);
|
|
15
|
+
|
|
16
|
+
function ChoiceTypeWithInfo() {
|
|
17
|
+
var _this;
|
|
18
|
+
|
|
19
|
+
_classCallCheck(this, ChoiceTypeWithInfo);
|
|
20
|
+
|
|
21
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
22
|
+
args[_key] = arguments[_key];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
26
|
+
|
|
27
|
+
_this.renderTable = function () {
|
|
28
|
+
var _this$props = _this.props,
|
|
29
|
+
itemId = _this$props.itemId,
|
|
30
|
+
choices = _this$props.choices,
|
|
31
|
+
index = _this$props.index;
|
|
32
|
+
var tableId = "".concat(itemId, "_").concat(index, "_choiceGroup");
|
|
33
|
+
var tableContainerSizeClass = '';
|
|
34
|
+
return /*#__PURE__*/React.createElement(ChoiceTypeTable, {
|
|
35
|
+
itemId: tableId,
|
|
36
|
+
choices: choices,
|
|
37
|
+
tableContainerSizeClass: tableContainerSizeClass
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
_this.renderEmptyRequirement = function () {
|
|
42
|
+
return /*#__PURE__*/React.createElement(Flex, null, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
43
|
+
padding: "medium none none none"
|
|
44
|
+
}, /*#__PURE__*/React.createElement(Text, null, t('There are no entries for this requirement.'))));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
_this.render = function () {
|
|
48
|
+
var _this$props2 = _this.props,
|
|
49
|
+
headLine = _this$props2.headLine,
|
|
50
|
+
choices = _this$props2.choices;
|
|
51
|
+
var areThereChoices = Array.isArray(choices) && choices.length > 0;
|
|
52
|
+
return /*#__PURE__*/React.createElement(Flex, {
|
|
53
|
+
direction: "column",
|
|
54
|
+
justifyItems: "start"
|
|
55
|
+
}, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
56
|
+
overflowY: "visible",
|
|
57
|
+
shouldGrow: true,
|
|
58
|
+
shouldShrink: true
|
|
59
|
+
}, /*#__PURE__*/React.createElement(Flex, {
|
|
60
|
+
direction: "column",
|
|
61
|
+
justifyItems: "start"
|
|
62
|
+
}, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
63
|
+
shouldShrink: true,
|
|
64
|
+
padding: "none none none none",
|
|
65
|
+
overflowY: "hidden"
|
|
66
|
+
}, /*#__PURE__*/React.createElement(Flex, {
|
|
67
|
+
direction: "row",
|
|
68
|
+
alignItems: "start"
|
|
69
|
+
}, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
70
|
+
shouldShrink: true,
|
|
71
|
+
shouldGrow: true,
|
|
72
|
+
margin: "none none none none"
|
|
73
|
+
}, headLine))), /*#__PURE__*/React.createElement(Flex.Item, {
|
|
74
|
+
shouldShrink: true,
|
|
75
|
+
padding: "none none medium none"
|
|
76
|
+
}, areThereChoices ? _this.renderTable() : _this.renderEmptyRequirement()))));
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return _this;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return ChoiceTypeWithInfo;
|
|
83
|
+
}(Component);
|
|
84
|
+
ChoiceTypeWithInfo.propTypes = {
|
|
85
|
+
itemId: PropTypes.number.isRequired,
|
|
86
|
+
index: PropTypes.number.isRequired,
|
|
87
|
+
choices: choiceTypeObject.isRequired,
|
|
88
|
+
headLine: PropTypes.node,
|
|
89
|
+
styles: PropTypes.object
|
|
90
|
+
}.isRequired;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { NumericType as default } from "./presenter.js";
|