From df78e7627ff4975dd058345d8c74d83bfe0e1eaf Mon Sep 17 00:00:00 2001 From: Eleazar Resendez Date: Thu, 29 Jan 2026 12:12:45 -0600 Subject: [PATCH 1/2] feat(screen-templates): add prev/next navigation in preview --- .../components/templates/PreviewTemplate.vue | 13 ++++- .../components/MyTemplatesListing.vue | 5 ++ .../components/PublicTemplatesListing.vue | 5 ++ .../components/TemplatePreviewContainer.vue | 18 ++++++ .../mixins/templatePreviewMixin.js | 57 +++++++++++++++++++ 5 files changed, 96 insertions(+), 2 deletions(-) diff --git a/resources/js/components/templates/PreviewTemplate.vue b/resources/js/components/templates/PreviewTemplate.vue index bc3e181763..84e61f65e5 100644 --- a/resources/js/components/templates/PreviewTemplate.vue +++ b/resources/js/components/templates/PreviewTemplate.vue @@ -122,7 +122,16 @@ watch: { selectedTemplateOptions() { this.$emit('template-options-selected', this.selectedTemplateOptions); - } + }, + template: { + deep: true, + handler() { + this.templateData = this.template?.template ? this.template.template : this.template; + this.type = this.templateData?.type; + this.showCssPreview = false; + this.code = ""; + }, + }, }, methods: { hidePreview() { @@ -193,4 +202,4 @@ .css-preview-card .css-preview .editor { height: inherit; } - \ No newline at end of file + diff --git a/resources/js/processes/screen-templates/components/MyTemplatesListing.vue b/resources/js/processes/screen-templates/components/MyTemplatesListing.vue index 96525d3e6e..2fb7fc56d1 100644 --- a/resources/js/processes/screen-templates/components/MyTemplatesListing.vue +++ b/resources/js/processes/screen-templates/components/MyTemplatesListing.vue @@ -160,6 +160,7 @@ @@ -252,6 +253,10 @@ export default { }); }, methods: { + handleSelectTemplate(template) { + this.selectedTemplate = template; + this.markSelectedRow(template.id); + }, fetch() { this.loading = true; this.apiDataLoading = true; diff --git a/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue b/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue index 8ecb59ad10..10890a34c9 100644 --- a/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue +++ b/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue @@ -162,6 +162,7 @@ @@ -261,6 +262,10 @@ export default { }); }, methods: { + handleSelectTemplate(template) { + this.selectedTemplate = template; + this.markSelectedRow(template.id); + }, fetch() { this.loading = true; this.apiDataLoading = true; diff --git a/resources/js/processes/screen-templates/components/TemplatePreviewContainer.vue b/resources/js/processes/screen-templates/components/TemplatePreviewContainer.vue index 5c33ba9acd..e9de797c0f 100644 --- a/resources/js/processes/screen-templates/components/TemplatePreviewContainer.vue +++ b/resources/js/processes/screen-templates/components/TemplatePreviewContainer.vue @@ -17,6 +17,24 @@ :close="onClose" :templateId="template.id" > + + + + + + + +
Date: Tue, 3 Feb 2026 18:33:05 -0600 Subject: [PATCH 2/2] fix(screen-templates): close preview on tab switch (FOUR-29145) --- .../components/MyTemplatesListing.vue | 6 +++++ .../components/PublicTemplatesListing.vue | 6 +++++ .../mixins/templatePreviewMixin.js | 27 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/resources/js/processes/screen-templates/components/MyTemplatesListing.vue b/resources/js/processes/screen-templates/components/MyTemplatesListing.vue index 2fb7fc56d1..4875f3671c 100644 --- a/resources/js/processes/screen-templates/components/MyTemplatesListing.vue +++ b/resources/js/processes/screen-templates/components/MyTemplatesListing.vue @@ -252,6 +252,12 @@ export default { this.loading = false; }); }, + mounted() { + this.bindPreviewTabClose("#nav-myTemplates-tab"); + }, + beforeDestroy() { + this.unbindPreviewTabClose(); + }, methods: { handleSelectTemplate(template) { this.selectedTemplate = template; diff --git a/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue b/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue index 10890a34c9..d6aec98fd0 100644 --- a/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue +++ b/resources/js/processes/screen-templates/components/PublicTemplatesListing.vue @@ -261,6 +261,12 @@ export default { this.apiNoResults = false; }); }, + mounted() { + this.bindPreviewTabClose("#nav-publicTemplates-tab"); + }, + beforeDestroy() { + this.unbindPreviewTabClose(); + }, methods: { handleSelectTemplate(template) { this.selectedTemplate = template; diff --git a/resources/js/processes/screen-templates/mixins/templatePreviewMixin.js b/resources/js/processes/screen-templates/mixins/templatePreviewMixin.js index 3e628cad2c..35b1ceed29 100644 --- a/resources/js/processes/screen-templates/mixins/templatePreviewMixin.js +++ b/resources/js/processes/screen-templates/mixins/templatePreviewMixin.js @@ -92,6 +92,33 @@ const templatePreviewMixin = { this.showTemplatePreview = false; this.selectedTemplate = null; }, + closePreviewFrame() { + if (this.$refs?.preview?.onClose) { + this.$refs.preview.onClose(); + return; + } + if (typeof this.onClose === "function") { + this.onClose(); + } + }, + bindPreviewTabClose(tabSelector) { + if (!tabSelector || typeof $ === "undefined") { + return; + } + this._previewTabSelector = tabSelector; + this._previewTabHandler = () => { + this.closePreviewFrame(); + }; + $(tabSelector).on("hide.bs.tab.templatePreview", this._previewTabHandler); + }, + unbindPreviewTabClose() { + if (!this._previewTabSelector || typeof $ === "undefined") { + return; + } + $(this._previewTabSelector).off("hide.bs.tab.templatePreview", this._previewTabHandler); + this._previewTabSelector = null; + this._previewTabHandler = null; + }, onClose() { this.$emit('mark-selected-row', 0); this.showPreview = false;