aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/scrapbook/ScrapbookPresetRegistry.ts
blob: 3a2189d002ba86a3f06dadbc24ec7cb34030020d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { ScrapbookItemConfig } from './ScrapbookPreset';
import { ScrapbookPresetType } from './ScrapbookPreset';

type PresetGenerator = () => ScrapbookItemConfig[];

// Internal map of preset name to generator
const presetRegistry = new Map<string, PresetGenerator>();

/**
 * Register a new scrapbook preset under the given name.
 */
export function registerPreset(name: string, gen: PresetGenerator) {
    presetRegistry.set(name, gen);
}

/**
 * List all registered preset names.
 */
export function getPresetNames(): string[] {
    return Array.from(presetRegistry.keys());
}

/**
 * Create the config array for the named preset.
 */
export function createPreset(name: string): ScrapbookItemConfig[] {
    const gen = presetRegistry.get(name);
    if (!gen) throw new Error(`Unknown scrapbook preset: ${name}`);
    return gen();
}

// ------------------------
// Register built-in presets
import { ScrapbookPreset } from './ScrapbookPreset';

Object.keys(ScrapbookPresetType).forEach(key => registerPreset(key, () => ScrapbookPreset.createPreset(key as ScrapbookPresetType))); // pretter-ignore