diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index df93fcd9e..bb6e0f8eb 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -141,7 +141,7 @@ export class ProblemMainHandler extends Handler { const query = buildQuery(this.user); const psdict = {}; const search = global.Hydro.lib.problemSearch || defaultSearch; - let sort: string[]; + let sort: string[] = []; let fail = false; let pcountRelation = 'eq'; const parsed = parser.parse(q, { @@ -173,7 +173,7 @@ export class ProblemMainHandler extends Handler { }); sort = result.hits; } - await this.ctx.parallel('problem/list', query, this); + await this.ctx.parallel('problem/list', query, this, sort); // eslint-disable-next-line prefer-const let [pdocs, ppcount, pcount] = fail ? [[], 0, 0] @@ -182,7 +182,7 @@ export class ProblemMainHandler extends Handler { pcount = total; ppcount = Math.ceil(total / limit); } - if (sort) pdocs = pdocs.sort((a, b) => sort.indexOf(`${a.domainId}/${a.docId}`) - sort.indexOf(`${b.domainId}/${b.docId}`)); + if (sort.length) pdocs = pdocs.sort((a, b) => sort.indexOf(`${a.domainId}/${a.docId}`) - sort.indexOf(`${b.domainId}/${b.docId}`)); if (q && page === 1) { const pdoc = await problem.get(domainId, +q || q, problem.PROJECTION_LIST); if (pdoc && problem.canViewBy(pdoc, this.user)) { diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 114e9105d..d8395d6d7 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -82,7 +82,7 @@ export interface EventMap extends LifecycleEvents, HandlerEvents { 'problem/edit': (doc: ProblemDoc) => VoidReturn 'problem/before-del': (domainId: string, docId: number) => VoidReturn 'problem/del': (domainId: string, docId: number) => VoidReturn - 'problem/list': (query: Filter, handler: any) => VoidReturn + 'problem/list': (query: Filter, handler: any, sort?: string[]) => VoidReturn 'problem/get': (doc: ProblemDoc, handler: any) => VoidReturn 'problem/delete': (domainId: string, docId: number) => VoidReturn 'problem/addTestdata': (domainId: string, docId: number, name: string, payload: Omit) => VoidReturn