Files
azuredatastudio/extensions/machine-learning/src/views/models/localModelsComponent.ts
Charles Gagnon 3a3d7f5271 withProperties -> withProps (#15876)
* withProperties -> withProps

* Fix errors

* remove ,

* fixes

* Update azdata-test

* Fix dacpac tests

* Add required and remove added layout
2021-06-23 14:26:14 -07:00

133 lines
3.5 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { ModelViewBase } from './modelViewBase';
import { ApiWrapper } from '../../common/apiWrapper';
import * as constants from '../../common/constants';
import { IDataComponent } from '../interfaces';
/**
* View to pick local models file
*/
export class LocalModelsComponent extends ModelViewBase implements IDataComponent<string[]> {
private _form: azdata.FormContainer | undefined;
private _flex: azdata.FlexContainer | undefined;
private _localPath: azdata.InputBoxComponent | undefined;
private _localBrowse: azdata.ButtonComponent | undefined;
/**
* Creates new view
*/
constructor(apiWrapper: ApiWrapper, parent: ModelViewBase, private _multiSelect: boolean = true) {
super(apiWrapper, parent.root, parent);
}
/**
*
* @param modelBuilder Register the components
*/
public registerComponent(modelBuilder: azdata.ModelBuilder): azdata.Component {
this._localPath = modelBuilder.inputBox().withProps({
value: '',
width: this.componentMaxLength - this.browseButtonMaxLength - this.spaceBetweenComponentsLength
}).component();
this._localBrowse = modelBuilder.button().withProps({
iconPath: { light: this.asAbsolutePath('images/light/browseLocal.svg'), dark: this.asAbsolutePath('images/dark/browseLocal.svg') },
iconHeight: '24px',
iconWidth: '24px',
width: '24px',
height: '24px'
}).component();
this._localBrowse.onDidClick(async () => {
let options: vscode.OpenDialogOptions = {
canSelectFiles: true,
canSelectFolders: false,
canSelectMany: this._multiSelect,
filters: { 'ONNX File': ['onnx'] }
};
const filePaths = await this.getLocalPaths(options);
if (this._localPath && filePaths && filePaths.length > 0) {
this._localPath.value = this._multiSelect ? filePaths.join(';') : filePaths[0];
} else if (this._localPath) {
this._localPath.value = '';
}
});
this._flex = modelBuilder.flexContainer()
.withLayout({
flexFlow: 'row',
justifyContent: 'space-between',
width: this.componentMaxLength
}).withItems([
this._localPath, this._localBrowse], {
CSSStyles: {
'padding-right': '5px'
}
}
).component();
this._form = modelBuilder.formContainer().withFormItems([{
title: '',
component: this._flex
}]).component();
return this._form;
}
public addComponents(formBuilder: azdata.FormBuilder) {
if (this._flex) {
formBuilder.addFormItem({
title: constants.modelLocalSourceTitle,
component: this._flex
}, { info: constants.modelLocalSourceTooltip });
}
}
public removeComponents(formBuilder: azdata.FormBuilder) {
if (this._flex) {
formBuilder.removeFormItem({
title: '',
component: this._flex
});
}
}
/**
* Returns selected data
*/
public get data(): string[] {
if (this._localPath?.value) {
return this._localPath?.value.split(';');
} else {
return [];
}
}
/**
* Returns the component
*/
public get component(): azdata.Component | undefined {
return this._form;
}
/**
* Refreshes the view
*/
public async refresh(): Promise<void> {
}
/**
* Returns the page title
*/
public get title(): string {
return constants.localModelsTitle;
}
}