This is an automated email from the ASF dual-hosted git repository. dgnatyshyn pushed a commit to branch DLAB-1970 in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 580ce18374bd36a034da50819c95eb8d4a123b83 Author: Dmytro_Gnatyshyn <[email protected]> AuthorDate: Wed Aug 5 10:19:50 2020 +0300 [DLAB-1970]: Changed validation for folder creation an other small changes --- .../manage-environment-dilog.component.html | 5 ++++- .../manage-environment-dilog.component.ts | 5 +++-- .../resources/webapp/src/app/core/util/patterns.ts | 2 +- .../reporting-grid/reporting-grid.component.html | 2 +- .../reporting-grid/reporting-grid.component.scss | 5 +++++ .../bucket-browser/bucket-browser.component.scss | 9 +++++++-- .../buckets-tree/bucket-tree.component.scss | 2 +- .../folder-tree/folder-tree.component.html | 2 +- .../install-libraries.component.html | 6 +++--- .../resources-grid/resources-grid.component.ts | 22 +++++++++++++++++++++- .../src/app/resources/resources.component.html | 16 ++++++++-------- .../src/app/resources/resources.component.ts | 10 ++++++++-- 12 files changed, 63 insertions(+), 23 deletions(-) diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.html index ed3cc91..591cdee 100644 --- a/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.html @@ -70,7 +70,10 @@ <div class="quotes"> <input type="number" (keypress)="CheckUtils.numberOnly($event)" formControlName="total" placeholder="Enter total budget, in USD"> - <span class="error" *ngIf="manageUsersForm?.controls['total'].hasError('overrun')">Total budget cannot be lower than a sum of projects quotes</span> + <span class="error" *ngIf="manageUsersForm?.controls['total'].hasError('overrun') + && !manageUsersForm?.controls['total'].hasError('max')">Total budget cannot be lower than a sum of projects quotes</span> + <span class="error" + *ngIf="manageUsersForm?.controls['total'].hasError('max')">Total budget cannot be higher than 1000000000</span> </div> </mat-list-item> </div> diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.ts index f2f1cf7..4aa2871 100644 --- a/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/manage-environment/manage-environment-dilog.component.ts @@ -64,7 +64,8 @@ export class ManageEnvironmentComponent implements OnInit { 'max' in v.controls['budget'].errors ? null : v.controls['budget'].setErrors(null); } ); - this.manageUsersForm.controls['total'].setErrors(null); + this.manageUsersForm.controls['total'].errors && + this.manageUsersForm.controls['total'].errors ? null : this.manageUsersForm.controls['total'].setErrors(null); } }); } @@ -107,7 +108,7 @@ export class ManageEnvironmentComponent implements OnInit { private initForm(): void { this.manageUsersForm = this._fb.group({ - total: [null, [Validators.min(0), this.totalValidityCheck.bind(this)]], + total: [null, [Validators.min(0), this.totalValidityCheck.bind(this), Validators.max(1000000000)]], projects: this._fb.array([this._fb.group({ project: '', budget: null, status: '' })]) }); } diff --git a/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts b/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts index 8246bba..981e661 100644 --- a/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts +++ b/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts @@ -24,6 +24,6 @@ export const PATTERNS = { url: '[a-zA-Z0-9.://%#&\\.@:%-_\+~#=]*\.[^\s]*[a-zA-Z0-9]/+', nodeCountPattern: '^[1-9]\\d*$', integerRegex: '^[0-9]*$', - folderRegex: /^[a-zA-Z0-9!@$%^&*()_+\-=\[\]{};':|,.<>~` ]*$/, + folderRegex: /^[a-zA-Z0-9!@$^&*()_+\-=\[\]{};':|,.<>~` ]*$/, fullUrl: /^(http?|ftp|https):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+([.:])(\d{4}|com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*\/$/ }; diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html index 3e354a3..1481d53 100644 --- a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html @@ -279,7 +279,7 @@ <tr [hidden]="reportData?.length" mat-footer-row *matFooterRowDef="['placeholder']"></tr> </table> </section> - <div class="buttons" *ngIf="isScrollButtonsVisible"> + <div class="buttons" *ngIf="isScrollButtonsVisible && reportData?.length"> <div class="button-container"> <button mat-mini-fab aria-label="Scroll left" (click)="sctollTo('left')" [ngClass]="{'not-allowed': tableWrapper.scrollLeft === 0 }"> <mat-icon [ngClass]="{'highlight': tableWrapper.scrollLeft !== 0}">keyboard_arrow_left</mat-icon> diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.scss b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.scss index b92962d..253d354 100644 --- a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.scss +++ b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.scss @@ -211,6 +211,11 @@ .label { padding-top: 10px; } + + &.label-header{ + box-shadow: none; + border-bottom: 1px solid lightgrey !important; + } } .label { diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.scss b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.scss index fbdf05b..2cf6731 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.scss +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.scss @@ -105,15 +105,20 @@ direction: rtl; &-folder{ - padding-left: 5px; + padding-left: 20px; padding-right: 5px; color: #00bcd4; cursor: pointer; + + &:first-of-type{ + padding-left: 5px; + } } &-icon i{ - transform: translateY(2px); + transform: translateY(1px); font-size: 15px; + position: absolute; } } } diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/buckets-tree/bucket-tree.component.scss b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/buckets-tree/bucket-tree.component.scss index 5bd774a..736c6ee 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/buckets-tree/bucket-tree.component.scss +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/buckets-tree/bucket-tree.component.scss @@ -18,7 +18,7 @@ */ .folder{ padding-left: 5px; - max-width: 350px; + max-width: 310px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.html index 6f24500..6879271 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.html @@ -35,7 +35,7 @@ <mat-label>New folder</mat-label> <input matInput #itemValue [formControl]="folderFormControl" [errorStateMatcher]="matcher"> <mat-error *ngIf="!folderFormControl.hasError('required') && !folderFormControl.hasError('isDuplicate')"> - The folder name can only contain Latin letters, numbers and special characters except for #, ?, /, \, " + The folder name can only contain Latin letters, numbers and special characters except for #, ?, /, \, %" </mat-error> <mat-error *ngIf="folderFormControl.hasError('required')"> Folder name is <strong>required</strong> diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/install-libraries/install-libraries.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/install-libraries/install-libraries.component.html index e37bb0c..654f29b 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/install-libraries/install-libraries.component.html +++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/install-libraries/install-libraries.component.html @@ -280,7 +280,7 @@ </button> <button mat-icon-button class="btn apply" (click)="filterLibs()"> - <i class="material-icons" [ngClass]="{'not-allowed': filterModel.length === 0}">done</i> + <i class="material-icons" [ngClass]="{'not-allowed': filterModel['length'] === 0}">done</i> </button> </div> </th> @@ -312,9 +312,9 @@ <span *ngIf="!installingInProgress && item.status === 'installation_error'" (click)="reinstallLibrary(item, lib)" matTooltip="Retry installation" matTooltipPosition="above"> <i class="material-icons">replay</i> </span> - <span class="not-allowed" *ngIf="installingInProgress && item.status === 'installation_error'" matTooltip="Please wait until lib installation completes" + <span class="not-allow" *ngIf="installingInProgress && item.status === 'installation_error'" matTooltip="Please wait until lib installation completes" matTooltipPosition="above"> - <i class="material-icons">replay</i> + <i class="material-icons not-allowed">replay</i> </span> </div> <div *ngIf="item.status === 'installation_error' && item.error" class="lib-error" (click)="showErrorMessage(item)" matTooltip="Show error message" matTooltipPosition="above"> diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts index 69e8b02..c984a6f 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts @@ -18,7 +18,7 @@ */ import {Project} from '../../administration/project/project.component'; -import {Component, Input, OnInit} from '@angular/core'; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import { animate, state, style, transition, trigger } from '@angular/animations'; import { ToastrService } from 'ngx-toastr'; import { MatDialog } from '@angular/material/dialog'; @@ -91,6 +91,7 @@ export class ResourcesGridComponent implements OnInit { readonly DICTIONARY = DICTIONARY; @Input() projects: Array<any>; + @Output() getEnvironments: EventEmitter<any> = new EventEmitter(); environments: Exploratory[]; @@ -146,6 +147,7 @@ export class ResourcesGridComponent implements OnInit { this.userResourceService.getUserProvisionedResources() .subscribe((result: any) => { this.environments = ExploratoryModel.loadEnvironments(result); + this.getEnvironments.emit(this.environments); this.getBuckets(); this.getDefaultFilterConfiguration(); (this.environments.length) ? this.getUserPreferences() : this.filteredEnvironments = []; @@ -283,6 +285,24 @@ export class ResourcesGridComponent implements OnInit { }); this.bucketsList = SortUtils.flatDeep(bucketsList, 1).filter(v => v.children.length); + // this.bucketsList = [ + // { + // children: [{name: 'SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket.SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket', endpoint: 'local'}], + // cloud: 'GCP', + // name: 'Proj1 (local)' + // }, + // { + // children: [{name: 'SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket.SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket', endpoint: 'local'}], + // cloud: 'GCP', + // name: 'Proj1 (local)' + // }, + // { + // children: [{name: 'SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket.SERVICE_BASE_NAME-${EDGE_USER_NAME}-bucket', endpoint: 'local'}], + // cloud: 'GCP', + // name: 'Proj1 (local)' + // }, + // ], + // console.log(this.bucketsList); } 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 d6b9616..ad6fc53 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 @@ -32,15 +32,15 @@ </button> </span> <div class="mat-reset"> - <div class="control selector-wrapper" *ngIf="resourcesGrid.activeProjectsList?.length"> + <div class="control selector-wrapper" *ngIf="projects?.length"> <mat-form-field> - <mat-label>Select active project</mat-label> + <mat-label>Select project</mat-label> <mat-select [(value)]="resourcesGrid.activeProject"> - <mat-option *ngIf="resourcesGrid.activeProjectsList?.length > 1" (click)="setActiveProject('')">Show all</mat-option> - <mat-option *ngFor="let project of resourcesGrid.activeProjectsList" [value]="project.name" - (click)="setActiveProject(project.name)"> - {{ project.name }}</mat-option> - <mat-option *ngIf="!resourcesGrid.activeProjectsList?.length" class="multiple-select ml-10" disabled>Projects list is empty + <mat-option *ngIf="projects?.length > 1" (click)="setActiveProject('')">Show all</mat-option> + <mat-option *ngFor="let project of projects" [value]="project" + (click)="setActiveProject(project)"> + {{ project }}</mat-option> + <mat-option *ngIf="!projects?.length" class="multiple-select ml-10" disabled>Projects list is empty </mat-option> </mat-select> <button class="caret"> @@ -85,5 +85,5 @@ </div> </div> <mat-divider></mat-divider> - <resources-grid></resources-grid> + <resources-grid (getEnvironments)="getEnvironments($event)" ></resources-grid> </div> diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts index f5af0e9..3dadd70 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts @@ -52,12 +52,11 @@ export class ResourcesComponent implements OnInit, AfterViewInit { ngOnInit() { this.getEnvironmentHealthStatus(); - this.exploratoryEnvironments = this.resourcesGrid.environments; this.projects = this.resourcesGrid.activeProjectsList; } ngAfterViewInit() { - console.log(this.resourcesGrid); + } public createEnvironment(): void { @@ -87,6 +86,7 @@ export class ResourcesComponent implements OnInit, AfterViewInit { } public bucketBrowser(permition): void { + console.log(this.exploratoryEnvironments); const defaultBucket = this.resourcesGrid.bucketsList[0].children[0]; permition && this.dialog.open(BucketBrowserComponent, { data: { @@ -117,6 +117,12 @@ export class ResourcesComponent implements OnInit, AfterViewInit { } + public getEnvironments(environment) { + this.exploratoryEnvironments = environment; + this.projects = environment.map(env => env.project); + } + + private getEnvironmentHealthStatus() { this.healthStatusService.getEnvironmentHealthStatus().subscribe( (result: any) => { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
