Merge pull request #4889 from sboursen-scinote/sb_SCI-7585

FIX: Clear/Close filter change - Inventory/Items filter [SCI-7585]
This commit is contained in:
artoscinote 2023-02-06 11:17:43 +01:00 committed by GitHub
commit 6d455d6b7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 71 additions and 19 deletions

View file

@ -69,7 +69,7 @@
@include font-h2; @include font-h2;
} }
.clear-filters-btn { .close {
margin-left: auto; margin-left: auto;
} }
} }
@ -120,6 +120,10 @@
padding: 1em; padding: 1em;
.apply-button { .apply-button {
margin-left: 8px;
}
.clear-filters-btn {
margin-left: auto; margin-left: auto;
} }
@ -272,6 +276,13 @@
margin-left: 0; margin-left: 0;
margin-top: .5em; margin-top: .5em;
} }
.clear-filters-btn {
margin-left: 0;
margin-top: .5em;
padding-left: 38px;
padding-right: 38px;
}
} }
} }
} }

View file

@ -120,7 +120,12 @@ window.initRepositoryFilter = () => {
this.reloadDataTable(); this.reloadDataTable();
}, },
clearFilters() { clearFilters() {
this.filters = []; this.filters = this.filters
.map(filter => {
const newFilter = { ...filter };
newFilter.data["parameters"] = {};
return newFilter;
});
this.filterName = null; this.filterName = null;
this.dataTableElement.removeAttr('data-repository-filter-json'); this.dataTableElement.removeAttr('data-repository-filter-json');
$('#modalSaveRepositoryTableFilter').data('repositoryTableFilterId', null); $('#modalSaveRepositoryTableFilter').data('repositoryTableFilterId', null);
@ -132,6 +137,9 @@ window.initRepositoryFilter = () => {
}, },
updateCurrentFilterName(name) { updateCurrentFilterName(name) {
this.filterName = name; this.filterName = name;
},
hideDropdown() {
$('#filtersDropdownButton').removeClass('open');
} }
} }
}); });

View file

@ -19,21 +19,16 @@
/> />
</div> </div>
</div> </div>
<button class="btn btn-light clear-filters-btn prevent-shrink" @click="clearFilters()"> <button type="button" class="close" @click="$emit('hide-dropdown')" aria-label="<%= t('general.close') %>">
<i class="fas fa-times-circle"></i> <span aria-hidden="true">&times;</span>
{{ i18n.t('repositories.show.filters.clear') }}
</button> </button>
</div> </div>
<div class="filters-list"> <FiltersList
<FilterElement :filters="filters"
v-for="(filter, index) in filters" :my_modules="my_modules"
:key="filter.id" :key="filterListKey ? 1 : 0"
:filter.sync="filters[index]" @filter:update="updateFilter"
:my_modules.sync= "my_modules" @filter:delete="deleteFilter" />
@filter:update="updateFilter"
@filter:delete="filters.splice(index, 1)"
/>
</div>
<div class="footer"> <div class="footer">
<div id="filtersColumnsDropdown" class="dropup filters-columns-dropdown" @click="toggleColumnsFilters"> <div id="filtersColumnsDropdown" class="dropup filters-columns-dropdown" @click="toggleColumnsFilters">
<button class="btn btn-secondary add-filter prevent-shrink" > <button class="btn btn-secondary add-filter prevent-shrink" >
@ -50,6 +45,9 @@
/> />
</div> </div>
</div> </div>
<button class="btn btn-secondary clear-filters-btn prevent-shrink" @click="clearFilters">
{{ i18n.t('repositories.show.filters.clear') }}
</button>
<button @click="$emit('filters:apply')" class="btn btn-primary apply-button prevent-shrink"> <button @click="$emit('filters:apply')" class="btn btn-primary apply-button prevent-shrink">
{{ i18n.t('repositories.show.filters.apply') }} {{ i18n.t('repositories.show.filters.apply') }}
</button> </button>
@ -59,7 +57,7 @@
<script> <script>
import ColumnElement from 'vue/repository_filter/column.vue' import ColumnElement from 'vue/repository_filter/column.vue'
import FilterElement from 'vue/repository_filter/filter.vue' import FiltersList from 'vue/repository_filter/filters_list.vue'
import SavedFilterElement from 'vue/repository_filter/saved_filter.vue' import SavedFilterElement from 'vue/repository_filter/saved_filter.vue'
export default { export default {
@ -76,10 +74,11 @@
data() { data() {
return { return {
filters: this.defaultFilters, filters: this.defaultFilters,
savedFilterScrollbar: null savedFilterScrollbar: null,
filterListKey: true
} }
}, },
components: { ColumnElement, FilterElement, SavedFilterElement }, components: { ColumnElement, FiltersList, SavedFilterElement },
methods: { methods: {
addFilter(column) { addFilter(column) {
const id = this.filters.length ? this.filters[this.filters.length - 1].id + 1 : 1 const id = this.filters.length ? this.filters[this.filters.length - 1].id + 1 : 1
@ -92,8 +91,11 @@
this.$emit("filters:update", this.filters); this.$emit("filters:update", this.filters);
}, },
clearFilters() { clearFilters() {
this.filters = [];
this.$emit('filters:clear'); this.$emit('filters:clear');
this.filterListKey = !this.filterListKey;
},
deleteFilter(index) {
this.filters.splice(index, 1);
}, },
closeDropdowns() { closeDropdowns() {
this.closeColumnsFilters(); this.closeColumnsFilters();

View file

@ -0,0 +1,30 @@
<template>
<div class="filters-list">
<FilterElement
v-for="(filter, index) in filters"
:key="filter.id"
:filter.sync="filters[index]"
:my_modules.sync="my_modules"
@filter:update="updateFilter"
@filter:delete="$emit('filter:delete', index)"
/>
</div>
</template>
<script>
import FilterElement from 'vue/repository_filter/filter.vue'
export default {
name: 'FiltersList',
props: {
filters: Array,
my_modules: Array,
},
components: {FilterElement},
methods: {
updateFilter(value) {
this.$emit('filter:update', value)
}
}
}
</script>

View file

@ -33,6 +33,7 @@
@filters:apply="applyFilters" @filters:apply="applyFilters"
@filters:clear="clearFilters" @filters:clear="clearFilters"
@filters:update="updateFilters" @filters:update="updateFilters"
@hide-dropdown="hideDropdown"
/> />
</div> </div>
</div> </div>