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/Channels/components/SourceChannels.vue
<template>
  <div class="row justify-content-center">
    <div class="col-xl-12">
      <div class="card">
        <div class="card-body">
          <h4 class="card-title">Source Channels</h4>
          <p class="card-title-desc">Select and configure source channels.</p>
          <div class="row">
            <div
              class="col-md-3"
              v-for="(channel, index) in channels"
              :key="index"
            >
              <a class="text-reset notification-item d-block">
                <div class="d-flex flex-column align-items-center">
                  <span
                    class="
                      avatar-title
                      rounded-circle
                      source-channel-tab-icon
                      bg-primary bg-soft
                      text-primary
                      mb-2
                    "
                    >
                    <!-- <i :class="`bx ${channel.icon}`"></i> -->
                    <Icon :icon="channel.icon" />
                  
                  </span>

                  <h6 class="mb-2 text-center">
                    {{ channel.count }} {{ channel.suffixLabelMedim }}
                  </h6>
                  <b-button variant="primary" @click="editChannel(channel)">
                    {{ channel.buttonLabel }}</b-button
                  >
                </div>
              </a>
            </div>
          </div>
        </div>
      </div>
    </div>
    <b-modal
      v-model="showSourceChannelEditModal"
      :dialog-class="sourceChannelEditModalClasses"
      title-class="font-18"
      size="xl"
      content-class="rounded-0"
      footer-class="text-end"
      :hide-footer="true"
    >
      <template #modal-header>
        <button
          type="button"
          class="btn btn-primary"
          @click="sourceChannelEditModalHeaderButtonConfig.action()"
        >
          <i class="bx bx-left-arrow-alt font-size-16 align-middle me-2"></i>
          {{ sourceChannelEditModalHeaderButtonConfig.label }}
        </button>
      </template>
      <s-cphone-widget
        v-if="sourceState.selectedChannel === 'phonenumbers'"
        :existingNumbers="addedPhoneNumbers"
        @listmode="triggerListMode"
        :channelEditOnListMode="channelEditOnListMode"
        :sourceState="sourceState"
      ></s-cphone-widget>
      <s-comni-widget
        v-if="sourceState.selectedChannel === 'omni-channel'"
      ></s-comni-widget>
    </b-modal>
  </div>
</template>

<script>
import { mapActions, mapGetters } from 'vuex';
import { Icon } from '@iconify/vue';

import * as _ from 'lodash';
import {
  SOURCE_GETTER,
  SOURCE_ACTION_RESET_SELECTED_CHANNEL,
  SOURCE_ACTION_SET_SELECTED_CHANNEL,
  SOURCE_GETTER_DETAIL_ADDED_PHONENUMBERS,
  SOURCE_GETTER_DETAIL_ADDED_EMAILS,
  SOURCE_GETTER_DETAIL_ADDED_OMNICHANNLES,
  PHONEWIDGET_GETTER,
  PHONEWIDGET_ACTION_RESET,
} from '../constants';
import SCphoneWidget from './SCphoneWidget.vue';
import SComniWidget from './SComniWidget.vue';
import { BButton,BModal } from 'bootstrap-vue-next';

export default {
  data() {
    return {
      channelEditOnListMode: false,
    };
  },
  computed: {
    ...mapGetters('phonewidget', {
      phoneWidgetState: PHONEWIDGET_GETTER,
    }),
    ...mapGetters('source', {
      sourceState: SOURCE_GETTER,
      addedPhoneNumbers: SOURCE_GETTER_DETAIL_ADDED_PHONENUMBERS,
      addedEmails: SOURCE_GETTER_DETAIL_ADDED_EMAILS,
      addedOmniWidgets: SOURCE_GETTER_DETAIL_ADDED_OMNICHANNLES,
    }),
    channels() {
      return _.map(this.sourceState.availableBCSourceChannels, (c) => {
        const chan = _.find(
          this.sourceState.sourceDetails.channels
            ? this.sourceState.sourceDetails.channels
            : [],
          ({ type, items = [] }) => type === c.name && items.length,
        );
        return {
          ...c,
          items: chan ? chan.items : [],
          count: chan ? chan.items.length : 0,
        };
      });
    },
    showSourceChannelEditModal() {
      return this.sourceState.selectedChannel ? true : false;
    },
    sourceChannelEditModalClasses() {
      return `modal-dialog-slideout ${
        this.channelEditOnListMode ? 'notification-modal' : ''
      }`;
    },
    sourceChannelEditModalHeaderButtonConfig() {
      if (this.channelEditOnListMode) {
        return {
          label: 'Close',
          action: () => {
            this.closeSourceChannelEditModal();
            this.resetPhoneWidget();
          },
        };
      }
      if (!this.channelEditOnListMode) {
        switch (this.sourceState.selectedChannel) {
          case 'phonenumbers':
            if (this.addedPhoneNumbers.length) {
              return {
                label: 'Back',
                action: () => {
                  this.channelEditOnListMode = true;
                  this.resetPhoneWidget();
                },
              };
            }
            break;
          case 'emails':
            return {
              label: 'Back',
              action: () => {
                this.channelEditOnListMode = true;
                this.resetPhoneWidget();
              },
            };
            break;
          case 'omni-channel':
            if (this.addedOmniWidgets.length) {
              return {
                label: 'Back',
                action: () => {
                  this.channelEditOnListMode = true;
                  this.resetPhoneWidget();
                },
              };
            }
            break;
        }
      }

      return {
        label: 'Close',
        action: () => this.closeSourceChannelEditModal(),
      };
    },
  },
  methods: {
    ...mapActions('source', {
      setSelectedChannel: SOURCE_ACTION_SET_SELECTED_CHANNEL,
      closeSourceChannelEditModal: SOURCE_ACTION_RESET_SELECTED_CHANNEL,
    }),
    ...mapActions('phonewidget', {
      resetPhoneWidget: PHONEWIDGET_ACTION_RESET,
    }),
    editChannel(channel) {
      this.setSelectedChannel({
        selectedChannel: channel.name,
      });
      switch (channel.name) {
        case 'phonenumbers':
          if (
            this.addedPhoneNumbers.length &&
            this.phoneWidgetState.details === null
          ) {
            this.channelEditOnListMode = true;
          }
          break;
        case 'emails':
          if (
            this.addedEmails.length &&
            this.phoneWidgetState.details === null
          ) {
            this.channelEditOnListMode = true;
          }
          break;
        case 'omni-channel':
          if (
            this.addedOmniWidgets.length &&
            this.phoneWidgetState.details === null
          ) {
            this.channelEditOnListMode = true;
          }
          break;
      }
    },
    triggerListMode(isListMode) {
      this.channelEditOnListMode = isListMode;
    },
  },
  components: {
    SCphoneWidget,
    SComniWidget,
    BButton,BModal,
    Icon
  },
};
</script>