This is an automated email from the ASF dual-hosted git repository. dgnatyshyn pushed a commit to branch DLAB-1819 in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit ec98f2cc068346115b80a2141db2c5f5509aa120 Author: Dmytro Gnatyshyn <di1...@ukr.net> AuthorDate: Fri May 22 19:12:53 2020 +0300 [DLAB-1819]: Fixed bug with data reset while folder creating, limits bug, changed azure backetName, and other small fixes --- .../bucket-browser/bucket-browser.component.html | 8 +-- .../bucket-browser/bucket-browser.component.ts | 41 ++++++++------ .../bucket-browser/bucket-data.service.ts | 23 +++++--- .../folder-tree/folder-tree.component.ts | 64 ++++++++++------------ .../detail-dialog/detail-dialog.component.html | 56 +++++++++++-------- .../detail-dialog/detail-dialog.component.scss | 4 +- .../detail-dialog/detail-dialog.component.ts | 2 + .../src/app/resources/resources.component.html | 5 +- .../webapp/src/assets/styles/_dialogs.scss | 7 ++- 9 files changed, 117 insertions(+), 93 deletions(-) diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html index a64b3df..20d9437 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html @@ -166,7 +166,7 @@ <div class="size size-folder">-</div> <div class="date" *ngIf="!file.isDownloading">-</div> </div> - <div class="folder-item-wrapper" (click)="toggleSelectedFile(file, 'file')" *ngIf="!file.children" [ngClass]="{'no-select': !this.bucketStatus.download && !this.bucketStatus.delete}"> + <div class="folder-item-wrapper" (click)="toggleSelectedFile(file, 'file')" *ngIf="!file.children && file.item !== 'ا'" [ngClass]="{'no-select': !this.bucketStatus.download && !this.bucketStatus.delete}"> <div class="name name-file"> <span *ngIf="this.bucketStatus.download || this.bucketStatus.delete" class="empty-checkbox" [ngClass]="{'checked': file.isSelected}" (click)="toggleSelectedFile(file, 'file');$event.stopPropagation()" > <span class="checked-checkbox" *ngIf="file.isSelected"></span> @@ -184,8 +184,8 @@ </span> </div> <div class="size">{{file.object?.size | convertFileSize}}</div> - <div class="date" *ngIf="!file.isDownloading">{{convertDate(file.object?.lastModifiedDate) | date: 'dd/MM/yyyy hh:mm:ss aa' }}</div> -<!-- <div class="date" *ngIf="!file.isDownloading">{{file.object?.lastModifiedDate }}</div>--> +<!-- <div class="date" *ngIf="!file.isDownloading">{{convertDate(file.object?.lastModifiedDate) | date: 'dd/MM/yyyy hh:mm:ss aa' }}</div>--> + <div class="date" *ngIf="!file.isDownloading">{{file.object?.lastModifiedDate }}</div> <div class="progress-wrapper" *ngIf="file.isDownloading"> <div class="progres"> @@ -252,7 +252,7 @@ <span *ngIf="file.status === 'failed'" class="error">Failed</span> <span *ngIf="file.status === 'waiting'" class="stopped">Waiting for uploading...</span> </div> - <div class="remove"><i (click)="deleteAddedFile(file)" class="material-icons close">delete</i></div> + <div class="remove"><i (click)="deleteAddedFile(file)" class="material-icons close">close</i></div> </div> </li> <li id="upload-list"></li> diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts index da40a18..8d236cd 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts @@ -63,6 +63,7 @@ export class BucketBrowserComponent implements OnInit { isFilterVisible: boolean; public buckets; private isFileUploading: boolean; + private isFileUploaded: boolean; @@ -87,8 +88,6 @@ export class BucketBrowserComponent implements OnInit { this.endpoint = this.data.endpoint; this.bucketStatus = this.data.bucketStatus; this.buckets = this.data.buckets; - const time = [...'2-02-2020 10:57:02'.split(' ')[0].split('-').reverse(), ...'2-02-2020 10:57:02'.split(' ')[1].split(':')].map(v => + v); - this.convertDate('2020-05-19T18:47:10'); } public showItem(item) { @@ -120,10 +119,8 @@ export class BucketBrowserComponent implements OnInit { } public handleFileInput(event) { - console.log('handleFileInput'); const fullFilesList = Object['values'](event.target.files); if (fullFilesList.length > 0) { - console.log('handleFileInputLength'); const files = fullFilesList.filter(v => v.size < 4294967296); const toBigFile = fullFilesList.length !== files.length; const toMany = files.length > 50; @@ -142,17 +139,12 @@ export class BucketBrowserComponent implements OnInit { } } event.target.value = ''; - setTimeout(() => { - const element = document.querySelector('#upload-list'); - element && element.scrollIntoView({ block: 'end', behavior: 'smooth' }); - }, 0); } private async uploadingQueue(files) { if (files.length) { let askForAll = true; let skipAll = false; - console.log('uploadingQueue'); // this.auth.refreshToken().subscribe(); const folderFiles = this.folderItems.filter(v => !v.children).map(v => v.item); for (const file of files) { @@ -181,7 +173,10 @@ export class BucketBrowserComponent implements OnInit { } } } - + setTimeout(() => { + const element = document.querySelector('#upload-list'); + element && element.scrollIntoView({ block: 'end', behavior: 'smooth' }); + }, 0); } async openResolveDialog(existFile) { @@ -214,7 +209,7 @@ export class BucketBrowserComponent implements OnInit { } public filterObjects() { - this.folderItems = this.originFolderItems.filter(v => v.item.indexOf(this.searchValue) !== -1); + this.folderItems = this.originFolderItems.filter(v => v.item.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1); } private clearSelection() { @@ -254,27 +249,33 @@ export class BucketBrowserComponent implements OnInit { public sendFile(file?) { const waitUploading = this.addedFiles.filter(v => v.status === 'waiting'); const uploading = this.addedFiles.filter(v => v.status === 'uploading'); - this.isFileUploading = !!uploading.length; - this.isQueueFull = this.addedFiles.filter(v => v.status === 'uploading').length >= 9; - console.log(this.addedFiles.filter(v => v.status === 'uploading').length); + this.isQueueFull = !!waitUploading.length; + this.isFileUploading = !!this.addedFiles.filter(v => v.status === 'uploading').length; if (waitUploading.length && uploading.length < 10) { if (!file) { file = waitUploading[0]; } file.status = 'uploading'; - this.isFileUploading = true; - this.isQueueFull = this.addedFiles.filter(v => v.status === 'uploading').length === 10; + this.isQueueFull = !!this.addedFiles.filter(v => v.status === 'waiting').length; file.subscr = file.request.subscribe((event: any) => { if (event.type === HttpEventType.UploadProgress) { - file.progress = Math.round(95 * event.loaded / event.total); + file.progress = Math.round(95 * event.loaded / event.total); + if (file.progress === 95 && !file.interval) { + file.interval = setInterval(() => { + if (file.progress < 99) { + return file.progress++; + } + }, file.size < 1094967296 ? 12000 : 20000); + } } else if (event['type'] === HttpEventType.Response) { - console.log('upload response'); + window.clearInterval(file.interval); file.status = 'uploaded'; delete file.request; this.sendFile(this.addedFiles.filter(v => v.status === 'waiting')[0]); this.bucketDataService.refreshBucketdata(this.bucketName, this.data.endpoint); } }, error => { + window.clearInterval(file.interval); file.status = 'failed'; delete file.request; this.sendFile(this.addedFiles.filter(v => v.status === 'waiting')[0]); @@ -387,6 +388,10 @@ export class BucketBrowserComponent implements OnInit { const utcDate = new Date(date); return new Date(utcDate.setTime( utcDate.getTime() - utcDate.getTimezoneOffset() * 60 * 1000 )); } + + // public toggleFileUploaded($event: any) { + // this.isFileUploaded = $event; + // } } diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts index 9cbabec..003e615 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts @@ -31,6 +31,7 @@ export class BucketDataService { public _bucketData = new BehaviorSubject<any>(null); public serverData: any = []; get data(): TodoItemNode[] { return this._bucketData.value; } + emptyFolder = null; constructor( private bucketBrowserService: BucketBrowserService, ) { @@ -39,8 +40,13 @@ export class BucketDataService { public refreshBucketdata(bucket, endpoint) { let backetData = []; this.bucketBrowserService.getBucketData(bucket, endpoint).subscribe(v => { + const copiedData = JSON.parse(JSON.stringify(v)); + this.serverData = v; - backetData = this.convertToFolderTree(v); + if (this.emptyFolder) { + copiedData.push(this.emptyFolder); + } + backetData = this.convertToFolderTree(copiedData); const data = this.buildFileTree({[bucket]: backetData}, 0); this._bucketData.next(data); }); @@ -77,12 +83,13 @@ export class BucketDataService { }, []); } - public insertItem(parent: TodoItemNode, name, isFile) { + public insertItem(parent: TodoItemNode, name, isFile, emptyFolderObj?) { if (parent.children) { if (isFile) { parent.children.push(name as TodoItemNode); } else { - parent.children.unshift({item: name ? name + '/' : name, children: []} as TodoItemNode); + parent.children.push({item: '', children: [], object: {}} as TodoItemNode); + this.emptyFolder = emptyFolderObj; this._bucketData.next(this.data); } } @@ -93,8 +100,8 @@ export class BucketDataService { this._bucketData.next(this.data); } - public removeItem(parent) { - parent.children.shift(); + public removeItem(parent, child) { + parent.children.splice( parent.children.indexOf(child), 1); this._bucketData.next(this.data); } @@ -108,16 +115,15 @@ export class BucketDataService { if (!pointer.obj) { pointer.obj = object; } - }); - } + }; public processFolderArray = (acc, curr) => { const files = curr.object.split('/'); this.processFiles(files, acc, curr); return acc; - } + }; public convertToFolderTree = (data) => { const finalData = data.reduce(this.processFolderArray, {}); @@ -126,5 +132,4 @@ export class BucketDataService { } return finalData; } - } diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts index 0dffae3..177eca3 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts @@ -43,7 +43,6 @@ export class FolderTreeComponent implements OnDestroy { public treeControl: FlatTreeControl<TodoItemFlatNode>; private treeFlattener: MatTreeFlattener<TodoItemNode, TodoItemFlatNode>; public dataSource: MatTreeFlatDataSource<TodoItemNode, TodoItemFlatNode>; - private folderCreationParent; constructor( public toastr: ToastrService, @@ -54,8 +53,6 @@ export class FolderTreeComponent implements OnDestroy { this.treeControl = new FlatTreeControl<TodoItemFlatNode>(this.getLevel, this.isExpandable); this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); this.subscriptions.add(this.bucketDataService._bucketData.subscribe(data => { - // const emptyFolder = this.dataSource._flattenedData.getValue().filter(v => v.item === '')[0]; - // console.log(emptyFolder); if (data) { this.dataSource.data = data; const subject = this.dataSource._flattenedData; @@ -65,17 +62,12 @@ export class FolderTreeComponent implements OnDestroy { } this.expandAllParents(this.selectedFolder || subjectData[0]); this.showItem(this.selectedFolder || subjectData[0]); - // if (emptyFolder || this.folderFormControl.value) { - // const folderName = this.folderFormControl.value; - // this.folderFormControl.setValue(''); - // this.folderFormControl.updateValueAndValidity(); - // this.folderFormControl.markAsPristine(); - // console.log(this.folderCreationParent); - // this.addNewItem(this.folderCreationParent, folderName, false); - // } else { - // console.log('false'); - // this.disableAll.emit(false); - // } + if (this.selectedFolder) { + setTimeout(() => { + const element = document.querySelector('.folder-item-line.active-item'); + element && element.scrollIntoView({ block: 'center', behavior: 'smooth' }); + }, 0); + } } })); this.dataSource._flattenedData.subscribe(); @@ -89,7 +81,7 @@ export class FolderTreeComponent implements OnDestroy { hasChild = (_: number, _nodeData: TodoItemFlatNode) => _nodeData.expandable; - hasNoContent = (_: number, _nodeData: TodoItemFlatNode) => _nodeData.item === ''; + hasNoContent = (_: number, _nodeData: TodoItemFlatNode) => _nodeData.item === '' || _nodeData.item === 'ا'; transformer = (node: TodoItemNode, level: number) => { const existingNode = this.nestedNodeMap.get(node); @@ -102,7 +94,7 @@ export class FolderTreeComponent implements OnDestroy { this.flatNodeMap.set(flatNode, node); this.nestedNodeMap.set(node, flatNode); return flatNode; - }; + } ngOnDestroy() { this.bucketDataService._bucketData.next([]); @@ -180,25 +172,26 @@ export class FolderTreeComponent implements OnDestroy { return null; } - private addNewItem(node: TodoItemFlatNode, file, isFile) { - this.folderCreationParent = node; - this.folderCreationRefresh(node, file, isFile); - } - public folderCreationRefresh(node: TodoItemFlatNode, file, isFile) { - this.folderFormControl.setValue(file); - const currNode = this.flatNodeMap.get(node); - this.bucketDataService.insertItem(currNode!, file, isFile); - this.treeControl.expand(node); - setTimeout(() => { - const element = document.querySelector('#folder-form'); - element && element.scrollIntoView({ block: 'end', behavior: 'smooth' }); - }, 0); +private addNewItem(node: TodoItemFlatNode, file, isFile) { + const currNode = this.flatNodeMap.get(node); + const emptyFolderObject = currNode.object; + if (emptyFolderObject.object.lastIndexOf('ا') !== emptyFolderObject.object.length - 1 || emptyFolderObject.object === '') { + emptyFolderObject.object += 'ا'; + } + this.bucketDataService.insertItem(currNode!, file, isFile, emptyFolderObject); + this.treeControl.expand(node); + setTimeout(() => { + const element = document.querySelector('#folder-form'); + element && element.scrollIntoView({ block: 'end', behavior: 'smooth' }); + }, 0); } private removeItem(node: TodoItemFlatNode) { const parentNode = this.flatNodeMap.get(this.getParentNode(node)); - this.bucketDataService.removeItem(parentNode!); + const childNode = this.flatNodeMap.get(node); + this.bucketDataService.emptyFolder = null; + this.bucketDataService.removeItem(parentNode!, childNode); this.resetForm(); } @@ -206,13 +199,18 @@ export class FolderTreeComponent implements OnDestroy { this.folderCreating = true; const parent = this.getParentNode(node); const flatParent = this.flatNodeMap.get(parent); - const path = `${ flatParent.object ? flatParent.object.object : ''}${itemValue}/`; + let flatObject = flatParent.object.object; + if (flatObject.indexOf('ا') === flatObject.length - 1) { + flatObject = flatObject.substring(0, flatParent.object.object.length - 1); + } + const path = `${ flatParent.object ? flatObject : ''}${itemValue}/`; const bucket = flatParent.object ? flatParent.object.bucket : flatParent.item; const formData = new FormData(); formData.append('file', ''); formData.append('object', path); formData.append('bucket', bucket); formData.append('endpoint', this.endpoint); + this.bucketDataService.emptyFolder = null; this.bucketBrowserService.uploadFile(formData) .subscribe((event) => { if (event instanceof HttpResponse) { @@ -220,13 +218,11 @@ export class FolderTreeComponent implements OnDestroy { this.toastr.success('Folder successfully created!', 'Success!'); this.resetForm(); this.folderCreating = false; - this.folderCreationParent = null; this.dataSource._flattenedData.getValue().splice(this.dataSource._flattenedData.getValue().indexOf(this.dataSource._flattenedData.getValue().filter(v => v.item === '')[0])); } }, error => { - this.toastr.error(error.message || 'Folder creation error!', 'Oops!'); this.folderCreating = false; - this.folderCreationParent = null; + this.toastr.error(error.message || 'Folder creation error!', 'Oops!'); } ); } diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html index 59cdba2..50756cc 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html @@ -62,52 +62,60 @@ <p class="m-top-30">{{ DICTIONARY[PROVIDER].personal_storage }}: </p> <!-- (click)="bucketBrowser(notebook.bucket_name, notebook.endpoint, this.bucketStatus.view)"--> <div class="links_block" (mouseleave)="hideCopyIcon()"> - <span - [matTooltip]="!this.bucketStatus.view - ? 'You have not permission to open bucket' - : 'The bucket ' + notebook.bucket_name + ' is deleted. To start working with data choose available bucket.'" - matTooltipDisabled="{{this.bucketStatus.view && this.isBucketAllowed}}" - matTooltipPosition="above" - [matTooltipClass]="'bucket-item-tooltip'" - > <p *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'azure' && notebook.account_name">{{ DICTIONARY[PROVIDER].account }} <span - class="bucket-info bucket-link" - [ngClass]="{'not-allow': !this.bucketStatus.view || !this.isBucketAllowed}" + class="bucket-info" (mouseover)="showCopyIcon()" > - {{ notebook.account_name}} + {{notebook.bucket_name + '@' + notebook.account_name + '.blob.core.windows.net'}} +<!-- rc-22-projecta-contei...@1ebobsvx7t.blob.core.windows.net--> + </span> + + <span *ngIf="isCopyIconVissible" [matTooltip]="isCopied ? 'Copy bucket name' : 'Copied'" matTooltipPosition="above"> + <span class="link-icon" (click)="copyBucketName(notebook.bucket_name + '@' + notebook.account_name + '.blob.core.windows.net');$event.stopPropagation()" > + <span _ngcontent-xpv-c19="" class="material-icons" (click)="this.isCopied = false">content_copy</span> </span> - <span *ngIf="isCopyIconVissible" class="link-icon" (click)="copyBucketName(notebook.account_name)"> - <span class="material-icons" [matTooltip]="isCopied" matTooltipPosition="above">content_copy</span> </span> </p> - <p *ngIf="notebook.bucket_name">{{ DICTIONARY[PROVIDER].container }} + <p *ngIf="notebook.bucket_name && PROVIDER !== 'azure'">{{ DICTIONARY[PROVIDER].container }} <span class="bucket-info" (mouseover)="showCopyIcon()" > -<!-- (click)="bucketBrowser('ofuks-1304-pr2-local-bucket', notebook.endpoint, this.bucketStatus.view && this.isBucketAllowed)"--> {{ notebook.bucket_name }} </span> - <span *ngIf="isCopyIconVissible" [matTooltip]="isCopied ? 'Copy bucket name' : 'Copied'" matTooltipPosition="above"> <span class="link-icon" (click)="copyBucketName(notebook.bucket_name);$event.stopPropagation()" > <span _ngcontent-xpv-c19="" class="material-icons" (click)="this.isCopied = false">content_copy</span> </span> </span> - </p> - </span> </div> <div class="bucket-info bucket-link"> <span></span> - <span class="description open-bucket" - [ngClass]="{'not-allow': !this.bucketStatus.view || !this.isBucketAllowed}" - (click)="bucketBrowser(notebook.bucket_name, notebook.endpoint, this.bucketStatus.view && this.isBucketAllowed)" - > - Open bucket browser - </span> +<!-- <button--> +<!-- type="button"--> +<!-- class="butt"--> +<!-- mat-raised-button--> +<!-- >--> +<!-- Open bucket browser--> +<!-- </button>--> +<!-- <span class="description open-bucket"--> +<!-- [ngClass]="{'not-allow': !this.bucketStatus.view || !thisdata.buckets.length}"--> +<!-- (click)="bucketBrowser(notebook.bucket_name, notebook.endpoint, this.bucketStatus.view && thisdata.buckets.length)"--> +<!-- >--> + <span class="description open-bucket" + [matTooltip]="!this.bucketStatus.view + ? 'You have not permission to open bucket' + : 'You have not any bucket'" + matTooltipDisabled="{{this.bucketStatus.view && this.data.buckets.length}}" + matTooltipPosition="above" + [matTooltipClass]="'bucket-item-tooltip'" + [ngClass]="{'not-allow': !this.bucketStatus.view || !this.data.buckets.length}" + (click)="bucketBrowser(notebook.bucket_name, notebook.endpoint, this.bucketStatus.view && this.data.buckets.length)" + > + Open bucket browser + </span> </div> <!-- <p>Shared endpoint bucket: </p>--> <!-- <div class="links_block" (click)="bucketBrowser(notebook.shared_bucket_name, notebook.endpoint, this.bucketStatus.view)"--> diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.scss b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.scss index 2779633..c6722ef 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.scss +++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.scss @@ -83,6 +83,7 @@ .bucket-info { padding-left: 7px; + margin-right: 10px; font-weight: 600; color: $blue-grey-color; } @@ -93,10 +94,11 @@ color: #35afd5; .open-bucket{ cursor: pointer; + font-size: 14px; } &.not-allow{ cursor: not-allowed; - color: $blue-grey-color; + color: $blue-grey-color !important; } } diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts index b78ee1e..c972a5d 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts @@ -135,6 +135,8 @@ export class DetailDialogComponent implements OnInit { } public bucketBrowser(bucketName, endpoint, permition): void { + bucketName = 'ofuks-1304-pr2-local-bucket'; + // bucketName = this.isBucketAllowed ? this.notebook.bucket_name : this.data.buckets[0].children[0].name; permition && this.dialog.open(BucketBrowserComponent, { data: {bucket: bucketName, endpoint: endpoint, bucketStatus: this.bucketStatus, buckets: this.data.buckets}, panelClass: 'modal-fullscreen' }) diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.html index 1236d13..513d7fe 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.html @@ -48,10 +48,11 @@ <div> <span matTooltip="{{!this.bucketStatus?.view ? 'You have not permission to open bucket browser' : 'You have not any bucket'}}" matTooltipPosition="above" - matTooltipDisabled="{{resourcesGrid.bucketsList?.length > 0 || !this.bucketStatus?.view}}" + matTooltipDisabled="{{resourcesGrid.bucketsList?.length > 0 && this.bucketStatus?.view}}" [matTooltipClass]="'bucket-item-tooltip'" > - <button mat-raised-button class="butt butt-tool" (click)="bucketBrowser(this.bucketStatus?.view)" [disabled]="!this.bucketStatus?.view || resourcesGrid.bucketsList?.length === 0"> + <button mat-raised-button class="butt butt-tool" (click)="bucketBrowser(this.bucketStatus?.view)" + [disabled]="!this.bucketStatus?.view || resourcesGrid.bucketsList?.length === 0"> <i class="material-icons"></i>Bucket browser </button> </span> diff --git a/services/self-service/src/main/resources/webapp/src/assets/styles/_dialogs.scss b/services/self-service/src/main/resources/webapp/src/assets/styles/_dialogs.scss index 3dddb7d..ccde6f7 100644 --- a/services/self-service/src/main/resources/webapp/src/assets/styles/_dialogs.scss +++ b/services/self-service/src/main/resources/webapp/src/assets/styles/_dialogs.scss @@ -276,8 +276,10 @@ mat-dialog-container { overflow: hidden; text-overflow: ellipsis; display: block; + max-width: 450px; + white-space: nowrap; &.link-icon{ - margin-left: 10px; + //margin-left: 10px; cursor: pointer; padding-top: 3px; } @@ -397,6 +399,9 @@ mat-dialog-container { .not-allow{ cursor: not-allowed !important; + &.open-bucket{ + color: $blue-grey-color !important; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org