mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-04 06:23:17 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import InputField from '../components/custom-fields/InputField.vue'
 | 
						|
import SwitchField from '../components/custom-fields/SwitchField'
 | 
						|
import TimeField from '../components/custom-fields/TimeField'
 | 
						|
import DropdownField from '../components/custom-fields/DropdownField'
 | 
						|
import DateTimeField from '../components/custom-fields/DateTimeField'
 | 
						|
import DateField from '../components/custom-fields/DateField'
 | 
						|
import TextAreaField from '../components/custom-fields/TextAreaField'
 | 
						|
import UrlField from '../components/custom-fields/UrlField.vue'
 | 
						|
import PhoneField from '../components/custom-fields/PhoneField.vue'
 | 
						|
import NumberField from '../components/custom-fields/NumberField.vue'
 | 
						|
 | 
						|
import { mapActions } from 'vuex'
 | 
						|
 | 
						|
export default {
 | 
						|
  components: {
 | 
						|
    InputField,
 | 
						|
    SwitchField,
 | 
						|
    TimeField,
 | 
						|
    DropdownField,
 | 
						|
    DateTimeField,
 | 
						|
    DateField,
 | 
						|
    TextAreaField,
 | 
						|
    UrlField,
 | 
						|
    PhoneField,
 | 
						|
    NumberField,
 | 
						|
  },
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      formData: {
 | 
						|
        customFields: [],
 | 
						|
      },
 | 
						|
      invalidFields: [],
 | 
						|
      customFields: [],
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    ...mapActions('customFields', ['fetchCustomFields']),
 | 
						|
    async setInitialCustomFields(type = null) {
 | 
						|
      let response = await this.fetchCustomFields({ type: type, limit: 'all' })
 | 
						|
      this.customFields = response.data.customFields.data.map((_f) => {
 | 
						|
        return { ..._f, cfid: _f.id }
 | 
						|
      })
 | 
						|
      this.setRemainingCustomFieldsValue()
 | 
						|
    },
 | 
						|
    setEditCustomFields(fields, customFields) {
 | 
						|
      this.customFields = fields.map((field) => {
 | 
						|
        field.label = field.custom_field.label
 | 
						|
        field.cfid = field.custom_field.id
 | 
						|
        field.options = field.custom_field.options
 | 
						|
        field.placeholder = field.custom_field.placeholder
 | 
						|
        field.is_required = field.custom_field.is_required
 | 
						|
        field.order = field.custom_field.order
 | 
						|
        return field
 | 
						|
      })
 | 
						|
 | 
						|
      let currentCustomFieldIds = customFields.map((field) => field.id)
 | 
						|
      let editCustomFieldIds = fields.map((field) => field.custom_field_id)
 | 
						|
      let remainingCustomFieldIds = this.$utils.arrayDifference(
 | 
						|
        currentCustomFieldIds,
 | 
						|
        editCustomFieldIds
 | 
						|
      )
 | 
						|
      remainingCustomFieldIds.forEach((id) => {
 | 
						|
        let data = customFields.find((field) => field.id == id)
 | 
						|
        this.customFields.push({ ...data, cfid: data.id })
 | 
						|
      })
 | 
						|
 | 
						|
      this.setRemainingCustomFieldsValue(true)
 | 
						|
    },
 | 
						|
    setCustomFieldValue(data) {
 | 
						|
      let position = this.formData.customFields.findIndex(
 | 
						|
        (field) => field.id == data.field.cfid
 | 
						|
      )
 | 
						|
 | 
						|
      // check field has value so removed in invalidFields array
 | 
						|
      let indexInInvalidField = this.invalidFields.findIndex(
 | 
						|
        (field) => field.id == data.field.cfid
 | 
						|
      )
 | 
						|
      if (indexInInvalidField >= 0) {
 | 
						|
        if (data.value) {
 | 
						|
          this.invalidFields.splice(indexInInvalidField, 1)
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      // set data in formData.customFields
 | 
						|
      if (position >= 0) {
 | 
						|
        this.formData.customFields[position].value = data.value
 | 
						|
        return true
 | 
						|
      }
 | 
						|
      this.formData.customFields.push({
 | 
						|
        id: data.field.cfid,
 | 
						|
        value: data.value,
 | 
						|
      })
 | 
						|
      return true
 | 
						|
    },
 | 
						|
    setRemainingCustomFieldsValue() {
 | 
						|
      let existingCustomFieldIds = this.formData.customFields.map((_f) => _f.id)
 | 
						|
      let customFieldIds = this.customFields.map((_f) => _f.cfid)
 | 
						|
      let remainingCustomFieldIds = this.$utils.arrayDifference(
 | 
						|
        customFieldIds,
 | 
						|
        existingCustomFieldIds
 | 
						|
      )
 | 
						|
      remainingCustomFieldIds.forEach((id) => {
 | 
						|
        let field = this.customFields.find((field) => field.cfid == id)
 | 
						|
        this.formData.customFields.push({
 | 
						|
          id: field.cfid,
 | 
						|
          isRequired: field.is_required,
 | 
						|
          value: field.defaultAnswer,
 | 
						|
        })
 | 
						|
      })
 | 
						|
      this.customFields = _.sortBy(this.customFields, (_cf) => _cf.order)
 | 
						|
    },
 | 
						|
    getInvalidFields() {
 | 
						|
      return this.formData.customFields.filter(
 | 
						|
        (field) =>
 | 
						|
          field.isRequired &&
 | 
						|
          (field.value == null || field.value == undefined || field.value == '')
 | 
						|
      )
 | 
						|
    },
 | 
						|
    touchCustomField() {
 | 
						|
      return new Promise((resolve, reject) => {
 | 
						|
        try {
 | 
						|
          if (this.getInvalidFields() <= 0) {
 | 
						|
            resolve({ error: false })
 | 
						|
          }
 | 
						|
          this.invalidFields = this.getInvalidFields()
 | 
						|
          resolve({ error: true })
 | 
						|
        } catch (error) {
 | 
						|
          reject(error)
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
  },
 | 
						|
}
 |