mirror of
https://github.com/imgfloat/server.git
synced 2026-02-05 03:39:26 +00:00
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
import { isVisualAsset } from "./assetKinds.js";
|
|
|
|
export function ensureLayerPosition(state, assetId, placement = "keep") {
|
|
const asset = state.assets.get(assetId);
|
|
if (asset && !isVisualAsset(asset)) {
|
|
return;
|
|
}
|
|
const existingIndex = state.layerOrder.indexOf(assetId);
|
|
if (existingIndex !== -1 && placement === "keep") {
|
|
return;
|
|
}
|
|
if (existingIndex !== -1) {
|
|
state.layerOrder.splice(existingIndex, 1);
|
|
}
|
|
if (placement === "append") {
|
|
state.layerOrder.push(assetId);
|
|
} else {
|
|
state.layerOrder.unshift(assetId);
|
|
}
|
|
state.layerOrder = state.layerOrder.filter((id) => state.assets.has(id));
|
|
}
|
|
|
|
export function getLayerOrder(state) {
|
|
state.layerOrder = state.layerOrder.filter((id) => {
|
|
const asset = state.assets.get(id);
|
|
return asset && isVisualAsset(asset);
|
|
});
|
|
state.assets.forEach((asset, id) => {
|
|
if (!isVisualAsset(asset)) {
|
|
return;
|
|
}
|
|
if (!state.layerOrder.includes(id)) {
|
|
state.layerOrder.unshift(id);
|
|
}
|
|
});
|
|
return state.layerOrder;
|
|
}
|
|
|
|
export function getRenderOrder(state) {
|
|
return [...getLayerOrder(state)]
|
|
.reverse()
|
|
.map((id) => state.assets.get(id))
|
|
.filter(Boolean);
|
|
}
|