import { onResolveAll, onResolve, Constructable, isFunction } from '@aurelia/kernel'; import { CustomElement } from '@aurelia/runtime-html'; import { type IDialogSettings, IDialogGlobalSettings, IDialogLoadedSettings } from './dialog-interfaces'; import { createMappedError, ErrorNames } from './errors'; /** @internal */ export interface DialogSettings extends IDialogSettings { } /** @internal */ export class DialogSettings implements IDialogSettings { public static from(baseGlobalSettings: IDialogGlobalSettings, baseSettings: IDialogSettings, settings: IDialogSettings): DialogSettings { const finalSettings = Object.assign( new DialogSettings(), baseGlobalSettings, baseSettings, { ...settings, options: { ...baseGlobalSettings.options ?? {}, ...baseSettings.options ?? {}, ...settings.options ?? {} } }); return finalSettings; } public validate(): this { if (this.component == null && this.template == null) { throw createMappedError(ErrorNames.dialog_settings_invalid); } return this; } public load(): IDialogLoadedSettings | Promise { const loaded = this as IDialogLoadedSettings; const cmp = this.component; const template = this.template; const maybePromise = onResolveAll( cmp == null ? void 0 : onResolve( CustomElement.isType(cmp) ? cmp : (cmp as Exclude)(), // (cmp as Exclude)(), loadedCmp => { loaded.component = loadedCmp; } ), isFunction(template) ? onResolve(template(), loadedTpl => { loaded.template = loadedTpl; }) : void 0 ); return onResolve(maybePromise, () => loaded); } }