diff --git a/packages/hydrooj/src/lib/ui.ts b/packages/hydrooj/src/lib/ui.ts index be9336b94..6e8de7eb3 100644 --- a/packages/hydrooj/src/lib/ui.ts +++ b/packages/hydrooj/src/lib/ui.ts @@ -32,7 +32,11 @@ export const nodes = new Proxy({}, { }); export function inject(node: UIInjectableFields, name: string, args: Record = {}, ...permPrivChecker: PermPrivChecker) { const obj = { name, args: args || {}, checker: buildChecker(...permPrivChecker) }; - nodes[node].push(obj); + const idx = obj.args.before ? nodes[node].findIndex((i) => i.name === obj.args.before) : -1; + if (idx !== -1) { + if (obj.name in nodes[node]) nodes[node] = nodes[node].filter((i) => i.name !== obj.name); + nodes[node].splice(idx, 0, obj); + } else nodes[node].push(obj); return () => { nodes[node] = nodes[node].filter((i) => i !== obj); }; } export function getNodes(name: UIInjectableFields) {