NewsletterCreator / src / components / SimpleBoilerplateElement.vue
SimpleBoilerplateElement.vue
Raw
<template>
  <q-form ref="elementForm">
    <q-card class="elementBody simpleElementBody row justify-between">
      <q-card-section class="col-10 q-pa-none">
        <q-form ref="form" class="q-pa-md">
          <slot></slot>
        </q-form>
      </q-card-section>
      <q-card-section class="column col-2 items-end justify-between q-pa-none">
        <q-icon name="sym_o_menu" class="handle cursor-pointer q-pa-md" color="accent" size="2.5rem"/>
        <q-btn round class="cursor-pointer q-ma-md" dense icon="sym_o_delete" color="negative" size="xs" @click="removeThisElement" />
      </q-card-section>
    </q-card>
  </q-form>
</template>

<script>
import { useNewsletterStore } from 'src/stores/newsletter.js'
import bus from 'src/utils/eventBus.js'

export default {
  methods: {
    removeThisElement () {
      const { removeElement } = useNewsletterStore()
      removeElement(this.id)
    },
    async validateForm () {
      // Get the form reference
      const formRef = this.$refs.form
      if (formRef) {
        // Validate the form
        if (!await formRef.validate()) {
          return false
        }
      }
      return true
    }
  },
  created () {
    // Listen for the 'validate' event through the event bus
    bus.on('validate', this.validateForm)
  },
  beforeUnmount () {
    // Clean up the event listener when the component is destroyed
    bus.off('validate', this.validateForm)
  },
  props: {
    id: {
      type: String,
      required: true
    }
  }
}
</script>