{"version":3,"file":"shows-portal.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,2CAA2C;AAC3C,mCAAmC,oBAAoB;AACvD;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0CAA0C,4BAA4B;AACtE;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA,gDAAgD,8DAA8D,YAAY,EAAE;AAC5H;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,oBAAoB;AACjF;AACA;AACA;AACA;AACA,wFAAwF,QAAQ,WAAW,mBAAmB;AAC9H;AACA,sBAAsB;AACtB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,2CAA2C,oCAAoC,EAAE,mCAAmC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB;AACtB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,8DAA8D,yBAAyB,GAAG,mBAAmB;AAC7G;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iEAAiE,kEAAkE;AACnI,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,8BAA8B,MAAM,GAAG,QAAQ,GAAG,SAAS,EAAE,OAAO;AACpE,iBAAiB;AACjB;AACA,8EAA8E,mDAAmD;AACjI,iBAAiB;AACjB;AACA,8EAA8E,mDAAmD;AACjI,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,KAAK;AACL,C","sources":["webpack://nv-base-template/./src/js/shows-portal.js"],"sourcesContent":["const rootEl = document.querySelector(\".js-shows-portal-app\");\r\nif (rootEl) {\r\n\r\n (function () {\r\n const API_ENDPOINTS = {\r\n PublishShow: '/api/shows/publishshow/',\r\n GetListItems: '/api/shows/getlistitems/',\r\n AddSessions: '/api/shows/addsessions/',\r\n GetShowSessions: '/api/shows/getsessions/',\r\n UpdateTickInfo: '/api/shows/updatetickinfo/',\r\n AddReviewsAndAwards: '/api/shows/addreviewandawards/',\r\n AddExternalLinks: '/api/shows/addexternallinks/',\r\n AddRegistration: '/api/shows/addregistration/',\r\n PostFiles: '/api/shows/postfiles/',\r\n PostFile: '/api/shows/postfile/',\r\n AddImages: '/api/shows/addimages/',\r\n AddCroppedImage: '/api/shows/addcroppedimage/',\r\n DeleteNode: '/api/shows/deletenode/'\r\n };\r\n\r\n const showsPortalApp = new Vue({\r\n el: '.js-shows-portal-app',\r\n name: 'Shows Portal App',\r\n data() {\r\n return {\r\n availableSections: [\r\n 'event-details',\r\n 'when-and-where',\r\n 'ticketing-and-accessibility',\r\n 'reviews-and-awards',\r\n 'social-details',\r\n 'event-images',\r\n 'show-registration'\r\n ],\r\n currentSection: 'event-details',\r\n\r\n showEssentialsErrors: {},\r\n showTicketingErrors: {},\r\n imageErrors: { ErrorMessage: null },\r\n\r\n completeListItems: {},\r\n\r\n rteFullDesc: null,\r\n rteVenueAcc: null,\r\n rteTicketingInfo: null,\r\n\r\n currentShowId: null,\r\n showSessionEditor: null,\r\n showSessionEditorStatus: 'init',\r\n showSessionItems: [],\r\n showReviews: [{\r\n NameOfReviewer: null,\r\n StarRating: null,\r\n Excerpt: null,\r\n }],\r\n showAwards: [{\r\n NameOfAward: null,\r\n }],\r\n showRegistration: '',\r\n showExternalLinks: [{\r\n URL: null,\r\n }],\r\n showReviewEditorStatus: 'init',\r\n showAwardEditorStatus: 'init',\r\n showExternalLinkEditorStatus: 'init',\r\n showRegistrationEditorStatus: 'init',\r\n showImageEditorStatus: 'init',\r\n showcroppedImageUploadStatus: 'init',\r\n showcroppedImageEditorStatus: 'init',\r\n showImages: [],\r\n showImageCropped: '',\r\n eventImagePreviewObjectUrl: null\r\n }\r\n },\r\n async mounted() {\r\n // fetch the complete lists\r\n const completeListItemsRequest = await fetch(API_ENDPOINTS.GetListItems);\r\n\r\n if (!completeListItemsRequest.ok) {\r\n console.error(\"Couldn't get complete lists\");\r\n return;\r\n }\r\n\r\n this.completeListItems = await completeListItemsRequest.json();\r\n\r\n const rteConfigs = {\r\n theme: 'snow',\r\n modules: {\r\n toolbar: ['bold', 'code', 'italic', 'strike', 'underline', 'link'],\r\n }\r\n };\r\n\r\n // Initialise Quill RTE - Full Description\r\n this.rteFullDesc = new Quill('.js-show-full-description', rteConfigs);\r\n\r\n // Initialise Quill RTE - Venue Accessibility Information\r\n this.rteVenueAcc = new Quill('.js-show-venue-accessibility-information', rteConfigs);\r\n\r\n // Initialise Quill RTE - Ticketing Info\r\n this.rteTicketingInfo = new Quill('.js-show-ticketing-info', rteConfigs);\r\n // Set ShowId\r\n if (window.PrideShow.ShowId) {\r\n this.currentShowId = window.PrideShow.ShowId;\r\n }\r\n\r\n // Fetch all show sessions if ShowId has been set\r\n if (this.currentShowId) {\r\n await this.getAllShowSessions(this.currentShowId);\r\n }\r\n\r\n //Check image errors and show the image section\r\n if (window.ShowImageErrors?.ErrorMessage) {\r\n this.imageErrors.ErrorMessage = window.ShowImageErrors.ErrorMessage;\r\n this.currentSection = 'event-images';\r\n }\r\n\r\n // Populate reviews and awards ....\r\n let jsonBearer = document.querySelector('.js-show-reviews-and-awards');\r\n const showReviewsRecords = JSON.parse(jsonBearer.dataset.showReviews);\r\n if (showReviewsRecords.length) {\r\n this.showReviews = showReviewsRecords;\r\n }\r\n const showAwardsRecords = JSON.parse(jsonBearer.dataset.showAwards);\r\n if (showAwardsRecords.length) {\r\n this.showAwards = showAwardsRecords;\r\n }\r\n\r\n //populate images\r\n\r\n jsonBearer = document.querySelector('.js-show-images');\r\n const uploadedImages = JSON.parse(jsonBearer.dataset.showImages);\r\n if (uploadedImages.length) {\r\n this.showImages = uploadedImages;\r\n }\r\n jsonBearer = document.querySelector('.js-show-image-cropped');\r\n this.showImageCropped = jsonBearer.dataset.croppedImages;\r\n\r\n\r\n // Populate external links ....\r\n jsonBearer = document.querySelector('.js-show-external-links');\r\n const showExternalLinksRecords = JSON.parse(jsonBearer.dataset.showExternalLinks);\r\n if (showExternalLinksRecords.length) {\r\n this.showExternalLinks = showExternalLinksRecords;\r\n }\r\n\r\n // Populate show registration ....\r\n let valueBearer = document.querySelector('#show-section-show-registration');\r\n this.showRegistration = valueBearer.dataset.showRegistration;\r\n },\r\n methods: {\r\n\r\n setTime() {\r\n var hourEl = document.getElementById(\"hour\");\r\n var minuteEl = document.getElementById(\"minute\");\r\n var amEl = document.getElementById(\"am\");\r\n var hour = \"00\";\r\n\r\n if (hourEl.value.length != 0) {\r\n if (!amEl.checked) {\r\n if (parseInt(hourEl.value) == 12) {\r\n hour = hourEl.value\r\n } else {\r\n hour = `${parseInt(hourEl.value) + 12}`;\r\n }\r\n } else {\r\n if (parseInt(hourEl.value) != 12) {\r\n hour = hourEl.value;\r\n }\r\n }\r\n }\r\n\r\n var minute = minuteEl.value.length == 0 ? \"00\" :\r\n parseInt(minuteEl.value) < 10 ? \"0\" + minuteEl.value : minuteEl.value;\r\n\r\n if (minute === \"000\") {\r\n minute = \"00\";\r\n }\r\n var strFullTime = hour + \":\" + minute;\r\n this.showSessionEditor.SessionTime = strFullTime;\r\n },\r\n\r\n async saveAddShowReview() {\r\n this.showReviewEditorStatus = 'saving';\r\n const response = await fetch(API_ENDPOINTS.AddReviewsAndAwards, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n Reviews: this.showReviews,\r\n Awards: this.showAwards\r\n })\r\n });\r\n\r\n if (!response) {\r\n console.error('Error while saving reviews');\r\n }\r\n\r\n const responseText = await response.text();\r\n\r\n if (responseText === 'true') {\r\n this.showReviewEditorStatus = 'saved';\r\n\r\n let lastReview = this.showReviews[this.showReviews.length - 1];\r\n let hasContent = false;\r\n for (const item in lastReview) {\r\n if (lastReview[item] !== null || lastReview[item] !== '') {\r\n hasContent = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!hasContent) return;\r\n\r\n this.showReviews.push({\r\n NameOfReviewer: null,\r\n StarRating: null,\r\n Excerpt: null,\r\n })\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showReviewEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async saveAddShowAward() {\r\n this.showAwardEditorStatus = 'saving';\r\n const response = await fetch(API_ENDPOINTS.AddReviewsAndAwards, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n Reviews: this.showReviews,\r\n Awards: this.showAwards\r\n })\r\n });\r\n\r\n if (!response) {\r\n console.error('Error while saving awards');\r\n }\r\n\r\n const responseText = await response.text();\r\n\r\n if (responseText === 'true') {\r\n this.showAwardEditorStatus = 'saved';\r\n\r\n let lastItem = this.showAwards[this.showAwards.length - 1];\r\n let hasContent = false;\r\n for (const item in lastItem) {\r\n if (lastItem[item] !== null || lastItem[item] !== '') {\r\n hasContent = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!hasContent) return;\r\n\r\n this.showAwards.push({\r\n NameOfAward: null,\r\n })\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showAwardEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async saveAddShowRegistration(e) {\r\n const form = e.target;\r\n const formData = new FormData(form);\r\n const jsonFormData = Object.fromEntries(formData);\r\n\r\n this.showRegistrationEditorStatus = 'saving';\r\n const response = await fetch(API_ENDPOINTS.AddRegistration, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n Registration: jsonFormData.ShowRegistration\r\n })\r\n });\r\n\r\n if (!response) {\r\n console.error('Error while saving show registration');\r\n }\r\n\r\n const responseText = await response.text();\r\n\r\n if (responseText === 'true') {\r\n this.showRegistrationEditorStatus = 'saved';\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showRegistrationEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async submitShowImages(e) {\r\n const form = e.target;\r\n const formData = new FormData(form); // keep it as formData for file submission\r\n\r\n // For debugging only\r\n const formDataJson = Object.fromEntries(formData);\r\n\r\n //console.log(formDataJson);\r\n\r\n // Validation\r\n this.imageErrors = { ErrorMessage: null };\r\n\r\n this.showImageEditorStatus = 'saving';\r\n const imageUploadingResponse = await fetch(API_ENDPOINTS.PostFiles, {\r\n method: 'post',\r\n body: formData\r\n });\r\n\r\n if (!imageUploadingResponse) {\r\n console.error('Error while saving show registration');\r\n }\r\n\r\n const imageUploadingResponseJson = await imageUploadingResponse.json();\r\n\r\n if (imageUploadingResponseJson.length) {\r\n this.showImages = imageUploadingResponseJson;\r\n }\r\n\r\n const associateImagesResponse = await fetch(API_ENDPOINTS.AddImages, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n Images: this.showImages\r\n })\r\n })\r\n\r\n const responseText = await associateImagesResponse.text();\r\n\r\n if (responseText === 'true') {\r\n this.showImageEditorStatus = 'saved';\r\n form.reset();\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showImageEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async uploadCroppedImage(e) {\r\n /*this.showImageCropped = '{\"src\":\"/media/z4znd4bl/1600w_800h_phm_01.jpeg\",\"focalPoint\":{},\"crops\":[]}';*/\r\n const form = e.target;\r\n const formData = new FormData(form); // keep it as formData for file submission\r\n\r\n // For debugging only\r\n const formDataJson = Object.fromEntries(formData);\r\n\r\n //console.log(formDataJson);\r\n\r\n // Validation\r\n this.imageErrors = { ErrorMessage: null };\r\n\r\n this.showcroppedImageUploadStatus = 'saving';\r\n const imageUploadingResponse = await fetch(API_ENDPOINTS.PostFile, {\r\n method: 'post',\r\n body: formData\r\n });\r\n\r\n if (!imageUploadingResponse) {\r\n console.error('Error while saving show registration');\r\n }\r\n\r\n const imageUploadResponseText = await imageUploadingResponse.json();\r\n\r\n if (imageUploadResponseText != null && imageUploadResponseText.src != null) {\r\n this.showImageCropped = {\r\n \"src\": imageUploadResponseText.src,\r\n \"focalPoint\": {},\r\n \"crops\": []\r\n };\r\n\r\n this.showcroppedImageUploadStatus = 'saved';\r\n form.reset();\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showcroppedImageUploadStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async saveImageCropping(e) {\r\n var croppingsJson = JSON.stringify(this.showImageCropped);\r\n const associateImagesResponse = await fetch(API_ENDPOINTS.AddCroppedImage, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n CroppedImage: croppingsJson\r\n })\r\n });\r\n\r\n const responseText = await associateImagesResponse.text();\r\n if (responseText === 'true') {\r\n this.showcroppedImageEditorStatus = 'saved';\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showcroppedImageEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n async saveAddShowExternalLinks() {\r\n this.showExternalLinkEditorStatus = 'saving';\r\n\r\n const response = await fetch(API_ENDPOINTS.AddExternalLinks, {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ShowId: this.currentShowId,\r\n ExternalUrl: this.showExternalLinks\r\n })\r\n });\r\n\r\n if (!response) {\r\n console.error('Error while saving awards');\r\n }\r\n\r\n const responseText = await response.text();\r\n\r\n if (responseText === 'true') {\r\n this.showExternalLinkEditorStatus = 'saved';\r\n\r\n let lastItem = this.showExternalLinks[this.showExternalLinks.length - 1];\r\n let hasContent = false;\r\n for (const item in lastItem) {\r\n if (lastItem[item] !== null && lastItem[item] !== '') {\r\n hasContent = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!hasContent) return;\r\n\r\n this.showExternalLinks.push({\r\n URL: null,\r\n })\r\n\r\n const that = this;\r\n setTimeout(() => {\r\n that.showExternalLinkEditorStatus = null;\r\n }, 1000);\r\n }\r\n },\r\n toggleAccordionItem(sectionAlias) {\r\n if (this.currentShowId === null) return;\r\n\r\n this.currentSection = this.currentSection === sectionAlias ? '' : sectionAlias;\r\n\r\n // Scroll to the next section\r\n setTimeout(() => {\r\n location.hash = '#show-section-' + sectionAlias;\r\n }, 100);\r\n },\r\n async submitShowEssentials(e) {\r\n const form = e.target;\r\n const formData = new FormData(form);\r\n const jsonFormData = Object.fromEntries(formData);\r\n\r\n // Process Genres\r\n jsonFormData['Genres'] = formData.getAll('Genres[]');\r\n delete (jsonFormData['Genres[]']);\r\n\r\n // Process Sponsors\r\n jsonFormData['Sponsors'] = formData.getAll('Sponsors[]');\r\n delete (jsonFormData['Sponsors[]']);\r\n\r\n // Append FullDescription with Quill Editor data\r\n jsonFormData.FullDescription = this.rteFullDesc.root.innerHTML;\r\n\r\n if (this.currentShowId !== null) {\r\n jsonFormData['ShowId'] = this.currentShowId;\r\n }\r\n\r\n // Validation\r\n this.showEssentialsErrors = {};\r\n const requiredFields = Array.from(form.querySelectorAll('[required=\"required\"]')).map(x => x.name);\r\n\r\n requiredFields.forEach(field => {\r\n if (jsonFormData[field] === null || jsonFormData[field] === '') {\r\n this.showEssentialsErrors['field'] = true;\r\n }\r\n })\r\n\r\n if (jsonFormData.FullDescription === '