aboutsummaryrefslogtreecommitdiff
path: root/src/site/store
diff options
context:
space:
mode:
Diffstat (limited to 'src/site/store')
-rw-r--r--src/site/store/alert.js26
-rw-r--r--src/site/store/auth.js61
-rw-r--r--src/site/store/config.js19
-rw-r--r--src/site/store/images.js56
-rw-r--r--src/site/store/index.js62
5 files changed, 170 insertions, 54 deletions
diff --git a/src/site/store/alert.js b/src/site/store/alert.js
new file mode 100644
index 0000000..78c0eaf
--- /dev/null
+++ b/src/site/store/alert.js
@@ -0,0 +1,26 @@
+/* eslint-disable no-shadow */
+const getDefaultState = () => ({
+ text: null,
+ error: false
+});
+
+export const state = getDefaultState;
+
+export const actions = {
+ set({ commit }, data) {
+ commit('set', data);
+ },
+ clear({ commit }) {
+ commit('clear');
+ }
+};
+
+export const mutations = {
+ set(state, { text, error }) {
+ state.text = text;
+ state.error = error;
+ },
+ clear(state) {
+ Object.assign(state, getDefaultState());
+ }
+};
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());
+ }
+};
diff --git a/src/site/store/config.js b/src/site/store/config.js
new file mode 100644
index 0000000..6202f84
--- /dev/null
+++ b/src/site/store/config.js
@@ -0,0 +1,19 @@
+/* eslint-disable no-shadow */
+export const state = () => ({
+ development: true,
+ version: '4.0.0',
+ URL: 'http://localhost:8080',
+ baseURL: 'http://localhost:8080/api',
+ serviceName: '',
+ maxFileSize: 100,
+ chunkSize: 90,
+ maxLinksPerAlbum: 5,
+ publicMode: false,
+ userAccounts: false
+});
+
+export const mutations = {
+ set(state, config) {
+ Object.assign(state, config);
+ }
+};
diff --git a/src/site/store/images.js b/src/site/store/images.js
new file mode 100644
index 0000000..e87dac1
--- /dev/null
+++ b/src/site/store/images.js
@@ -0,0 +1,56 @@
+/* eslint-disable no-shadow */
+export const state = () => ({
+ files: [],
+ isLoading: false,
+ pagination: {
+ page: 1,
+ limit: 30,
+ totalFiles: 0
+ }
+});
+
+export const getters = {
+ getTotalFiles: state => state.pagination.totalFiles,
+ getFetchedCount: state => state.files.length,
+ shouldPaginate: ({ pagination }) => pagination.totalFiles > pagination.limit,
+ getLimit: ({ pagination }) => pagination.limit
+};
+
+export const actions = {
+ async fetch({ commit, dispatch, state }, page) {
+ commit('setIsLoading');
+
+ page = page || 1;
+
+ try {
+ const response = await this.$axios.$get(`files`, { params: { limit: state.pagination.limit, page } });
+
+ commit('updateFiles', { files: response.files });
+ commit('updatePaginationMeta', { totalFiles: response.count, page });
+ } catch (e) {
+ dispatch('alert/set', { text: e.message, error: true }, { root: true });
+ }
+ },
+ async fetchById({ 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 });
+ }
+ }
+};
+
+export const mutations = {
+ setIsLoading(state) {
+ state.isLoading = true;
+ },
+ updateFiles(state, { files }) {
+ state.files = files || [];
+ state.isLoading = false;
+ },
+ updatePaginationMeta(state, { page, totalFiles }) {
+ state.pagination.page = page || 1;
+ state.pagination.totalFiles = totalFiles || 0;
+ }
+};
diff --git a/src/site/store/index.js b/src/site/store/index.js
index 1fc2272..8f910ae 100644
--- a/src/site/store/index.js
+++ b/src/site/store/index.js
@@ -1,66 +1,20 @@
import config from '../../../dist/config.json';
-export const state = () => ({
- loggedIn: false,
- user: null,
- token: null,
- config: null,
- alert: null
-});
-
-/* eslint-disable no-shadow */
-export const mutations = {
- loggedIn(state, payload) {
- state.loggedIn = payload;
- },
- user(state, payload) {
- state.user = payload;
- },
- token(state, payload) {
- state.token = payload;
- },
- config(state, payload) {
- state.config = payload;
- },
- alert(state, payload) {
- state.alert = payload;
- }
-};
export const actions = {
- async nuxtClientInit({ commit, dispatch }, { app, req }) {
- commit('config', config);
+ async nuxtClientInit({ commit, dispatch }) {
+ commit('config/set', config);
const cookies = this.$cookies.getAll();
- if (!cookies.token) return dispatch('logout');
+ if (!cookies.token) return dispatch('auth/logout');
- commit('token', cookies.token);
- try {
- const response = await this.$axios.$get('verify');
- dispatch('login', {
- token: cookies.token,
- user: response.user
- });
- } catch (error) {
- // dispatch('logout');
- }
- },
- login({ commit }, { token, user }) {
- this.$cookies.set('token', token);
- commit('token', token);
- commit('user', user);
- commit('loggedIn', true);
- },
- logout({ commit }) {
- this.$cookies.remove('token');
- commit('token', null);
- commit('user', null);
- commit('loggedIn', false);
- },
- alert({ commit }, payload) {
+ commit('auth/setToken', cookies.token);
+ await dispatch('auth/verify');
+ }
+ /* alert({ commit }, payload) {
if (!payload) return commit('alert', null);
commit('alert', {
text: payload.text,
error: payload.error
});
- }
+ } */
};