diff options
Diffstat (limited to 'apps/files/src/store/files.ts')
-rw-r--r-- | apps/files/src/store/files.ts | 105 |
1 files changed, 39 insertions, 66 deletions
diff --git a/apps/files/src/store/files.ts b/apps/files/src/store/files.ts index e9760e2bc85..c0ec1f7814b 100644 --- a/apps/files/src/store/files.ts +++ b/apps/files/src/store/files.ts @@ -21,77 +21,50 @@ */ /* eslint-disable */ import type { Folder, Node } from '@nextcloud/files' -import Vue from 'vue' -import type { FileStore, RootStore, RootOptions, Service } from '../types' +import type { FilesStore, RootsStore, RootOptions, Service, FilesState } from '../types' -const state = { - files: {} as FileStore, - roots: {} as RootStore, -} +import { defineStore } from 'pinia' +import Vue from 'vue' +import logger from '../logger' -const getters = { - /** - * Get a file or folder by id - */ - getNode: (state) => (id: number): Node|undefined => state.files[id], +export const useFilesStore = defineStore('files', { + state: (): FilesState => ({ + files: {} as FilesStore, + roots: {} as RootsStore, + }), - /** - * Get a list of files or folders by their IDs - * Does not return undefined values - */ - getNodes: (state) => (ids: number[]): Node[] => ids - .map(id => state.files[id]) - .filter(Boolean), - /** - * Get a file or folder by id - */ - getRoot: (state) => (service: Service): Folder|undefined => state.roots[service], -} + getters: { + /** + * Get a file or folder by id + */ + getNode: (state) => (id: number): Node|undefined => state.files[id], -const mutations = { - updateNodes: (state, nodes: Node[]) => { - nodes.forEach(node => { - if (!node.attributes.fileid) { - return - } - Vue.set(state.files, node.attributes.fileid, node) - // state.files = { - // ...state.files, - // [node.attributes.fileid]: node, - // } - }) + /** + * Get a list of files or folders by their IDs + * Does not return undefined values + */ + getNodes: (state) => (ids: number[]): Node[] => ids + .map(id => state.files[id]) + .filter(Boolean), + /** + * Get a file or folder by id + */ + getRoot: (state) => (service: Service): Folder|undefined => state.roots[service], }, - setRoot: (state, { service, root }: RootOptions) => { - state.roots = { - ...state.roots, - [service]: root, - } - } -} - -const actions = { - /** - * Insert valid nodes into the store. - * Roots (that does _not_ have a fileid) should - * be defined in the roots store - */ - addNodes: (context, nodes: Node[]) => { - context.commit('updateNodes', nodes) - }, + actions: { + updateNodes(nodes: Node[]) { + nodes.forEach(node => { + if (!node.attributes.fileid) { + logger.warn('Trying to update/set a node without fileid', node) + return + } + Vue.set(this.files, node.attributes.fileid, node) + }) + }, - /** - * Set the root of a service - */ - setRoot(context, { service, root }: RootOptions) { - context.commit('setRoot', { service, root }) + setRoot({ service, root }: RootOptions) { + Vue.set(this.roots, service, root) + } } -} - -export default { - namespaced: true, - state, - getters, - mutations, - actions, -} +}) |