@@ -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
3131export 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
423418export 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
430425export type ContestTableProviderGroups = keyof typeof contestTableProviderGroups ;
0 commit comments