import {Dialog} from '../Dialog'; import {DialogImpl} from './DialogImpl'; import {DialogProvider} from '../DialogProvider'; import {DialogExtension} from '../DialogExtension'; import {DialogCreationOptions, DIALOG_SIZES} from '../DialogCreationOptions'; export class ButtonState { enabled: boolean = true; visible: boolean = true; } /** * An implementation of DialogProvider. */ export class DialogProviderImpl implements DialogProvider { activeDialog : Dialog | null = null; buttonIdsToStates = new Map(); close(): void { } setButtonDisabled(identifier: string, disabled: boolean): void { let buttonState = this.buttonIdsToStates.get(identifier); if (!buttonState) { buttonState = new ButtonState(); this.buttonIdsToStates.set(identifier, buttonState); } buttonState.enabled = !disabled; } isButtonDisabled(identifier: string): boolean { let buttonState = this.buttonIdsToStates.get(identifier); if (buttonState) { return !buttonState.enabled; } else { return false; } } toggleButton(identifier: string): void { let buttonState = this.buttonIdsToStates.get(identifier); if (!buttonState) { buttonState = new ButtonState(); this.buttonIdsToStates.set(identifier, buttonState); } buttonState.enabled = !buttonState.enabled; } setButtonHidden(identifier: string, hidden: boolean): void { let buttonState = this.buttonIdsToStates.get(identifier); if (!buttonState) { buttonState = new ButtonState(); this.buttonIdsToStates.set(identifier, buttonState); } buttonState.visible = !hidden; } isButtonHidden(identifier: string): boolean { let buttonState = this.buttonIdsToStates.get(identifier); if (buttonState) { return !buttonState.visible; } else { return false; } } isActiveDialog(addon_key: string): boolean { const activeDialog = this.activeDialog; return activeDialog !== null && activeDialog.isOpen() && activeDialog.addon_key === addon_key; } create(dialogCreationOptions: DialogCreationOptions, dialogExtension: DialogExtension): Dialog { if (!DIALOG_SIZES.hasOwnProperty(dialogCreationOptions.size)) { throw new TypeError('Invalid dialog size: ' + dialogCreationOptions.size); }; this.activeDialog = new DialogImpl(dialogCreationOptions, dialogExtension); return this.activeDialog; } }