Bookmark folders

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2024-09-23 23:10:32 +02:00
commit 9e45228823
28 changed files with 464 additions and 31 deletions

View file

@ -203,12 +203,13 @@ const api = {
tag = false,
userId = false,
listId = false,
statusId = false
statusId = false,
bookmarkFolderId = false
}) {
if (store.state.fetchers[timeline]) return
const fetcher = store.state.backendInteractor.startFetchingTimeline({
timeline, store, userId, listId, statusId, tag
timeline, store, userId, listId, statusId, bookmarkFolderId, tag
})
store.commit('addFetcher', { fetcherName: timeline, fetcher })
},
@ -272,6 +273,18 @@ const api = {
store.commit('removeFetcher', { fetcherName: 'lists', fetcher })
},
// Bookmark folders
startFetchingBookmarkFolders (store) {
if (store.state.fetchers.bookmarkFolders) return
const fetcher = store.state.backendInteractor.startFetchingBookmarkFolders({ store })
store.commit('addFetcher', { fetcherName: 'bookmarkFolders', fetcher })
},
stopFetchingBookmarkFolders (store) {
const fetcher = store.state.fetchers.bookmarkFolders
if (!fetcher) return
store.commit('removeFetcher', { fetcherName: 'bookmarkFolders', fetcher })
},
// Pleroma websocket
setWsToken (store, token) {
store.commit('setWsToken', token)

View file

@ -0,0 +1,66 @@
import { remove, find } from 'lodash'
export const defaultState = {
allFolders: []
}
export const mutations = {
setBookmarkFolders (state, value) {
state.allFolders = value
},
setBookmarkFolder (state, { folderId, name, emoji, emojiUrl }) {
const entry = find(state.allFolders, { id: name })
if (!entry) {
state.allFolders.push({ id: folderId, name, emoji, emojiUrl })
} else {
entry.name = name
entry.emoji = emoji
entry.emojiUrl = emojiUrl
}
},
deleteBookmarkFolder (state, { folderId }) {
remove(state.allFolders, folder => folder.id === folderId)
}
}
const actions = {
setBookmarkFolders ({ commit }, value) {
commit('setBookmarkFolders', value)
},
createBookmarkFolder ({ rootState, commit }, { name, emoji }) {
return rootState.api.backendInteractor.createBookmarkFolder({ name, emoji })
.then((folder) => {
commit('setBookmarkFolder', folder)
return folder
})
},
setBookmarkFolder ({ rootState, commit }, { folderId, name, emoji }) {
return rootState.api.backendInteractor.updateBookmarkFolder({ folderId, name, emoji })
.then((folder) => {
commit('setBookmarkFolder', folder)
return folder
})
},
deleteBookmarkFolder ({ rootState, commit }, { folderId }) {
rootState.api.backendInteractor.deleteBookmarkFolder({ folderId })
commit('deleteBookmarkFolder', { folderId })
}
}
export const getters = {
findBookmarkFolderName: state => id => {
const folder = state.allFolders.find(folder => folder.id === id)
if (!folder) return
return folder.name
}
}
const bookmarkFolders = {
state: defaultState,
mutations,
actions,
getters
}
export default bookmarkFolders

View file

@ -140,6 +140,7 @@ const defaultState = {
shoutAvailable: false,
pleromaChatMessagesAvailable: false,
pleromaCustomEmojiReactionsAvailable: false,
pleromaBookmarkFoldersAvailable: false,
gopherAvailable: false,
mediaProxyAvailable: false,
suggestionsEnabled: false,

View file

@ -579,6 +579,7 @@ const users = {
store.commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))
store.dispatch('stopFetchingNotifications')
store.dispatch('stopFetchingLists')
store.dispatch('stopFetchingBookmarkFolders')
store.dispatch('stopFetchingFollowRequests')
store.commit('clearNotifications')
store.commit('resetStatuses')
@ -635,6 +636,7 @@ const users = {
}
dispatch('startFetchingLists')
dispatch('startFetchingBookmarkFolders')
if (user.locked) {
dispatch('startFetchingFollowRequests')