Files
DumasNodes/js/load_images_folder/state.mjs
T

48 lines
1.3 KiB
JavaScript

export const COMFY_CLASS = "DumasLoadImagesFolder";
export const STATE_PROP = "loadImagesFolderState";
export const HIDDEN_INPUT_NAME = "LoadImagesFolderState";
export const DEFAULT_STATE = {
version: 1,
folder: "",
recursive: false,
sort: "name",
sort_dir: "asc",
selected: [],
selection_mode: "selected",
first_n: 5,
};
export function readState(node) {
const value = node.properties?.[STATE_PROP];
if (typeof value === "string" && value) {
try {
return { ...DEFAULT_STATE, ...JSON.parse(value) };
} catch (_error) {
return { ...DEFAULT_STATE };
}
}
return { ...DEFAULT_STATE };
}
export function writeState(node, state) {
if (!node.properties) node.properties = {};
node.properties[STATE_PROP] = JSON.stringify({ ...DEFAULT_STATE, ...(state || {}) });
}
export function sortFiles(files, sort, dir) {
const ordered = [...(files || [])];
ordered.sort((a, b) => {
if (sort === "date") {
const delta = (a?.mtime || 0) - (b?.mtime || 0);
if (delta !== 0) return dir === "desc" ? -delta : delta;
}
const delta = String(a?.file || "").localeCompare(String(b?.file || ""), undefined, {
numeric: true,
sensitivity: "base",
});
return dir === "desc" ? -delta : delta;
});
return ordered;
}