From 7d4331963fe8520a7c81f06b4a03ca3951821d48 Mon Sep 17 00:00:00 2001 From: florent <flavelle@neogeo.fr> Date: Fri, 14 Jan 2022 16:30:30 +0100 Subject: [PATCH] add checkbox to display/hide user acccessible projects only --- src/App.vue | 2 +- src/main.js | 2 +- src/services/project-api.js | 2 +- src/store/modules/projects.store.js | 12 +++-- src/views/Projects.vue | 75 ++++++++++++++++++++++++---- src/views/project/Project_detail.vue | 2 +- 6 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/App.vue b/src/App.vue index 99f38c1d..512b5bf3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -227,7 +227,7 @@ export default { ...mapState('projects', [ 'projects' ]), - ...mapGetters( 'projects', [ + ...mapGetters('projects', [ 'project' ]), APPLICATION_NAME() { diff --git a/src/main.js b/src/main.js index 864c9a69..ce93c0f5 100644 --- a/src/main.js +++ b/src/main.js @@ -50,7 +50,7 @@ let onConfigLoaded = function(config){ window.proxy_url=config.VUE_APP_DJANGO_API_BASE+"proxy/"; axios.all([ store.dispatch("USER_INFO"), - store.dispatch('projects/GET_ALL_PROJECTS'), + store.dispatch('projects/GET_PROJECTS'), store.dispatch("GET_STATIC_PAGES"), store.dispatch("GET_USER_LEVEL_PROJECTS"), store.dispatch("map/GET_AVAILABLE_LAYERS"), diff --git a/src/services/project-api.js b/src/services/project-api.js index 93c19e01..b544293d 100644 --- a/src/services/project-api.js +++ b/src/services/project-api.js @@ -56,7 +56,7 @@ const projectAPI = { } }, - async deleteProject(projectSlug) { + async deleteProject(baseUrl, projectSlug) { const response = await axios.delete( `${baseUrl}projects/${projectSlug}` ); diff --git a/src/store/modules/projects.store.js b/src/store/modules/projects.store.js index 194a9973..fbe49530 100644 --- a/src/store/modules/projects.store.js +++ b/src/store/modules/projects.store.js @@ -13,7 +13,8 @@ const projects = { filters: { moderation: null, access_level: null, - user_access_level: null + user_access_level: null, + accessible: null }, searchProjectsFilter: null, isProjectsListSearched: null, @@ -31,8 +32,13 @@ const projects = { }, SET_PROJECTS(state, projects) { - state.projects = projects.results; - state.count = projects.count; + if (projects.results) { + state.projects = projects.results; + state.count = projects.count; + } else { + state.projects = projects; + state.count = projects.length; + } }, ADD_PROJECT(state, project) { diff --git a/src/views/Projects.vue b/src/views/Projects.vue index c55e238d..d8bcb4a5 100644 --- a/src/views/Projects.vue +++ b/src/views/Projects.vue @@ -29,6 +29,20 @@ @filter="setProjectsFilters" /> + <div + v-if="configuration.DISPLAY_FORBIDDEN_PROJECTS" + id="forbidden-projects" + class="ui toggle checkbox" + > + <input + v-model="displayForbiddenProjects" + type="checkbox" + /> + <label> + N'afficher que les projets disponibles à la consultation + </label> + </div> + <!-- LISTE DES PROJETS --> <div v-if="projects" class="ui divided items"> <div v-for="project in projects" class="item" :key="project.slug"> @@ -124,9 +138,16 @@ export default { ProjectsMenu, Pagination }, + + data() { + return { + displayForbiddenProjects: false + } + }, computed: { ...mapState([ + 'configuration', 'user', 'USER_LEVEL_PROJECTS' ]), @@ -157,6 +178,32 @@ export default { this.getData(); } } + }, + displayForbiddenProjects(newValue) { + if (newValue) { + this.SET_PROJECTS_FILTER({ + filter: 'accessible', + value: 'true' + }); + } else { + this.SET_PROJECTS_FILTER({ + filter: 'accessible', + value: null + }); + } + this.getData(); + } + }, + + created() { + this.SET_PROJECTS_FILTER({ + filter: 'accessible', + value: 'true' + }); + this.displayForbiddenProjects = this.configuration.DISPLAY_FORBIDDEN_PROJECTS_DEFAULT; + + if (this.$store.getters.project) { + this.$store.commit("SET_PROJECT_SLUG", null); } }, @@ -194,20 +241,30 @@ export default { setProjectsFilters(e) { this.SET_PROJECTS_FILTER(e); - } - }, - - created() { - if (this.$store.getters.project) { - this.$store.commit("SET_PROJECT_SLUG", null); - } - }, + }, + } }; </script> -<style scoped> +<style lang="less" scoped> + .flex { display: flex; justify-content: space-between; } + +#forbidden-projects.checkbox { + font-size: 1.2em; + font-weight: 600; + label { + color: rgb(94, 94, 94); + } + input:checked ~ label::before { + background-color: teal !important; + } + input:checked ~ label { + color: teal !important; + } +} + </style> \ No newline at end of file diff --git a/src/views/project/Project_detail.vue b/src/views/project/Project_detail.vue index 8517b9d6..4640f2f9 100644 --- a/src/views/project/Project_detail.vue +++ b/src/views/project/Project_detail.vue @@ -1012,7 +1012,7 @@ export default { }, deleteProject() { - projectAPI.deleteProject(this.project.slug) + projectAPI.deleteProject(this.API_BASE_URL, this.project.slug) .then((response) => { if (response === 'success') { this.GET_ALL_PROJECTS(); -- GitLab