From 720ffaf0083564c85a07d66a6d303f34706add41 Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Thu, 2 Jul 2020 02:50:55 +0300 Subject: feat: start refactoring the code to actually use vuex This includes creating multiple stores as needed for components and removing all complex states from components (since all those states should be stored in vuex) --- src/site/store/auth.js | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/site/store/auth.js (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js new file mode 100644 index 0000000..a62a6ec --- /dev/null +++ b/src/site/store/auth.js @@ -0,0 +1,61 @@ +/* eslint-disable no-shadow */ +// only used so I could keep the convention of naming the first param as "state" in mutations +const getDefaultState = () => ({ + loggedIn: false, + isLoading: false, + user: null, + token: null +}); + +export const state = getDefaultState; + +export const getters = { + isLoggedIn: state => state.loggedIn +}; + +export const actions = { + async verify({ commit, dispatch }) { + try { + const response = await this.$axios.$get('verify'); + commit('loginSuccess', response); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async login({ commit, dispatch }, { username, password }) { + commit('loginRequest'); + + try { + const data = await this.$axios.$post(`auth/login`, { username, password }); + this.$axios.setToken(data.token, 'Bearer'); + + commit('setToken', data.token); + commit('loginSuccess', { token: data.token, user: data.user }); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + logout({ commit }) { + commit('logout'); + } +}; + +export const mutations = { + setToken(state, token) { + state.token = token; + }, + loginRequest(state) { + state.isLoading = true; + }, + loginSuccess(state, { user }) { + this.$cookies.set('token', state.token); + state.user = user; + state.loggedIn = true; + state.isLoading = false; + }, + logout(state) { + this.$cookies.remove('token'); + // reset state to default + Object.assign(state, getDefaultState()); + } +}; -- cgit v1.2.3 From c2dbbe6396540ee9d76991a00f5028b49d221d0c Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Thu, 2 Jul 2020 23:42:02 +0300 Subject: feat: refactor account to use vuex, fix small presentational components --- src/site/store/auth.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index a62a6ec..73976d6 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -10,7 +10,8 @@ const getDefaultState = () => ({ export const state = getDefaultState; export const getters = { - isLoggedIn: state => state.loggedIn + isLoggedIn: state => state.loggedIn, + getApiKey: state => state.user?.apiKey }; export const actions = { @@ -35,6 +36,36 @@ export const actions = { dispatch('alert/set', { text: e.message, error: true }, { root: true }); } }, + async fetchCurrentUser({ commit, dispatch }) { + try { + const data = await this.$axios.$get(`users/me`); + commit('setUser', data.user); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async changePassword({ dispatch }, { password, newPassword }) { + try { + const response = await this.$axios.$post(`user/password/change`, { + password, + newPassword + }); + + return response; + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async requestAPIKey({ commit, dispatch }) { + try { + const response = await this.$axios.$post(`user/apikey/change`); + commit('setApiKey', response.apiKey); + + return response; + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, logout({ commit }) { commit('logout'); } @@ -44,6 +75,12 @@ export const mutations = { setToken(state, token) { state.token = token; }, + setApiKey(state, apiKey) { + state.user.apiKey = apiKey; + }, + setUser(state, user) { + state.user = user; + }, loginRequest(state) { state.isLoading = true; }, -- cgit v1.2.3 From 766e74cc51138b32482f65f0f2647eb9d943103e Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Sun, 5 Jul 2020 04:18:08 +0300 Subject: feat: add video preview on hover to dashboard and apply new linter rules to some of the files --- src/site/store/auth.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index 73976d6..55009ce 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -4,14 +4,14 @@ const getDefaultState = () => ({ loggedIn: false, isLoading: false, user: null, - token: null + token: null, }); export const state = getDefaultState; export const getters = { - isLoggedIn: state => state.loggedIn, - getApiKey: state => state.user?.apiKey + isLoggedIn: (state) => state.loggedIn, + getApiKey: (state) => state.user?.apiKey, }; export const actions = { @@ -27,7 +27,7 @@ export const actions = { commit('loginRequest'); try { - const data = await this.$axios.$post(`auth/login`, { username, password }); + const data = await this.$axios.$post('auth/login', { username, password }); this.$axios.setToken(data.token, 'Bearer'); commit('setToken', data.token); @@ -38,7 +38,7 @@ export const actions = { }, async fetchCurrentUser({ commit, dispatch }) { try { - const data = await this.$axios.$get(`users/me`); + const data = await this.$axios.$get('users/me'); commit('setUser', data.user); } catch (e) { dispatch('alert/set', { text: e.message, error: true }, { root: true }); @@ -46,9 +46,9 @@ export const actions = { }, async changePassword({ dispatch }, { password, newPassword }) { try { - const response = await this.$axios.$post(`user/password/change`, { + const response = await this.$axios.$post('user/password/change', { password, - newPassword + newPassword, }); return response; @@ -58,7 +58,7 @@ export const actions = { }, async requestAPIKey({ commit, dispatch }) { try { - const response = await this.$axios.$post(`user/apikey/change`); + const response = await this.$axios.$post('user/apikey/change'); commit('setApiKey', response.apiKey); return response; @@ -68,7 +68,7 @@ export const actions = { }, logout({ commit }) { commit('logout'); - } + }, }; export const mutations = { @@ -94,5 +94,5 @@ export const mutations = { this.$cookies.remove('token'); // reset state to default Object.assign(state, getDefaultState()); - } + }, }; -- cgit v1.2.3 From 15f296a7805b7623f56eab67b74ab0bf93a038e1 Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Tue, 7 Jul 2020 02:02:37 +0300 Subject: chore: eslint stores feat: merge album and images --- src/site/store/auth.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index 55009ce..69de9ec 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -1,8 +1,5 @@ -/* eslint-disable no-shadow */ -// only used so I could keep the convention of naming the first param as "state" in mutations const getDefaultState = () => ({ loggedIn: false, - isLoading: false, user: null, token: null, }); @@ -23,18 +20,14 @@ export const actions = { dispatch('alert/set', { text: e.message, error: true }, { root: true }); } }, - async login({ commit, dispatch }, { username, password }) { + async login({ commit }, { username, password }) { commit('loginRequest'); - try { - const data = await this.$axios.$post('auth/login', { username, password }); - this.$axios.setToken(data.token, 'Bearer'); + const data = await this.$axios.$post('auth/login', { username, password }); + this.$axios.setToken(data.token, 'Bearer'); - commit('setToken', data.token); - commit('loginSuccess', { token: data.token, user: data.user }); - } catch (e) { - dispatch('alert/set', { text: e.message, error: true }, { root: true }); - } + commit('setToken', data.token); + commit('loginSuccess', { token: data.token, user: data.user }); }, async fetchCurrentUser({ commit, dispatch }) { try { -- cgit v1.2.3 From 15266378810d81704f8c9ece6ecf919526efacae Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Wed, 8 Jul 2020 03:15:07 +0300 Subject: feat: add new sidebar with mdi icons and active reactivity --- src/site/store/auth.js | 1 + 1 file changed, 1 insertion(+) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index 69de9ec..286d321 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -9,6 +9,7 @@ export const state = getDefaultState; export const getters = { isLoggedIn: (state) => state.loggedIn, getApiKey: (state) => state.user?.apiKey, + getToken: (state) => state.token, }; export const actions = { -- cgit v1.2.3 From ad852de51a0d2dd5d29c08838d5a430c58849e74 Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Wed, 8 Jul 2020 04:00:12 +0300 Subject: chore: linter the entire project using the new rules --- src/site/store/auth.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index 286d321..fcc051b 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -49,6 +49,8 @@ export const actions = { } catch (e) { dispatch('alert/set', { text: e.message, error: true }, { root: true }); } + + return null; }, async requestAPIKey({ commit, dispatch }) { try { @@ -59,6 +61,8 @@ export const actions = { } catch (e) { dispatch('alert/set', { text: e.message, error: true }, { root: true }); } + + return null; }, logout({ commit }) { commit('logout'); -- cgit v1.2.3 From fd3f6de51a082dcd72c2ef557747e031ef7b9c4a Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Thu, 9 Jul 2020 02:24:40 +0300 Subject: refactor: refactor most of the admin pages to use the store instead of internal states --- src/site/store/auth.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index fcc051b..465de7d 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -30,6 +30,12 @@ export const actions = { commit('setToken', data.token); commit('loginSuccess', { token: data.token, user: data.user }); }, + async register(_, { username, password }) { + return this.$axios.$post('auth/register', { + username, + password, + }); + }, async fetchCurrentUser({ commit, dispatch }) { try { const data = await this.$axios.$get('users/me'); @@ -83,13 +89,13 @@ export const mutations = { state.isLoading = true; }, loginSuccess(state, { user }) { - this.$cookies.set('token', state.token); + this.$cookies.set('token', state.token, { path: '/' }); state.user = user; state.loggedIn = true; state.isLoading = false; }, logout(state) { - this.$cookies.remove('token'); + this.$cookies.remove('token', { path: '/' }); // reset state to default Object.assign(state, getDefaultState()); }, -- cgit v1.2.3 From 0f66d807035d3e32a66c7dc9bf55fb3be99aedac Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Fri, 10 Jul 2020 01:13:51 +0300 Subject: refactor: finish refactoring all the components to use vuex --- src/site/store/auth.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/site/store/auth.js') diff --git a/src/site/store/auth.js b/src/site/store/auth.js index 465de7d..96631e2 100644 --- a/src/site/store/auth.js +++ b/src/site/store/auth.js @@ -1,6 +1,10 @@ const getDefaultState = () => ({ loggedIn: false, - user: null, + user: { + id: null, + isAdmin: false, + username: null, + }, token: null, }); -- cgit v1.2.3