Loading ui/src/views/ActivityList.vue +98 −4 Changes for ui/src/views/ActivityList.vue: 98 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ <h4> <i class="icon-sliders"></i> Filtres</h4> <div class="row"> <div class="col-md-8"> <select name="" id="" placeholder="Ajouter un filtre" @change.prevent="handlerAddFilter" Loading @@ -96,6 +98,32 @@ <option value="">Ajouter un filtre</option> <option :value="f.key" v-for="(f,k) in filtersOptions.filters">{{ f.label }}</option> </select> </div> <div class="col-md-4"> <Select editable v-model="memorizeText" :options="memorized" optionLabel="name" @change="handlerChangeMemorize" placeholder="Filtres enregistrés" class="w-full md:w-56" > <template #option="slotProps"> <div class="flex items-center"> <span> {{ slotProps.option.name }} </span> </div> </template> </Select> <button class="btn btn-primary" @click.prevent="handlerMemorizeSave"> <i class="icon-floppy"></i> </button> <button class="btn btn-danger" v-if="memorizeText && memorizeText.name" @click.prevent="handlerMemorizeDelete"> <i class="icon-trash"></i> </button> </div> </div> <section class="activity-filters"> <div v-for="filter in filters"> <activity-search-filter-type Loading Loading @@ -361,6 +389,10 @@ import ActivitySearchFilterGenericText from "../components/activitysearch/Activi import ActivitySearchFilterGenericListStatic from "../components/activitysearch/ActivitySearchFilterGenericListStatic.vue"; import ActivitySearchFilterGenericListRest from "../components/activitysearch/ActivitySearchFilterGenericListRest.vue"; import {Select} from "primevue"; export default { components: { ActivitySearchFilterGenericListStatic, Loading @@ -380,6 +412,7 @@ export default { ActivitySearchFilterValueMulti, ActivityTypeSelect, Pagination, Select, VueJsonPretty }, props: { Loading @@ -394,9 +427,14 @@ export default { }, computed: { currentUrl(){ return document.location; }, excludeOrg() { return this.exclude.map(i => parseInt(i)); }, fieldsUI() { let fieldsUi = []; for (var p in this.filtersOptions.fields) { Loading Loading @@ -437,6 +475,13 @@ export default { ids_export_warning: "", export_url: "", memorized: [ {name: "Exemple A avec un texte plus long", value: "[]"}, {name: "Exemple B", value: "[]"} ], memorizeVisible: false, memorizeText: "", // Résultats results: [], exclude: [], Loading Loading @@ -493,13 +538,14 @@ export default { }, handlerAddFilterFromRaw(raw, forceReload = false) { console.log('handlerAddFilterFromRaw', raw); let d = raw.split(";"); let type = d[0]; let value1 = d[1] || null; let value2 = d[2] || null; let value3 = d[3] || null; console.log(raw, type); let component = type; let params = {}; Loading @@ -512,8 +558,6 @@ export default { if (this.filtersOptions.filters[type] && this.filtersOptions.filters[type].params) { params = this.filtersOptions.filters[type].params; } console.log("Component", component); let filter = { raw: raw, Loading @@ -539,9 +583,11 @@ export default { let out = []; console.log("Affectation des filters après recherche"); jsonDatas.forEach(item => { let component = item.type; if (this.filtersOptions.filters[item.type] && this.filtersOptions.filters[item.type].component) { item.component = this.filtersOptions.filters[item.type].component; component = this.filtersOptions.filters[item.type].component; } item.component = component; if (this.filtersOptions.filters[item.type] && this.filtersOptions.filters[item.type].params) { item.params = this.filtersOptions.filters[item.type].params; } Loading Loading @@ -699,6 +745,52 @@ export default { } else { this.selectedFields.push(field); } }, //////////////////////////////////// MEMORIZED memorizeLoad() { let saved = localStorage.getItem('memorized_filters'); this.memorized = saved ? JSON.parse(saved) : []; console.log(Object.keys(this.memorized)); // On sélectionne le filtre actif si besoin Object.keys(this.memorized).forEach(key => { let m = this.memorized[key]; if( m.url && m.url.href == this.currentUrl ){ this.memorizeText = m; } }); console.log("Memorized loaded"); }, handlerChangeMemorize() { console.log("»»» CHANGE"); if( this.memorizeText && this.memorizeText.url ){ console.log("URL", this.memorizeText.url.href) document.location = this.memorizeText.url.href; } }, handlerMemorizeSave() { if( this.memorizeText.hasOwnProperty('name') ){ this.memorizeText.url = document.location; } else { let added = { name: this.memorizeText, url: document.location }; this.memorized.push(added); this.memorizeText = added; } localStorage.setItem('memorized_filters', JSON.stringify(this.memorized)); }, handlerMemorizeDelete(){ if( this.memorizeText && this.memorizeText.name ){ console.log("Suppression", this.memorized.indexOf(this.memorizeText)) this.memorized.splice(this.memorized.indexOf(this.memorizeText, 1)); this.memorizeText = ""; } } }, Loading @@ -719,6 +811,7 @@ export default { }, mounted() { this.memorizeLoad(); const params = new URLSearchParams(window.location.search); this.searchText = params.get("q") ?? ""; this.page = params.has('page') ? params.get("page") : 1; Loading @@ -741,6 +834,7 @@ export default { .filterCtrl { border: 1px solid rgba(0, 0, 0, 0); } .compactable.hoverCtl { .filterCtrl:hover { border: 1px solid rgb(103, 176, 211) !important; Loading Loading
ui/src/views/ActivityList.vue +98 −4 Changes for ui/src/views/ActivityList.vue: 98 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ <h4> <i class="icon-sliders"></i> Filtres</h4> <div class="row"> <div class="col-md-8"> <select name="" id="" placeholder="Ajouter un filtre" @change.prevent="handlerAddFilter" Loading @@ -96,6 +98,32 @@ <option value="">Ajouter un filtre</option> <option :value="f.key" v-for="(f,k) in filtersOptions.filters">{{ f.label }}</option> </select> </div> <div class="col-md-4"> <Select editable v-model="memorizeText" :options="memorized" optionLabel="name" @change="handlerChangeMemorize" placeholder="Filtres enregistrés" class="w-full md:w-56" > <template #option="slotProps"> <div class="flex items-center"> <span> {{ slotProps.option.name }} </span> </div> </template> </Select> <button class="btn btn-primary" @click.prevent="handlerMemorizeSave"> <i class="icon-floppy"></i> </button> <button class="btn btn-danger" v-if="memorizeText && memorizeText.name" @click.prevent="handlerMemorizeDelete"> <i class="icon-trash"></i> </button> </div> </div> <section class="activity-filters"> <div v-for="filter in filters"> <activity-search-filter-type Loading Loading @@ -361,6 +389,10 @@ import ActivitySearchFilterGenericText from "../components/activitysearch/Activi import ActivitySearchFilterGenericListStatic from "../components/activitysearch/ActivitySearchFilterGenericListStatic.vue"; import ActivitySearchFilterGenericListRest from "../components/activitysearch/ActivitySearchFilterGenericListRest.vue"; import {Select} from "primevue"; export default { components: { ActivitySearchFilterGenericListStatic, Loading @@ -380,6 +412,7 @@ export default { ActivitySearchFilterValueMulti, ActivityTypeSelect, Pagination, Select, VueJsonPretty }, props: { Loading @@ -394,9 +427,14 @@ export default { }, computed: { currentUrl(){ return document.location; }, excludeOrg() { return this.exclude.map(i => parseInt(i)); }, fieldsUI() { let fieldsUi = []; for (var p in this.filtersOptions.fields) { Loading Loading @@ -437,6 +475,13 @@ export default { ids_export_warning: "", export_url: "", memorized: [ {name: "Exemple A avec un texte plus long", value: "[]"}, {name: "Exemple B", value: "[]"} ], memorizeVisible: false, memorizeText: "", // Résultats results: [], exclude: [], Loading Loading @@ -493,13 +538,14 @@ export default { }, handlerAddFilterFromRaw(raw, forceReload = false) { console.log('handlerAddFilterFromRaw', raw); let d = raw.split(";"); let type = d[0]; let value1 = d[1] || null; let value2 = d[2] || null; let value3 = d[3] || null; console.log(raw, type); let component = type; let params = {}; Loading @@ -512,8 +558,6 @@ export default { if (this.filtersOptions.filters[type] && this.filtersOptions.filters[type].params) { params = this.filtersOptions.filters[type].params; } console.log("Component", component); let filter = { raw: raw, Loading @@ -539,9 +583,11 @@ export default { let out = []; console.log("Affectation des filters après recherche"); jsonDatas.forEach(item => { let component = item.type; if (this.filtersOptions.filters[item.type] && this.filtersOptions.filters[item.type].component) { item.component = this.filtersOptions.filters[item.type].component; component = this.filtersOptions.filters[item.type].component; } item.component = component; if (this.filtersOptions.filters[item.type] && this.filtersOptions.filters[item.type].params) { item.params = this.filtersOptions.filters[item.type].params; } Loading Loading @@ -699,6 +745,52 @@ export default { } else { this.selectedFields.push(field); } }, //////////////////////////////////// MEMORIZED memorizeLoad() { let saved = localStorage.getItem('memorized_filters'); this.memorized = saved ? JSON.parse(saved) : []; console.log(Object.keys(this.memorized)); // On sélectionne le filtre actif si besoin Object.keys(this.memorized).forEach(key => { let m = this.memorized[key]; if( m.url && m.url.href == this.currentUrl ){ this.memorizeText = m; } }); console.log("Memorized loaded"); }, handlerChangeMemorize() { console.log("»»» CHANGE"); if( this.memorizeText && this.memorizeText.url ){ console.log("URL", this.memorizeText.url.href) document.location = this.memorizeText.url.href; } }, handlerMemorizeSave() { if( this.memorizeText.hasOwnProperty('name') ){ this.memorizeText.url = document.location; } else { let added = { name: this.memorizeText, url: document.location }; this.memorized.push(added); this.memorizeText = added; } localStorage.setItem('memorized_filters', JSON.stringify(this.memorized)); }, handlerMemorizeDelete(){ if( this.memorizeText && this.memorizeText.name ){ console.log("Suppression", this.memorized.indexOf(this.memorizeText)) this.memorized.splice(this.memorized.indexOf(this.memorizeText, 1)); this.memorizeText = ""; } } }, Loading @@ -719,6 +811,7 @@ export default { }, mounted() { this.memorizeLoad(); const params = new URLSearchParams(window.location.search); this.searchText = params.get("q") ?? ""; this.page = params.has('page') ? params.get("page") : 1; Loading @@ -741,6 +834,7 @@ export default { .filterCtrl { border: 1px solid rgba(0, 0, 0, 0); } .compactable.hoverCtl { .filterCtrl:hover { border: 1px solid rgb(103, 176, 211) !important; Loading