import { $q } from 'ngimport'; import type { IConfirmModalProps } from './ConfirmModal'; import { ConfirmModal } from './ConfirmModal'; import { toMarkdown } from '../presentation/Markdown'; import { ReactModal } from '../presentation/ReactModal'; import type { ITaskMonitorConfig } from '../task'; import { TaskMonitor } from '../task'; export interface IConfirmationModalPassthroughProps { account?: string; askForReason?: boolean; bodyContent?: JSX.Element; buttonText?: string; cancelButtonText?: string; header?: string; interestingHealthProviderNames?: string[]; multiTaskTitle?: string; platformHealthOnlyShowOverride?: boolean; platformHealthType?: string; retryBody?: string; submitJustWithReason?: boolean; submitMethod?: (args?: any) => PromiseLike; textToVerify?: string; verificationLabel?: string; } export interface IConfirmationModalParams extends IConfirmationModalPassthroughProps { body?: string; taskMonitorConfig?: ITaskMonitorConfig; taskMonitorConfigs?: ITaskMonitorConfig[]; } export class ConfirmationModalService { private static defaults: IConfirmationModalParams = { buttonText: 'Confirm', cancelButtonText: 'Cancel', }; public static confirm(params: IConfirmationModalParams): PromiseLike { const extendedParams: IConfirmModalProps = { ...this.defaults, ...params }; if (params.body) { extendedParams.bodyContent = toMarkdown(params.body); } const { taskMonitorConfig, taskMonitorConfigs } = params; if (taskMonitorConfig) { extendedParams.taskMonitor = new TaskMonitor(taskMonitorConfig); } if (taskMonitorConfigs) { extendedParams.taskMonitors = taskMonitorConfigs.map((m) => new TaskMonitor(m)); } const { promise, resolve, reject } = $q.defer(); ReactModal.show(ConfirmModal, extendedParams).then(resolve, reject); // modal was dismissed promise.catch(() => {}); return promise; } }