ichec-angular-core 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -19,9 +19,9 @@ import * as i2$2 from '@angular/material/list';
|
|
|
19
19
|
import { MatListModule } from '@angular/material/list';
|
|
20
20
|
import * as i1$1 from '@angular/forms';
|
|
21
21
|
import { FormsModule } from '@angular/forms';
|
|
22
|
-
import * as i4 from '@angular/material/input';
|
|
22
|
+
import * as i4$1 from '@angular/material/input';
|
|
23
23
|
import { MatInputModule } from '@angular/material/input';
|
|
24
|
-
import * as
|
|
24
|
+
import * as i4 from '@angular/material/form-field';
|
|
25
25
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
26
26
|
import * as i2$3 from '@angular/material/card';
|
|
27
27
|
import { MatCardModule } from '@angular/material/card';
|
|
@@ -37,6 +37,7 @@ class PortalMember {
|
|
|
37
37
|
last_name = "";
|
|
38
38
|
phone = "";
|
|
39
39
|
organization = "";
|
|
40
|
+
profile_url = "";
|
|
40
41
|
}
|
|
41
42
|
class Group {
|
|
42
43
|
name = "";
|
|
@@ -99,6 +100,16 @@ class RestService {
|
|
|
99
100
|
});
|
|
100
101
|
return this._http.patch(this.getMediaUrl() + id + "/", form, { headers: headers }).pipe(mergeMap(_ => this.getItem(id)), catchError(this.handleError));
|
|
101
102
|
}
|
|
103
|
+
postFile(id, field, file) {
|
|
104
|
+
const token = "Token " + localStorage.getItem("api_token");
|
|
105
|
+
const headers = new HttpHeaders({
|
|
106
|
+
'Authorization': token,
|
|
107
|
+
'Accept': 'application/json'
|
|
108
|
+
});
|
|
109
|
+
const form = new FormData();
|
|
110
|
+
form.append("file", file);
|
|
111
|
+
return this._http.post(this.getBaseUrl() + id + "/" + field, form, { headers: headers }).pipe(mergeMap(_ => this.getItem(id)), catchError(this.handleError));
|
|
112
|
+
}
|
|
102
113
|
patchItem(item, include_keys, exclude_keys) {
|
|
103
114
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
115
|
function replacer(key, value) {
|
|
@@ -293,11 +304,11 @@ class LeftNavComponent {
|
|
|
293
304
|
return this._leftNavService.activeOptions;
|
|
294
305
|
}
|
|
295
306
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
296
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.1", type: LeftNavComponent, isStandalone: true, selector: "lib-left-nav", ngImport: i0, template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"
|
|
307
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.1", type: LeftNavComponent, isStandalone: true, selector: "lib-left-nav", ngImport: i0, template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [":host{display:flex;flex-direction:column}.leftnav-container{flex-grow:1;display:flex}.leftnav-content{display:flex;flex-grow:1;height:90vh}.leftnav-side{padding:5px;width:160px}.is-active{background-color:#d3d3d3}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i1.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
297
308
|
}
|
|
298
309
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavComponent, decorators: [{
|
|
299
310
|
type: Component,
|
|
300
|
-
args: [{ selector: 'lib-left-nav', imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule], template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"
|
|
311
|
+
args: [{ selector: 'lib-left-nav', imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule], template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [":host{display:flex;flex-direction:column}.leftnav-container{flex-grow:1;display:flex}.leftnav-content{display:flex;flex-grow:1;height:90vh}.leftnav-side{padding:5px;width:160px}.is-active{background-color:#d3d3d3}\n"] }]
|
|
301
312
|
}] });
|
|
302
313
|
|
|
303
314
|
const LOGIN_USER = new InjectionToken("Default login user - used for testing");
|
|
@@ -332,7 +343,7 @@ class LandingComponent {
|
|
|
332
343
|
this.router.navigateByUrl("/home");
|
|
333
344
|
}
|
|
334
345
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LandingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
335
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: LandingComponent, isStandalone: true, selector: "lib-landing", inputs: { message: "message" }, ngImport: i0, template: "\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n", styles: [":host{display:flex;align-items:center;flex-grow:1;background-color:#a5b3c9;flex-direction:column}.base-form{padding:10px}.form-field{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type:
|
|
346
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: LandingComponent, isStandalone: true, selector: "lib-landing", inputs: { message: "message" }, ngImport: i0, template: "\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n", styles: [":host{display:flex;align-items:center;flex-grow:1;background-color:#a5b3c9;flex-direction:column}.base-form{padding:10px}.form-field{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
336
347
|
}
|
|
337
348
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LandingComponent, decorators: [{
|
|
338
349
|
type: Component,
|
|
@@ -511,26 +522,67 @@ class UserDetailComponent extends DetailView {
|
|
|
511
522
|
constructor() {
|
|
512
523
|
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(UserService));
|
|
513
524
|
}
|
|
525
|
+
ngOnInit() {
|
|
526
|
+
this.onInit();
|
|
527
|
+
}
|
|
514
528
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
515
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserDetailComponent, isStandalone: true, selector: "lib-user-detail", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"
|
|
529
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserDetailComponent, isStandalone: true, selector: "lib-user-detail", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"padded_button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n \n <div style=\"width:100%; max-width:500px\">\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n\n <div *ngIf=\"item.profile_url\" class=\"image_holder\">\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div> \n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:5px}.image_holder{display:flex;justify-content:center;align-items:center;overflow:hidden;padding:5px}.item_heading{display:inline;width:100%;max-width:100px}.item_field,.padded_button{padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
516
530
|
}
|
|
517
531
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserDetailComponent, decorators: [{
|
|
518
532
|
type: Component,
|
|
519
533
|
args: [{ selector: 'lib-user-detail', imports: [NgIf,
|
|
520
534
|
RouterModule,
|
|
521
535
|
MatButtonModule,
|
|
522
|
-
MatIconModule], template: "<div>\n <a mat-icon-button class=\"
|
|
536
|
+
MatIconModule], template: "<div>\n <a mat-icon-button class=\"padded_button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n \n <div style=\"width:100%; max-width:500px\">\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n\n <div *ngIf=\"item.profile_url\" class=\"image_holder\">\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div> \n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:5px}.image_holder{display:flex;justify-content:center;align-items:center;overflow:hidden;padding:5px}.item_heading{display:inline;width:100%;max-width:100px}.item_field,.padded_button{padding:5px}\n"] }]
|
|
523
537
|
}], ctorParameters: () => [] });
|
|
524
538
|
|
|
525
539
|
class UserEditComponent extends EditView {
|
|
540
|
+
image = null;
|
|
541
|
+
temporaryImageUrl = "";
|
|
526
542
|
constructor() {
|
|
527
543
|
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(UserService));
|
|
528
544
|
}
|
|
545
|
+
ngOnInit() {
|
|
546
|
+
this.onInit();
|
|
547
|
+
}
|
|
529
548
|
getTemplateItem() {
|
|
530
549
|
return new PortalMember();
|
|
531
550
|
}
|
|
551
|
+
save() {
|
|
552
|
+
if (!this.item) {
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
this._restService.putItem(this.item).subscribe(item => { this.saveFiles(item); });
|
|
556
|
+
}
|
|
557
|
+
saveFiles(item) {
|
|
558
|
+
if (this.image) {
|
|
559
|
+
this._restService.postFile(item.id, "image", this.image).subscribe(item => this.onItemUpdated(item));
|
|
560
|
+
}
|
|
561
|
+
else {
|
|
562
|
+
this.onItemUpdated(item);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
submit() {
|
|
566
|
+
if (this.item) {
|
|
567
|
+
this.save();
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
onFileUpload(event) {
|
|
571
|
+
console.log(event);
|
|
572
|
+
if (event.target) {
|
|
573
|
+
const input_element = event.target;
|
|
574
|
+
if (input_element.files && input_element.files.length > 0) {
|
|
575
|
+
this.image = input_element.files[0];
|
|
576
|
+
const reader = new FileReader();
|
|
577
|
+
reader.readAsDataURL(this.image);
|
|
578
|
+
reader.onload = () => { if (reader.result) {
|
|
579
|
+
this.temporaryImageUrl = reader.result;
|
|
580
|
+
} ; };
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
532
584
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
533
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserEditComponent, isStandalone: true, selector: "lib-user-edit", usesInheritance: true, ngImport: i0, template: "<div
|
|
585
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserEditComponent, isStandalone: true, selector: "lib-user-edit", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n</div>\n\n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New User</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit User</h1>\n \n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <div class=\"document_upload\">\n <div *ngIf=\"temporaryImageUrl\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{temporaryImageUrl}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && item.profile_url\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && !item.profile_url\">\n <span>Upload a profile image</span>\n </div>\n \n <div class=\"button-row\">\n <button mat-mini-fab\n (click)=\"imgFileInput.click()\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\"\n #imgFileInput\n (change)=\"onFileUpload($event)\"/>\n </div> \n </div>\n \n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!createForm.form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div>\n \n </form>\n </div>\n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;justify-content:center;align-items:center;flex-direction:column}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column}.form_card{justify-content:center;align-items:center;flex-direction:column;display:flex}.form_field{padding:5px}.checkbox_group{justify-content:left;display:flex;flex-direction:column}.button_group{margin:10px;display:flex;flex-direction:row;justify-content:center}.btn-block{padding:5px}.form_action_button{padding:5px;margin:5px}.document_upload{padding:10px;display:flex;justify-content:center;text-align:center;flex-direction:column;max-width:300px}.image_holder{display:flex;justify-content:center;align-items:center;overflow:hidden;padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
534
586
|
}
|
|
535
587
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, decorators: [{
|
|
536
588
|
type: Component,
|
|
@@ -542,7 +594,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
542
594
|
MatInputModule,
|
|
543
595
|
MatFormFieldModule,
|
|
544
596
|
MatIconModule,
|
|
545
|
-
], template: "<div
|
|
597
|
+
], template: "<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n</div>\n\n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New User</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit User</h1>\n \n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <div class=\"document_upload\">\n <div *ngIf=\"temporaryImageUrl\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{temporaryImageUrl}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && item.profile_url\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && !item.profile_url\">\n <span>Upload a profile image</span>\n </div>\n \n <div class=\"button-row\">\n <button mat-mini-fab\n (click)=\"imgFileInput.click()\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\"\n #imgFileInput\n (change)=\"onFileUpload($event)\"/>\n </div> \n </div>\n \n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!createForm.form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div>\n \n </form>\n </div>\n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;justify-content:center;align-items:center;flex-direction:column}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column}.form_card{justify-content:center;align-items:center;flex-direction:column;display:flex}.form_field{padding:5px}.checkbox_group{justify-content:left;display:flex;flex-direction:column}.button_group{margin:10px;display:flex;flex-direction:row;justify-content:center}.btn-block{padding:5px}.form_action_button{padding:5px;margin:5px}.document_upload{padding:10px;display:flex;justify-content:center;text-align:center;flex-direction:column;max-width:300px}.image_holder{display:flex;justify-content:center;align-items:center;overflow:hidden;padding:5px}\n"] }]
|
|
546
598
|
}], ctorParameters: () => [] });
|
|
547
599
|
|
|
548
600
|
class UserComponent extends ListView {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.ts","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-view.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n}\n\nexport class PortalMember implements IPortalMember {\n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n}\n\nexport interface IGroup extends Identifiable {\n name: string;\n}\n\n\nexport class Group implements IGroup {\n name = \"\";\n url = \"\";\n id = 0;\n}\n\nexport interface IOrganization extends Identifiable {\n name: string;\n acronym: string;\n description: string;\n address: string;\n website: string;\n country: string;\n members: string[];\n}\n\nexport class Organization implements IOrganization {\n id = 0;\n url = \"\";\n name = \"\";\n acronym = \"\";\n description = \"\";\n address = \"\";\n website = \"\";\n country = \"\";\n members: string[] = [];\n}\n\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nimport { Identifiable, IPortalMember } from '../models/core';\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\nexport class RestService<T extends Identifiable> {\n\n constructor(private _url: string,\n protected _endpoint_url: string,\n protected _http: HttpClient) {}\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.getBaseUrl() + id + \"/\",\n { headers: this.getHeaders() }).pipe(\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n getForUser(user:IPortalMember): Observable<T[]>{\n return this.get(\"?user=\" + user.id);\n }\n\n get(query = \"\"): Observable<T[]> {\n return this._http.get<T[]>(this.getBaseUrl() + query,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<T> {\n return this._http.get<T>(this.getBaseUrl() + id,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<T> {\n return this._http.get<T>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError)); \n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T>\n {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)), \n catchError(this.handleError)); \n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]) : Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any)\n {\n if (exclude_keys.includes(key))\n {\n return undefined;\n }\n else\n {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string{\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends RestService<IPortalMember> {\n\n /** Service to handle IPortalMember via REST and also handle logins.\n */ \n\n loggedInUser: BehaviorSubject<IPortalMember | null> = new BehaviorSubject<IPortalMember | null>(null);\n\n constructor() {\n super('members', inject(ENDPOINT_URL), inject(HttpClient));\n }\n\n login(username: string, password: string): Observable<void> {\n\n console.log(\"Attempting login\");\n const body = new URLSearchParams();\n body.set('username', username);\n body.set('password', password);\n const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });\n const api_auth_endpoint = this._endpoint_url + \"/api-token-auth/\"\n\n return this._http.post<TokenResponse>(api_auth_endpoint,\n body.toString(),\n { headers: headers }).pipe(\n map(token => this.onLoginToken(token)),\n mergeAll(),\n catchError(this.handleError));\n }\n\n logout() {\n if (this.loggedInUser === null) {\n return;\n }\n console.log(\"Logging out\")\n localStorage.removeItem(\"api_token\");\n this.loggedInUser.next(null);\n }\n\n private onLoginToken(token_response: TokenResponse): Observable<void> {\n console.log(\"Got login token - fetching corresponding user.\");\n localStorage.setItem(\"api_token\", token_response.token);\n return this.getItem(Number(token_response.user_id)).pipe(\n tap(user => this.onLoggedIn(user)),\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n private onLoggedIn(user: IPortalMember) {\n console.log(\"Log in succesful for user: \" + user.username);\n this.loggedInUser.next(user);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { UserService } from './user.service';\nimport { IGroup, IPortalMember } from '../models/core';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends RestService<IGroup> {\n\n userService: UserService = inject(UserService);\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n \n constructor() {\n super(\"groups\", inject(ENDPOINT_URL), inject(HttpClient))\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n }\n\n private refreshUserItems(user: IPortalMember | null)\n {\n if (user)\n {\n this.getForUser(user).subscribe(items => this.userItems.next(items)); \n }\n else\n {\n this.userItems.next([]);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service'\nimport { IOrganization } from '../models/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends RestService<IOrganization> {\n\n constructor() {\n super(\"organizations\", inject(ENDPOINT_URL), inject(HttpClient))\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroup } from '../models/core';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n}\n\nexport interface NavGroup\n{\n name: string;\n options: NavOption[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeOptions: Set<NavOption> = new Set<NavOption>();\n private _groups: NavGroup[] = [];\n private _defaultOptions: NavOption[] = [];\n private _groupService: GroupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroup[]) {\n this.activeOptions = new Set<NavOption>();\n this._defaultOptions.forEach(e => this.activeOptions.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n this.addNavGroup(n)};}));\n }\n\n addNavGroup(group: NavGroup) {\n group.options.forEach(o => this.activeOptions.add(o));\n }\n\n setDefaultOptions(options: NavOption[])\n {\n this._defaultOptions = options;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { UserService } from '../../services/user.service';\nimport { LeftNavService } from '../../services/left-nav.service';\nimport { IPortalMember } from '../../models/core';\n\n@Component({\n selector: 'lib-top-bar',\n imports: [NgIf, RouterModule, MatToolbarModule, MatIconModule, MatButtonModule, MatMenuModule],\n templateUrl: './top-bar.component.html',\n styleUrl: './top-bar.component.css'\n})\nexport class TopBarComponent implements OnInit {\n user?: IPortalMember | null = null;\n @Input() title = \"\";\n\n private userService: UserService;\n private leftNavService: LeftNavService;\n\n constructor() {\n this.userService = inject(UserService);\n this.leftNavService = inject(LeftNavService);\n }\n\n ngOnInit(): void {\n this.userService.loggedInUser.subscribe(user => {\n this.user = user;\n });\n }\n\n onLogout() {\n this.userService.logout();\n }\n}\n","\n <mat-toolbar *ngIf=\"user\" style=\"height:60px\">\n <a mat-icon-button class=\"example-icon\" [routerLink]=\"['home']\">\n <mat-icon>home</mat-icon>\n </a>\n <span>{{title}}</span>\n <span class=\"topbar-spacer\"></span>\n <span>{{user.username}}</span>\n <button mat-icon-button class=\"example-icon\" aria-label=\"User profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon>person</mat-icon>\n </button>\n <mat-menu #profile_menu=\"matMenu\">\n <button mat-menu-item (click)=\"onLogout()\"> Log Out</button>\n </mat-menu>\n </mat-toolbar>\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { LeftNavService } from '../../services/left-nav.service';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.css'\n})\nexport class LeftNavComponent {\n\n private _leftNavService: LeftNavService = inject(LeftNavService);\n\n getOptions() {\n return this._leftNavService.activeOptions;\n }\n\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnave-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, Input, OnInit, inject, InjectionToken } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HttpErrorResponse } from '@angular/common/http';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { UserService } from '../../services/user.service';\nimport { LoginUser } from './login-user';\n\nexport const LOGIN_USER = new InjectionToken<LoginUser>(\"Default login user - used for testing\");\n\n@Component({\n selector: 'lib-landing',\n imports: [FormsModule, MatCardModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, NgIf],\n templateUrl: './landing.component.html',\n styleUrl: './landing.component.css'\n})\nexport class LandingComponent implements OnInit {\n\n loginUser: LoginUser = inject(LOGIN_USER);\n loginError = \"\";\n\n @Input() message = \"\";\n private userService: UserService = inject(UserService);\n private router: Router = inject(Router);\n\n ngOnInit(): void {\n \n // This is a development version hack to 'autologin' to make it\n // easier to play around. The name will be empty at init time\n // for the production version.\n if (this.loginUser.name)\n {\n console.log(\"Have development login user\");\n this.login();\n }\n }\n\n login() {\n this.loginError = \"\";\n return this.userService.login(this.loginUser.name, this.loginUser.password).subscribe({\n next: () => this.onLoggedIn(),\n error: (error) => this.onLoginError(error)\n });\n }\n\n onLoginError(error: HttpErrorResponse) {\n console.log(\"Got login error\");\n console.log(error);\n this.loginError = \"There was an error logging in\";\n }\n\n onLoggedIn() {\n this.router.navigateByUrl(\"/home\");\n }\n\n}\n","\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class DetailView<T extends Identifiable> {\n\n item?: T;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {}\n\n goBack(): void {\n this._location.back();\n }\n\n private getItem(): void {\n const id = Number(this._route.snapshot.paramMap.get('id'));\n this._restService.getItem(id)\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable();\n });\n }\n\n update() {\n if (!this.item) {\n return;\n }\n\n this._restService.putItem(this.item).subscribe(\n item => this.item = item);\n }\n}\n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class EditView<T extends Identifiable> {\n\n item?: T;\n createMode = false;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restServce: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restServce;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n save() {\n if (this.createMode) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n protected updateItem() {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.onItemUpdated(item)\n );\n }\n\n protected createItem() {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.onItemUpdated(item));\n }\n\n cancel() {\n this.goBack();\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n\n if (this.isCreateRoute()) {\n this.item = this.getTemplateItem();\n this.createMode = true;\n this.onItemAvailable();\n }\n else {\n const id_str = this._route.snapshot.paramMap.get('id');\n this._restService.getItem(Number(id_str))\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable()\n });\n }\n }\n\n protected onItemUpdated(item: T) {\n this.item = item;\n this.goBack();\n }\n}\n","import { Location } from '@angular/common';\nimport { ActivatedRoute} from '@angular/router';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { UserService } from '../../services/user.service';\nimport { RestService } from '../../services/rest.service';\n\nexport class ListView<T extends Identifiable> {\n\n user?: IPortalMember;\n items: T[] = [];\n displayedColumns: string[] = [];\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>;\n\n constructor(\n _route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItems();\n }\n\n getItems(): void {\n\n if (this.isSelfList()) {\n this._userService.loggedInUser.subscribe(\n user => {\n if (user) { this.onUserChange(user) }\n })\n }\n else {\n this._restService.get().subscribe(items => this.items = items);\n }\n }\n\n private onUserChange(user: IPortalMember) {\n this.user = user;\n this._restService.getForUser(this.user).subscribe(items => this.items = items);\n }\n\n protected isSelfList() {\n const url_segments = this._route.snapshot.url;\n if (url_segments.length == 2) {\n if (url_segments[1].path == \"self\") {\n return true;\n }\n }\n return false;\n }\n\n goBack(): void {\n this._location.back();\n }\n}\n\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [NgIf,\n RouterModule,\n MatButtonModule,\n MatIconModule],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMember> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n}\n","<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router'\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { EditView } from '../../../base/edit-view';\nimport { PortalMember, IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-edit',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMember> {\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n protected override getTemplateItem(): IPortalMember\n {\n return new PortalMember();\n }\n\n\n \n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <form class=\"example-form\">\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n \n </form>\n \n <div style=\"margin:10px; padding:10px;display: flex; flex-direction: row\">\n <button mat-fab class=\"btn-block\" (click)=\"save()\" style=\"padding:10px\"><mat-icon>save</mat-icon></button>\n <button mat-fab class=\"btn-block\" (click)=\"cancel()\" style=\"padding:10px\"><mat-icon>cancel</mat-icon></button>\n </div>\n </div>\n \n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user',\n imports: [MatListModule, MatCardModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent extends ListView<IPortalMember> implements OnInit{\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n } \n}\n","<div class=\"container\">\n <mat-nav-list>\n @for (item of items; track item){\n <mat-card mat-list-item class=\"item-card\" [routerLink]=\"['/users/detail/', item.id]\" [routerLinkActive]=\"['is-active']\">\n <mat-card-header>\n <mat-card-title-group style=\"padding:5px\">\n <mat-card-title>{{item.first_name}} {{item.last_name}}</mat-card-title>\n <mat-card-subtitle>{{item.username}}</mat-card-subtitle>\n \n </mat-card-title-group>\n </mat-card-header>\n <mat-card-content>\n <p>Email: {{item.email}} </p>\n </mat-card-content>\n </mat-card>\n }\n </mat-nav-list>\n\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroup> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h1 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h1>\n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/groups/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a> \n </div>\n <div class=\"form_field\">{{item.name}}</div>\n </div>\n \n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent extends ListView<IGroup> implements OnInit {\n\n override displayedColumns: string[] = ['name']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { Organization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent extends ListView<Organization> implements OnInit {\n\n override displayedColumns: string[] = ['name', 'website', 'is_partner']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"website\">\n <th mat-header-cell *matHeaderCellDef> Website </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.website}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"is_partner\">\n <th mat-header-cell *matHeaderCellDef> Is Partner </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.is_partner}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n <div class=\"button_container\">\n <a mat-fab class=\"btn-block\" [routerLink]=\"['create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IOrganization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganization> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h3> \n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/organizations/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n <div class=\"form_field\">{{item.description}}</div>\n <div class=\"form_field\"><h3>Address</h3>{{item.address}}</div>\n <div class=\"form_field\"><h3>Website</h3>{{item.website}}</div>\n </div>\n \n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/group.service';\nexport * from './lib/services/organization.service';\nexport * from './lib/services/left-nav.service';\n\nexport * from './lib/views/top-bar/top-bar.component';\nexport * from './lib/views/left-nav/left-nav.component';\nexport * from './lib/views/landing/landing.component';\nexport * from './lib/views/base/detail-view';\nexport * from './lib/views/base/edit-view';\nexport * from './lib/views/base/list-view';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i5","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.ts","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-view.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n profile_url: string;\n}\n\nexport class PortalMember implements IPortalMember {\n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n profile_url = \"\";\n}\n\nexport interface IGroup extends Identifiable {\n name: string;\n}\n\n\nexport class Group implements IGroup {\n name = \"\";\n url = \"\";\n id = 0;\n}\n\nexport interface IOrganization extends Identifiable {\n name: string;\n acronym: string;\n description: string;\n address: string;\n website: string;\n country: string;\n members: string[];\n}\n\nexport class Organization implements IOrganization {\n id = 0;\n url = \"\";\n name = \"\";\n acronym = \"\";\n description = \"\";\n address = \"\";\n website = \"\";\n country = \"\";\n members: string[] = [];\n}\n\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nimport { Identifiable, IPortalMember } from '../models/core';\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\nexport class RestService<T extends Identifiable> {\n\n constructor(private _url: string,\n protected _endpoint_url: string,\n protected _http: HttpClient) {}\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.getBaseUrl() + id + \"/\",\n { headers: this.getHeaders() }).pipe(\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n getForUser(user:IPortalMember): Observable<T[]>{\n return this.get(\"?user=\" + user.id);\n }\n\n get(query = \"\"): Observable<T[]> {\n return this._http.get<T[]>(this.getBaseUrl() + query,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<T> { \n return this._http.get<T>(this.getBaseUrl() + id,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<T> {\n return this._http.get<T>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError)); \n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T>\n {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)), \n catchError(this.handleError)); \n }\n\n postFile(id: number, field: string, file: File): Observable<T>\n {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n\n const form = new FormData();\n form.append(\"file\", file);\n return this._http.post(this.getBaseUrl() + id + \"/\" + field,\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)), \n catchError(this.handleError)); \n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]) : Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any)\n {\n if (exclude_keys.includes(key))\n {\n return undefined;\n }\n else\n {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string{\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends RestService<IPortalMember> {\n\n /** Service to handle IPortalMember via REST and also handle logins.\n */ \n\n loggedInUser: BehaviorSubject<IPortalMember | null> = new BehaviorSubject<IPortalMember | null>(null);\n\n constructor() {\n super('members', inject(ENDPOINT_URL), inject(HttpClient));\n }\n\n login(username: string, password: string): Observable<void> {\n\n console.log(\"Attempting login\");\n const body = new URLSearchParams();\n body.set('username', username);\n body.set('password', password);\n const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });\n const api_auth_endpoint = this._endpoint_url + \"/api-token-auth/\"\n\n return this._http.post<TokenResponse>(api_auth_endpoint,\n body.toString(),\n { headers: headers }).pipe(\n map(token => this.onLoginToken(token)),\n mergeAll(),\n catchError(this.handleError));\n }\n\n logout() {\n if (this.loggedInUser === null) {\n return;\n }\n console.log(\"Logging out\")\n localStorage.removeItem(\"api_token\");\n this.loggedInUser.next(null);\n }\n\n private onLoginToken(token_response: TokenResponse): Observable<void> {\n console.log(\"Got login token - fetching corresponding user.\");\n localStorage.setItem(\"api_token\", token_response.token);\n return this.getItem(Number(token_response.user_id)).pipe(\n tap(user => this.onLoggedIn(user)),\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n private onLoggedIn(user: IPortalMember) {\n console.log(\"Log in succesful for user: \" + user.username);\n this.loggedInUser.next(user);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { UserService } from './user.service';\nimport { IGroup, IPortalMember } from '../models/core';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends RestService<IGroup> {\n\n userService: UserService = inject(UserService);\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n \n constructor() {\n super(\"groups\", inject(ENDPOINT_URL), inject(HttpClient))\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n }\n\n private refreshUserItems(user: IPortalMember | null)\n {\n if (user)\n {\n this.getForUser(user).subscribe(items => this.userItems.next(items)); \n }\n else\n {\n this.userItems.next([]);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service'\nimport { IOrganization } from '../models/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends RestService<IOrganization> {\n\n constructor() {\n super(\"organizations\", inject(ENDPOINT_URL), inject(HttpClient))\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroup } from '../models/core';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n}\n\nexport interface NavGroup\n{\n name: string;\n options: NavOption[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeOptions: Set<NavOption> = new Set<NavOption>();\n private _groups: NavGroup[] = [];\n private _defaultOptions: NavOption[] = [];\n private _groupService: GroupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroup[]) {\n this.activeOptions = new Set<NavOption>();\n this._defaultOptions.forEach(e => this.activeOptions.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n this.addNavGroup(n)};}));\n }\n\n addNavGroup(group: NavGroup) {\n group.options.forEach(o => this.activeOptions.add(o));\n }\n\n setDefaultOptions(options: NavOption[])\n {\n this._defaultOptions = options;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { UserService } from '../../services/user.service';\nimport { LeftNavService } from '../../services/left-nav.service';\nimport { IPortalMember } from '../../models/core';\n\n@Component({\n selector: 'lib-top-bar',\n imports: [NgIf, RouterModule, MatToolbarModule, MatIconModule, MatButtonModule, MatMenuModule],\n templateUrl: './top-bar.component.html',\n styleUrl: './top-bar.component.css'\n})\nexport class TopBarComponent implements OnInit {\n user?: IPortalMember | null = null;\n @Input() title = \"\";\n\n private userService: UserService;\n private leftNavService: LeftNavService;\n\n constructor() {\n this.userService = inject(UserService);\n this.leftNavService = inject(LeftNavService);\n }\n\n ngOnInit(): void {\n this.userService.loggedInUser.subscribe(user => {\n this.user = user;\n });\n }\n\n onLogout() {\n this.userService.logout();\n }\n}\n","\n <mat-toolbar *ngIf=\"user\" style=\"height:60px\">\n <a mat-icon-button class=\"example-icon\" [routerLink]=\"['home']\">\n <mat-icon>home</mat-icon>\n </a>\n <span>{{title}}</span>\n <span class=\"topbar-spacer\"></span>\n <span>{{user.username}}</span>\n <button mat-icon-button class=\"example-icon\" aria-label=\"User profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon>person</mat-icon>\n </button>\n <mat-menu #profile_menu=\"matMenu\">\n <button mat-menu-item (click)=\"onLogout()\"> Log Out</button>\n </mat-menu>\n </mat-toolbar>\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { LeftNavService } from '../../services/left-nav.service';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.css'\n})\nexport class LeftNavComponent {\n\n private _leftNavService: LeftNavService = inject(LeftNavService);\n\n getOptions() {\n return this._leftNavService.activeOptions;\n }\n\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, Input, OnInit, inject, InjectionToken } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HttpErrorResponse } from '@angular/common/http';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { UserService } from '../../services/user.service';\nimport { LoginUser } from './login-user';\n\nexport const LOGIN_USER = new InjectionToken<LoginUser>(\"Default login user - used for testing\");\n\n@Component({\n selector: 'lib-landing',\n imports: [FormsModule, MatCardModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, NgIf],\n templateUrl: './landing.component.html',\n styleUrl: './landing.component.css'\n})\nexport class LandingComponent implements OnInit {\n\n loginUser: LoginUser = inject(LOGIN_USER);\n loginError = \"\";\n\n @Input() message = \"\";\n private userService: UserService = inject(UserService);\n private router: Router = inject(Router);\n\n ngOnInit(): void {\n \n // This is a development version hack to 'autologin' to make it\n // easier to play around. The name will be empty at init time\n // for the production version.\n if (this.loginUser.name)\n {\n console.log(\"Have development login user\");\n this.login();\n }\n }\n\n login() {\n this.loginError = \"\";\n return this.userService.login(this.loginUser.name, this.loginUser.password).subscribe({\n next: () => this.onLoggedIn(),\n error: (error) => this.onLoginError(error)\n });\n }\n\n onLoginError(error: HttpErrorResponse) {\n console.log(\"Got login error\");\n console.log(error);\n this.loginError = \"There was an error logging in\";\n }\n\n onLoggedIn() {\n this.router.navigateByUrl(\"/home\");\n }\n\n}\n","\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class DetailView<T extends Identifiable> {\n\n item?: T;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {}\n\n goBack(): void {\n this._location.back();\n }\n\n private getItem(): void {\n const id = Number(this._route.snapshot.paramMap.get('id'));\n this._restService.getItem(id)\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable();\n });\n }\n\n update() {\n if (!this.item) {\n return;\n }\n\n this._restService.putItem(this.item).subscribe(\n item => this.item = item);\n }\n}\n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class EditView<T extends Identifiable> {\n\n item?: T;\n createMode = false;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restServce: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restServce;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n save() {\n if (this.createMode) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n protected updateItem() {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.onItemUpdated(item)\n );\n }\n\n protected createItem() {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.onItemUpdated(item));\n }\n\n cancel() {\n this.goBack();\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n\n if (this.isCreateRoute()) {\n this.item = this.getTemplateItem();\n this.createMode = true;\n this.onItemAvailable();\n }\n else {\n const id_str = this._route.snapshot.paramMap.get('id');\n this._restService.getItem(Number(id_str))\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable()\n });\n }\n }\n\n protected onItemUpdated(item: T) {\n this.item = item;\n this.goBack();\n }\n}\n","import { Location } from '@angular/common';\nimport { ActivatedRoute} from '@angular/router';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { UserService } from '../../services/user.service';\nimport { RestService } from '../../services/rest.service';\n\nexport class ListView<T extends Identifiable> {\n\n user?: IPortalMember;\n items: T[] = [];\n displayedColumns: string[] = [];\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>;\n\n constructor(\n _route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItems();\n }\n\n getItems(): void {\n\n if (this.isSelfList()) {\n this._userService.loggedInUser.subscribe(\n user => {\n if (user) { this.onUserChange(user) }\n })\n }\n else {\n this._restService.get().subscribe(items => this.items = items);\n }\n }\n\n private onUserChange(user: IPortalMember) {\n this.user = user;\n this._restService.getForUser(this.user).subscribe(items => this.items = items);\n }\n\n protected isSelfList() {\n const url_segments = this._route.snapshot.url;\n if (url_segments.length == 2) {\n if (url_segments[1].path == \"self\") {\n return true;\n }\n }\n return false;\n }\n\n goBack(): void {\n this._location.back();\n }\n}\n\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [NgIf,\n RouterModule,\n MatButtonModule,\n MatIconModule],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMember> implements OnInit{\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n ngOnInit()\n {\n this.onInit();\n }\n}\n","<div>\n <a mat-icon-button class=\"padded_button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n \n <div style=\"width:100%; max-width:500px\">\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n\n <div *ngIf=\"item.profile_url\" class=\"image_holder\">\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div> \n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router'\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { EditView } from '../../../base/edit-view';\nimport { PortalMember, IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-edit',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMember> implements OnInit {\n\n image: File | null = null;\n temporaryImageUrl: string | ArrayBuffer = \"\";\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n protected override getTemplateItem(): IPortalMember {\n return new PortalMember();\n }\n\n override save() {\n if (!this.item) {\n return;\n }\n\n this._restService.putItem(this.item).subscribe(\n item => { this.saveFiles(item); });\n }\n\n saveFiles(item: IPortalMember) {\n if (this.image) {\n this._restService.postFile(item.id, \"image\", this.image).subscribe(item => this.onItemUpdated(item));\n }\n else {\n this.onItemUpdated(item);\n }\n }\n\n submit() {\n if (this.item) {\n this.save();\n }\n }\n\n onFileUpload(event: Event) {\n console.log(event);\n if (event.target) {\n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n this.image = input_element.files[0];\n\n const reader = new FileReader();\n reader.readAsDataURL(this.image);\n reader.onload = () => { if(reader.result){this.temporaryImageUrl = reader.result;}; };\n }\n }\n }\n}\n","<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n</div>\n\n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New User</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit User</h1>\n \n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <div class=\"document_upload\">\n <div *ngIf=\"temporaryImageUrl\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{temporaryImageUrl}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && item.profile_url\" class=\"image_holder\">\n <p>Update profile image</p>\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div>\n <div *ngIf=\"!temporaryImageUrl && !item.profile_url\">\n <span>Upload a profile image</span>\n </div>\n \n <div class=\"button-row\">\n <button mat-mini-fab\n (click)=\"imgFileInput.click()\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\"\n #imgFileInput\n (change)=\"onFileUpload($event)\"/>\n </div> \n </div>\n \n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!createForm.form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div>\n \n </form>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user',\n imports: [MatListModule, MatCardModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent extends ListView<IPortalMember> implements OnInit{\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n } \n}\n","<div class=\"container\">\n <mat-nav-list>\n @for (item of items; track item){\n <mat-card mat-list-item class=\"item-card\" [routerLink]=\"['/users/detail/', item.id]\" [routerLinkActive]=\"['is-active']\">\n <mat-card-header>\n <mat-card-title-group style=\"padding:5px\">\n <mat-card-title>{{item.first_name}} {{item.last_name}}</mat-card-title>\n <mat-card-subtitle>{{item.username}}</mat-card-subtitle>\n \n </mat-card-title-group>\n </mat-card-header>\n <mat-card-content>\n <p>Email: {{item.email}} </p>\n </mat-card-content>\n </mat-card>\n }\n </mat-nav-list>\n\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroup> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h1 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h1>\n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/groups/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a> \n </div>\n <div class=\"form_field\">{{item.name}}</div>\n </div>\n \n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent extends ListView<IGroup> implements OnInit {\n\n override displayedColumns: string[] = ['name']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { Organization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent extends ListView<Organization> implements OnInit {\n\n override displayedColumns: string[] = ['name', 'website', 'is_partner']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"website\">\n <th mat-header-cell *matHeaderCellDef> Website </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.website}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"is_partner\">\n <th mat-header-cell *matHeaderCellDef> Is Partner </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.is_partner}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n <div class=\"button_container\">\n <a mat-fab class=\"btn-block\" [routerLink]=\"['create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IOrganization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganization> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h3> \n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/organizations/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n <div class=\"form_field\">{{item.description}}</div>\n <div class=\"form_field\"><h3>Address</h3>{{item.address}}</div>\n <div class=\"form_field\"><h3>Website</h3>{{item.website}}</div>\n </div>\n \n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/group.service';\nexport * from './lib/services/organization.service';\nexport * from './lib/services/left-nav.service';\n\nexport * from './lib/views/top-bar/top-bar.component';\nexport * from './lib/views/left-nav/left-nav.component';\nexport * from './lib/views/landing/landing.component';\nexport * from './lib/views/base/detail-view';\nexport * from './lib/views/base/edit-view';\nexport * from './lib/views/base/list-view';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4","i5"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ interface IPortalMember extends Identifiable {
|
|
|
18
18
|
last_name: string;
|
|
19
19
|
phone: string;
|
|
20
20
|
organization: string;
|
|
21
|
+
profile_url: string;
|
|
21
22
|
}
|
|
22
23
|
declare class PortalMember implements IPortalMember {
|
|
23
24
|
id: number;
|
|
@@ -28,6 +29,7 @@ declare class PortalMember implements IPortalMember {
|
|
|
28
29
|
last_name: string;
|
|
29
30
|
phone: string;
|
|
30
31
|
organization: string;
|
|
32
|
+
profile_url: string;
|
|
31
33
|
}
|
|
32
34
|
interface IGroup extends Identifiable {
|
|
33
35
|
name: string;
|
|
@@ -87,6 +89,7 @@ declare class RestService<T extends Identifiable> {
|
|
|
87
89
|
getUrl(url: string): Observable<T>;
|
|
88
90
|
putItem(item: T, content_type?: string): Observable<T>;
|
|
89
91
|
patchItemMedia(id: number, form: FormData): Observable<T>;
|
|
92
|
+
postFile(id: number, field: string, file: File): Observable<T>;
|
|
90
93
|
patchItem(item: T, include_keys: string[], exclude_keys: string[]): Observable<T>;
|
|
91
94
|
postItem(item: T): Observable<T>;
|
|
92
95
|
private getHeaders;
|
|
@@ -237,15 +240,23 @@ declare class ListView<T extends Identifiable> {
|
|
|
237
240
|
goBack(): void;
|
|
238
241
|
}
|
|
239
242
|
|
|
240
|
-
declare class UserDetailComponent extends DetailView<IPortalMember> {
|
|
243
|
+
declare class UserDetailComponent extends DetailView<IPortalMember> implements OnInit {
|
|
241
244
|
constructor();
|
|
245
|
+
ngOnInit(): void;
|
|
242
246
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserDetailComponent, never>;
|
|
243
247
|
static ɵcmp: i0.ɵɵComponentDeclaration<UserDetailComponent, "lib-user-detail", never, {}, {}, never, never, true, never>;
|
|
244
248
|
}
|
|
245
249
|
|
|
246
|
-
declare class UserEditComponent extends EditView<IPortalMember> {
|
|
250
|
+
declare class UserEditComponent extends EditView<IPortalMember> implements OnInit {
|
|
251
|
+
image: File | null;
|
|
252
|
+
temporaryImageUrl: string | ArrayBuffer;
|
|
247
253
|
constructor();
|
|
254
|
+
ngOnInit(): void;
|
|
248
255
|
protected getTemplateItem(): IPortalMember;
|
|
256
|
+
save(): void;
|
|
257
|
+
saveFiles(item: IPortalMember): void;
|
|
258
|
+
submit(): void;
|
|
259
|
+
onFileUpload(event: Event): void;
|
|
249
260
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserEditComponent, never>;
|
|
250
261
|
static ɵcmp: i0.ɵɵComponentDeclaration<UserEditComponent, "lib-user-edit", never, {}, {}, never, never, true, never>;
|
|
251
262
|
}
|