Skip to content

Commit 22700ea

Browse files
committed
♻️ Use function instead of class (#1956)
1 parent 802de19 commit 22700ea

File tree

2 files changed

+59
-64
lines changed

2 files changed

+59
-64
lines changed

src/lib/utils/contest_table_provider.ts

Lines changed: 51 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import { getTaskTableHeaderName } from '$lib/utils/task';
1919
* - Implement abstract methods: setFilterCondition(), getMetadata(), getContestRoundLabel()
2020
* - Example: export class MyNewProvider extends ContestTableProviderBase { ... }
2121
*
22-
* Step 2: Register in ContestProviderBuilder
23-
* - Add the new provider to createPresets() that returns a ContestTableProviderGroup
22+
* Step 2: Register using prepareContestProviderPresets
23+
* - Add the new provider to prepareContestProviderPresets() that returns preset functions
2424
* - Example: MyNewProvider: () => new ContestTableProviderGroup(...).addProvider(...)
2525
*
2626
* Step 3: Export in contestTableProviderGroups
2727
* - Add the new provider group to the contestTableProviderGroups object
28-
* - Example: myNewProvider: ContestProviderBuilder.createPresets().MyNewProvider()
28+
* - Example: myNewProvider: prepareContestProviderPresets().MyNewProvider()
2929
*/
3030

3131
export abstract class ContestTableProviderBase implements ContestTableProvider {
@@ -369,62 +369,57 @@ export class ContestTableProviderGroup {
369369
}
370370

371371
/**
372-
* Builder class for easily creating ContestProviderGroups
372+
* Prepare predefined provider groups
373+
* Easily create groups with commonly used combinations
373374
*/
374-
export class ContestProviderBuilder {
375-
/**
376-
* Create predefined groups
377-
* Easily create groups with commonly used combinations
378-
*/
379-
static createPresets() {
380-
return {
381-
/**
382-
* Single ABC group (latest 20 rounds)
383-
*/
384-
ABCLatest20Rounds: () =>
385-
new ContestTableProviderGroup(`ABC Latest 20 Rounds`, {
386-
buttonLabel: 'ABC 最新 20 回',
387-
ariaLabel: 'Filter ABC latest 20 rounds',
388-
}).addProvider(ContestType.ABC, new ABCLatest20RoundsProvider(ContestType.ABC)),
389-
390-
/**
391-
* Single group for ABC 319 onwards
392-
*/
393-
ABC319Onwards: () =>
394-
new ContestTableProviderGroup(`ABC 319 Onwards`, {
395-
buttonLabel: 'ABC 319 〜 ',
396-
ariaLabel: 'Filter contests from ABC 319 onwards',
397-
}).addProvider(ContestType.ABC, new ABC319OnwardsProvider(ContestType.ABC)),
398-
399-
/**
400-
* Single group for ABC 212-318
401-
*/
402-
ABC212ToABC318: () =>
403-
new ContestTableProviderGroup(`From ABC 212 to ABC 318`, {
404-
buttonLabel: 'ABC 212 〜 318',
405-
ariaLabel: 'Filter contests from ABC 212 to ABC 318',
406-
}).addProvider(ContestType.ABC, new ABC212ToABC318Provider(ContestType.ABC)),
407-
408-
/**
409-
* DP group (EDPC and TDPC)
410-
*/
411-
dps: () =>
412-
new ContestTableProviderGroup(`EDPC・TDPC`, {
413-
buttonLabel: 'EDPC・TDPC',
414-
ariaLabel: 'EDPC and TDPC contests',
415-
}).addProviders(
416-
{ contestType: ContestType.EDPC, provider: new EDPCProvider(ContestType.EDPC) },
417-
{ contestType: ContestType.TDPC, provider: new TDPCProvider(ContestType.TDPC) },
418-
),
419-
};
420-
}
421-
}
375+
export const prepareContestProviderPresets = () => {
376+
return {
377+
/**
378+
* Single group for ABC latest 20 rounds
379+
*/
380+
ABCLatest20Rounds: () =>
381+
new ContestTableProviderGroup(`ABC Latest 20 Rounds`, {
382+
buttonLabel: 'ABC 最新 20 回',
383+
ariaLabel: 'Filter ABC latest 20 rounds',
384+
}).addProvider(ContestType.ABC, new ABCLatest20RoundsProvider(ContestType.ABC)),
385+
386+
/**
387+
* Single group for ABC 319 onwards
388+
*/
389+
ABC319Onwards: () =>
390+
new ContestTableProviderGroup(`ABC 319 Onwards`, {
391+
buttonLabel: 'ABC 319 〜 ',
392+
ariaLabel: 'Filter contests from ABC 319 onwards',
393+
}).addProvider(ContestType.ABC, new ABC319OnwardsProvider(ContestType.ABC)),
394+
395+
/**
396+
* Single group for ABC 212-318
397+
*/
398+
ABC212ToABC318: () =>
399+
new ContestTableProviderGroup(`From ABC 212 to ABC 318`, {
400+
buttonLabel: 'ABC 212 〜 318',
401+
ariaLabel: 'Filter contests from ABC 212 to ABC 318',
402+
}).addProvider(ContestType.ABC, new ABC212ToABC318Provider(ContestType.ABC)),
403+
404+
/**
405+
* DP group (EDPC and TDPC)
406+
*/
407+
dps: () =>
408+
new ContestTableProviderGroup(`EDPC・TDPC`, {
409+
buttonLabel: 'EDPC・TDPC',
410+
ariaLabel: 'EDPC and TDPC contests',
411+
}).addProviders(
412+
{ contestType: ContestType.EDPC, provider: new EDPCProvider(ContestType.EDPC) },
413+
{ contestType: ContestType.TDPC, provider: new TDPCProvider(ContestType.TDPC) },
414+
),
415+
};
416+
};
422417

423418
export const contestTableProviderGroups = {
424-
abcLatest20Rounds: ContestProviderBuilder.createPresets().ABCLatest20Rounds(),
425-
abc319Onwards: ContestProviderBuilder.createPresets().ABC319Onwards(),
426-
fromAbc212ToAbc318: ContestProviderBuilder.createPresets().ABC212ToABC318(),
427-
dps: ContestProviderBuilder.createPresets().dps(), // Dynamic Programming (DP) Contests
419+
abcLatest20Rounds: prepareContestProviderPresets().ABCLatest20Rounds(),
420+
abc319Onwards: prepareContestProviderPresets().ABC319Onwards(),
421+
fromAbc212ToAbc318: prepareContestProviderPresets().ABC212ToABC318(),
422+
dps: prepareContestProviderPresets().dps(), // Dynamic Programming (DP) Contests
428423
};
429424

430425
export type ContestTableProviderGroups = keyof typeof contestTableProviderGroups;

src/test/lib/utils/contest_table_provider.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
EDPCProvider,
1111
TDPCProvider,
1212
ContestTableProviderGroup,
13-
ContestProviderBuilder,
13+
prepareContestProviderPresets,
1414
} from '$lib/utils/contest_table_provider';
1515
import { taskResultsForContestTableProvider } from './test_cases/contest_table_provider';
1616

@@ -380,9 +380,9 @@ describe('ContestTableProviderGroup', () => {
380380
});
381381
});
382382

383-
describe('ContestProviderBuilder', () => {
383+
describe('prepareContestProviderPresets', () => {
384384
test('expects to create ABCLatest20Rounds preset correctly', () => {
385-
const group = ContestProviderBuilder.createPresets().ABCLatest20Rounds();
385+
const group = prepareContestProviderPresets().ABCLatest20Rounds();
386386

387387
expect(group.getGroupName()).toBe('ABC Latest 20 Rounds');
388388
expect(group.getMetadata()).toEqual({
@@ -394,7 +394,7 @@ describe('ContestProviderBuilder', () => {
394394
});
395395

396396
test('expects to create ABC319Onwards preset correctly', () => {
397-
const group = ContestProviderBuilder.createPresets().ABC319Onwards();
397+
const group = prepareContestProviderPresets().ABC319Onwards();
398398

399399
expect(group.getGroupName()).toBe('ABC 319 Onwards');
400400
expect(group.getMetadata()).toEqual({
@@ -406,7 +406,7 @@ describe('ContestProviderBuilder', () => {
406406
});
407407

408408
test('expects to create fromABC212ToABC318 preset correctly', () => {
409-
const group = ContestProviderBuilder.createPresets().ABC212ToABC318();
409+
const group = prepareContestProviderPresets().ABC212ToABC318();
410410

411411
expect(group.getGroupName()).toBe('From ABC 212 to ABC 318');
412412
expect(group.getMetadata()).toEqual({
@@ -418,7 +418,7 @@ describe('ContestProviderBuilder', () => {
418418
});
419419

420420
test('expects to create DPs preset correctly', () => {
421-
const group = ContestProviderBuilder.createPresets().dps();
421+
const group = prepareContestProviderPresets().dps();
422422

423423
expect(group.getGroupName()).toBe('EDPC・TDPC');
424424
expect(group.getMetadata()).toEqual({
@@ -431,7 +431,7 @@ describe('ContestProviderBuilder', () => {
431431
});
432432

433433
test('expects to verify all presets are functions', () => {
434-
const presets = ContestProviderBuilder.createPresets();
434+
const presets = prepareContestProviderPresets();
435435

436436
expect(typeof presets.ABCLatest20Rounds).toBe('function');
437437
expect(typeof presets.ABC319Onwards).toBe('function');
@@ -440,7 +440,7 @@ describe('ContestProviderBuilder', () => {
440440
});
441441

442442
test('expects each preset to create independent instances', () => {
443-
const presets = ContestProviderBuilder.createPresets();
443+
const presets = prepareContestProviderPresets();
444444
const group1 = presets.ABCLatest20Rounds();
445445
const group2 = presets.ABCLatest20Rounds();
446446

0 commit comments

Comments
 (0)