in src/tdmlEditor/addNewTest.ts [194:265]
async showInputBox<P extends InputBoxParameters>({
title,
step,
totalSteps,
value,
prompt,
validate,
shouldResume,
placeholder,
}: P) {
const disposables: Disposable[] = []
try {
return await new Promise<
string | (P extends { buttons: (infer I)[] } ? I : never)
>((resolve, reject) => {
const input = window.createInputBox()
input.title = title
input.step = step
input.totalSteps = totalSteps
input.value = value || ''
input.prompt = prompt
input.buttons = [
...(this.steps.length > 1 ? [QuickInputButtons.Back] : []),
]
input.placeholder = placeholder
let validating = validate('')
disposables.push(
input.onDidTriggerButton((item) => {
if (item === QuickInputButtons.Back) {
reject(InputFlowAction.back)
} else {
resolve(<any>item)
}
}),
input.onDidAccept(async () => {
const value = input.value
input.enabled = false
input.busy = true
if (!(await validate(value))) {
resolve(value)
}
input.enabled = true
input.busy = false
}),
input.onDidChangeValue(async (text) => {
const current = validate(text)
validating = current
const validationMessage = await current
if (current === validating) {
input.validationMessage = validationMessage
}
}),
input.onDidHide(() => {
;(async () => {
reject(
shouldResume && (await shouldResume())
? InputFlowAction.resume
: InputFlowAction.cancel
)
})().catch(reject)
})
)
if (this.current) {
this.current.dispose()
}
this.current = input
this.current.show()
})
} finally {
disposables.forEach((d) => d.dispose())
}
}