Files
matrix-screen-controller/核桃派软件源代码/app/static/workspace-order.js
T

35 lines
1.1 KiB
JavaScript

export function resolveWorkspaceOrder(definitions, savedOrder) {
const defaults = Array.from(definitions || []);
const byId = new Map(defaults.map((definition) => [definition.id, definition]));
const resolved = [];
const seen = new Set();
if (Array.isArray(savedOrder)) {
savedOrder.forEach((workspaceId) => {
if (seen.has(workspaceId) || !byId.has(workspaceId)) return;
seen.add(workspaceId);
resolved.push(byId.get(workspaceId));
});
}
defaults.forEach((definition) => {
if (seen.has(definition.id)) return;
seen.add(definition.id);
resolved.push(definition);
});
return resolved;
}
export function moveWorkspaceOrder(workspaceIds, index, offset) {
if (!Array.isArray(workspaceIds) || !Number.isInteger(index) || !Number.isInteger(offset)) {
return null;
}
const target = index + offset;
if (index < 0 || index >= workspaceIds.length || target < 0 || target >= workspaceIds.length) {
return null;
}
const moved = [...workspaceIds];
[moved[index], moved[target]] = [moved[target], moved[index]];
return moved;
}