Files
crater/resources/assets/js/mixins/customFields.js
Mohit Panjwani 89ee58590c build version 400
2020-12-02 17:54:08 +05:30

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)
}
})
},
},
}