diff --git a/package-lock.json b/package-lock.json index 9410d46..808b933 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "vue-signature-pad": "^2.0.5", "vue2-editor": "^2.10.3", "vue3-vt-notifications": "^1.0.0", - "vuedraggable": "^2.24.3", + "vuedraggable": "^4.1.0", "vuex": "^4.1.0" }, "devDependencies": { @@ -9940,9 +9940,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", + "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10941,6 +10941,19 @@ "vue-class-component": "*" } }, + "node_modules/query-builder-vue/node_modules/vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "dependencies": { + "sortablejs": "1.10.2" + } + }, + "node_modules/query-builder-vue/node_modules/vuedraggable/node_modules/sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, "node_modules/query-string": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", @@ -13986,17 +13999,20 @@ } }, "node_modules/vuedraggable": { - "version": "2.24.3", - "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", - "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", "dependencies": { - "sortablejs": "1.10.2" + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" } }, "node_modules/vuedraggable/node_modules/sortablejs": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", - "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" }, "node_modules/vuex": { "version": "4.1.0", diff --git a/package.json b/package.json index 506b5cb..feb5c40 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "vue-signature-pad": "^2.0.5", "vue2-editor": "^2.10.3", "vue3-vt-notifications": "^1.0.0", - "vuedraggable": "^2.24.3", + "vuedraggable": "^4.1.0", "vuex": "^4.1.0" }, "devDependencies": { diff --git a/resources/js/components/common/EditableDiv.vue b/resources/js/components/common/EditableDiv.vue index 97a0408..4938a9d 100644 --- a/resources/js/components/common/EditableDiv.vue +++ b/resources/js/components/common/EditableDiv.vue @@ -1,12 +1,11 @@ - diff --git a/resources/js/components/open/forms/OpenForm.vue b/resources/js/components/open/forms/OpenForm.vue index 1ae9d3d..d6a0abd 100644 --- a/resources/js/components/open/forms/OpenForm.vue +++ b/resources/js/components/open/forms/OpenForm.vue @@ -6,31 +6,28 @@
- + + + @@ -71,6 +68,9 @@ import FormLogicPropertyResolver from '../../../forms/FormLogicPropertyResolver. import OpenFormField from './OpenFormField.vue' import draggable from 'vuedraggable' import FormPendingSubmissionKey from '../../../mixins/forms/form-pending-submission-key.js' + +draggable.compatConfig = { MODE: 3 } + const VueHcaptcha = () => import('@hcaptcha/vue3-hcaptcha') export default { @@ -290,7 +290,9 @@ export default { } }, async getSubmissionData () { - if (!this.form || !this.form.editable_submissions || !this.form.submission_id) { return null } + if (!this.form || !this.form.editable_submissions || !this.form.submission_id) { + return null + } await this.$store.dispatch('open/records/loadRecord', axios.get('/api/forms/' + this.form.slug + '/submissions/' + this.form.submission_id).then((response) => { return { submission_id: this.form.submission_id, ...response.data.data } @@ -323,11 +325,11 @@ export default { if (field.type === 'date' && field.prefill_today === true) { // For Prefill with 'today' const dateObj = new Date() let currentDate = dateObj.getFullYear() + '-' + - String(dateObj.getMonth() + 1).padStart(2, '0') + '-' + - String(dateObj.getDate()).padStart(2, '0') + String(dateObj.getMonth() + 1).padStart(2, '0') + '-' + + String(dateObj.getDate()).padStart(2, '0') if (field.with_time === true) { currentDate += 'T' + String(dateObj.getHours()).padStart(2, '0') + ':' + - String(dateObj.getMinutes()).padStart(2, '0') + String(dateObj.getMinutes()).padStart(2, '0') } pendingData[field.id] = currentDate } @@ -369,7 +371,7 @@ export default { String(dateObj.getDate()).padStart(2, '0') if (field.with_time === true) { currentDate += 'T' + String(dateObj.getHours()).padStart(2, '0') + ':' + - String(dateObj.getMinutes()).padStart(2, '0') + String(dateObj.getMinutes()).padStart(2, '0') } formData[field.id] = currentDate } else { // Default prefill if any diff --git a/resources/js/components/open/forms/components/FormFieldsEditor.vue b/resources/js/components/open/forms/components/FormFieldsEditor.vue index 4521b04..27557a6 100644 --- a/resources/js/components/open/forms/components/FormFieldsEditor.vue +++ b/resources/js/components/open/forms/components/FormFieldsEditor.vue @@ -1,146 +1,167 @@ + @click="openAddFieldSidebar" + > + xmlns="http://www.w3.org/2000/svg" + > + stroke-linecap="round" stroke-linejoin="round" + /> Add block - @@ -149,8 +170,9 @@ import draggable from 'vuedraggable' import ProTag from '../../../common/ProTag.vue' import clonedeep from 'clone-deep' import EditableDiv from '../../../common/EditableDiv.vue' -import VButton from "../../../common/Button.vue"; +import VButton from '../../../common/Button.vue' +draggable.compatConfig = { MODE: 3 } export default { name: 'FormFieldsEditor', components: { @@ -160,7 +182,7 @@ export default { EditableDiv }, - data() { + data () { return { formFields: [], removing: null @@ -169,11 +191,11 @@ export default { computed: { form: { - get() { + get () { return this.$store.state['open/working_form'].content }, /* We add a setter */ - set(value) { + set (value) { this.$store.commit('open/working_form/set', value) } } @@ -182,14 +204,14 @@ export default { watch: { formFields: { deep: true, - handler() { + handler () { this.$set(this.form, 'properties', this.formFields) } }, - 'form.properties':{ + 'form.properties': { deep: true, - handler() { + handler () { // If different, then update if (this.form.properties.length !== this.formFields.length || JSON.stringify(this.form.properties) !== JSON.stringify(this.formFields)) { @@ -200,15 +222,15 @@ export default { }, - mounted() { + mounted () { this.init() }, methods: { - onChangeName(field, newName) { + onChangeName (field, newName) { this.$set(field, 'name', newName) }, - toggleHidden(field) { + toggleHidden (field) { this.$set(field, 'hidden', !field.hidden) if (field.hidden) { this.$set(field, 'required', false) @@ -217,38 +239,38 @@ export default { this.$set(field, 'generates_auto_increment_id', false) } }, - toggleRequired(field) { + toggleRequired (field) { this.$set(field, 'required', !field.required) if (field.required) { this.$set(field, 'hidden', false) } }, - getDefaultFields() { + getDefaultFields () { return [ { - "name": "Name", - "type": "text", - "hidden": false, - "required": true, - "id": this.generateUUID(), + name: 'Name', + type: 'text', + hidden: false, + required: true, + id: this.generateUUID() }, { - "name": "Email", - "type": "email", - "hidden": false, - "id": this.generateUUID(), + name: 'Email', + type: 'email', + hidden: false, + id: this.generateUUID() }, { - "name": "Message", - "type": "text", - "hidden": false, - "multi_lines": true, - "id": this.generateUUID(), + name: 'Message', + type: 'text', + hidden: false, + multi_lines: true, + id: this.generateUUID() } - ]; + ] }, - init() { - if (this.$route.name === 'forms.create' || this.$route.name === 'forms.create.guest') { // Set Default fields + init () { + if (this.$route.name === 'forms.create' || this.$route.name === 'forms.create.guest') { // Set Default fields this.formFields = (this.form.properties.length > 0) ? clonedeep(this.form.properties) : this.getDefaultFields() } else { this.formFields = clonedeep(this.form.properties).map((field) => { @@ -263,7 +285,7 @@ export default { } this.$set(this.form, 'properties', this.formFields) }, - generateUUID() { + generateUUID () { let d = new Date().getTime()// Timestamp let d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1000)) || 0// Time in microseconds since page-load or 0 if unsupported return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { @@ -278,7 +300,7 @@ export default { return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16) }) }, - formatType(field) { + formatType (field) { let type = field.type.replace('_', ' ') if (!type.startsWith('nf')) { type = type + ' Input' @@ -290,29 +312,21 @@ export default { } return type }, - editOptions(index) { + editOptions (index) { this.$store.commit('open/working_form/openSettingsForField', index) }, - removeBlock(blockIndex) { + removeBlock (blockIndex) { const newFields = clonedeep(this.formFields) newFields.splice(blockIndex, 1) this.$set(this, 'formFields', newFields) this.closeSidebar() }, - closeSidebar() { + closeSidebar () { this.$store.commit('open/working_form/closeEditFieldSidebar') }, - openAddFieldSidebar() { + openAddFieldSidebar () { this.$store.commit('open/working_form/openAddFieldSidebar', null) } } } - - diff --git a/resources/js/components/open/forms/components/form-components/FormInformation.vue b/resources/js/components/open/forms/components/form-components/FormInformation.vue index 26a53f4..287ad85 100644 --- a/resources/js/components/open/forms/components/form-components/FormInformation.vue +++ b/resources/js/components/open/forms/components/form-components/FormInformation.vue @@ -1,9 +1,9 @@