From 240013e649145789f434062d86c09cfaca768a93 Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:08:17 -0300 Subject: [PATCH 01/14] Fix values passing for compound metadata. --- src/views/admin/js/store/modules/item/actions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/admin/js/store/modules/item/actions.js b/src/views/admin/js/store/modules/item/actions.js index e41f0b032..adbca3a29 100644 --- a/src/views/admin/js/store/modules/item/actions.js +++ b/src/views/admin/js/store/modules/item/actions.js @@ -6,7 +6,7 @@ export const updateItemMetadatum = ({ commit }, { item_id, metadatum_id, values, if (parent_meta_id != undefined && parent_meta_id != null && parent_meta_id != false) body['parent_meta_id'] = parent_meta_id; - + return new Promise((resolve, reject) => { axios.tainacanApi.put(`/item/${item_id}/metadata/${metadatum_id}`, body) .then( res => { @@ -45,7 +45,7 @@ export const fetchItemMetadata = ({ commit }, item_id) => { export const fetchCompoundFirstParentMetaId = ({ commit }, { item_id, metadatum_id }) => { return new Promise((resolve, reject) => { - axios.tainacanApi.put(`/item/${item_id}/metadata/${metadatum_id}`, { value: [] }) + axios.tainacanApi.put(`/item/${item_id}/metadata/${metadatum_id}`, { values: [] }) .then( res => { const parentMetaId = res.data.parent_meta_id; resolve(parentMetaId); From d41885f1fc5a21882326a3155405a375159f864c Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:09:21 -0300 Subject: [PATCH 02/14] Presets second tab as active if a single valued taxonomy metadata already has value. --- .../other/checkbox-radio-metadata-input.vue | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/views/admin/components/other/checkbox-radio-metadata-input.vue b/src/views/admin/components/other/checkbox-radio-metadata-input.vue index cf5b53fb3..0a9505181 100644 --- a/src/views/admin/components/other/checkbox-radio-metadata-input.vue +++ b/src/views/admin/components/other/checkbox-radio-metadata-input.vue @@ -443,6 +443,7 @@ this.initializeValues(); } }); + }, beforeUnmount() { // Cancels previous Request @@ -795,6 +796,24 @@ this.createColumn(res, key, option ? option.label : null); this.isColumnLoading = false; + + // If this is the first time loading, these will be undefined + if ( + option === undefined && + key === undefined && + index === undefined + ) { + // Here we already have a value for the hasToDisplaySearchBar. Thus we can decide if we should + // Preset the second tab as active to display selected values + if ( + ( Array.isArray(this.selected) ? (this.selected.length) : this.selected ) && + this.metadatum.multiple != 'yes' && + this.hasToDisplaySearchBar + ) { + this.fetchSelectedLabels(); + this.activeTab = 1; + } + } }) .catch(error => { this.$console.log(error); From 41ac71cdaf8bc454bf739ea5c13df5f2bc82a9c1 Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:10:05 -0300 Subject: [PATCH 03/14] Fixes lack of value check in text type metadata. --- src/views/admin/components/metadata-types/text/TainacanText.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/components/metadata-types/text/TainacanText.vue b/src/views/admin/components/metadata-types/text/TainacanText.vue index e2ec073dd..6921a908c 100644 --- a/src/views/admin/components/metadata-types/text/TainacanText.vue +++ b/src/views/admin/components/metadata-types/text/TainacanText.vue @@ -16,7 +16,7 @@ @input="($event) => getMask ? null : onInput($event.target.value)" @blur="onBlur"> {{ value.length }} / {{ getMaxlength }} From b11bd90bba115f03756c212365465d4b623f6ab9 Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:11:56 -0300 Subject: [PATCH 04/14] Uses intersection observer to trigger geocordinate map resizing instead of event from parent components. --- .../geocoordinate/TainacanGeoCoordinate.vue | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/views/admin/components/metadata-types/geocoordinate/TainacanGeoCoordinate.vue b/src/views/admin/components/metadata-types/geocoordinate/TainacanGeoCoordinate.vue index d2803e12e..7e192bcd8 100644 --- a/src/views/admin/components/metadata-types/geocoordinate/TainacanGeoCoordinate.vue +++ b/src/views/admin/components/metadata-types/geocoordinate/TainacanGeoCoordinate.vue @@ -124,6 +124,7 @@ latitude: -14.4086569, longitude: -51.31668, selected: [], + mapIntersectionObserver: null } }, computed: { @@ -193,25 +194,26 @@ } }, created() { - if (this.value && this.value != "") + if ( this.value && this.value != "" ) this.selected = Array.isArray(this.value) ? (this.value.length == 1 && this.value[0] == "" ? [] : this.value) : [this.value]; - - // Listens to window resize event to update map bounds - // We need to pass mapComponentRef here instead of creating it inside the function - // otherwise the listener would conflict when multiple geo metadata are inserted. - const mapComponentRef = 'map--' + this.itemMetadatumIdentifier; - this.$emitter.on('itemEditionFormResize', () => this.handleWindowResize(mapComponentRef)); }, mounted() { nextTick(() => { const mapComponentRef = 'map--' + this.itemMetadatumIdentifier; this.handleWindowResize(mapComponentRef); + + // Intersection Observer to handle map resize + if ( this.$refs[mapComponentRef] && this.$refs[mapComponentRef]['$el'] ) { + this.mapIntersectionObserver = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) + this.handleWindowResize(mapComponentRef); + }); + }, { threshold: 0.1 }); + this.mapIntersectionObserver.observe(this.$refs[mapComponentRef]['$el']); + } }); }, - beforeUnmount() { - const mapComponentRef = 'map--' + this.itemMetadatumIdentifier; - this.$emitter.off('itemEditionFormResize', () => this.handleWindowResize(mapComponentRef)); - }, methods: { onUpdateFromLatitudeInput: _.debounce( function(value) { let newLatitude = value; From 49bc993438b8becdee39befb56dadd06ee5ecdd6 Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:14:48 -0300 Subject: [PATCH 05/14] Adds classes to hidden sections. --- .../components/edition/item-edition-form.vue | 81 +++++++++---------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/src/views/admin/components/edition/item-edition-form.vue b/src/views/admin/components/edition/item-edition-form.vue index 45b77ac88..ecd435a46 100644 --- a/src/views/admin/components/edition/item-edition-form.vue +++ b/src/views/admin/components/edition/item-edition-form.vue @@ -416,45 +416,45 @@ :message="metadataSection.description" /> - - + @@ -1696,13 +1696,10 @@ export default { }, onChangeCollapse(event, index) { - if (event && !this.metadataCollapses[index] && this.itemMetadata[index].metadatum && this.itemMetadata[index].metadatum['metadata_type'] === "Tainacan\\Metadata_Types\\GeoCoordinate") - this.$emitter.emit('itemEditionFormResize'); - this.metadataCollapses.splice(index, 1, event); }, toggleMetadataSectionCollapse(sectionIndex) { - if (!this.isMetadataNavigation) + if ( !this.isMetadataNavigation ) Object.assign( this.metadataSectionCollapses, { [sectionIndex]: (this.formErrorMessage ? true : !this.metadataSectionCollapses[sectionIndex]) }); }, onDeletePermanently() { From a6a6e7b89e07757ba728e6d8d3bac55ca2da4230 Mon Sep 17 00:00:00 2001 From: mateuswetah Date: Mon, 5 Aug 2024 18:15:56 -0300 Subject: [PATCH 06/14] Creates select filter for taxonomies and updates max options feature for existing select filter. #912. --- .../repositories/class-tainacan-filters.php | 2 +- src/classes/tainacan-creator.php | 2 +- .../edition/filter-edition-form.vue | 6 +- .../class-tainacan-filter-type-helper.php | 1 + .../selectbox/TainacanFilterSelectbox.vue | 15 +- .../selectbox/class-tainacan-selectbox.php | 2 +- .../filter-types/tainacan-filter-item.vue | 1 + .../taxonomy/TainacanFilterSelectbox.vue | 210 ++++++++++++++++++ .../class-tainacan-taxonomyselectbox.php | 27 +++ .../relationship/TainacanRelationship.vue | 1 + 10 files changed, 255 insertions(+), 12 deletions(-) create mode 100644 src/views/admin/components/filter-types/taxonomy/TainacanFilterSelectbox.vue create mode 100644 src/views/admin/components/filter-types/taxonomy/class-tainacan-taxonomyselectbox.php diff --git a/src/classes/repositories/class-tainacan-filters.php b/src/classes/repositories/class-tainacan-filters.php index 68415bf13..3212b3411 100644 --- a/src/classes/repositories/class-tainacan-filters.php +++ b/src/classes/repositories/class-tainacan-filters.php @@ -107,7 +107,7 @@ class Filters extends Repository { 'map' => 'meta', 'title' => __( 'Max of options', 'tainacan' ), 'type' => ['integer', 'string'], - 'description' => __( 'The max number of options to be showed in filter sidebar.', 'tainacan' ), + 'description' => __( 'The maximum number of options to be loaded by default on the filter.', 'tainacan' ), 'validation' => '', 'default' => 4 ], diff --git a/src/classes/tainacan-creator.php b/src/classes/tainacan-creator.php index b022b5f4e..e3d32d68f 100644 --- a/src/classes/tainacan-creator.php +++ b/src/classes/tainacan-creator.php @@ -111,7 +111,7 @@ function tainacan_autoload($class_name) { } if( in_array('Metadata_Types', $class_path) || in_array('Filter_Types', $class_path) ){ - $exceptions = ['taxonomytaginput','taxonomycheckbox']; + $exceptions = ['taxonomytaginput','taxonomycheckbox','taxonomyselectbox']; if( in_array( strtolower( $class_name ), $exceptions) ){ $dir.= 'taxonomy/'; }else{ diff --git a/src/views/admin/components/edition/filter-edition-form.vue b/src/views/admin/components/edition/filter-edition-form.vue index 1486caba1..d8ec40059 100644 --- a/src/views/admin/components/edition/filter-edition-form.vue +++ b/src/views/admin/components/edition/filter-edition-form.vue @@ -179,7 +179,8 @@ v-model="form.max_options" name="max_options" type="number" - step="1" /> + step="1" + :max="maxOptionsLimit" />