ichec-angular-core 0.0.10 → 0.0.11

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.
@@ -1,7 +1,7 @@
1
1
  import { map, catchError, mergeMap, throwError, BehaviorSubject, mergeAll, tap } from 'rxjs';
2
2
  import { HttpHeaders, HttpClient } from '@angular/common/http';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, Injectable, Input, Component } from '@angular/core';
4
+ import { InjectionToken, inject, Injectable, Input, Component, ViewChild } from '@angular/core';
5
5
  import { NgIf, Location, NgFor } from '@angular/common';
6
6
  import * as i3 from '@angular/router';
7
7
  import { RouterModule, RouterOutlet, Router, ActivatedRoute } from '@angular/router';
@@ -26,8 +26,8 @@ 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';
28
28
  import * as i1$2 from '@angular/material/table';
29
- import { MatTableModule } from '@angular/material/table';
30
- import * as i5$1 from '@angular/material/select';
29
+ import { MatTableModule, MatTable } from '@angular/material/table';
30
+ import * as i4$1 from '@angular/material/select';
31
31
  import { MatSelectModule } from '@angular/material/select';
32
32
  import { MatCheckboxModule } from '@angular/material/checkbox';
33
33
 
@@ -59,6 +59,15 @@ class Organization {
59
59
  members = [];
60
60
  }
61
61
 
62
+ var ErrorCode;
63
+ (function (ErrorCode) {
64
+ ErrorCode[ErrorCode["UnknownError"] = 1] = "UnknownError";
65
+ })(ErrorCode || (ErrorCode = {}));
66
+ class ApiError {
67
+ code = 1;
68
+ text = "";
69
+ }
70
+
62
71
  const ENDPOINT_URL = new InjectionToken("Default endpoint url");
63
72
  class RestService {
64
73
  _url;
@@ -416,6 +425,11 @@ class EditView {
416
425
  goBack() {
417
426
  this._location.back();
418
427
  }
428
+ submit() {
429
+ if (this.item) {
430
+ this.save();
431
+ }
432
+ }
419
433
  save() {
420
434
  if (this.createMode) {
421
435
  this.createItem();
@@ -424,6 +438,32 @@ class EditView {
424
438
  this.updateItem();
425
439
  }
426
440
  }
441
+ cancel() {
442
+ this.goBack();
443
+ }
444
+ fetchRestOptions() {
445
+ this._restService.getOptions().subscribe(options => this.onOptions(options));
446
+ }
447
+ onFileUpload(event) {
448
+ if (!event.target) {
449
+ return;
450
+ }
451
+ const input_element = event.target;
452
+ if (input_element.files && input_element.files.length > 0) {
453
+ this.onUploadedFileReady(input_element.files[0]);
454
+ }
455
+ }
456
+ readFile(file) {
457
+ const reader = new FileReader();
458
+ reader.readAsDataURL(file);
459
+ reader.onload = () => { if (reader.result) {
460
+ this.onFileRead(reader.result);
461
+ } ; };
462
+ }
463
+ onUploadedFileReady(_file) {
464
+ }
465
+ onFileRead(_content) {
466
+ }
427
467
  createItem() {
428
468
  if (!this.item) {
429
469
  return;
@@ -439,9 +479,6 @@ class EditView {
439
479
  saveFiles(item) {
440
480
  this.onItemUpdated(item);
441
481
  }
442
- cancel() {
443
- this.goBack();
444
- }
445
482
  isCreateRoute() {
446
483
  const urls = this._route.snapshot.url;
447
484
  if (!urls) {
@@ -473,6 +510,16 @@ class EditView {
473
510
  this.item = item;
474
511
  this.goBack();
475
512
  }
513
+ onOptions(options) {
514
+ if (!options.actions) {
515
+ return;
516
+ }
517
+ if ('POST' in options.actions) {
518
+ this.onPostActions(options.actions['POST']);
519
+ }
520
+ }
521
+ onPostActions(_actions) {
522
+ }
476
523
  }
477
524
 
478
525
  class ListView {
@@ -552,6 +599,12 @@ class UserEditComponent extends EditView {
552
599
  getTemplateItem() {
553
600
  return new PortalMember();
554
601
  }
602
+ onUploadedFileReady(file) {
603
+ this.image = file;
604
+ }
605
+ onFileRead(content) {
606
+ this.temporaryImageUrl = content;
607
+ }
555
608
  saveFiles(item) {
556
609
  if (this.image) {
557
610
  this._restService.postFile(item.id, "image", this.image).subscribe(item => this.onItemUpdated(item));
@@ -560,25 +613,6 @@ class UserEditComponent extends EditView {
560
613
  this.onItemUpdated(item);
561
614
  }
562
615
  }
563
- submit() {
564
- if (this.item) {
565
- this.save();
566
- }
567
- }
568
- onFileUpload(event) {
569
- console.log(event);
570
- if (event.target) {
571
- const input_element = event.target;
572
- if (input_element.files && input_element.files.length > 0) {
573
- this.image = input_element.files[0];
574
- const reader = new FileReader();
575
- reader.readAsDataURL(this.image);
576
- reader.onload = () => { if (reader.result) {
577
- this.temporaryImageUrl = reader.result;
578
- } ; };
579
- }
580
- }
581
- }
582
616
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
583
617
  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: i3$2.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"] }] });
584
618
  }
@@ -613,6 +647,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
613
647
  RouterModule], template: "<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", styles: [":host{flex-grow:1}.container{display:flex;padding:10px;flex-direction:column;justify-content:center;align-items:center}.button_container{padding:10px}.mat-mdc-row .mat-mdc-cell{border-bottom:1px solid transparent;border-top:1px solid transparent;cursor:pointer}.mat-mdc-row:hover .mat-mdc-cell{border-color:currentColor}.is-active{font-weight:700}.item-card{margin-bottom:8px;height:100%;width:100%;max-width:600px}.item-card:hover{background-color:#d3d3d3}\n"] }]
614
648
  }], ctorParameters: () => [] });
615
649
 
650
+ class UserSelectComponent {
651
+ toAdd = null;
652
+ items = [];
653
+ candidates = [];
654
+ table;
655
+ tableColumns = ["first_name", "last_name", "email", "remove"];
656
+ remove(to_remove) {
657
+ this.items = this.items.filter(item => item.url != to_remove.url);
658
+ this.table.renderRows();
659
+ }
660
+ add() {
661
+ if (!this.toAdd) {
662
+ return;
663
+ }
664
+ this.items.push(this.toAdd);
665
+ this.toAdd = null;
666
+ this.table.renderRows();
667
+ }
668
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
669
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserSelectComponent, isStandalone: true, selector: "lib-user-select", inputs: { items: "items", candidates: "candidates" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }], ngImport: i0, template: "<div style=\"display:flex; text-align: center; justify-content: center; flex-direction: column\">\n <p style=\"padding:5px\">\n <b>Members\n </b>\n </p>\n \n <div>\n <mat-form-field>\n <mat-label>Add Member\n </mat-label>\n <mat-select [(ngModel)]=\"toAdd\" name=\"to_add\">\n <mat-option *ngFor=\"let user of candidates\" [value]=\"user\">{{user.username}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <button mat-mini-fab\n type=\"button\"\n class=\"form_action_button\"\n (click)=\"add()\">\n <mat-icon>add\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"items.length > 0\">\n <table mat-table\n [dataSource]=\"items\"\n class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"first_name\">\n <th mat-header-cell *matHeaderCellDef>First Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.first_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>\n Last Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.last_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef>\n Email\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.email}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove a user\"\n (click)=\"remove(element)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row\n *matHeaderRowDef=\"tableColumns\">\n </tr>\n <tr mat-row\n *matRowDef=\"let row; columns: tableColumns;\">\n </tr>\n </table>\n </div>\n</div>\n", styles: [".table_container{display:flex;text-align:center;justify-content:center;flex-direction:column}.form_action_button{padding:5px;margin:5px}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatFormFieldModule }, { 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: 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: MatSelectModule }, { kind: "component", type: i4$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
670
+ }
671
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserSelectComponent, decorators: [{
672
+ type: Component,
673
+ args: [{ selector: 'lib-user-select', imports: [NgFor, NgIf, MatTableModule,
674
+ MatFormFieldModule,
675
+ MatButtonModule,
676
+ MatSelectModule,
677
+ MatIconModule,
678
+ FormsModule], template: "<div style=\"display:flex; text-align: center; justify-content: center; flex-direction: column\">\n <p style=\"padding:5px\">\n <b>Members\n </b>\n </p>\n \n <div>\n <mat-form-field>\n <mat-label>Add Member\n </mat-label>\n <mat-select [(ngModel)]=\"toAdd\" name=\"to_add\">\n <mat-option *ngFor=\"let user of candidates\" [value]=\"user\">{{user.username}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <button mat-mini-fab\n type=\"button\"\n class=\"form_action_button\"\n (click)=\"add()\">\n <mat-icon>add\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"items.length > 0\">\n <table mat-table\n [dataSource]=\"items\"\n class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"first_name\">\n <th mat-header-cell *matHeaderCellDef>First Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.first_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>\n Last Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.last_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef>\n Email\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.email}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove a user\"\n (click)=\"remove(element)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row\n *matHeaderRowDef=\"tableColumns\">\n </tr>\n <tr mat-row\n *matRowDef=\"let row; columns: tableColumns;\">\n </tr>\n </table>\n </div>\n</div>\n", styles: [".table_container{display:flex;text-align:center;justify-content:center;flex-direction:column}.form_action_button{padding:5px;margin:5px}\n"] }]
679
+ }], propDecorators: { items: [{
680
+ type: Input
681
+ }], candidates: [{
682
+ type: Input
683
+ }], table: [{
684
+ type: ViewChild,
685
+ args: [MatTable]
686
+ }] } });
687
+
616
688
  class GroupDetailComponent extends DetailView {
617
689
  constructor() {
618
690
  super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(GroupService));
@@ -700,31 +772,22 @@ class OrganizationEditComponent extends EditView {
700
772
  }
701
773
  ngOnInit() {
702
774
  this.onInit();
703
- this._restService.getOptions().subscribe(options => this.onOptions(options));
775
+ this.fetchRestOptions();
704
776
  }
705
- submit() {
706
- if (this.item) {
707
- this.save();
708
- }
777
+ getTemplateItem() {
778
+ return new Organization();
709
779
  }
710
- onOptions(options) {
711
- if (!options.actions || !('POST' in options.actions)) {
712
- return;
780
+ onPostActions(actions) {
781
+ if ('country' in actions && actions['country'].choices) {
782
+ this.onCountryChoices(actions['country'].choices);
713
783
  }
714
- if (!('country' in options.actions['POST'])) {
715
- return;
716
- }
717
- if (!options.actions['POST']["country"].choices) {
718
- return;
719
- }
720
- this.countryOptions = [];
721
- options.actions['POST']["country"].choices.forEach(c => this.countryOptions.push(c.display_name));
722
784
  }
723
- getTemplateItem() {
724
- return new Organization();
785
+ onCountryChoices(choices) {
786
+ this.countryOptions = [];
787
+ choices.forEach(c => this.countryOptions.push(c.display_name));
725
788
  }
726
789
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
727
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: OrganizationEditComponent, isStandalone: true, selector: "lib-organization-edit", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"btn-block\" (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\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New Organization</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit Organization</h1>\n\n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n [(ngModel)]=\"item.name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n [(ngModel)]=\"item.acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n [(ngModel)]=\"item.description\"\n name=\"description\"\n style=\"min-height:150px\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Address</mat-label>\n <textarea matInput placeholder=\"Address\"\n type=\"text\"\n [(ngModel)]=\"item.address\"\n name=\"description\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Country</mat-label>\n <mat-select [(ngModel)]=\"item.country\" name=\"country\" required>\n <mat-option\n *ngFor=\"let country of countryOptions\"\n [value]=\"country\">{{country}}\n </mat-option>\n </mat-select>\n </mat-form-field>\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>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </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}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: MatButtonModule }, { 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: MatInputModule }, { kind: "directive", type: i3$2.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: MatSelectModule }, { kind: "component", type: i5$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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"] }, { kind: "ngmodule", type: MatCheckboxModule }] });
790
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: OrganizationEditComponent, isStandalone: true, selector: "lib-organization-edit", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"btn-block\" (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\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New Organization</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit Organization</h1>\n\n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n [(ngModel)]=\"item.name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n [(ngModel)]=\"item.acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n [(ngModel)]=\"item.description\"\n name=\"description\"\n style=\"min-height:150px\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Address</mat-label>\n <textarea matInput placeholder=\"Address\"\n type=\"text\"\n [(ngModel)]=\"item.address\"\n name=\"description\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Country</mat-label>\n <mat-select [(ngModel)]=\"item.country\" name=\"country\" required>\n <mat-option\n *ngFor=\"let country of countryOptions\"\n [value]=\"country\">{{country}}\n </mat-option>\n </mat-select>\n </mat-form-field>\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>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </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}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: MatButtonModule }, { 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: MatInputModule }, { kind: "directive", type: i3$2.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: MatSelectModule }, { kind: "component", type: i4$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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"] }, { kind: "ngmodule", type: MatCheckboxModule }] });
728
791
  }
729
792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationEditComponent, decorators: [{
730
793
  type: Component,
@@ -746,5 +809,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
746
809
  * Generated bundle index. Do not edit.
747
810
  */
748
811
 
749
- export { DetailView, ENDPOINT_URL, EditView, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationEditComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserService };
812
+ export { ApiError, DetailView, ENDPOINT_URL, EditView, ErrorCode, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationEditComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserSelectComponent, UserService };
750
813
  //# sourceMappingURL=ichec-angular-core.mjs.map
@@ -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/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.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';\nimport { IRestOptions } from '../models/http';\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 getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.getBaseUrl(),\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 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 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 if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\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 createItem() {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.saveFiles(item));\n }\n \n protected updateItem()\n {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.saveFiles(item));\n }\n\n protected saveFiles(item: T)\n {\n 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)\n {\n return false;\n }\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 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","import { Component, OnInit, inject } from '@angular/core';\nimport { NgIf, NgFor, Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { EditView} from '../../../base/edit-view';\nimport { Organization, IOrganization, } from '../../../../models/core';\nimport { IRestOptions } from '../../../../models/http';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { UserService } from './../../../../services/user.service';\n\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [NgIf, NgFor,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganization> implements OnInit {\n\n countryOptions: string[] = [];\n \n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService)\n );\n }\n\n ngOnInit()\n {\n this.onInit();\n this._restService.getOptions().subscribe(options => this.onOptions(options)); \n }\n\n submit() {\n if (this.item) {\n this.save();\n }\n }\n\n onOptions(options: IRestOptions)\n {\n if (!options.actions || !('POST' in options.actions))\n {\n return;\n }\n\n if (!('country' in options.actions['POST']))\n {\n return;\n }\n\n if(!options.actions['POST'][\"country\"].choices)\n {\n return;\n }\n this.countryOptions = [];\n options.actions['POST'][\"country\"].choices.forEach(c => this.countryOptions.push(c.display_name));\n }\n\n protected override getTemplateItem(): IOrganization {\n return new Organization();\n }\n}\n","<div>\n <a mat-icon-button class=\"btn-block\" (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\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New Organization</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit Organization</h1>\n\n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n [(ngModel)]=\"item.name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n [(ngModel)]=\"item.acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n [(ngModel)]=\"item.description\"\n name=\"description\"\n style=\"min-height:150px\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Address</mat-label>\n <textarea matInput placeholder=\"Address\"\n type=\"text\"\n [(ngModel)]=\"item.address\"\n name=\"description\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Country</mat-label>\n <mat-select [(ngModel)]=\"item.country\" name=\"country\" required>\n <mat-option\n *ngFor=\"let country of countryOptions\"\n [value]=\"country\">{{country}}\n </mat-option>\n </mat-select>\n </mat-form-field>\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>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n \n </form>\n </div>\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';\nexport * from './lib/views/api/organization/edit/organization-edit.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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"}
1
+ {"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/models/http.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/user-select/user-select.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user-select/user-select.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/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.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","export enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport interface OptionActionChoice {\n value: string;\n display_name: string;\n}\n\nexport interface OptionAction {\n label: string;\n type: string;\n required: boolean;\n read_only: boolean;\n max_length?: number;\n choices?: OptionActionChoice[];\n}\n\nexport interface IRestOptions {\n name: string;\n description: string;\n renders: string[];\n parses: string[];\n actions?: Record<string, Record<string, OptionAction>>;\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';\nimport { IRestOptions } from '../models/http';\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 getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.getBaseUrl(),\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 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 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 if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\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 { IRestOptions, OptionAction } from '../../models/http'; \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 submit() {\n if (this.item) {\n this.save();\n }\n } \n\n save() {\n if (this.createMode) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n cancel() {\n this.goBack();\n }\n\n protected fetchRestOptions()\n {\n this._restService.getOptions().subscribe(options => this.onOptions(options)); \n } \n\n\n protected onFileUpload(event: Event) {\n if (!event.target)\n {\n return;\n }\n \n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n this.onUploadedFileReady(input_element.files[0]);\n }\n }\n\n protected readFile(file: File)\n {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => { if(reader.result){this.onFileRead(reader.result)}; }; \n }\n\n protected onUploadedFileReady(_file: File)\n {\n }\n\n protected onFileRead(_content: string | ArrayBuffer)\n {\n }\n\n protected createItem() {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.saveFiles(item));\n }\n \n protected updateItem()\n {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.saveFiles(item));\n }\n\n protected saveFiles(item: T)\n {\n this.onItemUpdated(item);\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (!urls)\n {\n return false;\n }\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 protected onOptions(options: IRestOptions)\n {\n if (!options.actions)\n {\n return;\n }\n\n if ('POST' in options.actions)\n {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(_actions: Record<string, OptionAction>)\n {\n\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 protected override onUploadedFileReady(file: File)\n {\n this.image = file;\n }\n\n protected override onFileRead(content: string | ArrayBuffer)\n {\n this.temporaryImageUrl = content;\n } \n\n protected override 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","<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, ViewChild, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgIf, NgFor } from '@angular/common';\n\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { IPortalMember } from '../../../models/core';\n\n@Component({\n selector: 'lib-user-select',\n imports: [NgFor, NgIf, MatTableModule,\n MatFormFieldModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n FormsModule],\n templateUrl: './user-select.component.html',\n styleUrl: './user-select.component.css'\n})\nexport class UserSelectComponent {\n\n toAdd: IPortalMember | null = null;\n @Input() items: IPortalMember[] = [];\n @Input() candidates: IPortalMember[] = [];\n @ViewChild(MatTable) table!: MatTable<IPortalMember>;\n\n tableColumns = [\"first_name\", \"last_name\", \"email\", \"remove\"];\n\n remove(to_remove: IPortalMember) {\n this.items = this.items.filter(item => item.url != to_remove.url);\n this.table.renderRows();\n }\n\n add() {\n if (!this.toAdd) {\n return;\n }\n this.items.push(this.toAdd);\n this.toAdd = null;\n this.table.renderRows();\n }\n}\n","<div style=\"display:flex; text-align: center; justify-content: center; flex-direction: column\">\n <p style=\"padding:5px\">\n <b>Members\n </b>\n </p>\n \n <div>\n <mat-form-field>\n <mat-label>Add Member\n </mat-label>\n <mat-select [(ngModel)]=\"toAdd\" name=\"to_add\">\n <mat-option *ngFor=\"let user of candidates\" [value]=\"user\">{{user.username}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <button mat-mini-fab\n type=\"button\"\n class=\"form_action_button\"\n (click)=\"add()\">\n <mat-icon>add\n </mat-icon>\n </button>\n </div>\n\n <div *ngIf=\"items.length > 0\">\n <table mat-table\n [dataSource]=\"items\"\n class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"first_name\">\n <th mat-header-cell *matHeaderCellDef>First Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.first_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>\n Last Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.last_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef>\n Email\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.email}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove a user\"\n (click)=\"remove(element)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row\n *matHeaderRowDef=\"tableColumns\">\n </tr>\n <tr mat-row\n *matRowDef=\"let row; columns: tableColumns;\">\n </tr>\n </table>\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 { 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","import { Component, OnInit, inject } from '@angular/core';\nimport { NgIf, NgFor, Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { EditView} from '../../../base/edit-view';\nimport { Organization, IOrganization, } from '../../../../models/core';\nimport { OptionActionChoice, OptionAction } from '../../../../models/http';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { UserService } from './../../../../services/user.service';\n\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [NgIf, NgFor,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganization> implements OnInit {\n\n countryOptions: string[] = [];\n \n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService)\n );\n }\n\n ngOnInit()\n {\n this.onInit();\n this.fetchRestOptions();\n }\n\n protected override getTemplateItem(): IOrganization {\n return new Organization();\n }\n\n protected override onPostActions(actions: Record<string, OptionAction>) {\n if ('country' in actions && actions['country'].choices) {\n this.onCountryChoices(actions['country'].choices);\n }\n }\n\n protected onCountryChoices(choices: OptionActionChoice[]) {\n this.countryOptions = [];\n choices.forEach(c => this.countryOptions.push(c.display_name));\n } \n}\n","<div>\n <a mat-icon-button class=\"btn-block\" (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\" style=\"width:100%;max-width:500px\">\n <h1 *ngIf=\"createMode\" style=\"display:inline\">New Organization</h1>\n <h1 *ngIf=\"!createMode\" style=\"display:inline\">Edit Organization</h1>\n\n <form class=\"form_card\" #createForm=\"ngForm\" (ngSubmit)=\"save()\">\n\n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n [(ngModel)]=\"item.name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n [(ngModel)]=\"item.acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\" style=\"width:100%\">\n <mat-label *ngIf=\"!createMode\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n [(ngModel)]=\"item.description\"\n name=\"description\"\n style=\"min-height:150px\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <mat-label *ngIf=\"!createMode\">Address</mat-label>\n <textarea matInput placeholder=\"Address\"\n type=\"text\"\n [(ngModel)]=\"item.address\"\n name=\"description\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Country</mat-label>\n <mat-select [(ngModel)]=\"item.country\" name=\"country\" required>\n <mat-option\n *ngFor=\"let country of countryOptions\"\n [value]=\"country\">{{country}}\n </mat-option>\n </mat-select>\n </mat-form-field>\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>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n \n </form>\n </div>\n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/http';\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/user-select/user-select.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';\nexport * from './lib/views/api/organization/edit/organization-edit.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4","i5","i6"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -6,6 +6,7 @@ import { InjectionToken, OnInit } from '@angular/core';
6
6
  import * as ichec_angular_core from 'ichec-angular-core';
7
7
  import { ActivatedRoute } from '@angular/router';
8
8
  import { Location } from '@angular/common';
9
+ import { MatTable } from '@angular/material/table';
9
10
 
10
11
  interface Identifiable {
11
12
  id: number;
@@ -60,15 +61,13 @@ declare class Organization implements IOrganization {
60
61
  members: string[];
61
62
  }
62
63
 
63
- interface LeftNavOption {
64
- name: string;
65
- route: string;
64
+ declare enum ErrorCode {
65
+ UnknownError = 1
66
66
  }
67
- interface LeftNavCategory {
68
- name: string;
69
- options: LeftNavOption[];
67
+ declare class ApiError {
68
+ code: ErrorCode;
69
+ text: string;
70
70
  }
71
-
72
71
  interface OptionActionChoice {
73
72
  value: string;
74
73
  display_name: string;
@@ -89,6 +88,15 @@ interface IRestOptions {
89
88
  actions?: Record<string, Record<string, OptionAction>>;
90
89
  }
91
90
 
91
+ interface LeftNavOption {
92
+ name: string;
93
+ route: string;
94
+ }
95
+ interface LeftNavCategory {
96
+ name: string;
97
+ options: LeftNavOption[];
98
+ }
99
+
92
100
  declare const ENDPOINT_URL: InjectionToken<string>;
93
101
  declare class RestService<T extends Identifiable> {
94
102
  private _url;
@@ -228,15 +236,23 @@ declare abstract class EditView<T extends Identifiable> {
228
236
  onItemAvailable(): void;
229
237
  onItemAndUserAvailable(_: IPortalMember): void;
230
238
  goBack(): void;
239
+ submit(): void;
231
240
  save(): void;
241
+ cancel(): void;
242
+ protected fetchRestOptions(): void;
243
+ protected onFileUpload(event: Event): void;
244
+ protected readFile(file: File): void;
245
+ protected onUploadedFileReady(_file: File): void;
246
+ protected onFileRead(_content: string | ArrayBuffer): void;
232
247
  protected createItem(): void;
233
248
  protected updateItem(): void;
234
249
  protected saveFiles(item: T): void;
235
- cancel(): void;
236
250
  protected abstract getTemplateItem(): T;
237
251
  private isCreateRoute;
238
252
  private getItem;
239
253
  protected onItemUpdated(item: T): void;
254
+ protected onOptions(options: IRestOptions): void;
255
+ protected onPostActions(_actions: Record<string, OptionAction>): void;
240
256
  }
241
257
 
242
258
  declare class ListView<T extends Identifiable> {
@@ -268,9 +284,9 @@ declare class UserEditComponent extends EditView<IPortalMember> implements OnIni
268
284
  constructor();
269
285
  ngOnInit(): void;
270
286
  protected getTemplateItem(): IPortalMember;
271
- saveFiles(item: IPortalMember): void;
272
- submit(): void;
273
- onFileUpload(event: Event): void;
287
+ protected onUploadedFileReady(file: File): void;
288
+ protected onFileRead(content: string | ArrayBuffer): void;
289
+ protected saveFiles(item: IPortalMember): void;
274
290
  static ɵfac: i0.ɵɵFactoryDeclaration<UserEditComponent, never>;
275
291
  static ɵcmp: i0.ɵɵComponentDeclaration<UserEditComponent, "lib-user-edit", never, {}, {}, never, never, true, never>;
276
292
  }
@@ -282,6 +298,18 @@ declare class UserComponent extends ListView<IPortalMember> implements OnInit {
282
298
  static ɵcmp: i0.ɵɵComponentDeclaration<UserComponent, "lib-user", never, {}, {}, never, never, true, never>;
283
299
  }
284
300
 
301
+ declare class UserSelectComponent {
302
+ toAdd: IPortalMember | null;
303
+ items: IPortalMember[];
304
+ candidates: IPortalMember[];
305
+ table: MatTable<IPortalMember>;
306
+ tableColumns: string[];
307
+ remove(to_remove: IPortalMember): void;
308
+ add(): void;
309
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserSelectComponent, never>;
310
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserSelectComponent, "lib-user-select", never, { "items": { "alias": "items"; "required": false; }; "candidates": { "alias": "candidates"; "required": false; }; }, {}, never, never, true, never>;
311
+ }
312
+
285
313
  declare class GroupDetailComponent extends DetailView<IGroup> {
286
314
  constructor();
287
315
  static ɵfac: i0.ɵɵFactoryDeclaration<GroupDetailComponent, never>;
@@ -314,12 +342,12 @@ declare class OrganizationEditComponent extends EditView<IOrganization> implemen
314
342
  countryOptions: string[];
315
343
  constructor();
316
344
  ngOnInit(): void;
317
- submit(): void;
318
- onOptions(options: IRestOptions): void;
319
345
  protected getTemplateItem(): IOrganization;
346
+ protected onPostActions(actions: Record<string, OptionAction>): void;
347
+ protected onCountryChoices(choices: OptionActionChoice[]): void;
320
348
  static ɵfac: i0.ɵɵFactoryDeclaration<OrganizationEditComponent, never>;
321
349
  static ɵcmp: i0.ɵɵComponentDeclaration<OrganizationEditComponent, "lib-organization-edit", never, {}, {}, never, never, true, never>;
322
350
  }
323
351
 
324
- export { DetailView, ENDPOINT_URL, EditView, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationEditComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserService };
325
- export type { IGroup, IOrganization, IPortalMember, Identifiable, LeftNavCategory, LeftNavOption, NavGroup, NavOption };
352
+ export { ApiError, DetailView, ENDPOINT_URL, EditView, ErrorCode, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationEditComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserSelectComponent, UserService };
353
+ export type { IGroup, IOrganization, IPortalMember, IRestOptions, Identifiable, LeftNavCategory, LeftNavOption, NavGroup, NavOption, OptionAction, OptionActionChoice };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ichec-angular-core",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.1",
6
6
  "@angular/core": "^20.1.1"