core: fix buildContestRule extend

This commit is contained in:
undefined committed 2023-01-05 18:41:27 +08:00
1 parent 21c369139a
commit 8406e02d1e
1 file changed
+14 -14
+14 -14
View File
@@ -33,19 +33,20 @@ interface AcmDetail extends AcmJournal {
real: number; real: number;
} }
function buildContestRule<T>(def: ContestRule<T>): ContestRule<T> { function buildContestRule<T>(def: ContestRule<T>): ContestRule<T>;
const _originalRule = { function buildContestRule<T>(def: Partial<ContestRule<T>>, baseRule: ContestRule<T>): ContestRule<T>;
scoreboard: def.scoreboard, function buildContestRule<T>(def: Partial<ContestRule<T>>, { _originalRule: base }: ContestRule<T> = { _originalRule: {} } as any) {
scoreboardRow: def.scoreboardRow, def._originalRule = {
scoreboardHeader: def.scoreboardHeader, scoreboard: def.scoreboard || base.scoreboard,
stat: def.stat, scoreboardRow: def.scoreboardRow || base.scoreboardRow,
scoreboardHeader: def.scoreboardHeader || base.scoreboardHeader,
stat: def.stat || base.stat,
}; };
def.scoreboard = (def._originalRule?.scoreboard || def.scoreboard).bind(def); def.scoreboard = (def.scoreboard || base.scoreboard).bind(def);
def.scoreboardHeader = (def._originalRule?.scoreboardHeader || def.scoreboardHeader).bind(def); def.scoreboardHeader = (def.scoreboardHeader || base.scoreboardHeader).bind(def);
def.scoreboardRow = (def._originalRule?.scoreboardRow || def.scoreboardRow).bind(def); def.scoreboardRow = (def.scoreboardRow || base.scoreboardRow).bind(def);
def.stat = (def._originalRule?.stat || def.stat).bind(def); def.stat = (def.stat || base.stat).bind(def);
def._originalRule = _originalRule; return def as ContestRule<T>;
return def;
} }
const acm = buildContestRule({ const acm = buildContestRule({
@@ -349,13 +350,12 @@ const oi = buildContestRule({
}); });
const ioi = buildContestRule({ const ioi = buildContestRule({
...oi,
TEXT: 'IOI', TEXT: 'IOI',
submitAfterAccept: false, submitAfterAccept: false,
showRecord: (tdoc, now) => now > tdoc.endAt, showRecord: (tdoc, now) => now > tdoc.endAt,
showSelfRecord: () => true, showSelfRecord: () => true,
showScoreboard: (tdoc, now) => now > tdoc.beginAt, showScoreboard: (tdoc, now) => now > tdoc.beginAt,
}); }, oi);
const homework = buildContestRule({ const homework = buildContestRule({
TEXT: 'Assignment', TEXT: 'Assignment',