mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-30 21:21:09 -04: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)
 | |
|         }
 | |
|       })
 | |
|     },
 | |
|   },
 | |
| }
 |