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