@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
62 lines (50 loc) • 1.84 kB
text/typescript
import { $q } from 'ngimport';
import { ReactModal, toMarkdown } from 'core/presentation';
import { ITaskMonitorConfig, TaskMonitor } from 'core/task';
import { ConfirmModal, IConfirmModalProps } from './ConfirmModal';
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<any>;
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<any> {
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;
}
}