diff --git a/app/assets/stylesheets/label_templates/label_preview.scss b/app/assets/stylesheets/label_templates/label_preview.scss index 409f4e68c..64fa3dfba 100644 --- a/app/assets/stylesheets/label_templates/label_preview.scss +++ b/app/assets/stylesheets/label_templates/label_preview.scss @@ -29,6 +29,13 @@ } } + .label-preview__error { + background-color: $brand-danger-light; + color: $brand-danger-hover; + margin-top: .5em; + padding: 1.5em 2em; + } + .label-preview__controls { height: 0; overflow: hidden; diff --git a/app/assets/stylesheets/label_templates/show.scss b/app/assets/stylesheets/label_templates/show.scss index 56e25596d..a37c6b9b0 100644 --- a/app/assets/stylesheets/label_templates/show.scss +++ b/app/assets/stylesheets/label_templates/show.scss @@ -55,6 +55,24 @@ .label-textarea-container { height: calc(100% - 6em); + + .label-textarea { + height: 100%; + margin-top: .5em; + padding: .5em; + width: 100%; + } + + &.error { + .label-textarea { + border: 1px solid $brand-danger; + height: calc(100% - 2em); + } + + .error-message { + color: $brand-danger; + } + } } .label-edit-header { @@ -115,13 +133,6 @@ } } - .label-textarea { - height: 100%; - margin-top: .5em; - padding: .5em; - width: 100%; - } - .inser-field-dropdown { .open-dropdown-button:not(.collapsed) { .fas { diff --git a/app/javascript/vue/label_template/components/label_preview.vue b/app/javascript/vue/label_template/components/label_preview.vue index d29b7ff8d..841c355e9 100644 --- a/app/javascript/vue/label_template/components/label_preview.vue +++ b/app/javascript/vue/label_template/components/label_preview.vue @@ -51,6 +51,10 @@
+
+
+ @@ -113,6 +117,9 @@ } this.setDefaults(); + }, + zpl() { + this.refreshPreview(); } }, methods: { @@ -123,6 +130,8 @@ !this.height && (this.height = this.unit === 'in' ? 1 : 25.4); }, refreshPreview() { + if (this.zpl.length === 0) return; + $.ajax({ url: this.previewUrl, type: 'GET', @@ -134,7 +143,17 @@ }, success: (result) => { this.base64Image = result.base64_preview; + if (this.base64Image.length > 0) { + this.$emit('preview:valid'); + } else { + this.$emit('preview:invalid'); + } + }, + error: (result) => { + this.base64Image = ''; + this.$emit('preview:invalid'); } + }); }, updateUnit(unit) { diff --git a/app/javascript/vue/label_template/container.vue b/app/javascript/vue/label_template/container.vue index 2c5a9c03c..3c8dd234d 100644 --- a/app/javascript/vue/label_template/container.vue +++ b/app/javascript/vue/label_template/container.vue @@ -55,23 +55,26 @@ />