From 7581d13d1cdbd190009dea11549669cfa5cc00ad Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Fri, 3 Jul 2020 00:35:09 +0300 Subject: [PATCH] feat: separate album view into multiple components and use vuex --- src/site/components/album/AlbumDetails.vue | 177 ++++++++++++ src/site/components/album/AlbumEntry.vue | 179 ++++++++++++ src/site/pages/dashboard/albums/index.vue | 312 +-------------------- src/site/store/albums.js | 56 ++++ 4 files changed, 423 insertions(+), 301 deletions(-) create mode 100644 src/site/components/album/AlbumDetails.vue create mode 100644 src/site/components/album/AlbumEntry.vue create mode 100644 src/site/store/albums.js diff --git a/src/site/components/album/AlbumDetails.vue b/src/site/components/album/AlbumDetails.vue new file mode 100644 index 0000000..a02fe55 --- /dev/null +++ b/src/site/components/album/AlbumDetails.vue @@ -0,0 +1,177 @@ + + + + + + + + diff --git a/src/site/components/album/AlbumEntry.vue b/src/site/components/album/AlbumEntry.vue new file mode 100644 index 0000000..4d23d6c --- /dev/null +++ b/src/site/components/album/AlbumEntry.vue @@ -0,0 +1,179 @@ + + + + + + diff --git a/src/site/pages/dashboard/albums/index.vue b/src/site/pages/dashboard/albums/index.vue index 065667a..2a54ab8 100644 --- a/src/site/pages/dashboard/albums/index.vue +++ b/src/site/pages/dashboard/albums/index.vue @@ -25,118 +25,9 @@
-
-
- -
-
-
- -
-
-
-

- {{ album.name }} -

- Updated - {{ album.fileCount || 0 }} files -
-
- - -
- -
-

Public links for this album:

- - - - - - -
-
+ :album="album" />
@@ -146,87 +37,28 @@ + - diff --git a/src/site/store/albums.js b/src/site/store/albums.js new file mode 100644 index 0000000..a33181c --- /dev/null +++ b/src/site/store/albums.js @@ -0,0 +1,56 @@ +/* eslint-disable no-shadow */ +export const state = () => ({ + list: [], + isListLoading: false, + albumDetails: {}, + expandedAlbums: [] +}); + +export const getters = { + isExpanded: state => id => state.expandedAlbums.indexOf(id) > -1, + getDetails: state => id => state.albumDetails[id] || {} +}; + +export const actions = { + async fetch({ commit, dispatch }) { + try { + commit('albumsRequest'); + const response = await this.$axios.$get(`albums/mini`); + + commit('setAlbums', response.albums); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async fetchDetails({ commit }, albumId) { + const response = await this.$axios.$get(`album/${albumId}/links`); + + commit('setDetails', { + id: albumId, + details: { + links: response.links + } + }); + } +}; + +export const mutations = { + albumsRequest(state) { + state.isLoading = true; + }, + setAlbums(state, albums) { + state.list = albums; + state.isLoading = false; + }, + setDetails(state, { id, details }) { + state.albumDetails[id] = details; + }, + toggleExpandedState(state, id) { + const foundIndex = state.expandedAlbums.indexOf(id); + if (foundIndex > -1) { + state.expandedAlbums.splice(foundIndex, 1); + } else { + state.expandedAlbums.push(id); + } + } +};