2020-09-21 12:25:50 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2020. The Nextcloud Bookmarks contributors.
|
|
|
|
*
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or later. See the COPYING file.
|
|
|
|
*/
|
|
|
|
|
2019-09-24 15:18:29 +00:00
|
|
|
import Vue from 'vue'
|
2021-03-30 11:21:18 +00:00
|
|
|
import Vuex from 'vuex'
|
2019-09-24 15:18:29 +00:00
|
|
|
import Mutations from './mutations'
|
|
|
|
import Actions from './actions'
|
2020-03-28 17:15:59 +00:00
|
|
|
import { privateRoutes, publicRoutes } from '../router'
|
2021-03-31 11:26:33 +00:00
|
|
|
import { generateUrl } from '@nextcloud/router'
|
2019-08-29 09:05:29 +00:00
|
|
|
|
2019-09-24 15:18:29 +00:00
|
|
|
Vue.use(Vuex)
|
2019-08-29 09:05:29 +00:00
|
|
|
|
2019-09-24 15:18:29 +00:00
|
|
|
export { mutations } from './mutations'
|
2019-08-29 09:05:29 +00:00
|
|
|
|
2019-09-24 15:18:29 +00:00
|
|
|
export { actions } from './actions'
|
2019-08-29 09:05:29 +00:00
|
|
|
|
2021-03-30 11:21:18 +00:00
|
|
|
export default {
|
2019-08-29 09:05:29 +00:00
|
|
|
mutations: Mutations,
|
|
|
|
actions: Actions,
|
|
|
|
state: {
|
2020-03-28 17:15:59 +00:00
|
|
|
public: false,
|
|
|
|
authToken: null,
|
2019-08-29 09:05:29 +00:00
|
|
|
fetchState: {
|
|
|
|
page: 0,
|
|
|
|
query: {},
|
2019-12-10 21:33:54 +00:00
|
|
|
reachedEnd: false,
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
|
|
|
loading: {
|
|
|
|
tags: false,
|
|
|
|
folders: false,
|
|
|
|
bookmarks: false,
|
|
|
|
createBookmark: false,
|
|
|
|
saveBookmark: false,
|
|
|
|
createFolder: false,
|
2019-12-10 21:33:54 +00:00
|
|
|
saveFolder: false,
|
2020-05-20 09:58:17 +00:00
|
|
|
moveSelection: false,
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
|
|
|
error: null,
|
2020-03-28 17:15:59 +00:00
|
|
|
notification: null,
|
2019-08-29 09:05:29 +00:00
|
|
|
settings: {
|
|
|
|
viewMode: 'list',
|
2019-12-10 21:33:54 +00:00
|
|
|
sorting: 'lastmodified',
|
2020-04-08 14:48:16 +00:00
|
|
|
limit: 0,
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
|
|
|
bookmarks: [],
|
|
|
|
bookmarksById: {},
|
2020-03-28 17:15:59 +00:00
|
|
|
sharesById: {},
|
2019-08-29 09:05:29 +00:00
|
|
|
tags: [],
|
|
|
|
folders: [],
|
|
|
|
foldersById: {},
|
2020-07-23 13:12:45 +00:00
|
|
|
childrenByFolder: {},
|
2020-03-28 17:15:59 +00:00
|
|
|
tokensByFolder: {},
|
2020-04-08 14:48:16 +00:00
|
|
|
countsByFolder: {},
|
2020-09-09 15:06:09 +00:00
|
|
|
unavailableCount: 0,
|
2020-09-14 08:26:53 +00:00
|
|
|
archivedCount: 0,
|
2019-08-29 09:05:29 +00:00
|
|
|
selection: {
|
|
|
|
folders: [],
|
2019-12-10 21:33:54 +00:00
|
|
|
bookmarks: [],
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
|
|
|
displayNewBookmark: false,
|
|
|
|
displayNewFolder: false,
|
|
|
|
displayMoveDialog: false,
|
|
|
|
sidebar: null,
|
2019-12-10 21:33:54 +00:00
|
|
|
viewMode: 'list',
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
getters: {
|
|
|
|
getBookmark: state => id => {
|
2019-09-24 15:18:29 +00:00
|
|
|
return state.bookmarksById[id]
|
2019-08-29 09:05:29 +00:00
|
|
|
},
|
2021-03-31 11:26:33 +00:00
|
|
|
getBookmarksForDashboard: state => () => state.bookmarks.map(bookmark => ({
|
|
|
|
id: bookmark.id,
|
|
|
|
targetUrl: bookmark.url,
|
|
|
|
avatarUrl: generateUrl(`/apps/bookmarks/bookmark/${bookmark.id}/favicon`),
|
|
|
|
mainText: bookmark.title,
|
|
|
|
subText: bookmark.url,
|
|
|
|
})),
|
2019-08-29 09:05:29 +00:00
|
|
|
getFolder: state => id => {
|
|
|
|
if (Number(id) === -1) {
|
2021-03-28 15:17:40 +00:00
|
|
|
return [{ id: -1, children: state.folders }]
|
2019-08-29 09:05:29 +00:00
|
|
|
}
|
2019-09-24 15:18:29 +00:00
|
|
|
return findFolder(id, state.folders)
|
2019-12-10 21:33:54 +00:00
|
|
|
},
|
2020-07-23 13:12:45 +00:00
|
|
|
getFolderChildren: state => id => {
|
2021-01-07 19:07:57 +00:00
|
|
|
return state.childrenByFolder[id] || []
|
2020-07-23 13:12:45 +00:00
|
|
|
},
|
2020-03-28 17:15:59 +00:00
|
|
|
getSharesOfFolder: state => folderId => {
|
2021-01-07 19:07:57 +00:00
|
|
|
return Object.values(state.sharesById).filter(
|
|
|
|
share => share.folderId === folderId
|
|
|
|
)
|
2020-03-28 17:15:59 +00:00
|
|
|
},
|
|
|
|
getTokenOfFolder: state => folderId => {
|
|
|
|
return state.tokensByFolder[folderId]
|
|
|
|
},
|
|
|
|
getRoutes: state => () => {
|
|
|
|
if (state.public) {
|
|
|
|
return publicRoutes
|
|
|
|
}
|
|
|
|
return privateRoutes
|
|
|
|
},
|
2020-03-31 12:51:16 +00:00
|
|
|
getPermissionsForFolder: (state, getters) => folderId => {
|
|
|
|
const path = getters.getFolder(folderId)
|
|
|
|
for (let i = 0; i < path.length; i++) {
|
|
|
|
const shares = getters.getSharesOfFolder(path[i].id)
|
|
|
|
if (shares.length) {
|
|
|
|
return shares[0]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return {}
|
|
|
|
},
|
|
|
|
getPermissionsForBookmark: (state, getters) => bookmarkId => {
|
|
|
|
const bookmark = getters.getBookmark(bookmarkId)
|
|
|
|
if (!bookmark) {
|
|
|
|
return {}
|
|
|
|
}
|
|
|
|
return getters.getPermissionsForFolder(bookmark.folders[0])
|
|
|
|
},
|
2019-12-10 21:33:54 +00:00
|
|
|
},
|
2021-03-30 11:21:18 +00:00
|
|
|
}
|
2019-08-29 09:05:29 +00:00
|
|
|
|
|
|
|
function findFolder(id, children) {
|
2019-09-24 15:18:29 +00:00
|
|
|
if (!children || !children.length) return []
|
2019-12-10 21:33:54 +00:00
|
|
|
const folders = children.filter(folder => Number(folder.id) === Number(id))
|
2019-08-29 09:05:29 +00:00
|
|
|
if (folders.length) {
|
2019-09-24 15:18:29 +00:00
|
|
|
return folders
|
2019-08-29 09:05:29 +00:00
|
|
|
} else {
|
2019-12-10 21:33:54 +00:00
|
|
|
for (const child of children) {
|
|
|
|
const folders = findFolder(id, child.children)
|
2019-08-29 09:05:29 +00:00
|
|
|
if (folders.length) {
|
2019-09-24 15:18:29 +00:00
|
|
|
folders.push(child)
|
|
|
|
return folders
|
2019-08-29 09:05:29 +00:00
|
|
|
}
|
|
|
|
}
|
2019-09-24 15:18:29 +00:00
|
|
|
return []
|
2019-08-29 09:05:29 +00:00
|
|
|
}
|
|
|
|
}
|