diff --git a/AdminUI/LearningHub.Nhs.AdminUI/Views/Catalogue/Edit.cshtml b/AdminUI/LearningHub.Nhs.AdminUI/Views/Catalogue/Edit.cshtml index 15013bb91..dddfe43ea 100644 --- a/AdminUI/LearningHub.Nhs.AdminUI/Views/Catalogue/Edit.cshtml +++ b/AdminUI/LearningHub.Nhs.AdminUI/Views/Catalogue/Edit.cshtml @@ -138,6 +138,7 @@
+ Only the first 3,000 characters of the description will be used by search
diff --git a/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs b/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs index 279bda210..63c251451 100644 --- a/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs @@ -7,8 +7,10 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; + using LearningHub.Nhs.Models.Entities.Resource; using LearningHub.Nhs.Models.Enums; using LearningHub.Nhs.Models.Resource; + using LearningHub.Nhs.Models.Resource.Blocks; using LearningHub.Nhs.Models.Resource.Contribute; using LearningHub.Nhs.Models.Resource.Files; using LearningHub.Nhs.WebUI.Interfaces; @@ -228,7 +230,7 @@ public async Task DeleteResourceVersion(int resourceVersionId) var validationResult = await this.contributeService.DeleteResourceVersionAsync(resourceVersionId); if (validationResult.IsValid) { - if (associatedFile.Any()) + if (associatedFile != null && associatedFile.Any()) { _ = Task.Run(async () => { await this.fileService.PurgeResourceFile(null, associatedFile); }); } @@ -348,7 +350,7 @@ public async Task PublishResourceVersionAsync([FromBody] PublishVi if (associatedResource.ResourceTypeEnum != ResourceTypeEnum.Scorm && associatedResource.ResourceTypeEnum != ResourceTypeEnum.Html) { var obsoleteFiles = await this.resourceService.GetObsoleteResourceFile(publishViewModel.ResourceVersionId); - if (obsoleteFiles.Any()) + if (obsoleteFiles != null && obsoleteFiles.Any()) { await this.fileService.PurgeResourceFile(null, obsoleteFiles); } @@ -490,7 +492,13 @@ public async Task SaveWeblinkDetailAsync([FromBody] WebLinkViewMod [Route("SaveCaseDetail")] public async Task SaveCaseDetailAsync([FromBody] CaseViewModel request) { + var existingResourceState = await this.resourceService.GetResourceVersionExtendedAsync(request.ResourceVersionId); int resourceVersionId = await this.contributeService.SaveCaseDetailAsync(request); + if (existingResourceState.CaseDetails?.BlockCollection != null) + { + this.RemoveBlockCollectionFiles(existingResourceState.CaseDetails.BlockCollection, request.BlockCollection); + } + return this.Ok(resourceVersionId); } @@ -503,7 +511,13 @@ public async Task SaveCaseDetailAsync([FromBody] CaseViewModel req [Route("SaveAssessmentDetail")] public async Task SaveAssessmentDetailAsync([FromBody] AssessmentViewModel request) { + var existingResourceState = await this.resourceService.GetResourceVersionExtendedAsync(request.ResourceVersionId); int resourceVersionId = await this.contributeService.SaveAssessmentDetailAsync(request); + if (existingResourceState != null && existingResourceState.AssessmentDetails != null) + { + this.RemoveBlockCollectionFiles(existingResourceState.AssessmentDetails, request); + } + return this.Ok(resourceVersionId); } @@ -623,5 +637,258 @@ private async Task UserCanEditCatalogue(int catalogueId) { return await this.catalogueService.CanCurrentUserEditCatalogue(catalogueId); } + + private void RemoveBlockCollectionFiles(AssessmentViewModel existingModel, AssessmentViewModel newModel) + { + if (existingModel is { EndGuidance: { } } && existingModel.EndGuidance.Blocks != null) + { + this.RemoveBlockCollectionFiles(existingModel.EndGuidance, newModel.EndGuidance); + } + + if (existingModel is { AssessmentContent: { } } && existingModel.AssessmentContent.Blocks != null) + { + this.RemoveBlockCollectionFiles(existingModel.AssessmentContent, newModel.AssessmentContent); + } + } + + private void RemoveBlockCollectionFiles(BlockCollectionViewModel existingResource, BlockCollectionViewModel newResource) + { + try + { + var filePaths = new List(); + if (existingResource != null) + { + var allBlocks = existingResource.Blocks.ToList(); + var newBlocks = newResource.Blocks.ToList(); + if (allBlocks.Any()) + { + var existingAttachements = allBlocks.Where(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Attachment && x.MediaBlock.Attachment != null).ToList(); + if (existingAttachements.Any()) + { + foreach (var oldblock in existingAttachements) + { + var entry = newBlocks.FirstOrDefault(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Attachment && x.MediaBlock.Attachment != null && x.MediaBlock.Attachment.File?.FileId == oldblock.MediaBlock.Attachment?.File?.FileId); + if (entry == null) + { + filePaths.Add(oldblock.MediaBlock.Attachment?.File?.FilePath); + } + } + } + + var existingVideos = allBlocks.Where(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Video && x.MediaBlock.Video != null).ToList(); + if (existingVideos.Any()) + { + foreach (var oldblock in existingVideos) + { + var entry = newBlocks.FirstOrDefault(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Video && x.MediaBlock.Video != null && x.MediaBlock.Video.VideoFile?.File?.FileId == oldblock.MediaBlock?.Video?.VideoFile?.File?.FileId); + if (entry == null) + { + if (!string.IsNullOrWhiteSpace(oldblock.MediaBlock.Video.File.FilePath)) + { + filePaths.Add(oldblock.MediaBlock.Video.File.FilePath); + } + + if (!string.IsNullOrWhiteSpace(oldblock.MediaBlock.Video?.File?.VideoFile?.File?.FilePath)) + { + filePaths.Add(oldblock.MediaBlock.Video.File.VideoFile.File.FilePath); + } + + if (oldblock.MediaBlock?.Video?.File?.VideoFile?.TranscriptFile?.File?.FilePath != null) + { + filePaths.Add(oldblock.MediaBlock.Video.File.VideoFile.TranscriptFile.File.FilePath); + } + } + } + } + + var existingImages = allBlocks.Where(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Image && x.MediaBlock.Image != null).ToList(); + if (existingImages.Any()) + { + foreach (var oldblock in existingImages) + { + var entry = newBlocks.FirstOrDefault(x => x.BlockType == BlockType.Media && x.MediaBlock != null && x.MediaBlock.MediaType == MediaType.Image && x.MediaBlock.Image != null && x.MediaBlock?.Image?.File?.FileId == oldblock.MediaBlock?.Image?.File?.FileId); + if (entry == null) + { + filePaths.Add(oldblock?.MediaBlock?.Image?.File?.FilePath); + } + } + } + + var existingImageCarousel = allBlocks.Where(x => x.BlockType == BlockType.ImageCarousel && x.ImageCarouselBlock != null && x.ImageCarouselBlock.ImageBlockCollection != null && x.ImageCarouselBlock.ImageBlockCollection.Blocks != null).ToList(); + if (existingImageCarousel.Any()) + { + foreach (var imageBlock in existingImageCarousel) + { + foreach (var oldblock in imageBlock?.ImageCarouselBlock?.ImageBlockCollection?.Blocks) + { + var entry = newBlocks.FirstOrDefault(x => x.BlockType == BlockType.ImageCarousel && x.ImageCarouselBlock != null && x.ImageCarouselBlock.ImageBlockCollection != null && x.ImageCarouselBlock.ImageBlockCollection.Blocks != null && x.ImageCarouselBlock.ImageBlockCollection.Blocks.Where(x => x.MediaBlock?.Image?.File?.FileId == oldblock.MediaBlock?.Image?.File?.FileId).Any()); + if (entry == null) + { + filePaths.Add(oldblock.MediaBlock?.Image?.File?.FilePath); + } + } + } + } + + var existingWholeSlideImages = allBlocks.Where(x => x.WholeSlideImageBlock != null && x.WholeSlideImageBlock.WholeSlideImageBlockItems.Any()).ToList(); + if (existingWholeSlideImages.Any()) + { + foreach (var wsi in existingWholeSlideImages) + { + foreach (var oldblock in wsi?.WholeSlideImageBlock?.WholeSlideImageBlockItems) + { + var entry = newBlocks.FirstOrDefault(x => x.WholeSlideImageBlock != null && x.WholeSlideImageBlock.WholeSlideImageBlockItems.Where(x => x.WholeSlideImage?.File?.FileId == oldblock.WholeSlideImage?.File?.FileId).Any()); + if (entry == null) + { + filePaths.Add(oldblock.WholeSlideImage?.File?.FilePath); + } + } + } + } + } + + var existingQuestionFiles = this.CheckQuestionBlock(existingResource); + var newQuestionFiles = this.CheckQuestionBlock(newResource); + if (existingQuestionFiles.Any()) + { + if (!newQuestionFiles.Any()) + { + filePaths.AddRange(existingQuestionFiles); + } + else + { + foreach (var file in existingQuestionFiles) + { + var entry = newQuestionFiles.FirstOrDefault(x => x.Equals(file)); + if (entry == null) + { + filePaths.Add(file); + } + } + } + } + } + + if (filePaths != null && filePaths.Any()) + { + _ = Task.Run(async () => { await this.fileService.PurgeResourceFile(null, filePaths); }); + } + } + catch (Exception ex) + { + } + } + + private List CheckQuestionBlock(BlockCollectionViewModel model) + { + var filePath = new List(); + foreach (var block in model.Blocks) + { + if (block.BlockType == BlockType.Question && block.QuestionBlock != null) + { + if (block.QuestionBlock.QuestionType == QuestionTypeEnum.MatchGame && block.QuestionBlock.Answers != null) + { + foreach (var answerBlock in block.QuestionBlock.Answers) + { + if (answerBlock.BlockCollection != null && answerBlock.BlockCollection.Blocks != null) + { + foreach (var imageBlock in answerBlock.BlockCollection.Blocks) + { + if (imageBlock.BlockType == BlockType.Media && imageBlock.MediaBlock != null) + { + filePath.Add(imageBlock.MediaBlock.Image.File.FilePath); + } + } + } + } + } + + var questionBlockCollection = block.QuestionBlock.QuestionBlockCollection; + if (questionBlockCollection != null && questionBlockCollection.Blocks != null) + { + foreach (var questionBlock in questionBlockCollection.Blocks) + { + if (questionBlock.BlockType == BlockType.Media && questionBlock.MediaBlock != null) + { + if (questionBlock.MediaBlock.Image != null) + { + filePath.Add(questionBlock.MediaBlock.Image.File.FilePath); + } + + if (questionBlock.MediaBlock.Video != null) + { + if (questionBlock.MediaBlock.Video.File != null) + { + filePath.Add(questionBlock.MediaBlock.Video.File.FilePath); + } + + if (questionBlock.MediaBlock.Video.VideoFile != null) + { + if (questionBlock.MediaBlock.Video.VideoFile.TranscriptFile != null) + { + filePath.Add(questionBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); + } + + if (questionBlock.MediaBlock.Video.VideoFile.CaptionsFile != null) + { + filePath.Add(questionBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); + } + } + } + } + else if (questionBlock.BlockType == BlockType.WholeSlideImage && questionBlock.WholeSlideImageBlock != null) + { + var existingWholeSlideImages = questionBlock.WholeSlideImageBlock.WholeSlideImageBlockItems.ToList(); + if (existingWholeSlideImages.Any()) + { + foreach (var wsi in existingWholeSlideImages) + { + filePath.Add(wsi.WholeSlideImage?.File?.FilePath); + } + } + } + } + } + + var feedbackBlockCollection = block.QuestionBlock.FeedbackBlockCollection; + if (feedbackBlockCollection != null && feedbackBlockCollection.Blocks != null) + { + foreach (var feedbackBlock in feedbackBlockCollection.Blocks) + { + if (feedbackBlock.BlockType == BlockType.Media && feedbackBlock.MediaBlock != null) + { + if (feedbackBlock.MediaBlock.Image != null) + { + filePath.Add(feedbackBlock.MediaBlock.Image.File.FilePath); + } + + if (feedbackBlock.MediaBlock.Video != null) + { + if (feedbackBlock.MediaBlock.Video.File != null) + { + filePath.Add(feedbackBlock.MediaBlock.Video.File.FilePath); + } + + if (feedbackBlock.MediaBlock.Video.VideoFile != null) + { + if (feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile != null) + { + filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); + } + + if (feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile != null) + { + filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); + } + } + } + } + } + } + } + } + + return filePath; + } } } diff --git a/LearningHub.Nhs.WebUI/Controllers/Api/ScormController.cs b/LearningHub.Nhs.WebUI/Controllers/Api/ScormController.cs index 66516430e..ba9ed57f3 100644 --- a/LearningHub.Nhs.WebUI/Controllers/Api/ScormController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/Api/ScormController.cs @@ -230,11 +230,6 @@ private async Task Commit(SCO scoObject) try { var activeContent = this.userService.GetActiveContentAsync().Result; - ////if (activeContent.Count == 0) - ////{ - //// return false; - ////} - if (!activeContent.Any(ac => ac.ScormActivityId == scoObject.InstanceId)) { throw new Exception($"User does not have ActiveContent for ScormActivityId={scoObject.InstanceId}"); @@ -265,10 +260,6 @@ private async Task Commit(SCO scoObject) // Persist update. await this.activityService.UpdateScormActivityAsync(scoObject); - ////if (scoObject.LessonStatusId == ScormLessionStatus.ActivityStatusId(ScormLessionStatus.Completed) || scoObject.LessonStatusId == ScormLessionStatus.ActivityStatusId(ScormLessionStatus.Passed)) - ////{ - //// await this.activityService.CompleteScormActivity(scoObject); - ////} return true; } diff --git a/LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs b/LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs index f77383f0c..d23e0881e 100644 --- a/LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs +++ b/LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs @@ -226,7 +226,7 @@ public static string GetActivityStatusText(this ActivityDetailedItemViewModel ac /// The . public static bool CanShowScore(this ActivityDetailedItemViewModel activityDetailedItemViewModel) { - if ((activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Scorm && (activityDetailedItemViewModel.MasteryScore > 0 || activityDetailedItemViewModel.MasteryScore == null) && ((activityDetailedItemViewModel.ScorePercentage > 0 && activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Passed) || activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Failed)) || ((activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Assessment || activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Case) && activityDetailedItemViewModel.Complete)) + if ((activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Scorm && (activityDetailedItemViewModel.MasteryScore > 0 || activityDetailedItemViewModel.MasteryScore == null) && ((activityDetailedItemViewModel.ScorePercentage > 0 && activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Passed) || activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Failed)) || (activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Assessment && (activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Completed || activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Passed || activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.Failed)) || (activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Case && activityDetailedItemViewModel.Complete)) { return true; } @@ -241,7 +241,7 @@ public static bool CanShowScore(this ActivityDetailedItemViewModel activityDetai /// The bool. public static bool CanViewPercentage(this ActivityDetailedItemViewModel activityDetailedItemViewModel) { - if (((activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Video || activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Audio) && activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.InProgress) || (activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Assessment && activityDetailedItemViewModel.Complete == false)) + if (((activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Video || activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Audio) && activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.InProgress) || (activityDetailedItemViewModel.ResourceType == ResourceTypeEnum.Assessment && activityDetailedItemViewModel.ActivityStatus == ActivityStatusEnum.InProgress)) { return true; } diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeBlock.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeBlock.vue index 8ca009633..4c6aa1ec4 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeBlock.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeBlock.vue @@ -30,7 +30,9 @@ :characterLimit="60" :isH3="true">

{{ block.title }}

+ v-else> + {{ block.title }} + @@ -50,7 +52,8 @@ ariaLabel="Move section down" class="contribute-block-component-button"> - + { + this.contributeResourceAVFlag = response; + }); } } }); diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeCaseOrAssessmentContent.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeCaseOrAssessmentContent.vue index 4cf178069..226891170 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeCaseOrAssessmentContent.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/ContributeCaseOrAssessmentContent.vue @@ -2,17 +2,17 @@
You have not added any content to this page yet + v-if="!hasContentOnPage"> + You have not added any content to this page yet
@@ -25,13 +25,19 @@ ref="addMediaInput" multiple @change="uploadNewMediaFiles" - class="visually-hidden"/> + class="visually-hidden" /> + + +
+ +
diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/SelectResourceType.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/SelectResourceType.vue index d43ed711a..4fb3f6621 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/SelectResourceType.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/SelectResourceType.vue @@ -6,23 +6,19 @@

{{title}}

{{description}}
-
-
-
-
-
-
+
+ +
diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/content-tab/ChooseContentBlockOption.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/content-tab/ChooseContentBlockOption.vue index 2e12425a7..8ac6f1b21 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/content-tab/ChooseContentBlockOption.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/content-tab/ChooseContentBlockOption.vue @@ -1,11 +1,14 @@ @@ -23,6 +27,7 @@ import MediaBlockImage from "./MediaBlockImage.vue"; import MediaBlockVideo from "./MediaBlockVideo.vue"; import Tick from "../../../globalcomponents/Tick.vue"; + import { resourceData } from '../../../data/resource'; import { AttachmentModel } from "../../../models/contribute-resource/blocks/attachmentModel"; import { FileUploadType } from '../../../helpers/fileUpload'; @@ -43,13 +48,17 @@ props: { mediaBlock: { type: Object } as PropOptions, }, - data(){ + data() { return { FileUploadType: FileUploadType, FileStore: FileStore /* It looks like FileStore isn't used, but we need it to be exposed here to allow Vue to make the files list reactive */, MediaTypeEnum: MediaTypeEnum, + contributeResourceAVFlag: true } }, + created() { + this.getContributeResAVResourceFlag(); + }, computed: { attachment(): AttachmentModel { return this.mediaBlock.attachment; @@ -59,11 +68,19 @@ }, video(): VideoMediaModel { return this.mediaBlock.video; + }, + audioVideoUnavailableView(): string { + return this.$store.state.getAVUnavailableView; } }, methods: { updatePublishingStatus() { this.mediaBlock.updatePublishingStatus(); + }, + getContributeResAVResourceFlag() { + resourceData.getContributeAVResourceFlag().then(response => { + this.contributeResourceAVFlag = response; + }); } } }) diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/published-view/ContributeMediaBlockPublishedView.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/published-view/ContributeMediaBlockPublishedView.vue index 7e4650ae6..0753395c5 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/published-view/ContributeMediaBlockPublishedView.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/published-view/ContributeMediaBlockPublishedView.vue @@ -1,9 +1,14 @@ @@ -12,6 +17,7 @@ import Vue, { PropOptions } from 'vue'; import FileInfo from '../content-tab/FileInfo.vue'; + import { resourceData } from '../../../data/resource'; import AttachmentPublishedView from './AttachmentPublishedView.vue'; import ImagePublishedView from './ImagePublishedView.vue'; import VideoPlayerContainer from '../VideoPlayerContainer.vue'; @@ -37,12 +43,16 @@ return { FileStore: FileStore, MediaTypeEnum: MediaTypeEnum, + contributeResourceAVFlag: true, + audioVideoUnavailableView: '' } }, created() { // We poll for files (e.g. videos) that did not finish processing when the Resource was being created. // So, when the file processing succeeds/fails, this is can be reflected in the published view. this.FileStore.enablePolling(); + this.getContributeResAVResourceFlag(); + this.getContributeResAVUnavailableView(); }, computed: { mediaType(): MediaTypeEnum { @@ -58,5 +68,17 @@ return this.mediaBlock.video; } }, + methods: { + getContributeResAVResourceFlag() { + resourceData.getContributeAVResourceFlag().then(response => { + this.contributeResourceAVFlag = response; + }); + }, + getContributeResAVUnavailableView() { + resourceData.getAVUnavailableView().then(response => { + this.audioVideoUnavailableView = response; + }); + }, + } }) \ No newline at end of file diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/questions/AddBlocksMenu.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/questions/AddBlocksMenu.vue index f48c1f0c3..3ca51587e 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/questions/AddBlocksMenu.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/questions/AddBlocksMenu.vue @@ -1,7 +1,15 @@