mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 20:21:10 -04:00
build version 400
This commit is contained in:
133
resources/assets/js/mixins/customFields.js
Normal file
133
resources/assets/js/mixins/customFields.js
Normal file
@ -0,0 +1,133 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user