filebrowser/frontend/src/store/mutations.js

186 lines
4.6 KiB
JavaScript

import * as i18n from "@/i18n";
import { state } from "./state.js";
import { emitStateChanged } from './eventBus'; // Import the function from eventBus.js
import { users } from "@/api";
export const mutations = {
setMobile() {
state.mobile = window.innerWidth <= 800
emitStateChanged();
},
toggleDarkMode() {
mutations.updateUser({ "darkMode": !state.user.darkMode });
emitStateChanged();
},
toggleSidebar() {
if (!state.showSidebar && state.user.stickySidebar) {
state.user.stickySidebar = false;
mutations.updateUser({ "stickySidebar": false }); // turn off sticky when closed
return
}
state.showSidebar = !state.showSidebar;
emitStateChanged();
},
closeSidebar() {
if (state.showSidebar) {
state.showSidebar = false;
emitStateChanged();
}
},
setUpload(value) {
state.upload = value;
emitStateChanged();
},
setUsage: (value) => {
state.usage = value;
emitStateChanged();
},
closeHovers: () => {
state.prompts = [];
emitStateChanged();
},
toggleShell: () => {
state.showShell = !state.showShell;
emitStateChanged();
},
showHover: (value) => {
if (typeof value === "object") {
state.prompts.push({
name: value?.name,
confirm: value?.confirm,
action: value?.action,
props: value?.props,
});
} else {
state.prompts.push({
name: value,
confirm: value?.confirm,
action: value?.action,
props: value?.props,
});
}
emitStateChanged();
},
showError: () => {
state.prompts.push("error");
emitStateChanged();
},
setLoading: (value) => {
state.loading = value;
emitStateChanged();
},
setReload: (value) => {
state.reload = value;
emitStateChanged();
},
setUser: (value) => {
if (value === null) {
state.user = null;
emitStateChanged();
return;
}
let locale = value.locale;
if (locale === "") {
value.locale = i18n.detectLocale();
}
let previousUser = state.user
state.user = value;
if (state.user != previousUser && state.user.username != "publicUser") {
users.update(state.user);
}
emitStateChanged();
},
setJWT: (value) => {
state.jwt = value;
emitStateChanged();
},
setSession: (value) => {
state.sessionId = value;
emitStateChanged();
},
setMultiple: (value) => {
state.multiple = value;
emitStateChanged();
},
addSelected: (value) => {
state.selected.push(value);
emitStateChanged();
},
removeSelected: (value) => {
let i = state.selected.indexOf(value);
if (i === -1) return;
state.selected.splice(i, 1);
emitStateChanged();
},
resetSelected: () => {
state.selected = [];
mutations.setMultiple(false);
emitStateChanged();
},
updateUser: (value) => {
if (typeof value !== "object") return;
if (state.user === null) {
state.user = {};
}
let previousUser = state.user;
state.user = { ...state.user, ...value };
if (state.user.locale !== previousUser.locale) {
state.user.locale = i18n.detectLocale();
i18n.setLocale(state.user.locale);
i18n.default.locale = state.user.locale;
}
if (state.user != previousUser) {
users.update(state.user);
}
emitStateChanged();
},
updateRequest: (value) => {
const selectedItems = state.selected.map((i) => state.req.items[i]);
state.oldReq = state.req;
state.req = value;
state.selected = [];
if (!state.req?.items) return;
state.selected = state.req.items
.filter((item) => selectedItems.some((rItem) => rItem.url === item.url))
.map((item) => item.index);
},
replaceRequest: (value) => {
state.req = value;
emitStateChanged();
},
setRoute: (value) => {
state.route = value;
emitStateChanged();
},
updateListingSortConfig: ({ field, asc }) => {
state.req.sorting.by = field;
state.req.sorting.asc = asc;
emitStateChanged();
},
updateListingItems: () => {
state.req.items.sort((a, b) => {
const valueA = a[state.req.sorting.by];
const valueB = b[state.req.sorting.by];
if (state.req.sorting.asc) {
return valueA > valueB ? 1 : -1;
} else {
return valueA < valueB ? 1 : -1;
}
});
emitStateChanged();
},
updateClipboard: (value) => {
state.clipboard.key = value.key;
state.clipboard.items = value.items;
state.clipboard.path = value.path;
emitStateChanged();
},
resetClipboard: () => {
state.clipboard.key = "";
state.clipboard.items = [];
emitStateChanged();
},
};