88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
import { find, remove } from 'lodash'
|
|
import { defineStore } from 'pinia'
|
|
|
|
import { useOAuthStore } from 'src/stores/oauth.js'
|
|
|
|
import {
|
|
createBookmarkFolder,
|
|
deleteBookmarkFolder,
|
|
fetchBookmarkFolders,
|
|
updateBookmarkFolder,
|
|
} from 'src/services/api/user.js'
|
|
import { promiseInterval } from 'src/services/promise_interval/promise_interval.js'
|
|
|
|
export const useBookmarkFoldersStore = defineStore('bookmarkFolders', {
|
|
state: () => ({
|
|
allFolders: [],
|
|
}),
|
|
getters: {
|
|
findBookmarkFolderName() {
|
|
return (id) => {
|
|
const folder = this.allFolders.find((folder) => folder.id === id)
|
|
|
|
if (!folder) return
|
|
return folder.name
|
|
}
|
|
},
|
|
},
|
|
actions: {
|
|
startFetching() {
|
|
promiseInterval(() => {
|
|
this.fetcher = fetchBookmarkFolders({
|
|
credentials: useOAuthStore().token,
|
|
})
|
|
.then(
|
|
(folders) => this.setBookmarkFolders(folders),
|
|
(rej) => console.error(rej),
|
|
)
|
|
.catch((e) => {
|
|
console.error(e)
|
|
})
|
|
}, 240000)
|
|
},
|
|
stopFetching() {
|
|
this.fetcher?.stop()
|
|
},
|
|
setBookmarkFolders(value) {
|
|
this.allFolders = value
|
|
},
|
|
setBookmarkFolder({ id, name, emoji, emoji_url: emojiUrl }) {
|
|
const entry = find(this.allFolders, { id })
|
|
if (!entry) {
|
|
this.allFolders.push({ id, name, emoji, emoji_url: emojiUrl })
|
|
} else {
|
|
entry.name = name
|
|
entry.emoji = emoji
|
|
entry.emoji_url = emojiUrl
|
|
}
|
|
},
|
|
createBookmarkFolder({ name, emoji }) {
|
|
return createBookmarkFolder({
|
|
name,
|
|
emoji,
|
|
credentials: useOAuthStore().token,
|
|
}).then((folder) => {
|
|
this.setBookmarkFolder(folder)
|
|
return folder
|
|
})
|
|
},
|
|
updateBookmarkFolder({ folderId, name, emoji }) {
|
|
return updateBookmarkFolder({
|
|
credentials: useOAuthStore().token,
|
|
folderId,
|
|
name,
|
|
emoji,
|
|
}).then((folder) => {
|
|
this.setBookmarkFolder(folder)
|
|
return folder
|
|
})
|
|
},
|
|
deleteBookmarkFolder({ folderId }) {
|
|
deleteBookmarkFolder({
|
|
folderId,
|
|
credentials: useOAuthStore().token,
|
|
})
|
|
remove(this.allFolders, (folder) => folder.id === folderId)
|
|
},
|
|
},
|
|
})
|