- + + + + {{ $tr('emptyTopicText') }}
@@ -291,6 +297,7 @@ }, data() { return { + isLoadingchild: false, isLoading: true, displaySummaryDetailsDialog: false, displayDeployDialog: false, @@ -387,8 +394,14 @@ watch: { nodeId(newNodeId) { this.elevated = false; - this.loadAncestors({ id: newNodeId }); - this.loadChildren({ parent: newNodeId, root_id: this.stagingId }); + this.isLoadingchild = true; + + Promise.all([ + this.loadAncestors({ id: newNodeId }), + this.loadChildren({ parent: newNodeId, root_id: this.stagingId }), + ]).then(() => { + this.isLoadingchild = false; + }); }, detailNodeId(newDetailNodeId) { if (!newDetailNodeId) { diff --git a/contentcuration/contentcuration/frontend/channelEdit/translator.js b/contentcuration/contentcuration/frontend/channelEdit/translator.js index d58efa3f33..9479fbbcec 100644 --- a/contentcuration/contentcuration/frontend/channelEdit/translator.js +++ b/contentcuration/contentcuration/frontend/channelEdit/translator.js @@ -14,6 +14,8 @@ const MESSAGES = { errorMissingAnswer: 'Choose a correct answer', errorChooseAtLeastOneCorrectAnswer: 'Choose at least one correct answer', errorProvideAtLeastOneCorrectAnswer: 'Provide at least one correct answer', + selectionCount: + '{topicCount, plural, =0 {} one {# folder, } other {# folders, }}{resourceCount, plural, one {# resource} other {# resources}}', }; export default createTranslator(NAMESPACE, MESSAGES); diff --git a/contentcuration/contentcuration/frontend/channelEdit/utils.js b/contentcuration/contentcuration/frontend/channelEdit/utils.js index 5e7b868ca9..0e28ea4075 100644 --- a/contentcuration/contentcuration/frontend/channelEdit/utils.js +++ b/contentcuration/contentcuration/frontend/channelEdit/utils.js @@ -4,77 +4,14 @@ import { ContentKindsNames } from 'shared/leUtils/ContentKinds'; import { MasteryModelsNames } from 'shared/leUtils/MasteryModels'; import { metadataStrings, constantStrings } from 'shared/mixins'; import { + ContentModalities, AssessmentItemTypes, CompletionCriteriaModels, - ContentModalities, SHORT_LONG_ACTIVITY_MIDPOINT, - CompletionDropdownMap, + defaultCompletionCriteriaModels, + defaultCompletionCriteriaThresholds, } from 'shared/constants'; -// The constant mapping below is used to set -// default completion criteria and durations -// both as initial values in the edit modal, and -// to ensure backwards compatibility for contentnodes -// that were added before this was in place -export const defaultCompletionCriteriaModels = { - [ContentKindsNames.VIDEO]: CompletionCriteriaModels.TIME, - [ContentKindsNames.AUDIO]: CompletionCriteriaModels.TIME, - [ContentKindsNames.DOCUMENT]: CompletionCriteriaModels.PAGES, - [ContentKindsNames.H5P]: CompletionCriteriaModels.DETERMINED_BY_RESOURCE, - [ContentKindsNames.HTML5]: CompletionCriteriaModels.APPROX_TIME, - [ContentKindsNames.ZIM]: CompletionCriteriaModels.APPROX_TIME, - [ContentKindsNames.EXERCISE]: CompletionCriteriaModels.MASTERY, -}; - -export const defaultCompletionCriteriaThresholds = { - // Audio and Video threshold defaults are dynamic based - // on the duration of the file itself. - [ContentKindsNames.DOCUMENT]: '100%', - [ContentKindsNames.HTML5]: 300, - // We cannot set an automatic default threshold for exercises. -}; - -export const completionCriteriaToDropdownMap = { - [CompletionCriteriaModels.TIME]: CompletionDropdownMap.completeDuration, - [CompletionCriteriaModels.APPROX_TIME]: CompletionDropdownMap.completeDuration, - [CompletionCriteriaModels.PAGES]: CompletionDropdownMap.allContent, - [CompletionCriteriaModels.DETERMINED_BY_RESOURCE]: CompletionDropdownMap.determinedByResource, - [CompletionCriteriaModels.MASTERY]: CompletionDropdownMap.goal, - [CompletionCriteriaModels.REFERENCE]: CompletionDropdownMap.reference, -}; - -export const CompletionOptionsDropdownMap = { - [ContentKindsNames.DOCUMENT]: [ - CompletionDropdownMap.allContent, - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.reference, - ], - [ContentKindsNames.EXERCISE]: [CompletionDropdownMap.goal, CompletionDropdownMap.practiceQuiz], - [ContentKindsNames.HTML5]: [ - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.determinedByResource, - CompletionDropdownMap.reference, - ], - [ContentKindsNames.ZIM]: [ - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.determinedByResource, - CompletionDropdownMap.reference, - ], - [ContentKindsNames.H5P]: [ - CompletionDropdownMap.determinedByResource, - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.reference, - ], - [ContentKindsNames.VIDEO]: [ - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.reference, - ], - [ContentKindsNames.AUDIO]: [ - CompletionDropdownMap.completeDuration, - CompletionDropdownMap.reference, - ], -}; - /** * Get correct answer index/indices out of an array of answer objects. * @param {String} questionType single/multiple selection, true/false, input question @@ -203,6 +140,10 @@ export function isImportedContent(node) { ); } +export function isDisableSourceEdits(node) { + return node.freeze_authoring_data || isImportedContent(node); +} + export function importedChannelLink(node, router) { if (node && isImportedContent(node)) { const channelURI = window.Urls.channel(node.original_channel_id); diff --git a/contentcuration/contentcuration/frontend/channelEdit/views/CurrentTopicView.vue b/contentcuration/contentcuration/frontend/channelEdit/views/CurrentTopicView.vue index 6ec4ffee47..a994e1c9aa 100644 --- a/contentcuration/contentcuration/frontend/channelEdit/views/CurrentTopicView.vue +++ b/contentcuration/contentcuration/frontend/channelEdit/views/CurrentTopicView.vue @@ -11,7 +11,7 @@ {{ getTitle(item) }} - + - + @@ -27,6 +27,30 @@ + + + + + + + + {{ $tr(mode) }} + + + @@ -36,47 +60,46 @@ v-if="node && node.total_count" v-model="selectAll" :indeterminate="selected.length > 0 && !selectAll" - :label="selected.length ? '' : $tr('selectAllLabel')" + :label="selected.length ? selectionText : $tr('selectAllLabel')" + style="font-size: 16px;" />
- -
- - - - - -
-
+
+ + + + + +
- - - - -
- {{ selectionText }} -
-
- + - - - - - - - check - - - {{ $tr(mode) }} - - - - @@ -175,6 +164,7 @@ @select="selected = [...selected, $event]" @deselect="selected = selected.filter(id => id !== $event)" @scroll="scroll" + @editTitleDescription="showTitleDescriptionModal" /> @@ -195,7 +185,7 @@ :text="$tr('editButton')" @click="editNodes([detailNodeId])" /> - + - + - - - diff --git a/contentcuration/contentcuration/frontend/channelEdit/views/ImportFromChannels/ImportFromChannelsModal.vue b/contentcuration/contentcuration/frontend/channelEdit/views/ImportFromChannels/ImportFromChannelsModal.vue index 8e2f735484..e085b6fe7d 100644 --- a/contentcuration/contentcuration/frontend/channelEdit/views/ImportFromChannels/ImportFromChannelsModal.vue +++ b/contentcuration/contentcuration/frontend/channelEdit/views/ImportFromChannels/ImportFromChannelsModal.vue @@ -3,9 +3,7 @@ @@ -33,9 +31,9 @@ - -