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/PartnershipTable/AddPartnership.vue
<template>
  <div>
    <b-form @submit.prevent="formSubmit">
      <div class="row">
        <div class="col-md-2 text-center">
          <div class="mt-4 mt-md-0 mb-3">
            <div class="profile-avatar" v-if="!avatar">
              {{ avatarName }}
            </div>
            <img
              class="rounded-circle avatar-xl"
              alt="200x200"
              :src="renderImageUrl"
              data-holder-rendered="true"
              v-else
            />
          </div>
          <b-button variant="link" class="image-change-button"
            ><input
              class="form-control"
              type="file"
              @change="onChangeAvatar"
            /><span>{{
              !avatar ? 'Upload Avatar' : 'Change Avatar'
            }}</span></b-button
          >
        </div>
        <div class="col-md-10">
          <b-form-group
            class="mb-3"
            label="Partnership name"
            label-for="formrow-partnershipname-input"
          >
            <b-form-input
              id="formrow-partnershipname-input"
              type="text"
              placeholder="Partnership name"
              v-model="form.partnershipName"
              name="partnershipName"
              :class="{
                'is-invalid': submitted && $v.form.partnershipName.$error,
              }"
            ></b-form-input>
            <div
              v-if="submitted && $v.form.partnershipName.$error"
              class="invalid-feedback"
            >
              <span v-if="!$v.form.partnershipName.required"
                >This value is required.</span
              >
            </div>
          </b-form-group>
        </div>
      </div>

      <div class="row">
        <div class="col-md-4">
          <label>Current Default Billing</label>
          <multiselect
            v-model="form.defaultBilling"
            :options="billingTypes"
            :class="{
              'is-invalid': submitted && $v.form.defaultBilling.$error,
            }"
            placeholder="Select billing type"
            label="label"
          ></multiselect>
          <div
            v-if="submitted && $v.form.defaultBilling.$error"
            class="invalid-feedback"
          >
            <span v-if="!$v.form.defaultBilling.required"
              >This value is required.</span
            >
          </div>
        </div>
        <div class="col-md-4">
          <label>Business Type</label>
          <multiselect
            v-model="form.businessType"
            :options="businessTypes"
            :class="{
              'is-invalid': submitted && $v.form.businessType.$error,
            }"
            placeholder="Business Type"
            label="label"
          ></multiselect>

          <div
            v-if="submitted && $v.form.businessType.$error"
            class="invalid-feedback"
          >
            <span v-if="!$v.form.businessType.required"
              >This value is required.</span
            >
          </div>
        </div>
        <div class="col-md-4">
          <label>Partner Type</label>
          <multiselect
            v-model="form.partnerType"
            :options="partnerTypes"
            :class="{
              'is-invalid': submitted && $v.form.partnerType.$error,
            }"
            placeholder="Partner Type"
            label="label"
          ></multiselect>

          <div
            v-if="submitted && $v.form.partnerType.$error"
            class="invalid-feedback"
          >
            <span v-if="!$v.form.partnerType.required"
              >This value is required.</span
            >
          </div>
        </div>
      </div>
      <div class="row">
        <div class="col-md-6">
          <photoshop-picker v-model="sidebarColor" />
        </div>
        <div class="col-md-6">
          <b-form-group
            class="mb-3"
            label="Partner URL"
            label-for="formrow-partnerurl-input"
          >
            <b-form-input
              id="formrow-partnerurl-input"
              type="text"
              placeholder="Partner URL"
              v-model="form.partnerUrl"
              name="partnerUrl"
              :class="{
                'is-invalid': submitted && $v.form.partnerUrl.$error,
              }"
            ></b-form-input>
            <div
              v-if="submitted && $v.form.partnerUrl.$error"
              class="invalid-feedback"
            >
              <span v-if="!$v.form.partnerUrl.required"
                >This value is required.</span
              >
              <span v-else-if="!$v.form.partnerUrl.url"
                >Please provide a valid url.</span
              >
            </div>
          </b-form-group>
        </div>
        <div class="col-md-6">
          <b-form-group
            class="mb-3"
            label="Default System Email"
            label-for="formrow-systememail-input"
          >
            <b-form-input
              id="formrow-systememail-input"
              type="text"
              placeholder="Default system email"
              v-model="form.systemEmail"
              name="systemEmail"
              :class="{
                'is-invalid': submitted && $v.form.systemEmail.$error,
              }"
            ></b-form-input>
            <div
              v-if="submitted && $v.form.systemEmail.$error"
              class="invalid-feedback"
            >
              <span v-if="!$v.form.systemEmail.required"
                >This value is required.</span
              >
              <span v-else-if="!$v.form.partnerUrl.email"
                >Please provide a valid email.</span
              >
            </div>
          </b-form-group>
        </div>
        <div class="col-md-6">
          <b-form-group
            class="mb-3"
            label="Default System Email"
            label-for="formrow-systememail-input"
          >
            <b-form-input
              id="formrow-partneruseremail-input"
              type="text"
              placeholder="Invite partner user email"
              v-model="form.partneruser"
              name="partneruseremail"
              :class="{
                'is-invalid': submitted && $v.form.partneruseremail.$error,
              }"
            ></b-form-input>
            <div
              v-if="submitted && $v.form.partneruseremail.$error"
              class="invalid-feedback"
            >
              <span v-if="!$v.form.partneruseremail.required"
                >This value is required.</span
              >
              <span v-else-if="!$v.form.partneruseremail.email"
                >Please provide a valid email.</span
              >
            </div>
          </b-form-group>
        </div>
      </div>
    </b-form>
  </div>
</template>
<script>
import { required, email, url } from 'vuelidate/lib/validators';
import Multiselect from 'vue-multiselect';
import * as _ from 'lodash';
import { Photoshop } from 'vue-color';
import { BForm,BButton,BFormGroup,BFormInput} from 'bootstrap-vue-next'



export default {
  components: {
    Multiselect,
    'photoshop-picker': Photoshop,
    BForm,BButton,BFormGroup,BFormInput
  },
  props: {
    billingTypes: {
      type: Array,
      required: true,
    },
    businessTypes: {
      type: Array,
      required: true,
    },
    partnerTypes: {
      type: Array,
      required: true,
    },
    addPartnershipLoading: {
      type: Boolean,
      required: true,
    },
  },
  data() {
    return {
      avatar: null,
      form: {
        partnershipName: '',
        defaultBilling: null,
        businessType: null,
        partnerType: null,
        partnerUrl: '',
        systemEmail: '',
        partneruseremail: '',
      },
      sidebarColor: '#2a3042',
      submitted: false,
    };
  },
  validations: {
    form: {
      partnershipName: { required },
      defaultBilling: { required },
      businessType: { required },
      partnerType: { required },
      partnerUrl: { required, url },
      systemEmail: { required, email },
      partneruseremail: { required, email },
    },
  },

  computed: {
    avatarName() {
      if (!this.form.partnershipName) {
        return '';
      }
      return this.form.partnershipName.charAt(0).toUpperCase();
    },
    renderImageUrl() {
      if (this.avatar == null) {
        return null;
      }
      const image =
        typeof this.avatar === 'object'
          ? URL.createObjectURL(this.avatar)
          : this.avatar;
      return image;
    },
  },
  methods: {
    formSubmit() {
      this.submitted = true;
      // this.$v.$touch();
      // if (this.$v.$invalid) {
      //   return;
      // }
      const formData = new FormData();
      formData.append('data', JSON.stringify(this.form));
      if (this.avatar !== null && typeof this.avatar === 'object') {
        formData.append('file', this.avatar);
      }
      this.$emit('formSubmit', formData);
    },
    onChangeAvatar(e) {
      const { files } = e.target;
      if (files && files[0]) {
        if (files[0].type.includes('image')) {
          this.avatar = files[0];
        }
      }
    },
    resetForm() {
      this.form = {
        partnershipName: '',
        defaultBilling: null,
        businessType: null,
        partnerType: null,
        partnerUrl: '',
        systemEmail: '',
        partneruseremail: '',
      };
      this.avatar = null;
    },
  },
};
</script>