From 0d8373bdad303e27a0e508ea2936c3d94b4eafaa Mon Sep 17 00:00:00 2001 From: Jonah Iden Date: Fri, 6 Dec 2024 13:14:33 +0100 Subject: [PATCH] small refactoring of button contribution Signed-off-by: Jonah Iden --- .../src/browser/file-dialog/file-dialog.ts | 8 ++++++-- .../remote-electron-file-dialog-service.ts | 17 +++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/filesystem/src/browser/file-dialog/file-dialog.ts b/packages/filesystem/src/browser/file-dialog/file-dialog.ts index 668d542cea777..e06813baf5110 100644 --- a/packages/filesystem/src/browser/file-dialog/file-dialog.ts +++ b/packages/filesystem/src/browser/file-dialog/file-dialog.ts @@ -58,6 +58,10 @@ export const FILENAME_TEXTFIELD_CLASS = 'theia-FileNameTextField'; export const CONTROL_PANEL_CLASS = 'theia-ControlPanel'; export const TOOLBAR_ITEM_TRANSFORM_TIMEOUT = 100; +export interface AdditionalButtonDefinition { + label: string; + onClick: (resolve: (v: T | undefined) => void, reject: (v: unknown) => void) => void; +} export class FileDialogProps extends DialogProps { /** @@ -86,7 +90,7 @@ export class FileDialogProps extends DialogProps { /** * Additional buttons to show beside the close and accept buttons. */ - additionalButtons?: [string, (resolve: (v: T | undefined) => void, reject: (v: T | unknown) => void) => void][]; + additionalButtons?: AdditionalButtonDefinition[]; } @@ -190,7 +194,7 @@ export abstract class FileDialog extends AbstractDialog { this.hiddenFilesToggleRenderer = this.hiddenFilesToggleFactory(this.widget.model.tree); this.contentNode.appendChild(this.hiddenFilesToggleRenderer.host); - this.props.additionalButtons?.forEach(([label, onClick]) => { + this.props.additionalButtons?.forEach(({ label, onClick }) => { const button = this.appendButton(label, false); button.onclick = () => { if (this.resolve && this.reject) { diff --git a/packages/remote/src/electron-browser/remote-electron-file-dialog-service.ts b/packages/remote/src/electron-browser/remote-electron-file-dialog-service.ts index ff4887970e005..60a0c59ebfdd3 100644 --- a/packages/remote/src/electron-browser/remote-electron-file-dialog-service.ts +++ b/packages/remote/src/electron-browser/remote-electron-file-dialog-service.ts @@ -16,7 +16,7 @@ import { MaybeArray, URI, nls } from '@theia/core'; import { inject, injectable } from '@theia/core/shared/inversify'; -import { OpenFileDialogProps, SaveFileDialogProps } from '@theia/filesystem/lib/browser/file-dialog'; +import { AdditionalButtonDefinition, OpenFileDialogProps, SaveFileDialogProps } from '@theia/filesystem/lib/browser/file-dialog'; import { FileStat } from '@theia/filesystem/lib/common/files'; import { DefaultFileDialogService } from '@theia/filesystem/lib/browser/file-dialog/file-dialog-service'; import { ElectronFileDialogService } from '@theia/filesystem/lib/electron-browser/file-dialog/electron-file-dialog-service'; @@ -48,14 +48,15 @@ export class RemoteElectronFileDialogService extends ElectronFileDialogService { } protected addLocalFilesButton(props: OpenFileDialogProps): void { - const localFilesButton: [string, (res: typeof Promise.resolve) => void] = ['Show Local Files', async resolve => { - const localFile = await super.showOpenDialog({ ...props, title: nls.localizeByDefault('Show Local'), fileScheme: LOCAL_FILE_SCHEME }); - if (localFile) { - resolve({ uri: localFile }); - } else { - resolve(undefined); + const localFilesButton: AdditionalButtonDefinition<{ uri: URI }> = { + label: nls.localizeByDefault('Show Local'), + onClick: async resolve => { + const localFile = await super.showOpenDialog({ ...props, fileScheme: LOCAL_FILE_SCHEME }); + if (localFile) { + resolve({ uri: localFile }); + } } - }]; + }; if (props.additionalButtons) { props.additionalButtons.push(localFilesButton); } else {