diff --git a/src/App.vue b/src/App.vue index 99f38c1d22924e0053f0fa10808a491ebd695ac0..512b5bf3377d133b5bb8fa5cd35458812d8a982b 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 864c9a69f193ed2fb775913c379530f3fa719fe7..ce93c0f5b09554c85e0cb868f11aec25d9ee0517 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 93c19e017d8ceb9bc5fcd7a4537dfa9274e36419..b544293dff5a722155e5a59807e66b73b9fcd5d6 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 194a9973632709f974d637f6aa31a965ee6291a8..fbe495300f69b356fa4a5718a77785a4a5954dd4 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 c55e238de208a6b2542d04a5bff17f8476261506..d8bcb4a5bba05dd3e3f099b3f2ed96398e789266 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 8517b9d61174957002b43aeda0724d6644b6a077..4640f2f95bc32d2421d51584de1bd1c1bd079ef1 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();