mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-28 17:23:19 -05:00
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
// This code is originally from https://github.com/DonJayamanne/bowerVSCode
|
|
// License: https://github.com/DonJayamanne/bowerVSCode/blob/master/LICENSE
|
|
|
|
import { window, InputBoxOptions } from 'vscode';
|
|
import Prompt from './prompt';
|
|
import EscapeException from './escapeException';
|
|
|
|
const figures = require('figures');
|
|
|
|
export default class InputPrompt extends Prompt {
|
|
|
|
protected _options: InputBoxOptions;
|
|
|
|
constructor(question: any, ignoreFocusOut?: boolean) {
|
|
super(question, ignoreFocusOut);
|
|
|
|
this._options = this.defaultInputBoxOptions;
|
|
this._options.prompt = this._question.message;
|
|
}
|
|
|
|
// Helper for callers to know the right type to get from the type factory
|
|
public static get promptType(): string { return 'input'; }
|
|
|
|
public render(): any {
|
|
// Prefer default over the placeHolder, if specified
|
|
let placeHolder = this._question.default ? this._question.default : this._question.placeHolder;
|
|
|
|
if (this._question.default instanceof Error) {
|
|
placeHolder = this._question.default.message;
|
|
this._question.default = undefined;
|
|
}
|
|
|
|
this._options.placeHolder = placeHolder;
|
|
|
|
return window.showInputBox(this._options)
|
|
.then(result => {
|
|
if (result === undefined) {
|
|
throw new EscapeException();
|
|
}
|
|
|
|
if (result === '') {
|
|
// Use the default value, if defined
|
|
result = this._question.default || '';
|
|
}
|
|
|
|
const validationError = this._question.validate ? this._question.validate(result || '') : undefined;
|
|
|
|
if (validationError) {
|
|
this._question.default = new Error(`${figures.warning} ${validationError}`);
|
|
|
|
return this.render();
|
|
}
|
|
|
|
return result;
|
|
});
|
|
}
|
|
}
|