filebrowser/frontend/src/store/mutations.js

243 lines
6.4 KiB
JavaScript
Raw Normal View History

2021-03-21 11:51:58 +00:00
import * as i18n from "@/i18n";
2024-07-30 17:45:27 +00:00
import { state } from "./state.js";
2024-08-24 22:02:33 +00:00
import router from "@/router";
2024-07-30 17:45:27 +00:00
import { emitStateChanged } from './eventBus'; // Import the function from eventBus.js
2024-11-21 00:15:30 +00:00
import { usersApi } from "@/api";
2024-09-16 21:01:16 +00:00
import { notify } from "@/notify";
2024-12-02 17:14:50 +00:00
import { sortedItems } from "@/utils/sort.js";
2018-02-01 12:17:04 +00:00
2024-07-30 17:45:27 +00:00
export const mutations = {
2024-08-24 22:02:33 +00:00
setGallerySize: (value) => {
state.user.gallerySize = value
emitStateChanged();
2024-11-26 17:21:41 +00:00
usersApi.update(state.user, ['gallerySize']);
2024-08-24 22:02:33 +00:00
},
setActiveSettingsView: (value) => {
state.activeSettingsView = value;
router.push({ hash: "#" + value });
const element = document.getElementById(value);
if (element) {
element.scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest",
});
}
emitStateChanged();
},
setSettings: (value) => {
state.settings = value;
emitStateChanged();
},
2024-08-03 20:04:50 +00:00
setMobile() {
2024-08-24 22:02:33 +00:00
state.isMobile = window.innerWidth <= 800
2024-08-03 20:04:50 +00:00
emitStateChanged();
},
2024-08-03 15:34:12 +00:00
toggleDarkMode() {
2024-09-16 21:01:16 +00:00
mutations.updateCurrentUser({ "darkMode": !state.user.darkMode });
2024-08-03 15:34:12 +00:00
emitStateChanged();
},
toggleSidebar() {
2024-08-24 22:02:33 +00:00
if (state.user.stickySidebar) {
localStorage.setItem("stickySidebar", "false");
2024-09-16 21:01:16 +00:00
mutations.updateCurrentUser({ "stickySidebar": false }); // turn off sticky when closed
2024-08-24 22:02:33 +00:00
state.showSidebar = false;
} else {
state.showSidebar = !state.showSidebar;
2024-08-03 15:34:12 +00:00
}
emitStateChanged();
},
closeSidebar() {
if (state.showSidebar) {
state.showSidebar = false;
emitStateChanged();
}
},
setUpload(value) {
state.upload = value;
emitStateChanged();
},
2024-07-30 17:45:27 +00:00
setUsage: (value) => {
state.usage = value;
emitStateChanged();
},
closeHovers: () => {
2024-02-10 00:13:02 +00:00
state.prompts = [];
2024-08-24 22:02:33 +00:00
if (!state.stickySidebar) {
state.showSidebar = false;
}
2024-07-30 17:45:27 +00:00
emitStateChanged();
},
2024-07-30 17:45:27 +00:00
showHover: (value) => {
if (typeof value === "object") {
2024-02-10 00:13:02 +00:00
state.prompts.push({
2024-07-30 17:45:27 +00:00
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,
2024-02-10 00:13:02 +00:00
});
2018-02-01 12:17:04 +00:00
}
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
showError: () => {
2024-02-10 00:13:02 +00:00
state.prompts.push("error");
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-08-24 22:02:33 +00:00
setLoading: (loadType, status) => {
if (status === false) {
delete state.loading[loadType];
} else {
state.loading = { ...state.loading, [loadType]: true };
}
2024-07-30 17:45:27 +00:00
emitStateChanged();
2024-09-16 21:01:16 +00:00
},
2024-07-30 17:45:27 +00:00
setReload: (value) => {
2021-03-21 11:51:58 +00:00
state.reload = value;
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-09-16 21:01:16 +00:00
setCurrentUser: (value) => {
2024-11-26 17:21:41 +00:00
localStorage.setItem("userData", undefined);
2024-09-16 21:01:16 +00:00
// If value is null or undefined, emit state change and exit early
if (!value) {
2024-11-21 00:15:30 +00:00
state.user = value;
2024-07-30 17:45:27 +00:00
emitStateChanged();
2021-03-21 11:51:58 +00:00
return;
}
2024-11-26 17:21:41 +00:00
if (value.username != "publicUser") {
localStorage.setItem("userData", JSON.stringify(value));
}
2024-09-16 21:01:16 +00:00
// Ensure locale exists and is valid
if (!value.locale) {
value.locale = i18n.detectLocale(); // Default to detected locale if missing
2024-08-03 15:34:12 +00:00
}
2024-11-21 00:15:30 +00:00
state.user = value;
2024-09-16 21:01:16 +00:00
// Emit state change after setting the user and locale
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
setJWT: (value) => {
state.jwt = value;
emitStateChanged();
},
setSession: (value) => {
state.sessionId = value;
emitStateChanged();
},
setMultiple: (value) => {
state.multiple = value;
2024-09-16 21:01:16 +00:00
if (value == true) {
notify.showMultipleSelection()
} else {
notify.closePopUp()
}
2024-07-30 17:45:27 +00:00
emitStateChanged();
},
addSelected: (value) => {
state.selected.push(value);
emitStateChanged();
},
removeSelected: (value) => {
2021-03-21 11:51:58 +00:00
let i = state.selected.indexOf(value);
if (i === -1) return;
state.selected.splice(i, 1);
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
resetSelected: () => {
2021-03-21 11:51:58 +00:00
state.selected = [];
2024-07-30 17:45:27 +00:00
mutations.setMultiple(false);
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-11-21 00:15:30 +00:00
setRaw: (value) => {
state.previewRaw = value;
emitStateChanged();
},
2024-09-16 21:01:16 +00:00
updateCurrentUser: (value) => {
2024-11-26 17:21:41 +00:00
localStorage.setItem("userData", undefined);
2024-09-16 21:01:16 +00:00
// Ensure the input is a valid object
if (typeof value !== "object" || value === null) return;
// Initialize state.user if it's null
if (!state.user) {
2024-02-10 00:13:02 +00:00
state.user = {};
}
2024-09-16 21:01:16 +00:00
// Store previous state for comparison
const previousUser = { ...state.user };
// Merge the new values into the current user state
2024-08-03 15:34:12 +00:00
state.user = { ...state.user, ...value };
2024-09-16 21:01:16 +00:00
// Handle locale change
2024-08-03 15:34:12 +00:00
if (state.user.locale !== previousUser.locale) {
2025-01-05 19:05:33 +00:00
//state.user.locale = i18n.detectLocale();
2024-08-03 15:34:12 +00:00
i18n.setLocale(state.user.locale);
i18n.default.locale = state.user.locale;
}
2024-09-16 21:01:16 +00:00
// Update localStorage if stickySidebar exists
if ('stickySidebar' in state.user) {
localStorage.setItem("stickySidebar", state.user.stickySidebar);
}
// Update users if there's any change in state.user
if (JSON.stringify(state.user) !== JSON.stringify(previousUser)) {
2024-11-26 17:21:41 +00:00
usersApi.update(state.user, Object.keys(value));
2018-02-01 12:17:04 +00:00
}
2024-09-16 21:01:16 +00:00
2024-11-26 17:21:41 +00:00
if (state.user.username != "publicUser") {
localStorage.setItem("userData", JSON.stringify(state.user));
}
2024-09-16 21:01:16 +00:00
// Emit state change event
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
updateRequest: (value) => {
2024-02-10 00:13:02 +00:00
const selectedItems = state.selected.map((i) => state.req.items[i]);
2021-03-21 11:51:58 +00:00
state.oldReq = state.req;
state.req = value;
2024-02-10 00:13:02 +00:00
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);
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
replaceRequest: (value) => {
state.req = value;
emitStateChanged();
},
setRoute: (value) => {
state.route = value;
emitStateChanged();
},
updateListingSortConfig: ({ field, asc }) => {
2024-10-07 22:44:53 +00:00
state.user.sorting.by = field;
state.user.sorting.asc = asc;
2024-07-30 17:45:27 +00:00
emitStateChanged();
},
2024-07-30 17:45:27 +00:00
updateListingItems: () => {
2024-12-02 17:14:50 +00:00
state.req.items = sortedItems(state.req.items,state.user.sorting.by)
2024-07-30 17:45:27 +00:00
emitStateChanged();
},
2024-07-30 17:45:27 +00:00
updateClipboard: (value) => {
2021-03-21 11:51:58 +00:00
state.clipboard.key = value.key;
state.clipboard.items = value.items;
state.clipboard.path = value.path;
2024-07-30 17:45:27 +00:00
emitStateChanged();
2018-02-01 12:17:04 +00:00
},
2024-07-30 17:45:27 +00:00
resetClipboard: () => {
2021-03-21 11:51:58 +00:00
state.clipboard.key = "";
state.clipboard.items = [];
2024-07-30 17:45:27 +00:00
emitStateChanged();
2021-03-21 11:51:58 +00:00
},
2024-11-26 17:21:41 +00:00
setSharePassword: (value) => {
state.sharePassword = value;
emitStateChanged();
}
2021-03-21 11:51:58 +00:00
};
2018-02-01 12:17:04 +00:00