135 lines
3.8 KiB
JavaScript
135 lines
3.8 KiB
JavaScript
import { state } from "./state.js";
|
|
|
|
export const getters = {
|
|
isMobile: () => window.innerWidth <= 800,
|
|
isDarkMode: () => {
|
|
if (state.user == null) {
|
|
return true;
|
|
}
|
|
return state.user.darkMode === true;
|
|
},
|
|
isLoggedIn: () => {
|
|
return state.user !== null && state.user?.username != undefined && state.user?.username != "publicUser";
|
|
},
|
|
isAdmin: () => state.user.perm?.admin == true,
|
|
isFiles: () => state.route.name === "Files",
|
|
isListing: () => getters.isFiles() && state.req.isDir,
|
|
selectedCount: () => Array.isArray(state.selected) ? state.selected.length : 0,
|
|
isSingleFileSelected: () => getters.selectedCount() === 1 && !state.req.items[state.selected[0]]?.isDir,
|
|
selectedDownloadUrl() {
|
|
let selectedItem = state.selected[0]
|
|
return state.req.items[selectedItem].url;
|
|
},
|
|
isSidebarVisible: () => {
|
|
if (!getters.isLoggedIn()) {
|
|
return false
|
|
}
|
|
return state.showSidebar || state.user.stickySidebar
|
|
},
|
|
showOverlay: () => {
|
|
if (!getters.isLoggedIn()) {
|
|
return false
|
|
}
|
|
const hasPrompt = getters.currentPrompt() !== null && getters.currentPromptName() !== "more";
|
|
const sidebarHover = (!state.user.stickySidebar && state.showSidebar) || getters.isMobile();
|
|
return hasPrompt || sidebarHover;
|
|
},
|
|
getRoutePath: () => {
|
|
return state.route.path.endsWith("/")
|
|
? state.route.path
|
|
: state.route.path + "/";
|
|
},
|
|
currentView: () => {
|
|
let returnVal = null;
|
|
if (state.req.type !== undefined) {
|
|
if (state.req.isDir) {
|
|
returnVal = "listingView";
|
|
} else if ("content" in state.req) {
|
|
returnVal = "editor";
|
|
} else {
|
|
returnVal = "preview";
|
|
}
|
|
}
|
|
return returnVal;
|
|
},
|
|
progress: () => {
|
|
// Check if state.upload is defined and valid
|
|
if (!state.upload || !Array.isArray(state.upload.progress) || !Array.isArray(state.upload.sizes)) {
|
|
return 0;
|
|
}
|
|
|
|
// Handle cases where progress or sizes arrays might be empty
|
|
if (state.upload.progress.length === 0 || state.upload.sizes.length === 0) {
|
|
return 0;
|
|
}
|
|
|
|
// Calculate totalSize
|
|
let totalSize = state.upload.sizes.reduce((a, b) => a + b, 0);
|
|
|
|
// Calculate sum of progress
|
|
let sum = state.upload.progress.reduce((acc, val) => acc + val, 0);
|
|
|
|
// Return progress as a percentage
|
|
return Math.ceil((sum / totalSize) * 100);
|
|
},
|
|
|
|
filesInUploadCount: () => {
|
|
const uploadsCount = state.upload.length
|
|
const queueCount = state.queue.length
|
|
return uploadsCount + queueCount;
|
|
},
|
|
|
|
currentPrompt: () => {
|
|
// Ensure state.prompts is an array
|
|
if (!Array.isArray(state.prompts)) {
|
|
return null;
|
|
}
|
|
if (state.prompts.length === 0) {
|
|
return null;
|
|
}
|
|
return state.prompts[state.prompts.length - 1]
|
|
},
|
|
|
|
currentPromptName: () => {
|
|
// Ensure state.prompts is an array
|
|
if (!Array.isArray(state.prompts)) {
|
|
return null;
|
|
}
|
|
if (state.prompts.length === 0) {
|
|
return null;
|
|
}
|
|
return state.prompts[state.prompts.length - 1].name;
|
|
},
|
|
|
|
filesInUpload: () => {
|
|
// Ensure state.upload.uploads is an object and state.upload.sizes is an array
|
|
if (typeof state.upload.uploads !== 'object' || !Array.isArray(state.upload.sizes)) {
|
|
return [];
|
|
}
|
|
|
|
let files = [];
|
|
|
|
for (let index in state.upload.uploads) {
|
|
let upload = state.upload.uploads[index];
|
|
let id = upload.id;
|
|
let type = upload.type;
|
|
let name = upload.file.name;
|
|
let size = state.upload.sizes[id] || 0; // Default to 0 if size is undefined
|
|
let isDir = upload.file.isDir;
|
|
let progress = isDir
|
|
? 100
|
|
: Math.ceil((state.upload.progress[id] || 0 / size) * 100); // Default to 0 if progress is undefined
|
|
|
|
files.push({
|
|
id,
|
|
name,
|
|
progress,
|
|
type,
|
|
isDir,
|
|
});
|
|
}
|
|
|
|
return files.sort((a, b) => a.progress - b.progress);
|
|
},
|
|
};
|