import { __decorate, __param } from '../../../../../../external/tslib/tslib.es6.js';
import * as nls from 'monaco-editor/esm/vs/nls.js';
import { toAction } from 'monaco-editor/esm/vs/base/common/actions.js';
import { MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
import '../../../../../../override/vs/platform/dialogs/common/dialogs.js';
import { INotificationService } from 'monaco-editor/esm/vs/platform/notification/common/notification.js';
import { Event } from 'monaco-editor/esm/vs/base/common/event.js';
import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs';
let MainThreadMessageService = class MainThreadMessageService {
constructor(extHostContext, _notificationService, _dialogService) {
this._notificationService = _notificationService;
this._dialogService = _dialogService;
}
dispose() {
}
$showMessage(severity, message, options, commands) {
if (options.modal) {
return this._showModalMessage(severity, message, options.detail, commands, options.useCustom);
}
else {
return this._showMessage(severity, message, commands, options);
}
}
_showMessage(severity, message, commands, options) {
return ( new Promise(resolve => {
const primaryActions = ( commands.map(command => toAction({
id: _extension_message_handle_${command.handle}
,
label: command.title,
enabled: true,
run: () => {
resolve(command.handle);
return Promise.resolve();
}
})));
let source;
if (options.source) {
source = {
label: ( nls.localizeWithPath(
'vs/workbench/api/browser/mainThreadMessageService',
'extensionSource',
"{0} (Extension)",
options.source.label
)),
id: options.source.identifier.value
};
}
if (!source) {
source = ( nls.localizeWithPath(
'vs/workbench/api/browser/mainThreadMessageService',
'defaultSource',
"Extension"
));
}
const secondaryActions = [];
const messageHandle = this._notificationService.notify({
severity,
message,
actions: { primary: primaryActions, secondary: secondaryActions },
source
});
Event.once(messageHandle.onDidClose)(() => {
resolve(undefined);
});
}));
}
async _showModalMessage(severity, message, detail, commands, useCustom) {
const buttons = [];
let cancelButton = undefined;
for (const command of commands) {
const button = {
label: command.title,
run: () => command.handle
};
if (command.isCloseAffordance) {
cancelButton = button;
}
else {
buttons.push(button);
}
}
if (!cancelButton) {
if (buttons.length > 0) {
cancelButton = {
label: ( nls.localizeWithPath('vs/workbench/api/browser/mainThreadMessageService', 'cancel', "Cancel")),
run: () => undefined
};
}
else {
cancelButton = {
label: ( nls.localizeWithPath(
'vs/workbench/api/browser/mainThreadMessageService',
{ key: 'ok', comment: ['&& denotes a mnemonic'] },
"&&OK"
)),
run: () => undefined
};
}
}
const { result } = await this._dialogService.prompt({
type: severity,
message,
detail,
buttons,
cancelButton,
custom: useCustom
});
return result;
}
};
MainThreadMessageService = __decorate([
extHostNamedCustomer(MainContext.MainThreadMessageService),
( __param(1, INotificationService)),
( __param(2, IDialogService))
], MainThreadMessageService);
export { MainThreadMessageService };