diff --git a/kolibri/plugins/coach/assets/src/composables/useFetchContentNode.js b/kolibri/plugins/coach/assets/src/composables/useFetchContentNode.js new file mode 100644 index 00000000000..5da15d364b9 --- /dev/null +++ b/kolibri/plugins/coach/assets/src/composables/useFetchContentNode.js @@ -0,0 +1,41 @@ +import { ref, getCurrentInstance } from 'vue'; +import ContentNodeResource from 'kolibri-common/apiResources/ContentNodeResource'; + +export default function useFetchContentNode(contentId) { + const contentNode = ref({}); + const ancestors = ref([]); + const questions = ref([]); + const loading = ref(true); + const store = getCurrentInstance().proxy.$store; + + const fetchContentNode = async () => { + ContentNodeResource.fetchModel({ + id: contentId, + getParams: { no_available_filtering: true }, + }) + .then(node => { + loading.value = false; + contentNode.value = node; + + if (node.ancestors.length) { + ancestors.value = node.ancestors; + } + + if (node.assessmentmetadata) { + questions.value = node.assessmentmetadata.assessment_item_ids; + } + }) + .catch(error => { + store.dispatch('handleApiError', { error }); + }); + }; + + fetchContentNode(); + + return { + loading, + ancestors, + contentNode, + questions, + }; +} diff --git a/kolibri/plugins/coach/assets/src/routes/lessonsRoutes.js b/kolibri/plugins/coach/assets/src/routes/lessonsRoutes.js index 4f81298cf42..82a87013979 100644 --- a/kolibri/plugins/coach/assets/src/routes/lessonsRoutes.js +++ b/kolibri/plugins/coach/assets/src/routes/lessonsRoutes.js @@ -37,7 +37,7 @@ import { import LessonLearnerExercisePage from '../views/lessons/reports/LessonLearnerExercisePage.vue'; import QuestionLearnersPage from '../views/common/reports/QuestionLearnersPage.vue'; import EditLessonDetails from '../views/lessons/LessonSummaryPage/sidePanels/EditLessonDetails'; -import PreviewSelectedResources from '../views/lessons/LessonSummaryPage/sidePanels/PreviewSelectedResources'; +import PreviewSelectedResources from '../views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/PreviewSelectedResources'; import LessonResourceSelection from '../views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/index.vue'; import SearchFilters from '../views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/SearchFilters.vue'; import SelectionIndex from '../views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/SelectionIndex.vue'; @@ -172,6 +172,17 @@ export default [ path: 'preview-resources', component: ManageSelectedResources, }, + { + name: PageNames.LESSON_PREVIEW_RESOURCE, + path: 'preview', + component: PreviewSelectedResources, + props: toRoute => { + const contentId = toRoute.query.contentId; + return { + contentId, + }; + }, + }, ], }, { diff --git a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/UpdatedResourceSelection.vue b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/UpdatedResourceSelection.vue index 08c64593ac1..e22f7e01109 100644 --- a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/UpdatedResourceSelection.vue +++ b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/UpdatedResourceSelection.vue @@ -37,7 +37,7 @@ import { ContentNodeKinds } from 'kolibri/constants'; import ContentCardList from '../../lessons/LessonResourceSelectionPage/ContentCardList.vue'; import ResourceSelectionBreadcrumbs from '../../lessons/LessonResourceSelectionPage/SearchTools/ResourceSelectionBreadcrumbs.vue'; - import { ViewMoreButtonStates } from '../../../constants'; + import { ViewMoreButtonStates, PageNames } from '../../../constants'; export default { name: 'UpdatedResourceSelection', @@ -148,12 +148,18 @@ }, methods: { contentLink(content) { - const { name, params, query } = this.$route; + const { params, query } = this.$route; if (!content.is_leaf) { return this.topicsLink(content.id); } - // Just return the current route; router-link will handle the no-op from here - return { name, params, query }; + return { + name: PageNames.LESSON_PREVIEW_RESOURCE, + params: params, + query: { + ...query, + contentId: content.id, + }, + }; }, topicsLink(topicId) { const route = this.getTopicLink?.(topicId); diff --git a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/index.vue b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/index.vue index 8ff6e6c79ef..42d9e925a43 100644 --- a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/index.vue +++ b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/index.vue @@ -21,7 +21,6 @@
- + +
+
+

+ {{ coreString('selectFromChannels') }} +

+ +
+ + + + +
+
+ + + +

+ + + + +

+ + + + + +

+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + diff --git a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/PreviewSelectedResources/index.vue b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/PreviewSelectedResources/index.vue new file mode 100644 index 00000000000..8bee699ab97 --- /dev/null +++ b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/LessonResourceSelection/subPages/PreviewSelectedResources/index.vue @@ -0,0 +1,106 @@ + + + + diff --git a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/PreviewSelectedResources.vue b/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/PreviewSelectedResources.vue deleted file mode 100644 index ab66b490d4c..00000000000 --- a/kolibri/plugins/coach/assets/src/views/lessons/LessonSummaryPage/sidePanels/PreviewSelectedResources.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - - diff --git a/packages/kolibri-common/strings/searchAndFilterStrings.js b/packages/kolibri-common/strings/searchAndFilterStrings.js index 6a3e3c89e1d..e60564dc36d 100644 --- a/packages/kolibri-common/strings/searchAndFilterStrings.js +++ b/packages/kolibri-common/strings/searchAndFilterStrings.js @@ -85,4 +85,32 @@ export const searchAndFilterStrings = createTranslator('SearchAndFilterStrings', message: 'Choose a category', context: 'Label for a selector component to choose a category', }, + addText: { + message: 'Add', + context: 'Button for adding a resource', + }, + + copyrightHolderDataHeader: { + message: 'Copyright holder', + context: + 'Refers to the person or organization who holds the copyright or legal ownership for that resource.', + }, + licenseDataHeader: { + message: 'License', + context: + "Refers to the type of license the learning resource has. For example, 'CC BY-NC' meaning 'Creative Commons: attribution, non-commercial'.", + }, + addedIndicator: { + message: 'Added', + context: 'Notification that can refer to when resources are added to a lesson, for example.', + }, + notAvailableLabel: { + message: 'Not available', + context: 'Message that shows when the value of key is null', + }, + minutes: { + message: '{value, number, integer} {value, plural, one {minute} other {minutes}}', + context: + 'Indicates time spent by learner on a specific activity. Only translate minute/minutes.', + }, });