HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/buyercall/assets/vue/widgets/EmailTemplates/index.vue
<template>
  <breadcrumb
    :rootState="rootState"
    :breadCrumbs="breadCrumbs"
    @onpropagate="onNavPropagate"
  >
    <div class="height-set card">
      <div class="card-body">
        <div class="spinner-main">
          <Loader :loading="rootState.emailtemplatesLoading"> </Loader>
        </div>
        <div class="row" v-if="!rootState.emailtemplatesLoading">
          <div class="col-lg-12">
            <div class="d-flex align-items-start">
              <b-button
                class="btn btn-success ms-auto"
                @click="showModal"
                >Add Template</b-button
              >
            </div>
            <b-tabs
              v-model="tabIndex"
              content-class="p-4"
              nav-class="nav-tabs-custom"
            >
              <b-tab title="Grid">
                <div class="row" v-if="rootState.emailtemplates.length === 0">
                  <div class="col-md-12 d-flex justify-content-center">
                    There are no records to show
                  </div>
                </div>
                <div class="row" v-else>
                  <div
                    class="col-xl-4 col-sm-6"
                    v-for="emailtemplate in rootState.emailtemplates"
                    :key="emailtemplate.id"
                  >
                    <grid
                      :data="emailtemplate"
                      @selectedId="selectTemplate"
                    ></grid>
                  </div>
                </div>
              </b-tab>
              <b-tab title="List">
                <div
                  class="table-responsive"
                  v-if="!rootState.emailtemplatesLoading"
                >
                  <list
                    :tableData="rootState.emailtemplates"
                    @selectedId="selectTemplate"
                    @onDelete="deleteEmailTemplate"
                    :deleteTemplateID="deleteTemplateID"
                    :deletingTemplateLoading="deletingTemplateLoading"
                    :loadingTemplates="rootState.emailtemplatesLoading"
                  ></list>
                </div>
              </b-tab>
            </b-tabs>
          </div>
        </div>
      </div>
    </div>
    <b-modal
      v-model="isEditMode"
      dialog-class="modal-dialog-slideout"
      :hide-footer="true"
      content-class="rounded-0"
      id="email-modal"
      @hide="customCloseMethod"
    > 
      <template #modal-header>
        <button type="button" class="btn btn-primary" @click="closeEditmodal">
          <i class="bx bx-left-arrow-alt font-size-16 align-middle me-2"></i>
          Close
        </button>
      </template>
      <edit-form
        @errorMessage="emitError"
        v-if="isEditMode"
        :AddUser="isAddUser"
        :loading="rootState.editTemplateLoading || templateIsUpdating"
        @formSubmit="onEdit"
        :selectedTemplateId="selectedTemplateId"
      ></edit-form>
    </b-modal>
  </breadcrumb>
</template>

<script>
import EmailEditor from '../../components/EmailTemplateEditor/index.vue';
import { mapActions, mapGetters } from 'vuex';
import EmailTemplateService from '../../service/emailTemplatesService';

import Loader from '../../components/Loader/loader.vue';
import Breadcrumb from '../../components/Breadcrumb.vue';
import Grid from './components/Grid.vue';
import List from './components/List.vue';
import EditForm from './components/EditForm.vue';
import { toastConfig } from '../../utils/util';
import {
  ROOT_GETTER,
  ROOT_ACTION_SET_WINDOW_WIDTH,
  ROOT_ACTION_RESET_SUCCESS_AND_ERROR_MESSAGE,
  ROOT_GETTER_GET_BREADCRUMBS,
  ROOT_ACTION_SET_BREADCRUMB,
  ROOT_ACTION_GET_EMAIL_TEMPLATES,
  ROOT_ACTION_ADD_EMAIL_TEMPLATE,
  ROOT_ACTION_UPDATE_EMAIL_TEMPLATE,
  ROOT_ACTION_SET_SUCCESS_MESSAGE,
  ROOT_ACTION_SET_ERROR_MESSAGE,
} from './constants';
// import sample from './sample.json';

import { BButton ,BTabs, BTab ,BModal} from 'bootstrap-vue-next'

export default {
  mounted() {
    this.$nextTick(() => {
      window.addEventListener('resize', this.onResize);
    });
    this.getEmailTemplates();
  },
  components: {
    Loader,
    Breadcrumb,
    Grid,
    EditForm,
    List,
    EmailEditor,
    BButton ,BTabs, BTab ,BModal
  },
  data() {
    return {
      tabIndex: 0,
      isAddUser: true,
      deleteTemplateID: null,
      deletingTemplateLoading: false,
      isEditMode: false,
      selectedTemplateId: null,
      templateIsUpdating: false,
    };
  },
  computed: {
    ...mapGetters('root', {
      rootState: ROOT_GETTER,
      breadCrumbs: ROOT_GETTER_GET_BREADCRUMBS,
    }),
    successMessage() {
      return this.rootState.successMessage;
    },
    errorMessage() {
      return this.rootState.errorMessage;
    },
  },
  methods: {


    showModal()
    {
       this.isEditMode =true
       this.isAddUser = true;
    },

    customCloseMethod() {
      this.isEditMode = false;
      this.selectedTemplateId = null;
      this.isAddUser = false;
    },
    emitSuccess(m) {
      this.setSuccessMessage(m);
    },
    emitError(m) {
      this.setErrorMessage(m);
    },
    selectTemplate(id) {
      this.selectedTemplateId = id;
      this.isEditMode = true;
    },
    async deleteEmailTemplate(id) {
      this.deleteTemplateID = id;
      this.deletingTemplateLoading = true;
      const {
        data: { message, success },
      } = await EmailTemplateService.deleteEmailtemplatebyid(id);
      if (!success) {
        this.setErrorMessage(message);
      } else {
        this.setSuccessMessage(message);
        this.getEmailTemplates();
      }
      this.deleteTemplateID = null;
      this.deletingTemplateLoading = false;
    },
    async onEdit(postData) {
      const body = {
        ..._.omit(
          {
            ...postData.postData,
            // editorData: data.isPlainEmail ? '' : data.editorData,
            // plainEmailContent: !data.isPlainEmail
            //   ? ''
            //   : data.plainEmailContent,
            content: postData.postData.isPlainEmail
              ? postData.postData.plainEmailContent
              : postData.postData.editorData,
          },
          ['editorData', 'plainEmailContent'],
        ),
      };
      const formData = new FormData();
      formData.append(
        'data',
        JSON.stringify({
          ...body,
        }),
      );
      formData.append('image', postData.file);
      if (this.selectedTemplateId) {
        this.templateIsUpdating = true;

        const {
          data: { message, success },
        } = await EmailTemplateService.updateEmailTemplate(
          this.selectedTemplateId,
          formData,
        );
        if (!success) {
          this.setErrorMessage(message);
        } else {
          this.setSuccessMessage(message);
          this.getEmailTemplates();
        }
        this.templateIsUpdating = false;
      } else {
        this.addEmailTemplate(formData);
      }
    },
    async updateEmailTemplate(id, postData) {},
    closeEditmodal() {
      this.isEditMode = false;
      this.selectedTemplateId = null;
    },
    ...mapActions('root', {
      setSuccessMessage: ROOT_ACTION_SET_SUCCESS_MESSAGE,
      setErrorMessage: ROOT_ACTION_SET_ERROR_MESSAGE,
      setWindowWidth: ROOT_ACTION_SET_WINDOW_WIDTH,
      resetToastMessages: ROOT_ACTION_RESET_SUCCESS_AND_ERROR_MESSAGE,
      onBreadCrumbEventFire: ROOT_ACTION_SET_BREADCRUMB,
      getEmailTemplates: ROOT_ACTION_GET_EMAIL_TEMPLATES,
      addEmailTemplate: ROOT_ACTION_ADD_EMAIL_TEMPLATE,
      updateEmailTemplate: ROOT_ACTION_UPDATE_EMAIL_TEMPLATE,
    }),
    onResize() {
      this.setWindowWidth(window.innerWidth);
    },
    onNavPropagate(e) {
      this.onBreadCrumbEventFire(e);
    },
  },
  watch: {
    successMessage(v) {
      if (v !== null) {
        this.$toast.open(toastConfig.toastSuccess(v));
        this.resetToastMessages();
        this.isEditMode = false;
        this.selectedTemplateId = null;
      }
    },
    errorMessage(v) {
      if (v !== null) {
        this.$toast.open(toastConfig.toastError(v));
        this.resetToastMessages();
      }
    },
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.onResize);
  },
};
</script>