bookmarks/src/store/index.js

80 lines
1.5 KiB
JavaScript
Raw Normal View History

import Vue from 'vue'
import Vuex, { Store } from 'vuex'
import Mutations from './mutations'
import Actions from './actions'
2019-08-29 09:05:29 +00:00
Vue.use(Vuex)
2019-08-29 09:05:29 +00:00
export { mutations } from './mutations'
2019-08-29 09:05:29 +00:00
export { actions } from './actions'
2019-08-29 09:05:29 +00:00
export default new Store({
mutations: Mutations,
actions: Actions,
state: {
fetchState: {
page: 0,
query: {},
reachedEnd: false,
2019-08-29 09:05:29 +00:00
},
loading: {
tags: false,
folders: false,
bookmarks: false,
createBookmark: false,
saveBookmark: false,
createFolder: false,
saveFolder: false,
2019-08-29 09:05:29 +00:00
},
error: null,
settings: {
viewMode: 'list',
sorting: 'lastmodified',
2019-08-29 09:05:29 +00:00
},
bookmarks: [],
bookmarksById: {},
tags: [],
folders: [],
foldersById: {},
selection: {
folders: [],
bookmarks: [],
2019-08-29 09:05:29 +00:00
},
displayNewBookmark: false,
displayNewFolder: false,
displayMoveDialog: false,
sidebar: null,
viewMode: 'list',
2019-08-29 09:05:29 +00:00
},
getters: {
getBookmark: state => id => {
return state.bookmarksById[id]
2019-08-29 09:05:29 +00:00
},
getFolder: state => id => {
if (Number(id) === -1) {
return [{ id: '-1', children: state.folders }]
2019-08-29 09:05:29 +00:00
}
return findFolder(id, state.folders)
},
},
})
2019-08-29 09:05:29 +00:00
function findFolder(id, children) {
if (!children || !children.length) return []
const folders = children.filter(folder => Number(folder.id) === Number(id))
2019-08-29 09:05:29 +00:00
if (folders.length) {
return folders
2019-08-29 09:05:29 +00:00
} else {
for (const child of children) {
const folders = findFolder(id, child.children)
2019-08-29 09:05:29 +00:00
if (folders.length) {
folders.push(child)
return folders
2019-08-29 09:05:29 +00:00
}
}
return []
2019-08-29 09:05:29 +00:00
}
}