From 41f6c5d2b7ba0a61eb858191c4e46566aadf89fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Wed, 9 Feb 2022 12:40:55 +0100
Subject: [PATCH] disable index button if shared project on login page

---
 src/App.vue                      |  5 ++--
 src/router/index.js              |  6 +----
 src/store/index.js               | 42 ++++++++++++++++++++------------
 src/views/registration/Login.vue |  4 +--
 4 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index 95966e80..af053b2d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -11,6 +11,7 @@
       <div class="menu container">
         <div class="ui inverted icon menu">
           <router-link
+            :is="isSharedProject ? 'span' : 'router-link'"
             :to="isSharedProject ? '' : '/'"
             :class="['header item', {disable: isSharedProject}]"
           >
@@ -122,7 +123,7 @@
                   </a>
                   <router-link
                     v-else-if="!user && !SSO_LOGIN_URL"
-                    to="/connexion/"
+                    :to="{ name : 'login' }"
                     class="item"
                   >
                     Se connecter
@@ -175,7 +176,7 @@
               </a>
               <router-link
                 v-else-if="!user && !SSO_LOGIN_URL"
-                to="/connexion/"
+                :to="{ name : 'login' }"
                 class="item"
               >
                 Se Connecter
diff --git a/src/router/index.js b/src/router/index.js
index df9c27dc..7a050554 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -4,10 +4,6 @@ import Projects from '../views/Projects.vue';
 
 Vue.use(VueRouter);
 
-//* store initial route before redirect to login page
-//* in order to turn back to shared project afterwards (not memorized in router history at page load)
-window.initialRoute = window.location.href;
-
 let projectBase = 'projet';
 if (window.location.pathname.includes('projet-partage')) {
   projectBase = 'projet-partage';
@@ -20,7 +16,7 @@ const routes = [
     component: Projects
   },
   {
-    path: '/connexion/',
+    path: `${projectBase === 'projet' ? '': '/' + projectBase + '/:slug'}/connexion/`,
     name: 'login',
     component: () => import('../views/registration/Login.vue')
   },
diff --git a/src/store/index.js b/src/store/index.js
index 4631cbb4..f4ed8a51 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -138,21 +138,8 @@ export default new Vuex.Store({
           })
           .then((response) => {
             if (response.status === 200 && response.data) {
-              // * use stored previous route to go back after login if page not open on login at first
-              let routerHistory = '';
-              if (router.options.routerHistory[0] !== undefined) {
-                routerHistory = router.options.routerHistory[0].name !== 'login' ? router.options.routerHistory : '/';
-              } else {
-                routerHistory = '/';
-              }
               commit('SET_USER', response.data.user);
-
-              if (routerHistory === '/' && window.initialRoute.includes('projet-partage')) {
-                window.location.replace(window.initialRoute);
-              } else { // ToDo : not working at page load, routerHistory filled afterwards, could try history.back()
-                router.push(routerHistory[routerHistory.length - 1] || '/');
-              }
-
+              dispatch('REDIRECT_AFTER_LOGIN');
               dispatch('GET_USER_LEVEL_PROJECTS');
               dispatch('GET_USER_LEVEL_PERMISSIONS');
               return response.status;
@@ -165,6 +152,23 @@ export default new Vuex.Store({
       }
     },
 
+    REDIRECT_AFTER_LOGIN() {
+      // * use stored previous route to go back after login if page not open on login at first
+      let routerHistory = '';
+      if (router.options.routerHistory[0] !== undefined) {
+        routerHistory = router.options.routerHistory[0].name !== 'login' ? router.options.routerHistory : '/';
+      } else {
+        routerHistory = '/';
+      }
+
+      const slug = router.history.current.params.slug;
+      if (slug) {
+        router.push({ name: 'project_detail', params: { slug } });
+      } else { //* not working at page load, routerHistory filled afterwards, could try history.back()
+        router.push(routerHistory[routerHistory.length - 1] || '/');
+      }
+    },
+
     USER_INFO({ state, commit }) {
       if (!state.user) {
         axios
@@ -178,7 +182,15 @@ export default new Vuex.Store({
           .catch(() => {
             //* if an url to redirect to an external authentification system is present, do not redirect to the login page
             if (!state.configuration.VUE_APP_LOGIN_URL) {
-              router.push({ name: 'login' });
+              const url = window.location.href;
+              console.log({ url });
+              console.log(url.includes('projet-partage'));
+              if (url.includes('projet-partage')) {
+                const slug = url.split('projet-partage/')[1];
+                router.push({ name: 'login', params: { slug } });
+              } else {
+                router.push({ name: 'login' });
+              }
             }
           });
       }
diff --git a/src/views/registration/Login.vue b/src/views/registration/Login.vue
index 77999234..1d1e7b2e 100644
--- a/src/views/registration/Login.vue
+++ b/src/views/registration/Login.vue
@@ -103,9 +103,9 @@ export default {
     if (this.$store.state.user) {
       this.$store.commit(
         'DISPLAY_MESSAGE',
-        { comment: "Vous êtes déjà connecté, vous allez être redirigé vers la page d'accueil." }
+        { comment: 'Vous êtes déjà connecté, vous allez être redirigé vers la page précédente.' }
       );
-      setTimeout(() => this.$router.push('/'), 3100);
+      setTimeout(() => this.$store.dispatch('REDIRECT_AFTER_LOGIN'), 3100);
     }
   },
   methods: {
-- 
GitLab