From 480a1ba253d49d4df36fbc64192e1260fc51a181 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Wed, 8 Mar 2017 17:59:12 +0100 Subject: Use cache to quickly access users. --- src/modules/users.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/modules/users.js') diff --git a/src/modules/users.js b/src/modules/users.js index 31731880..dc910c91 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -3,9 +3,9 @@ import { compact, map, each, find, merge } from 'lodash' import { set } from 'vue' // TODO: Unify with mergeOrAdd in statuses.js -export const mergeOrAdd = (arr, item) => { +export const mergeOrAdd = (arr, obj, item) => { if (!item) { return false } - const oldItem = find(arr, {id: item.id}) + const oldItem = obj[item.id] if (oldItem) { // We already have this, so only merge the new info. merge(oldItem, item) @@ -13,6 +13,7 @@ export const mergeOrAdd = (arr, item) => { } else { // This is a new item, prepare it arr.push(item) + obj[item.id] = item return {item, new: true} } } @@ -32,7 +33,7 @@ export const mutations = { state.loggingIn = false }, addNewUsers (state, users) { - each(users, (user) => mergeOrAdd(state.users, user)) + each(users, (user) => mergeOrAdd(state.users, state.usersObject, user)) }, setUserForStatus (state, status) { status.user = find(state.users, status.user) @@ -42,7 +43,8 @@ export const mutations = { export const defaultState = { currentUser: false, loggingIn: false, - users: [] + users: [], + usersObject: {} } const users = { -- cgit v1.2.3-70-g09d2 From 5699872bb5e05b5dc576c75cac2c79b7ece3f2ac Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Wed, 8 Mar 2017 18:04:21 +0100 Subject: Use user cache in users module. --- src/modules/users.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/modules/users.js') diff --git a/src/modules/users.js b/src/modules/users.js index dc910c91..9367ec68 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -1,5 +1,5 @@ import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' -import { compact, map, each, find, merge } from 'lodash' +import { compact, map, each, merge } from 'lodash' import { set } from 'vue' // TODO: Unify with mergeOrAdd in statuses.js @@ -20,7 +20,7 @@ export const mergeOrAdd = (arr, obj, item) => { export const mutations = { setMuted (state, { user: {id}, muted }) { - const user = find(state.users, {id}) + const user = state.usersObject[id] set(user, 'muted', muted) }, setCurrentUser (state, user) { @@ -36,7 +36,7 @@ export const mutations = { each(users, (user) => mergeOrAdd(state.users, state.usersObject, user)) }, setUserForStatus (state, status) { - status.user = find(state.users, status.user) + status.user = state.usersObject[status.user.id] } } -- cgit v1.2.3-70-g09d2 From a6b6fe95c0fe2aa60ebbfca87fde47e629035c49 Mon Sep 17 00:00:00 2001 From: wakarimasen Date: Wed, 8 Mar 2017 18:28:41 +0100 Subject: Show visual feedback on login error, redirect on success --- src/components/login_form/login_form.js | 8 +++- src/components/login_form/login_form.vue | 9 +++++ src/modules/users.js | 68 ++++++++++++++++++-------------- 3 files changed, 53 insertions(+), 32 deletions(-) (limited to 'src/modules/users.js') diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js index 827c704c..2ad5b0b5 100644 --- a/src/components/login_form/login_form.js +++ b/src/components/login_form/login_form.js @@ -1,13 +1,17 @@ const LoginForm = { data: () => ({ - user: {} + user: {}, + authError: false }), computed: { loggingIn () { return this.$store.state.users.loggingIn } }, methods: { submit () { - this.$store.dispatch('loginUser', this.user) + this.$store.dispatch('loginUser', this.user).then( + () => { this.$router.push('/main/friends')}, + () => { this.authError = true } + ) } } } diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index c0273bae..279469ee 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -17,6 +17,9 @@
+
+ +
@@ -39,6 +42,12 @@ margin-top: 1.0em; min-height: 28px; } + + .error { + margin-top: 0em; + margin-bottom: 0em; + background-color: rgba(255, 48, 16, 0.65); + } } diff --git a/src/modules/users.js b/src/modules/users.js index 31731880..a5274480 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -65,40 +65,48 @@ const users = { }) }, loginUser (store, userCredentials) { - const commit = store.commit - commit('beginLogin') - store.rootState.api.backendInteractor.verifyCredentials(userCredentials) - .then((response) => { - if (response.ok) { - response.json() - .then((user) => { - user.credentials = userCredentials - commit('setCurrentUser', user) - commit('addNewUsers', [user]) + return new Promise((resolve, reject) => { + const commit = store.commit + commit('beginLogin') + store.rootState.api.backendInteractor.verifyCredentials(userCredentials) + .then((response) => { + if (response.ok) { + response.json() + .then((user) => { + user.credentials = userCredentials + commit('setCurrentUser', user) + commit('addNewUsers', [user]) - // Set our new backend interactor - commit('setBackendInteractor', backendInteractorService(userCredentials)) + // Set our new backend interactor + commit('setBackendInteractor', backendInteractorService(userCredentials)) - // Start getting fresh tweets. - store.dispatch('startFetching', 'friends') + // Start getting fresh tweets. + store.dispatch('startFetching', 'friends') - // Get user mutes and follower info - store.rootState.api.backendInteractor.fetchMutes().then((mutedUsers) => { - each(mutedUsers, (user) => { user.muted = true }) - store.commit('addNewUsers', mutedUsers) - }) + // Get user mutes and follower info + store.rootState.api.backendInteractor.fetchMutes().then((mutedUsers) => { + each(mutedUsers, (user) => { user.muted = true }) + store.commit('addNewUsers', mutedUsers) + }) - // Fetch our friends - store.rootState.api.backendInteractor.fetchFriends() - .then((friends) => commit('addNewUsers', friends)) - }) - } - commit('endLogin') - }) - .catch((error) => { - console.log(error) - commit('endLogin') - }) + // Fetch our friends + store.rootState.api.backendInteractor.fetchFriends() + .then((friends) => commit('addNewUsers', friends)) + }) + } else { + // Authentication failed + commit('endLogin') + reject() + } + commit('endLogin') + resolve() + }) + .catch((error) => { + console.log(error) + commit('endLogin') + reject() + }) + }) } } } -- cgit v1.2.3-70-g09d2 From ccc460bb5ed1c8b7338f8a26bdb3029c74b26024 Mon Sep 17 00:00:00 2001 From: wakarimasen Date: Wed, 8 Mar 2017 19:22:56 +0100 Subject: Give more specific reason for failed login --- src/components/login_form/login_form.js | 4 ++-- src/components/login_form/login_form.vue | 2 +- src/modules/users.js | 8 ++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/modules/users.js') diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js index e489f381..bc801397 100644 --- a/src/components/login_form/login_form.js +++ b/src/components/login_form/login_form.js @@ -10,8 +10,8 @@ const LoginForm = { submit () { this.$store.dispatch('loginUser', this.user).then( () => { this.$router.push('/main/friends')}, - () => { - this.authError = true + (error) => { + this.authError = error this.user.username = '' this.user.password = '' } diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index 279469ee..8a32e064 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -18,7 +18,7 @@
- +
diff --git a/src/modules/users.js b/src/modules/users.js index a5274480..482c3b14 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -96,7 +96,11 @@ const users = { } else { // Authentication failed commit('endLogin') - reject() + if (response.status === 401) { + reject('Wrong username or password') + } else { + reject('An error occured, please try again') + } } commit('endLogin') resolve() @@ -104,7 +108,7 @@ const users = { .catch((error) => { console.log(error) commit('endLogin') - reject() + reject('Failed to connect to server, try again') }) }) } -- cgit v1.2.3-70-g09d2 From 0810b2d51a6f0fbbfe1604f6d1954cde8ed08290 Mon Sep 17 00:00:00 2001 From: wakarimasen Date: Wed, 8 Mar 2017 19:31:39 +0100 Subject: Fix typo --- src/modules/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/modules/users.js') diff --git a/src/modules/users.js b/src/modules/users.js index 482c3b14..51643bd1 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -99,7 +99,7 @@ const users = { if (response.status === 401) { reject('Wrong username or password') } else { - reject('An error occured, please try again') + reject('An error occurred, please try again') } } commit('endLogin') -- cgit v1.2.3-70-g09d2