From adcb20b715e8d497abfed28778bf03309dbe9990 Mon Sep 17 00:00:00 2001 From: formsdev <136701234+formsdev@users.noreply.github.com> Date: Mon, 18 Sep 2023 18:48:37 +0530 Subject: [PATCH] Submissions table improvements (#203) * Submissions table improvements * expoert csv fixes --------- Co-authored-by: Julien Nahum --- app/Service/Forms/FormSubmissionFormatter.php | 2 +- .../open/forms/components/FormSubmissions.vue | 35 +++++++++++++++++-- .../js/components/open/tables/OpenTable.vue | 10 +++--- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/app/Service/Forms/FormSubmissionFormatter.php b/app/Service/Forms/FormSubmissionFormatter.php index c13bb25..44534e2 100644 --- a/app/Service/Forms/FormSubmissionFormatter.php +++ b/app/Service/Forms/FormSubmissionFormatter.php @@ -96,7 +96,7 @@ class FormSubmissionFormatter // If hide hidden fields if (!$this->showHiddenFields) { - if (FormLogicPropertyResolver::isHidden($field, $this->idFormData)) { + if (FormLogicPropertyResolver::isHidden($field, $this->idFormData ?? [])) { continue; } } diff --git a/resources/js/components/open/forms/components/FormSubmissions.vue b/resources/js/components/open/forms/components/FormSubmissions.vue index 72901b0..78b68d0 100644 --- a/resources/js/components/open/forms/components/FormSubmissions.vue +++ b/resources/js/components/open/forms/components/FormSubmissions.vue @@ -41,6 +41,10 @@
+
+ +
+ import axios from 'axios' +import Fuse from 'fuse.js' +import Form from 'vform' import ScrollShadow from '../../../common/ScrollShadow.vue' import OpenTable from '../../tables/OpenTable.vue' import clonedeep from "clone-deep"; @@ -83,6 +89,9 @@ export default { properties: [], removed_properties: [], displayColumns: {}, + searchForm: new Form({ + search: '' + }) } }, mounted() { @@ -112,6 +121,24 @@ export default { return '' } return '/api/open/forms/' + this.form.id + '/submissions/export' + }, + filteredData () { + if(!this.tableData) return [] + + let filteredData = clonedeep(this.tableData) + + if (this.searchForm.search === '' || this.searchForm.search === null) { + return filteredData + } + + // Fuze search + const fuzeOptions = { + keys: this.form.properties.map((field) => field.id) + } + const fuse = new Fuse(filteredData, fuzeOptions) + return fuse.search(this.searchForm.search).map((res) => { + return res.item + }) } }, methods: { @@ -178,8 +205,10 @@ export default { }) }, dataChanged() { - this.$refs.shadows.toggleShadow() - this.$refs.shadows.calcDimensions() + if (this.$refs.shadows) { + this.$refs.shadows.toggleShadow() + this.$refs.shadows.calcDimensions() + } }, onChangeDisplayColumns() { window.localStorage.setItem('display-columns-formid-' + this.form.id, JSON.stringify(this.displayColumns)) diff --git a/resources/js/components/open/tables/OpenTable.vue b/resources/js/components/open/tables/OpenTable.vue index dfb4255..f5135aa 100644 --- a/resources/js/components/open/tables/OpenTable.vue +++ b/resources/js/components/open/tables/OpenTable.vue @@ -9,7 +9,7 @@ > @@ -42,7 +42,7 @@ { this.form.properties.forEach(col => { - if (!col.hasOwnProperty('width')) { + if (!col.hasOwnProperty('cell_width')) { if (this.allowResize && this.form !== null && document.getElementById('table-head-cell-' + col.id)) { // Within editor this.resizeCol(col, document.getElementById('table-head-cell-' + col.id).offsetWidth) @@ -230,7 +230,7 @@ export default { if (!this.form) return const columns = clonedeep(this.form.properties) const index = this.form.properties.findIndex(c => c.id === col.id) - columns[index].width = width + columns[index].cell_width = width this.$set(this.form, 'properties', columns) this.$nextTick(() => { this.$emit('resize')