import { inject, injectable } from 'inversify'; import { Widget } from '@phosphor/widgets'; import { CancellationTokenSource } from '@theia/core/lib/common/cancellation'; import { ConfirmDialog, ConfirmDialogProps, DialogError, } from '@theia/core/lib/browser/dialogs'; import { nls } from '@theia/core/lib/common'; @injectable() export class DoNotAskAgainDialogProps extends ConfirmDialogProps { readonly onAccept: () => Promise<void>; } @injectable() export class DoNotAskAgainConfirmDialog extends ConfirmDialog { protected readonly doNotAskAgainCheckbox: HTMLInputElement; constructor( @inject(DoNotAskAgainDialogProps) protected readonly props: DoNotAskAgainDialogProps ) { super(props); this.controlPanel.removeChild(this.errorMessageNode); const doNotAskAgainNode = document.createElement('div'); doNotAskAgainNode.setAttribute('style', 'flex: 2'); this.controlPanel.insertBefore( doNotAskAgainNode, this.controlPanel.firstChild ); const doNotAskAgainLabel = document.createElement('label'); doNotAskAgainLabel.classList.add('flex-line'); doNotAskAgainNode.appendChild(doNotAskAgainLabel); doNotAskAgainLabel.textContent = nls.localize( 'arduino/dialog/dontAskAgain', "Don't ask again" ); this.doNotAskAgainCheckbox = document.createElement('input'); this.doNotAskAgainCheckbox.setAttribute('align-self', 'center'); doNotAskAgainLabel.appendChild(this.doNotAskAgainCheckbox); this.doNotAskAgainCheckbox.type = 'checkbox'; } protected async accept(): Promise<void> { if (!this.resolve) { return; } this.acceptCancellationSource.cancel(); this.acceptCancellationSource = new CancellationTokenSource(); const token = this.acceptCancellationSource.token; const value = this.value; const error = await this.isValid(value, 'open'); if (token.isCancellationRequested) { return; } if (!DialogError.getResult(error)) { this.setErrorMessage(error); } else { if (this.doNotAskAgainCheckbox.checked) { await this.props.onAccept(); } this.resolve(value); Widget.detach(this); } } protected setErrorMessage(error: DialogError): void { if (this.acceptButton) { this.acceptButton.disabled = !DialogError.getResult(error); } } }