36 lines
1.0 KiB
TypeScript
Raw Normal View History

/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, June 2020
*/
import { StringOption } from '@sapphirecode/console-app';
export class Menu {
private _options: Record<string, ()=>void|Promise<void>> = {};
private _title: string;
public constructor (title: string) {
this._title = title;
}
public async run (): Promise<void> {
const options = Object.keys (this._options);
const selected = await (new StringOption ({
name: 'menu_select',
message: this._title,
sources: { console: false },
exit_on_interrupt: true,
preset: options
}))
.parse ();
if (typeof this._options[selected] !== 'undefined')
await new Promise (this._options[selected]);
}
public register_option (name:string, callback:()=>void|Promise<void>): void {
this._options[name] = callback;
}
}