一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
31 行
839 B
TypeScript
31 行
839 B
TypeScript
import { produce } from 'immer';
|
|
import iterateItems from './iterateItems';
|
|
import { LayoutItem } from './types';
|
|
import validateLayout from './validateLayout';
|
|
|
|
interface ItemToRemove {
|
|
parent: LayoutItem;
|
|
index: number;
|
|
}
|
|
|
|
export default function(layout: LayoutItem): LayoutItem {
|
|
const itemsToRemove: ItemToRemove[] = [];
|
|
|
|
const output = produce(layout, (layoutDraft: LayoutItem) => {
|
|
iterateItems(layoutDraft, (itemIndex: number, item: LayoutItem, parent: LayoutItem) => {
|
|
if (!item.key) itemsToRemove.push({ parent, index: itemIndex });
|
|
return true;
|
|
});
|
|
|
|
itemsToRemove.sort((a: ItemToRemove, b: ItemToRemove) => {
|
|
return a.index > b.index ? -1 : +1;
|
|
});
|
|
|
|
for (const item of itemsToRemove) {
|
|
item.parent.children.splice(item.index, 1);
|
|
}
|
|
});
|
|
|
|
return output !== layout ? validateLayout(output) : layout;
|
|
}
|