mirror of https://github.com/apache/archiva.git
User form
This commit is contained in:
parent
544db79262
commit
1caa397790
|
@ -64,7 +64,7 @@ export class LoginComponent implements OnInit {
|
|||
if (err != null) {
|
||||
this.errorMessages = [];
|
||||
for (let msg of err) {
|
||||
console.log("Error "+msg.errorKey);
|
||||
console.log("Error "+msg.error_key);
|
||||
this.errorMessages.push(this.archivaRequest.translateError(msg));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<div class="form-row align-items-center">
|
||||
<div class="col-lg-4 col-md-2 col-sm-1">
|
||||
<label class="sr-only" for="searchQuery">{{'search.label' |translate}}</label>
|
||||
<input type="text" class="form-control" id="searchQuery" placeholder="Search" #searchTerm
|
||||
<input type="text" class="form-control" id="searchQuery" placeholder="{{'search.input'|translate}}" #searchTerm
|
||||
(keyup)="search(searchTerm.value)">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
|
|
@ -190,7 +190,7 @@ export class PaginatedEntitiesComponent<T> implements OnInit, FieldToggle, After
|
|||
}
|
||||
if (sortFieldChanged || sortOrderChanged) {
|
||||
this.page = 1;
|
||||
this.changePage(1);
|
||||
this.changePage(this.page);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,4 +17,48 @@
|
|||
~ under the License.
|
||||
-->
|
||||
|
||||
<p>manage-users-add works!</p>
|
||||
<form class="mt-3 mb-3" [formGroup]="userForm" (ngSubmit)="onSubmit()">
|
||||
<fieldset>
|
||||
<div class="form-group col-md-8">
|
||||
<label for="userId">{{'users.attributes.user_id' |translate}}</label>
|
||||
<input type="text" class="form-control" formControlName="userId" id="userId"
|
||||
[ngClass]="valid('userId')"
|
||||
placeholder="{{'users.input.user_id'|translate}}">
|
||||
<small>{{'users.input.small.user_id'|translate}}</small>
|
||||
</div>
|
||||
<div class="form-group col-md-8">
|
||||
<label for="fullName">{{'users.attributes.full_name' |translate}}</label>
|
||||
<input type="text" class="form-control" formControlName="fullName" id="fullName"
|
||||
[ngClass]="valid('fullName')"
|
||||
placeholder="{{'users.input.full_name'|translate}}">
|
||||
<small>{{'users.input.small.full_name'|translate}}</small>
|
||||
</div>
|
||||
<div class="form-group col-md-8">
|
||||
<label for="email">{{'users.attributes.email' |translate}}</label>
|
||||
<input type="text" class="form-control" formControlName="email" id="email"
|
||||
[ngClass]="valid('email')"
|
||||
placeholder="{{'users.input.email'|translate}}">
|
||||
</div>
|
||||
<div class="form-group col-md-8">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" formControlName="locked" id="locked">
|
||||
<label class="form-check-label" for="locked">
|
||||
{{'users.attributes.locked'|translate}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" formControlName="passwordChangeRequired"
|
||||
id="password_change_required" checked>
|
||||
<label class="form-check-label" for="password_change_required">
|
||||
{{'users.attributes.password_change_required'|translate}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-md-8">
|
||||
<button class="btn btn-primary" type="submit"
|
||||
[disabled]="!userForm.valid">{{'users.add.submit'|translate}}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
</form>
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
*/
|
||||
|
||||
import {Component, OnInit} from '@angular/core';
|
||||
import {FormControl, FormGroup, Validators, FormBuilder} from '@angular/forms';
|
||||
import {UserService} from "../../../../services/user.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-manage-users-add',
|
||||
|
@ -26,9 +28,41 @@ import { Component, OnInit } from '@angular/core';
|
|||
})
|
||||
export class ManageUsersAddComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
userForm = this.fb.group({
|
||||
userId: ['', [Validators.required, Validators.minLength(8)]],
|
||||
fullName: ['', Validators.required],
|
||||
email: ['', [Validators.required,Validators.email]],
|
||||
locked: [false],
|
||||
passwordChangeRequired: [true]
|
||||
})
|
||||
|
||||
constructor(private userService: UserService, private fb: FormBuilder) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
// Process checkout data here
|
||||
console.warn('Your order has been submitted', JSON.stringify(this.userForm.value));
|
||||
}
|
||||
|
||||
get userId() {
|
||||
return this.userForm.get('userId');
|
||||
}
|
||||
|
||||
valid(field:string) : string {
|
||||
let formField = this.userForm.get(field);
|
||||
if (formField.dirty||formField.touched) {
|
||||
if (formField.valid) {
|
||||
return 'is-valid'
|
||||
} else {
|
||||
return 'is-invalid'
|
||||
}
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,9 +24,9 @@
|
|||
<thead class="thead-light">
|
||||
<tr sorted [sortFieldEmitter]="parent.sortFieldChange" [sortOrderEmitter]="parent.sortOrderChange"
|
||||
[toggleObserver]="parent">
|
||||
<app-th-sorted [fieldArray]="['user_id']" contentText="users.list.table.head.user_id"></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['full_name']" contentText="users.list.table.head.full_name" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['email']" contentText="users.list.table.head.email" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['user_id']" contentText="users.attributes.user_id"></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['full_name']" contentText="users.attributes.full_name" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['email']" contentText="users.attributes.email" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['validated','user_id']">
|
||||
<span class="fas fa-check" placement="top"
|
||||
[ngbTooltip]="heads.validated" [attr.aria-label]="heads.validated"></span>
|
||||
|
@ -34,11 +34,11 @@
|
|||
<app-th-sorted [fieldArray]="['locked','user_id']"><span class="fas fa-lock" placement="top"
|
||||
[ngbTooltip]="heads.locked" [attr.aria-label]="heads.locked"></span></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['password_change_required','user_id']"><span class="fa fa-chevron-circle-right" placement="top"
|
||||
[ngbTooltip]="heads.pwchange" [attr.aria-label]="heads.pwchange"></span>
|
||||
[ngbTooltip]="heads.password_change_required" [attr.aria-label]="heads.password_change_required"></span>
|
||||
</app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['last_login']" contentText="users.list.table.head.last_login"></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['created']" contentText="users.list.table.head.created" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['last_password_change']" contentText="users.list.table.head.last_password_change"></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['last_login']" contentText="users.attributes.last_login"></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['created']" contentText="users.attributes.created" ></app-th-sorted>
|
||||
<app-th-sorted [fieldArray]="['last_password_change']" contentText="users.attributes.last_password_change"></app-th-sorted>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
@ -51,8 +51,8 @@ export class ManageUsersListComponent implements OnInit {
|
|||
// We need to wait for the translator initialization and use the init key as step in.
|
||||
this.translator.get('init').subscribe(() => {
|
||||
// Only table headings for small columns that use icons
|
||||
for (let suffix of ['validated', 'locked', 'pwchange']) {
|
||||
this.heads[suffix] = this.translator.instant('users.list.table.head.' + suffix);
|
||||
for (let suffix of ['validated', 'locked', 'password_change_required']) {
|
||||
this.heads[suffix] = this.translator.instant('users.attributes.' + suffix);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -87,14 +87,14 @@ export class ArchivaRequestService {
|
|||
* @param errorMsg the errorMsg as returned by a REST call
|
||||
*/
|
||||
public translateError(errorMsg: ErrorMessage): string {
|
||||
if (errorMsg.errorKey != null && errorMsg.errorKey != '') {
|
||||
if (errorMsg.error_key != null && errorMsg.error_key != '') {
|
||||
let parms = {};
|
||||
if (errorMsg.args != null && errorMsg.args.length > 0) {
|
||||
for (let i = 0; i < errorMsg.args.length; i++) {
|
||||
parms['arg' + i] = errorMsg.args[i];
|
||||
}
|
||||
}
|
||||
return this.translator.instant('api.' + errorMsg.errorKey, parms);
|
||||
return this.translator.instant('api.' + errorMsg.error_key, parms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,11 +136,11 @@ export class AuthenticationService {
|
|||
error: (err: HttpErrorResponse) => {
|
||||
console.log("Error " + (JSON.stringify(err)));
|
||||
let result = err.error as ErrorResult
|
||||
if (result.errorMessages != null) {
|
||||
for (let msg of result.errorMessages) {
|
||||
console.debug('Observer got an error: ' + msg.errorKey)
|
||||
if (result.error_messages != null) {
|
||||
for (let msg of result.error_messages) {
|
||||
console.debug('Observer got an error: ' + msg.error_key)
|
||||
}
|
||||
resultHandler("ERROR", result.errorMessages);
|
||||
resultHandler("ERROR", result.error_messages);
|
||||
} else {
|
||||
resultHandler("ERROR", null);
|
||||
}
|
||||
|
|
|
@ -115,9 +115,9 @@ export class UserService implements OnInit, OnDestroy {
|
|||
error: (err: HttpErrorResponse) => {
|
||||
console.log("Error " + (JSON.stringify(err)));
|
||||
let result = err.error as ErrorResult
|
||||
if (result != null && result.errorMessages != null) {
|
||||
for (let msg of result.errorMessages) {
|
||||
console.error('Observer got an error: ' + msg.errorKey)
|
||||
if (result != null && result.error_messages != null) {
|
||||
for (let msg of result.error_messages) {
|
||||
console.error('Observer got an error: ' + msg.error_key)
|
||||
}
|
||||
} else if (err.message != null) {
|
||||
console.error("Bad response from user info call: " + err.message);
|
||||
|
@ -150,9 +150,9 @@ export class UserService implements OnInit, OnDestroy {
|
|||
error: (err: HttpErrorResponse) => {
|
||||
console.log("Error " + (JSON.stringify(err)));
|
||||
let result = err.error as ErrorResult
|
||||
if (result.errorMessages != null) {
|
||||
for (let msg of result.errorMessages) {
|
||||
console.debug('Observer got an error: ' + msg.errorKey)
|
||||
if (result.error_messages != null) {
|
||||
for (let msg of result.error_messages) {
|
||||
console.debug('Observer got an error: ' + msg.error_key)
|
||||
}
|
||||
}
|
||||
this.resetPermissions();
|
||||
|
|
|
@ -50,29 +50,43 @@
|
|||
"rb.auth.invalid_credentials": "Invalid credentials given"
|
||||
},
|
||||
"users": {
|
||||
"list": {
|
||||
"head": "List Users",
|
||||
"table":{
|
||||
"head": {
|
||||
"attributes":{
|
||||
"id": "ID",
|
||||
"user_id": "Login Name",
|
||||
"email": "Email",
|
||||
"full_name": "Name",
|
||||
"validated": "User Validated",
|
||||
"locked": "User Locked",
|
||||
"pwchange": "Password Change Required",
|
||||
"lastLogin": "Last Login",
|
||||
"password_change_required": "Password Change Required",
|
||||
"last_login": "Last Login",
|
||||
"created": "Created",
|
||||
"permanent": "Permanent",
|
||||
"last_password_change": "Last Password Change"
|
||||
}
|
||||
}
|
||||
},
|
||||
"input" : {
|
||||
"small": {
|
||||
"user_id": "Must be a unique key. No space allowed.",
|
||||
"full_name": "This is the display name of the user"
|
||||
},
|
||||
"user_id": "Enter user ID",
|
||||
"full_name": "Enter full user name",
|
||||
"email": "email@example.org"
|
||||
},
|
||||
|
||||
"list": {
|
||||
"head": "List Users"
|
||||
},
|
||||
"add": {
|
||||
"head": "Add User"
|
||||
"head": "Add User",
|
||||
"submit": "Add User"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"button": "Search",
|
||||
"label": "Enter your search term"
|
||||
"label": "Enter your search term",
|
||||
"input": "Search"
|
||||
},
|
||||
"form": {
|
||||
"submit": "Submit"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue