aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/store/files.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files/src/store/files.ts')
-rw-r--r--apps/files/src/store/files.ts105
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,
-}
+})