filebrowser/frontend/src/stores/file.ts

66 lines
1.7 KiB
TypeScript

import { defineStore } from "pinia";
export const useFileStore = defineStore("file", {
// convert to a function
state: (): {
req: Resource | null;
oldReq: Resource | null;
reload: boolean;
selected: number[];
multiple: boolean;
isFiles: boolean;
preselect: string | null;
} => ({
req: null,
oldReq: null,
reload: false,
selected: [],
multiple: false,
isFiles: false,
preselect: null,
}),
getters: {
selectedCount: (state) => state.selected.length,
// route: () => {
// const routerStore = useRouterStore();
// return routerStore.router.currentRoute;
// },
// isFiles: (state) => {
// const layoutStore = useLayoutStore();
// return !layoutStore.loading && state.route._value.name === "Files";
// },
isListing: (state) => {
return state.isFiles && state?.req?.isDir;
},
},
actions: {
// no context as first argument, use `this` instead
toggleMultiple() {
this.multiple = !this.multiple;
},
updateRequest(value: Resource | null) {
const selectedItems = this.selected.map((i) => this.req?.items[i]);
this.oldReq = this.req;
this.req = value;
this.selected = [];
if (!this.req?.items) return;
this.selected = this.req.items
.filter((item) =>
selectedItems.some((rItem) => rItem?.url === item.url)
)
.map((item) => item.index);
},
removeSelected(value: any) {
const i = this.selected.indexOf(value);
if (i === -1) return;
this.selected.splice(i, 1);
},
// easily reset state using `$reset`
clearFile() {
this.$reset();
},
},
});