Просмотр исходного кода

- Remembers last project ID accessed
- Adds fallback to invalid project id

George Vrancianu 8 лет назад
Родитель
Сommit
9a20f6b858
2 измененных файлов с 26 добавлено и 13 удалено
  1. 15 12
      src/actions/UserActions/UserActions.js
  2. 11 1
      src/stores/UserStore/UserStore.js

+ 15 - 12
src/actions/UserActions/UserActions.js

@@ -35,18 +35,18 @@ let UserAction = Reflux.createActions({
 
 UserAction.login.listen(userData => {
   let auth = {
-    "auth": {
-      "identity": {
-        "methods": [
+    auth: {
+      identity: {
+        methods: [
           "password"
         ],
-        "password": {
-          "user": {
-            "name": userData.name,
-            "domain": {
-              "name": userData.domain ? userData.domain : defaultDomain
+        password: {
+          user: {
+            name: userData.name,
+            domain: {
+              name: userData.domain ? userData.domain : defaultDomain
             },
-            "password": userData.password
+            password: userData.password
           }
         }
       },
@@ -68,7 +68,7 @@ UserAction.login.listen(userData => {
 
 })
 
-UserAction.loginScope.listen((token, projectId) => {
+UserAction.loginScope.listen((token, projectId, fallback = true) => {
   let auth = {
     auth: {
       identity: {
@@ -96,8 +96,11 @@ UserAction.loginScope.listen((token, projectId) => {
   })
     .then((response) => {
       UserAction.loginScope.success(response)
-    }, UserAction.login.failed)
-
+    }, () => {
+      if (fallback) {
+        UserAction.loginScope.failed(token)
+      }
+    })
 })
 
 UserAction.tokenLogin.listen((token) => {

+ 11 - 1
src/stores/UserStore/UserStore.js

@@ -66,9 +66,14 @@ class UserStore extends Reflux.Store
     let token = response.headers['X-Subject-Token']
     Api.setDefaultHeader('X-Auth-Token', token)
     cookie.save('unscopedToken', token, { path: "/" })
+
     UserActions.getScopedProjects(response => {
       if (response.data.projects) {
-        UserActions.loginScope(token, response.data.projects[0].id)
+        let projectId = cookie.load('projectId')
+        if (!projectId) {
+          projectId = response.data.projects[0].id
+        }
+        UserActions.loginScope(token, projectId)
       } else {
         // TODO: Error case no scoped projects
       }
@@ -100,6 +105,11 @@ class UserStore extends Reflux.Store
     UserActions.getScopedProjects()
   }
 
+  onLoginScopeFailed(token) {
+    // In case the scoping the project id from cookie didn't work, fallback to first project in list
+    UserActions.loginScope(token, this.state.currentUser.projects[0].id, false)
+  }
+
   onLoginFailed(response) {
     this.setState({ loadingState: false })
   }