Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #6283

Merged
merged 9 commits into from
Dec 12, 2024
73 changes: 52 additions & 21 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@denbi/cloud-portal-webapp",
"version": "4.899.0",
"version": "4.900.0",
"description": "de.NBI Cloud Portal",
"scripts": {
"ng": "ng serve",
Expand Down Expand Up @@ -109,7 +109,7 @@
"less-loader": "12.2.0",
"lint-staged": "15.2.10",
"ngx-spec": "2.1.6",
"npm-run-all2": "6.2.6",
"npm-run-all2": "7.0.1",
"prettier": "3.3.3",
"raw-loader": "4.0.2",
"sass-loader": "16.0.2",
Expand Down
8 changes: 8 additions & 0 deletions src/app/api-connector/applications.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -336,4 +336,12 @@ export class ApplicationsService {
withCredentials: true
})
}

checkForTakenShortname(shortname: string): Observable<any> {
return this.http.get(`${ApiSettings.getApiBaseURL()}project_applications/shortname/`, {
params: { shortname: shortname },
withCredentials: true
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ <h5 class="col-md-6 form-control-label">General Information</h5>
<font color="red">Umlauts and special characters are prohibited in the shortname.</font>
</strong>
</div>
<div *ngIf="shortNameTaken">
<strong>
<font color="red">Please choose another shortname</font>
</strong>
</div>
<input
required
type="text"
Expand All @@ -160,17 +165,19 @@ <h5 class="col-md-6 form-control-label">General Information</h5>
pattern="[a-zA-Z0-9]+"
[ngClass]="{
'is-invalid':
form.controls.project_application_shortname?.invalid &&
(form.controls.project_application_shortname?.invalid || shortNameTaken) &&
(form.controls.project_application_shortname?.dirty ||
form.controls.project_application_shortname?.touched),
form.controls.project_application_shortname?.touched)
,
'is-valid':
form.controls.project_application_shortname?.valid &&
form.controls.project_application_shortname?.valid && !shortNameTaken &&
(form.controls.project_application_shortname?.dirty ||
form.controls.project_application_shortname?.touched),
}"
/>

<span class="help-block">Enter a short name (between 5 and 15 characters).</span>

</div>
</div>

Expand Down Expand Up @@ -490,7 +497,7 @@ <h5 class="col-md-12 form-control-label">Resources</h5>
/>
<div class="input-group-append"><span class="input-group-text"> GB </span></div>
</div>
<span class="help-block">How much total extra storage do you need for your VMs?</span>
<span class="help-block">How much total storage do you need for your VMs in form of Volumes?</span>
</div>
</div>
<div class="form-group row" *ngIf="openstack_project">
Expand Down Expand Up @@ -1792,6 +1799,7 @@ <h6><strong>Platforms</strong></h6>
data-test-id="submit_application_btn"
[disabled]="
submitting ||
shortNameTaken ||
form.invalid ||
(!unknownPiAffiliationsConfirmation &&
!valid_pi_affiliations &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ import { UserService } from '../../api-connector/user.service'
import { Userinfo } from '../../userinfo/userinfo.model'
import { User } from '../application.model/user.model'
import { NotificationModalComponent } from '../../shared/modal/notification-modal'
import { Subject, Subscription } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { thresholdScott } from 'd3'

/**
* Application formular component.
Expand Down Expand Up @@ -87,6 +90,9 @@ export class ApplicationFormularComponent extends ApplicationBaseClassComponent
WIKI_BACKUP_LINK: string = WIKI_BACKUP_LINK
GDPR_LINK: string = GDPR_LINK
survey_link_visible: boolean = false
private nameCheckPipe = new Subject<string>();
shortnameChecking: boolean = false;
shortNameTaken: boolean = false;

MAX_LIFETIME_DEFAULT: number = 6
max_lifetime: number = this.MAX_LIFETIME_DEFAULT
Expand Down Expand Up @@ -119,6 +125,7 @@ export class ApplicationFormularComponent extends ApplicationBaseClassComponent
this.getListOfFlavors()
this.getListOfTypes()
this.is_vo_admin = is_vo
this.nameCheckPipe.pipe(debounceTime(600), distinctUntilChanged()).subscribe(value => {this.checkIfNameIsTaken(value)});

if (this.openstack_project) {
this.simple_vm_min_vm = true
Expand All @@ -138,6 +145,16 @@ export class ApplicationFormularComponent extends ApplicationBaseClassComponent
}
}

checkIfNameIsTaken(shortname: string): void {
this.shortnameChecking = true;
this.applicationsService.checkForTakenShortname(shortname).subscribe((result: boolean): void => {
let nameExists: boolean = result['exists'];
this.shortnameChecking = false;
this.shortNameTaken = nameExists;
});

}

checkValidityComment(): boolean {
if (this.extraResourceCommentRequired) {
if (this.application.project_application_comment?.length < 50) {
Expand Down Expand Up @@ -238,6 +255,11 @@ export class ApplicationFormularComponent extends ApplicationBaseClassComponent
*/
public checkShortname(shortname: string): void {
this.invalid_shortname = !/^[a-zA-Z0-9\s]*$/.test(shortname)
if (!this.invalid_shortname) {
this.shortnameChecking = true;
this.nameCheckPipe.next(shortname);
}

}

public checkLongname(longname: string): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ <h4>Adjust application for {{ application?.project_application_shortname }}</h4>
[ngStyle]="{
'background-color': adjustedApplication.project_application_openstack_project
? '#FF0000'
: '#00adef'
: '#00adef',
}"
></span>
</label>
Expand Down Expand Up @@ -78,7 +78,7 @@ <h4>Adjust application for {{ application?.project_application_shortname }}</h4>
appInteger
[ngClass]="{
'is-invalid': resourceAdjustmentForm.controls.granted_lifetime_counter?.invalid,
'is-valid': resourceAdjustmentForm.controls.granted_lifetime_counter?.valid
'is-valid': resourceAdjustmentForm.controls.granted_lifetime_counter?.valid,
}"
/>
</div>
Expand Down Expand Up @@ -109,7 +109,7 @@ <h6 class="col-md-8 form-control-label">
style="font-size: 25px"
[ngClass]="{
'icon-arrow-up': groupval.isOpen,
'icon-arrow-down': !groupval.isOpen
'icon-arrow-down': !groupval.isOpen,
}"
></i>
</div>
Expand Down Expand Up @@ -163,7 +163,7 @@ <h6 class="col-md-8 form-control-label">
appIntegerOrNull
[ngClass]="{
'is-invalid': name?.invalid,
'is-valid': name?.valid
'is-valid': name?.valid,
}"
/>
<div class="input-group-append"><span class="input-group-text"> VMs</span></div>
Expand Down Expand Up @@ -217,7 +217,7 @@ <h6 class="col-md-8 form-control-label">
appInteger
[ngClass]="{
'is-invalid': resourceAdjustmentForm.controls.granted_volume_counter?.invalid,
'is-valid': resourceAdjustmentForm.controls.grated_volume_counter?.valid
'is-valid': resourceAdjustmentForm.controls.grated_volume_counter?.valid,
}"
/>
</div>
Expand Down Expand Up @@ -247,7 +247,7 @@ <h6 class="col-md-8 form-control-label">
/>
<div class="input-group-append"><span class="input-group-text"> GB </span></div>
</div>
<span class="help-block">Requested extra storage</span>
<span class="help-block">Requested volume storage</span>
</div>
<div class="col">
<div class="input-group">
Expand All @@ -264,13 +264,13 @@ <h6 class="col-md-8 form-control-label">
appInteger
[ngClass]="{
'is-invalid': resourceAdjustmentForm.controls.granted_volume_limit?.invalid,
'is-valid': resourceAdjustmentForm.controls.granted_volume_limit?.valid
'is-valid': resourceAdjustmentForm.controls.granted_volume_limit?.valid,
}"
[disabled]="resourceAdjustmentForm.controls.granted_volume_counter?.value === 0"
/>
<div class="input-group-append"><span class="input-group-text"> GB </span></div>
</div>
<span class="help-block">Amount of extra storage you want to grant</span>
<span class="help-block">Amount of volume storage you want to grant</span>
</div>
</div>

Expand Down Expand Up @@ -316,7 +316,7 @@ <h6 class="col-md-8 form-control-label">
required
[ngClass]="{
'is-invalid': resourceAdjustmentForm.controls.granted_object_storage?.invalid,
'is-valid': resourceAdjustmentForm.controls.granted_object_storage?.valid
'is-valid': resourceAdjustmentForm.controls.granted_object_storage?.valid,
}"
/>
<div class="input-group-append"><span class="input-group-text"> GB </span></div>
Expand Down
Loading
Loading