ichec-angular-core 0.0.6 → 0.0.8
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.
- package/fesm2022/ichec-angular-core.mjs +107 -109
- package/fesm2022/ichec-angular-core.mjs.map +1 -1
- package/index.d.ts +42 -35
- package/package.json +3 -3
|
@@ -185,11 +185,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
185
185
|
}], ctorParameters: () => [] });
|
|
186
186
|
|
|
187
187
|
class GroupService extends RestService {
|
|
188
|
-
userService;
|
|
188
|
+
userService = inject(UserService);
|
|
189
189
|
userItems = new BehaviorSubject([]);
|
|
190
190
|
constructor() {
|
|
191
191
|
super("groups", inject(ENDPOINT_URL), inject(HttpClient));
|
|
192
|
-
this.userService = inject(UserService);
|
|
193
192
|
this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));
|
|
194
193
|
}
|
|
195
194
|
refreshUserItems(user) {
|
|
@@ -225,34 +224,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
225
224
|
}], ctorParameters: () => [] });
|
|
226
225
|
|
|
227
226
|
class LeftNavService {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
227
|
+
activeOptions = new Set();
|
|
228
|
+
_groups = [];
|
|
229
|
+
_defaultOptions = [];
|
|
230
|
+
_groupService = inject(GroupService);
|
|
232
231
|
constructor() {
|
|
233
|
-
this.
|
|
234
|
-
this.groupService = inject(GroupService);
|
|
235
|
-
this.groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));
|
|
232
|
+
this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));
|
|
236
233
|
}
|
|
237
234
|
onGroupsUpdated(groups) {
|
|
238
|
-
this.
|
|
239
|
-
this.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
235
|
+
this.activeOptions = new Set();
|
|
236
|
+
this._defaultOptions.forEach(e => this.activeOptions.add(e));
|
|
237
|
+
groups.forEach(g => this._groups.forEach(n => {
|
|
238
|
+
if (n.name == g.name) {
|
|
239
|
+
this.addNavGroup(n);
|
|
240
|
+
}
|
|
241
|
+
;
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
addNavGroup(group) {
|
|
245
|
+
group.options.forEach(o => this.activeOptions.add(o));
|
|
246
|
+
}
|
|
247
|
+
setDefaultOptions(options) {
|
|
248
|
+
this._defaultOptions = options;
|
|
249
|
+
}
|
|
250
|
+
setGroups(groups) {
|
|
251
|
+
this._groups = groups;
|
|
256
252
|
}
|
|
257
253
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
258
254
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavService, providedIn: 'root' });
|
|
@@ -292,37 +288,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
292
288
|
}] } });
|
|
293
289
|
|
|
294
290
|
class LeftNavComponent {
|
|
295
|
-
|
|
296
|
-
constructor() {
|
|
297
|
-
this.leftNavService = inject(LeftNavService);
|
|
298
|
-
}
|
|
291
|
+
_leftNavService = inject(LeftNavService);
|
|
299
292
|
getOptions() {
|
|
300
|
-
return this.
|
|
293
|
+
return this._leftNavService.activeOptions;
|
|
301
294
|
}
|
|
302
295
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
303
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.1", type: LeftNavComponent, isStandalone: true, selector: "lib-left-nav", ngImport: i0, template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav
|
|
296
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.1", type: LeftNavComponent, isStandalone: true, selector: "lib-left-nav", ngImport: i0, template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnave-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [":host{display:flex;flex-direction:column}.leftnav-container{flex-grow:1;display:flex}.leftnav-content{display:flex;flex-grow:1;height:90vh}.leftnav-side{padding:5px;width:160px}.is-active{background-color:#d3d3d3}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i1.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
304
297
|
}
|
|
305
298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LeftNavComponent, decorators: [{
|
|
306
299
|
type: Component,
|
|
307
|
-
args: [{ selector: 'lib-left-nav', imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule
|
|
308
|
-
}]
|
|
300
|
+
args: [{ selector: 'lib-left-nav', imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule], template: "<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnave-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [":host{display:flex;flex-direction:column}.leftnav-container{flex-grow:1;display:flex}.leftnav-content{display:flex;flex-grow:1;height:90vh}.leftnav-side{padding:5px;width:160px}.is-active{background-color:#d3d3d3}\n"] }]
|
|
301
|
+
}] });
|
|
309
302
|
|
|
310
303
|
const LOGIN_USER = new InjectionToken("Default login user - used for testing");
|
|
311
304
|
class LandingComponent {
|
|
312
|
-
loginUser;
|
|
305
|
+
loginUser = inject(LOGIN_USER);
|
|
313
306
|
loginError = "";
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
this.userService = inject(UserService);
|
|
318
|
-
this.loginUser = inject(LOGIN_USER);
|
|
319
|
-
this.router = inject(Router);
|
|
320
|
-
}
|
|
307
|
+
message = "";
|
|
308
|
+
userService = inject(UserService);
|
|
309
|
+
router = inject(Router);
|
|
321
310
|
ngOnInit() {
|
|
322
311
|
// This is a development version hack to 'autologin' to make it
|
|
323
312
|
// easier to play around. The name will be empty at init time
|
|
324
313
|
// for the production version.
|
|
325
314
|
if (this.loginUser.name) {
|
|
315
|
+
console.log("Have development login user");
|
|
326
316
|
this.login();
|
|
327
317
|
}
|
|
328
318
|
}
|
|
@@ -342,26 +332,28 @@ class LandingComponent {
|
|
|
342
332
|
this.router.navigateByUrl("/home");
|
|
343
333
|
}
|
|
344
334
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LandingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
345
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: LandingComponent, isStandalone: true, selector: "lib-landing", ngImport: i0, template: "\n <p>
|
|
335
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: LandingComponent, isStandalone: true, selector: "lib-landing", inputs: { message: "message" }, ngImport: i0, template: "\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n", styles: [":host{display:flex;align-items:center;flex-grow:1;background-color:#a5b3c9;flex-direction:column}.base-form{padding:10px}.form-field{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
346
336
|
}
|
|
347
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: LandingComponent, decorators: [{
|
|
348
338
|
type: Component,
|
|
349
|
-
args: [{ selector: 'lib-landing', imports: [FormsModule, MatCardModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, NgIf], template: "\n <p>
|
|
350
|
-
}],
|
|
339
|
+
args: [{ selector: 'lib-landing', imports: [FormsModule, MatCardModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, NgIf], template: "\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n", styles: [":host{display:flex;align-items:center;flex-grow:1;background-color:#a5b3c9;flex-direction:column}.base-form{padding:10px}.form-field{display:flex}\n"] }]
|
|
340
|
+
}], propDecorators: { message: [{
|
|
341
|
+
type: Input
|
|
342
|
+
}] } });
|
|
351
343
|
|
|
352
|
-
class
|
|
344
|
+
class DetailView {
|
|
353
345
|
item;
|
|
354
346
|
_route;
|
|
355
347
|
_location;
|
|
356
348
|
_userService;
|
|
357
349
|
_restService;
|
|
358
|
-
constructor() {
|
|
359
|
-
this._route =
|
|
360
|
-
this._location =
|
|
361
|
-
this._userService =
|
|
362
|
-
this._restService =
|
|
350
|
+
constructor(_route, _location, _userService, _restService) {
|
|
351
|
+
this._route = _route;
|
|
352
|
+
this._location = _location;
|
|
353
|
+
this._userService = _userService;
|
|
354
|
+
this._restService = _restService;
|
|
363
355
|
}
|
|
364
|
-
|
|
356
|
+
onInit() {
|
|
365
357
|
this.getItem();
|
|
366
358
|
}
|
|
367
359
|
onItemAvailable() {
|
|
@@ -387,28 +379,22 @@ class DetailViewComponent {
|
|
|
387
379
|
}
|
|
388
380
|
this._restService.putItem(this.item).subscribe(item => this.item = item);
|
|
389
381
|
}
|
|
390
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: DetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
391
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: DetailViewComponent, isStandalone: true, selector: "lib-detail-view", ngImport: i0, template: "", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] });
|
|
392
382
|
}
|
|
393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: DetailViewComponent, decorators: [{
|
|
394
|
-
type: Component,
|
|
395
|
-
args: [{ selector: 'lib-detail-view', imports: [], template: "", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] }]
|
|
396
|
-
}], ctorParameters: () => [] });
|
|
397
383
|
|
|
398
|
-
class
|
|
384
|
+
class EditView {
|
|
399
385
|
item;
|
|
400
386
|
createMode = false;
|
|
401
387
|
_route;
|
|
402
388
|
_location;
|
|
403
389
|
_userService;
|
|
404
390
|
_restService;
|
|
405
|
-
constructor() {
|
|
406
|
-
this._route =
|
|
407
|
-
this._location =
|
|
408
|
-
this._userService =
|
|
409
|
-
this._restService =
|
|
391
|
+
constructor(_route, _location, _userService, _restServce) {
|
|
392
|
+
this._route = _route;
|
|
393
|
+
this._location = _location;
|
|
394
|
+
this._userService = _userService;
|
|
395
|
+
this._restService = _restServce;
|
|
410
396
|
}
|
|
411
|
-
|
|
397
|
+
onInit() {
|
|
412
398
|
this.getItem();
|
|
413
399
|
}
|
|
414
400
|
onItemAvailable() {
|
|
@@ -472,15 +458,9 @@ class EditViewComponent {
|
|
|
472
458
|
this.item = item;
|
|
473
459
|
this.goBack();
|
|
474
460
|
}
|
|
475
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: EditViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
476
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: EditViewComponent, isStandalone: true, selector: "lib-edit-view", ngImport: i0, template: "", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] });
|
|
477
461
|
}
|
|
478
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: EditViewComponent, decorators: [{
|
|
479
|
-
type: Component,
|
|
480
|
-
args: [{ selector: 'lib-edit-view', imports: [], template: "", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] }]
|
|
481
|
-
}], ctorParameters: () => [] });
|
|
482
462
|
|
|
483
|
-
class
|
|
463
|
+
class ListView {
|
|
484
464
|
user;
|
|
485
465
|
items = [];
|
|
486
466
|
displayedColumns = [];
|
|
@@ -488,13 +468,13 @@ class ListViewComponent {
|
|
|
488
468
|
_location;
|
|
489
469
|
_userService;
|
|
490
470
|
_restService;
|
|
491
|
-
constructor() {
|
|
492
|
-
this._route =
|
|
493
|
-
this._location =
|
|
494
|
-
this._userService =
|
|
495
|
-
this._restService =
|
|
471
|
+
constructor(_route, _location, _userService, _restService) {
|
|
472
|
+
this._route = _route;
|
|
473
|
+
this._location = _location;
|
|
474
|
+
this._userService = _userService;
|
|
475
|
+
this._restService = _restService;
|
|
496
476
|
}
|
|
497
|
-
|
|
477
|
+
onInit() {
|
|
498
478
|
this.getItems();
|
|
499
479
|
}
|
|
500
480
|
getItems() {
|
|
@@ -525,19 +505,13 @@ class ListViewComponent {
|
|
|
525
505
|
goBack() {
|
|
526
506
|
this._location.back();
|
|
527
507
|
}
|
|
528
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: ListViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: ListViewComponent, isStandalone: true, selector: "lib-table-view", ngImport: i0, template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"], dependencies: [{ 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: MatButtonModule }, { 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: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
530
508
|
}
|
|
531
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: ListViewComponent, decorators: [{
|
|
532
|
-
type: Component,
|
|
533
|
-
args: [{ selector: 'lib-table-view', imports: [MatTableModule,
|
|
534
|
-
MatButtonModule,
|
|
535
|
-
MatIconModule,
|
|
536
|
-
RouterModule], template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"] }]
|
|
537
|
-
}], ctorParameters: () => [] });
|
|
538
509
|
|
|
539
|
-
class UserDetailComponent extends
|
|
540
|
-
|
|
510
|
+
class UserDetailComponent extends DetailView {
|
|
511
|
+
constructor() {
|
|
512
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(UserService));
|
|
513
|
+
}
|
|
514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
541
515
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserDetailComponent, isStandalone: true, selector: "lib-user-detail", usesInheritance: true, ngImport: i0, template: "<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column;padding:5px}.item_heading{display:inline}.item_field,.padded_button{padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
542
516
|
}
|
|
543
517
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserDetailComponent, decorators: [{
|
|
@@ -546,13 +520,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
546
520
|
RouterModule,
|
|
547
521
|
MatButtonModule,
|
|
548
522
|
MatIconModule], template: "<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n", styles: [":host{flex-grow:1}.container{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column;padding:5px}.item_heading{display:inline}.item_field,.padded_button{padding:5px}\n"] }]
|
|
549
|
-
}] });
|
|
523
|
+
}], ctorParameters: () => [] });
|
|
550
524
|
|
|
551
|
-
class UserEditComponent extends
|
|
525
|
+
class UserEditComponent extends EditView {
|
|
526
|
+
constructor() {
|
|
527
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(UserService));
|
|
528
|
+
}
|
|
552
529
|
getTemplateItem() {
|
|
553
530
|
return new PortalMember();
|
|
554
531
|
}
|
|
555
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, deps:
|
|
532
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
556
533
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: UserEditComponent, isStandalone: true, selector: "lib-user-edit", usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <form class=\"example-form\">\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n \n </form>\n \n <div style=\"margin:10px; padding:10px;display: flex; flex-direction: row\">\n <button mat-fab class=\"btn-block\" (click)=\"save()\" style=\"padding:10px\"><mat-icon>save</mat-icon></button>\n <button mat-fab class=\"btn-block\" (click)=\"cancel()\" style=\"padding:10px\"><mat-icon>cancel</mat-icon></button>\n </div>\n </div>\n \n</div>\n", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column;padding:10px}.form_field{padding:5px}.btn_block{padding:10px}\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.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: i3$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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"] }] });
|
|
557
534
|
}
|
|
558
535
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserEditComponent, decorators: [{
|
|
@@ -566,10 +543,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
566
543
|
MatFormFieldModule,
|
|
567
544
|
MatIconModule,
|
|
568
545
|
], template: "<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <form class=\"example-form\">\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n \n </form>\n \n <div style=\"margin:10px; padding:10px;display: flex; flex-direction: row\">\n <button mat-fab class=\"btn-block\" (click)=\"save()\" style=\"padding:10px\"><mat-icon>save</mat-icon></button>\n <button mat-fab class=\"btn-block\" (click)=\"cancel()\" style=\"padding:10px\"><mat-icon>cancel</mat-icon></button>\n </div>\n </div>\n \n</div>\n", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:left;align-items:left;flex-direction:column;padding:10px}.form_field{padding:5px}.btn_block{padding:10px}\n"] }]
|
|
569
|
-
}] });
|
|
546
|
+
}], ctorParameters: () => [] });
|
|
570
547
|
|
|
571
|
-
class UserComponent extends
|
|
572
|
-
|
|
548
|
+
class UserComponent extends ListView {
|
|
549
|
+
constructor() {
|
|
550
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(UserService));
|
|
551
|
+
}
|
|
552
|
+
ngOnInit() {
|
|
553
|
+
this.onInit();
|
|
554
|
+
}
|
|
555
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
573
556
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.1", type: UserComponent, isStandalone: true, selector: "lib-user", usesInheritance: true, ngImport: i0, 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"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2$3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2$3.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i2$3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i2$3.MatCardTitleGroup, selector: "mat-card-title-group" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
574
557
|
}
|
|
575
558
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: UserComponent, decorators: [{
|
|
@@ -578,10 +561,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
578
561
|
MatButtonModule,
|
|
579
562
|
MatIconModule,
|
|
580
563
|
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"] }]
|
|
581
|
-
}] });
|
|
564
|
+
}], ctorParameters: () => [] });
|
|
582
565
|
|
|
583
|
-
class GroupDetailComponent extends
|
|
584
|
-
|
|
566
|
+
class GroupDetailComponent extends DetailView {
|
|
567
|
+
constructor() {
|
|
568
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(GroupService));
|
|
569
|
+
}
|
|
570
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: GroupDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
585
571
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: GroupDetailComponent, isStandalone: true, selector: "lib-group-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatInputModule }, { 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"] }] });
|
|
586
572
|
}
|
|
587
573
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: GroupDetailComponent, decorators: [{
|
|
@@ -594,12 +580,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
594
580
|
MatInputModule,
|
|
595
581
|
MatFormFieldModule,
|
|
596
582
|
MatIconModule], template: "<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", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] }]
|
|
597
|
-
}] });
|
|
583
|
+
}], ctorParameters: () => [] });
|
|
598
584
|
|
|
599
|
-
class GroupComponent extends
|
|
585
|
+
class GroupComponent extends ListView {
|
|
600
586
|
displayedColumns = ['name'];
|
|
601
587
|
constructor() {
|
|
602
|
-
super();
|
|
588
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(GroupService));
|
|
589
|
+
}
|
|
590
|
+
ngOnInit() {
|
|
591
|
+
this.onInit();
|
|
603
592
|
}
|
|
604
593
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: GroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
605
594
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: GroupComponent, isStandalone: true, selector: "lib-group", usesInheritance: true, ngImport: i0, template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"], dependencies: [{ 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: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
@@ -614,9 +603,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
614
603
|
], template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"] }]
|
|
615
604
|
}], ctorParameters: () => [] });
|
|
616
605
|
|
|
617
|
-
class OrganizationComponent extends
|
|
606
|
+
class OrganizationComponent extends ListView {
|
|
618
607
|
displayedColumns = ['name', 'website', 'is_partner'];
|
|
619
|
-
|
|
608
|
+
constructor() {
|
|
609
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(OrganizationService));
|
|
610
|
+
}
|
|
611
|
+
ngOnInit() {
|
|
612
|
+
this.onInit();
|
|
613
|
+
}
|
|
614
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
620
615
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: OrganizationComponent, isStandalone: true, selector: "lib-organization", usesInheritance: true, ngImport: i0, template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"], dependencies: [{ 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: MatButtonModule }, { 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: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
621
616
|
}
|
|
622
617
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationComponent, decorators: [{
|
|
@@ -627,10 +622,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
627
622
|
MatIconModule,
|
|
628
623
|
RouterModule
|
|
629
624
|
], template: "<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", styles: [".container{height:100%;width:100%;display:flex;padding:10px;margin:10px}.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}\n"] }]
|
|
630
|
-
}] });
|
|
625
|
+
}], ctorParameters: () => [] });
|
|
631
626
|
|
|
632
|
-
class OrganizationDetailComponent extends
|
|
633
|
-
|
|
627
|
+
class OrganizationDetailComponent extends DetailView {
|
|
628
|
+
constructor() {
|
|
629
|
+
super(inject(ActivatedRoute), inject(Location), inject(UserService), inject(OrganizationService));
|
|
630
|
+
}
|
|
631
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
634
632
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.1", type: OrganizationDetailComponent, isStandalone: true, selector: "lib-organization-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatInputModule }, { 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"] }] });
|
|
635
633
|
}
|
|
636
634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImport: i0, type: OrganizationDetailComponent, decorators: [{
|
|
@@ -643,7 +641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
643
641
|
MatInputModule,
|
|
644
642
|
MatFormFieldModule,
|
|
645
643
|
MatIconModule], template: "<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", styles: [".container{display:flex;flex-direction:column;padding:10px}.item_view{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:10px}.form_field,.btn-block{padding:10px}\n"] }]
|
|
646
|
-
}] });
|
|
644
|
+
}], ctorParameters: () => [] });
|
|
647
645
|
|
|
648
646
|
/*
|
|
649
647
|
* Public API Surface of ichec-angular-core
|
|
@@ -653,5 +651,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.1", ngImpor
|
|
|
653
651
|
* Generated bundle index. Do not edit.
|
|
654
652
|
*/
|
|
655
653
|
|
|
656
|
-
export { ApiError,
|
|
654
|
+
export { ApiError, DetailView, ENDPOINT_URL, EditView, ErrorCode, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserService };
|
|
657
655
|
//# 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/detail-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/detail-view/detail-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/edit-view/edit-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view/edit-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list-view/list-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-view/list-view.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n}\n\nexport class PortalMember implements IPortalMember {\n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n}\n\nexport interface IGroup extends Identifiable {\n name: string;\n}\n\n\nexport class Group implements IGroup {\n name = \"\";\n url = \"\";\n id = 0;\n}\n\nexport interface IOrganization extends Identifiable {\n name: string;\n acronym: string;\n description: string;\n address: string;\n website: string;\n country: string;\n members: string[];\n}\n\nexport class Organization implements IOrganization {\n id = 0;\n url = \"\";\n name = \"\";\n acronym = \"\";\n description = \"\";\n address = \"\";\n website = \"\";\n country = \"\";\n members: string[] = [];\n}\n\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nimport { Identifiable, IPortalMember } from '../models/core';\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\nexport class RestService<T extends Identifiable> {\n\n constructor(private _url: string,\n protected _endpoint_url: string,\n protected _http: HttpClient) {}\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.getBaseUrl() + id + \"/\",\n { headers: this.getHeaders() }).pipe(\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n getForUser(user:IPortalMember): Observable<T[]>{\n return this.get(\"?user=\" + user.id);\n }\n\n get(query = \"\"): Observable<T[]> {\n return this._http.get<T[]>(this.getBaseUrl() + query,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<T> {\n return this._http.get<T>(this.getBaseUrl() + id,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<T> {\n return this._http.get<T>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError)); \n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T>\n {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)), \n catchError(this.handleError)); \n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]) : Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any)\n {\n if (exclude_keys.includes(key))\n {\n return undefined;\n }\n else\n {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string{\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends RestService<IPortalMember> {\n\n /** Service to handle IPortalMember via REST and also handle logins.\n */ \n\n loggedInUser: BehaviorSubject<IPortalMember | null> = new BehaviorSubject<IPortalMember | null>(null);\n\n constructor() {\n super('members', inject(ENDPOINT_URL), inject(HttpClient));\n }\n\n login(username: string, password: string): Observable<void> {\n\n console.log(\"Attempting login\");\n const body = new URLSearchParams();\n body.set('username', username);\n body.set('password', password);\n const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });\n const api_auth_endpoint = this._endpoint_url + \"/api-token-auth/\"\n\n return this._http.post<TokenResponse>(api_auth_endpoint,\n body.toString(),\n { headers: headers }).pipe(\n map(token => this.onLoginToken(token)),\n mergeAll(),\n catchError(this.handleError));\n }\n\n logout() {\n if (this.loggedInUser === null) {\n return;\n }\n console.log(\"Logging out\")\n localStorage.removeItem(\"api_token\");\n this.loggedInUser.next(null);\n }\n\n private onLoginToken(token_response: TokenResponse): Observable<void> {\n console.log(\"Got login token - fetching corresponding user.\");\n localStorage.setItem(\"api_token\", token_response.token);\n return this.getItem(Number(token_response.user_id)).pipe(\n tap(user => this.onLoggedIn(user)),\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n private onLoggedIn(user: IPortalMember) {\n console.log(\"Log in succesful for user: \" + user.username);\n this.loggedInUser.next(user);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { UserService } from './user.service';\nimport { IGroup, IPortalMember } from '../models/core';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends RestService<IGroup> {\n\n userService: UserService;\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n \n constructor() {\n super(\"groups\", inject(ENDPOINT_URL), inject(HttpClient))\n this.userService = inject(UserService)\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 { UserService } from './user.service'\nimport { GroupService } from './group.service'\nimport { IGroup} from '../models/core';\n\n\nexport interface NavOption\n{\n name: string;\n route: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n userService: UserService;\n groupService: GroupService;\n groups: IGroup[] = [];\n options: NavOption[] = [];\n \n constructor() {\n this.userService = inject(UserService);\n this.groupService = inject(GroupService);\n this.groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroup[]){\n this.groups = groups;\n this.updateOptions();\n }\n\n isConsortiumAdmin(): boolean {\n return this.groups.some(g => g.name == \"ConsortiumAdmins\");\n }\n\n updateOptions() {\n if (this.isConsortiumAdmin())\n {\n this.options = [\n { name: \"Home\", route: \"home\" },\n { name: \"Facilities\", route: \"facilities\" },\n { name: \"Access Calls\", route: \"access_calls\" },\n { name: \"Users\", route: \"users\" },\n ]\n }\n else\n {\n this.options = [];\n }\n }\n\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';\n\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;\n\n constructor()\n {\n this.leftNavService = inject(LeftNavService);\n }\n\n getOptions()\n {\n return this.leftNavService.options;\n }\n\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav\n mode=\"side\"\n opened\n style=\"padding: 5px; width: 160px\">\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 style=\"display:flex; flex-grow: 1; height:90vh\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, 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;\n loginError = \"\";\n private userService: UserService;\n private router: Router;\n\n constructor() {\n this.userService = inject(UserService);\n this.loginUser = inject(LOGIN_USER);\n this.router = inject(Router);\n }\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 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>Welcome to the Marinerg test facility access portal</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 { Component, OnInit, inject } from '@angular/core';\nimport { 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\n@Component({\n selector: 'lib-detail-view',\n imports: [],\n templateUrl: './detail-view.component.html',\n styleUrl: './detail-view.component.css'\n})\n\nexport abstract class DetailViewComponent<T extends Identifiable> implements OnInit {\n\n item?: T;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor() {\n this._route = inject(ActivatedRoute);\n this._location = inject(Location);\n this._userService = inject(UserService);\n this._restService = inject(RestService<T>);\n }\n\n ngOnInit(): 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 { Component, OnInit, inject } from '@angular/core';\nimport { 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\n@Component({\n selector: 'lib-edit-view',\n imports: [],\n templateUrl: './edit-view.component.html',\n styleUrl: './edit-view.component.css'\n})\n\nexport abstract class EditViewComponent<T extends Identifiable> implements OnInit {\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() {\n this._route = inject(ActivatedRoute);\n this._location = inject(Location);\n this._userService = inject(UserService);\n this._restService = inject(RestService<T>);\n }\n\n ngOnInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n save() {\n if (this.createMode) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n protected updateItem()\n {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.onItemUpdated(item)\n );\n }\n\n protected createItem()\n {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.onItemUpdated(item)); \n }\n\n cancel() {\n this.goBack();\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean\n {\n const urls = this._route.snapshot.url;\n if (urls.length >= 2)\n {\n if (urls[1].path == \"create\")\n {\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 { Component, OnInit, inject} from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { Identifiable, IPortalMember } from '../../../models/core';\nimport { UserService } from '../../../services/user.service';\nimport { RestService } from '../../../services/rest.service';\n\n@Component({\n selector: 'lib-table-view',\n imports: [MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n styleUrl: './list-view.component.css',\n templateUrl: './list-view.component.html'\n})\n\nexport class ListViewComponent<T extends Identifiable> implements OnInit{\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 this._route = inject(ActivatedRoute);\n this._location = inject(Location);\n this._userService = inject(UserService);\n this._restService = inject(RestService<T>);\n }\n\n ngOnInit(): void {\n this.getItems();\n }\n \n getItems(): void {\n\n if (this.isSelfList())\n {\n this._userService.loggedInUser.subscribe(\n user => {\n if(user){this.onUserChange(user)}})\n }\n else\n {\n this._restService.get().subscribe(items => this.items = items);\n }\n }\n\n private onUserChange(user: IPortalMember)\n {\n this.user = user;\n this._restService.getForUser(this.user).subscribe(items => this.items = items);\n }\n\n protected isSelfList()\n {\n const url_segments = this._route.snapshot.url;\n if (url_segments.length == 2)\n {\n if (url_segments[1].path == \"self\")\n {\n return true;\n }\n }\n return false;\n }\n\n goBack(): void {\n this._location.back();\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 } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { RouterModule } from '@angular/router'\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { DetailViewComponent } from '../../../base/detail-view/detail-view.component';\nimport { IPortalMember } from '../../../../models/core';\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 DetailViewComponent<IPortalMember> {\n}\n","<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n","import { Component } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { 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 { EditViewComponent } from '../../../base/edit-view/edit-view.component';\nimport { PortalMember, IPortalMember } from '../../../../models/core';\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 EditViewComponent<IPortalMember> {\n\n protected override getTemplateItem(): IPortalMember\n {\n return new PortalMember();\n }\n\n\n \n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <form class=\"example-form\">\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n \n </form>\n \n <div style=\"margin:10px; padding:10px;display: flex; flex-direction: row\">\n <button mat-fab class=\"btn-block\" (click)=\"save()\" style=\"padding:10px\"><mat-icon>save</mat-icon></button>\n <button mat-fab class=\"btn-block\" (click)=\"cancel()\" style=\"padding:10px\"><mat-icon>cancel</mat-icon></button>\n </div>\n </div>\n \n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { RouterModule } from '@angular/router';\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 { ListViewComponent } from '../../../base/list-view/list-view.component';\nimport { IPortalMember } from '../../../../models/core';\n\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 ListViewComponent<IPortalMember> implements 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 } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { 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 { DetailViewComponent } from '../../../base/detail-view/detail-view.component';\nimport { IGroup } from '../../../../models/core'\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 DetailViewComponent<IGroup> {\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 } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListViewComponent } from '../../../base/list-view/list-view.component'\nimport { IGroup } from '../../../../models/core';\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 ListViewComponent<IGroup> implements OnInit{\n \n override displayedColumns: string[] = ['name']\n\n constructor() {\n super()\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 } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListViewComponent } from '../../../base/list-view/list-view.component'\nimport { Organization } from '../../../../models/core';\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 ListViewComponent<Organization>{\n \n override displayedColumns: string[] = ['name', 'website', 'is_partner']\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 } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { 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 { DetailViewComponent } from '../../../base/detail-view/detail-view.component';\nimport { IOrganization } from '../../../../models/core'\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 DetailViewComponent<IOrganization> {\n\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h3> \n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/organizations/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n <div class=\"form_field\">{{item.description}}</div>\n <div class=\"form_field\"><h3>Address</h3>{{item.address}}</div>\n <div class=\"form_field\"><h3>Website</h3>{{item.website}}</div>\n </div>\n \n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/group.service';\nexport * from './lib/services/organization.service';\nexport * from './lib/services/left-nav.service';\n\nexport * from './lib/views/top-bar/top-bar.component';\nexport * from './lib/views/left-nav/left-nav.component';\nexport * from './lib/views/landing/landing.component';\nexport * from './lib/views/base/detail-view/detail-view.component';\nexport * from './lib/views/base/edit-view/edit-view.component';\nexport * from './lib/views/base/list-view/list-view.component';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i5","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.ts","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-view.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n}\n\nexport class PortalMember implements IPortalMember {\n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n}\n\nexport interface IGroup extends Identifiable {\n name: string;\n}\n\n\nexport class Group implements IGroup {\n name = \"\";\n url = \"\";\n id = 0;\n}\n\nexport interface IOrganization extends Identifiable {\n name: string;\n acronym: string;\n description: string;\n address: string;\n website: string;\n country: string;\n members: string[];\n}\n\nexport class Organization implements IOrganization {\n id = 0;\n url = \"\";\n name = \"\";\n acronym = \"\";\n description = \"\";\n address = \"\";\n website = \"\";\n country = \"\";\n members: string[] = [];\n}\n\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nimport { Identifiable, IPortalMember } from '../models/core';\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\nexport class RestService<T extends Identifiable> {\n\n constructor(private _url: string,\n protected _endpoint_url: string,\n protected _http: HttpClient) {}\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.getBaseUrl() + id + \"/\",\n { headers: this.getHeaders() }).pipe(\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n getForUser(user:IPortalMember): Observable<T[]>{\n return this.get(\"?user=\" + user.id);\n }\n\n get(query = \"\"): Observable<T[]> {\n return this._http.get<T[]>(this.getBaseUrl() + query,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<T> {\n return this._http.get<T>(this.getBaseUrl() + id,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<T> {\n return this._http.get<T>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError)); \n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T>\n {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)), \n catchError(this.handleError)); \n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]) : Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any)\n {\n if (exclude_keys.includes(key))\n {\n return undefined;\n }\n else\n {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string{\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends RestService<IPortalMember> {\n\n /** Service to handle IPortalMember via REST and also handle logins.\n */ \n\n loggedInUser: BehaviorSubject<IPortalMember | null> = new BehaviorSubject<IPortalMember | null>(null);\n\n constructor() {\n super('members', inject(ENDPOINT_URL), inject(HttpClient));\n }\n\n login(username: string, password: string): Observable<void> {\n\n console.log(\"Attempting login\");\n const body = new URLSearchParams();\n body.set('username', username);\n body.set('password', password);\n const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });\n const api_auth_endpoint = this._endpoint_url + \"/api-token-auth/\"\n\n return this._http.post<TokenResponse>(api_auth_endpoint,\n body.toString(),\n { headers: headers }).pipe(\n map(token => this.onLoginToken(token)),\n mergeAll(),\n catchError(this.handleError));\n }\n\n logout() {\n if (this.loggedInUser === null) {\n return;\n }\n console.log(\"Logging out\")\n localStorage.removeItem(\"api_token\");\n this.loggedInUser.next(null);\n }\n\n private onLoginToken(token_response: TokenResponse): Observable<void> {\n console.log(\"Got login token - fetching corresponding user.\");\n localStorage.setItem(\"api_token\", token_response.token);\n return this.getItem(Number(token_response.user_id)).pipe(\n tap(user => this.onLoggedIn(user)),\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n private onLoggedIn(user: IPortalMember) {\n console.log(\"Log in succesful for user: \" + user.username);\n this.loggedInUser.next(user);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { UserService } from './user.service';\nimport { IGroup, IPortalMember } from '../models/core';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends RestService<IGroup> {\n\n userService: UserService = inject(UserService);\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n \n constructor() {\n super(\"groups\", inject(ENDPOINT_URL), inject(HttpClient))\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n }\n\n private refreshUserItems(user: IPortalMember | null)\n {\n if (user)\n {\n this.getForUser(user).subscribe(items => this.userItems.next(items)); \n }\n else\n {\n this.userItems.next([]);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service'\nimport { IOrganization } from '../models/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends RestService<IOrganization> {\n\n constructor() {\n super(\"organizations\", inject(ENDPOINT_URL), inject(HttpClient))\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroup } from '../models/core';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n}\n\nexport interface NavGroup\n{\n name: string;\n options: NavOption[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeOptions: Set<NavOption> = new Set<NavOption>();\n private _groups: NavGroup[] = [];\n private _defaultOptions: NavOption[] = [];\n private _groupService: GroupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroup[]) {\n this.activeOptions = new Set<NavOption>();\n this._defaultOptions.forEach(e => this.activeOptions.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n this.addNavGroup(n)};}));\n }\n\n addNavGroup(group: NavGroup) {\n group.options.forEach(o => this.activeOptions.add(o));\n }\n\n setDefaultOptions(options: NavOption[])\n {\n this._defaultOptions = options;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { UserService } from '../../services/user.service';\nimport { LeftNavService } from '../../services/left-nav.service';\nimport { IPortalMember } from '../../models/core';\n\n@Component({\n selector: 'lib-top-bar',\n imports: [NgIf, RouterModule, MatToolbarModule, MatIconModule, MatButtonModule, MatMenuModule],\n templateUrl: './top-bar.component.html',\n styleUrl: './top-bar.component.css'\n})\nexport class TopBarComponent implements OnInit {\n user?: IPortalMember | null = null;\n @Input() title = \"\";\n\n private userService: UserService;\n private leftNavService: LeftNavService;\n\n constructor() {\n this.userService = inject(UserService);\n this.leftNavService = inject(LeftNavService);\n }\n\n ngOnInit(): void {\n this.userService.loggedInUser.subscribe(user => {\n this.user = user;\n });\n }\n\n onLogout() {\n this.userService.logout();\n }\n}\n","\n <mat-toolbar *ngIf=\"user\" style=\"height:60px\">\n <a mat-icon-button class=\"example-icon\" [routerLink]=\"['home']\">\n <mat-icon>home</mat-icon>\n </a>\n <span>{{title}}</span>\n <span class=\"topbar-spacer\"></span>\n <span>{{user.username}}</span>\n <button mat-icon-button class=\"example-icon\" aria-label=\"User profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon>person</mat-icon>\n </button>\n <mat-menu #profile_menu=\"matMenu\">\n <button mat-menu-item (click)=\"onLogout()\"> Log Out</button>\n </mat-menu>\n </mat-toolbar>\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { LeftNavService } from '../../services/left-nav.service';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.css'\n})\nexport class LeftNavComponent {\n\n private _leftNavService: LeftNavService = inject(LeftNavService);\n\n getOptions() {\n return this._leftNavService.activeOptions;\n }\n\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnave-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, Input, OnInit, inject, InjectionToken } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HttpErrorResponse } from '@angular/common/http';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { UserService } from '../../services/user.service';\nimport { LoginUser } from './login-user';\n\nexport const LOGIN_USER = new InjectionToken<LoginUser>(\"Default login user - used for testing\");\n\n@Component({\n selector: 'lib-landing',\n imports: [FormsModule, MatCardModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, NgIf],\n templateUrl: './landing.component.html',\n styleUrl: './landing.component.css'\n})\nexport class LandingComponent implements OnInit {\n\n loginUser: LoginUser = inject(LOGIN_USER);\n loginError = \"\";\n\n @Input() message = \"\";\n private userService: UserService = inject(UserService);\n private router: Router = inject(Router);\n\n ngOnInit(): void {\n \n // This is a development version hack to 'autologin' to make it\n // easier to play around. The name will be empty at init time\n // for the production version.\n if (this.loginUser.name)\n {\n console.log(\"Have development login user\");\n this.login();\n }\n }\n\n login() {\n this.loginError = \"\";\n return this.userService.login(this.loginUser.name, this.loginUser.password).subscribe({\n next: () => this.onLoggedIn(),\n error: (error) => this.onLoginError(error)\n });\n }\n\n onLoginError(error: HttpErrorResponse) {\n console.log(\"Got login error\");\n console.log(error);\n this.loginError = \"There was an error logging in\";\n }\n\n onLoggedIn() {\n this.router.navigateByUrl(\"/home\");\n }\n\n}\n","\n <p *ngIf=\"message\">{{message}}</p>\n \n <mat-card style=\"text-align:center;\">\n <form class=\"base-form\" #loginForm=\"ngForm\" (ngSubmit)=\"login()\">\n <mat-card-content>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"loginUser.name\"\n name=\"username\"\n required>\n </mat-form-field>\n <mat-form-field class=\"form-field\">\n <input matInput\n placeholder=\"Password\"\n type=\"password\"\n [(ngModel)]=\"loginUser.password\"\n name=\"password\"\n required>\n </mat-form-field>\n </mat-card-content>\n <div *ngIf=\"loginError\" class=\"error\">\n <mat-icon>error</mat-icon><p>{{loginError}}</p>\n </div>\n <button mat-flat-button\n type=\"submit\"\n [disabled]=\"!loginForm.form.valid\">Log In</button>\n </form>\n </mat-card>\n\n\n \n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class DetailView<T extends Identifiable> {\n\n item?: T;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {}\n\n goBack(): void {\n this._location.back();\n }\n\n private getItem(): void {\n const id = Number(this._route.snapshot.paramMap.get('id'));\n this._restService.getItem(id)\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable();\n });\n }\n\n update() {\n if (!this.item) {\n return;\n }\n\n this._restService.putItem(this.item).subscribe(\n item => this.item = item);\n }\n}\n","import { ActivatedRoute } from '@angular/router'\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class EditView<T extends Identifiable> {\n\n item?: T;\n createMode = false;\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>\n\n constructor(_route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restServce: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restServce;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n save() {\n if (this.createMode) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n protected updateItem() {\n if (!this.item) {\n return;\n }\n this._restService.putItem(this.item).subscribe(\n item => this.onItemUpdated(item)\n );\n }\n\n protected createItem() {\n if (!this.item) {\n return;\n }\n this._restService.postItem(this.item).subscribe(\n item => this.onItemUpdated(item));\n }\n\n cancel() {\n this.goBack();\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n\n if (this.isCreateRoute()) {\n this.item = this.getTemplateItem();\n this.createMode = true;\n this.onItemAvailable();\n }\n else {\n const id_str = this._route.snapshot.paramMap.get('id');\n this._restService.getItem(Number(id_str))\n .subscribe(item => {\n this.item = item;\n this.onItemAvailable()\n });\n }\n }\n\n protected onItemUpdated(item: T) {\n this.item = item;\n this.goBack();\n }\n}\n","import { Location } from '@angular/common';\nimport { ActivatedRoute} from '@angular/router';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { UserService } from '../../services/user.service';\nimport { RestService } from '../../services/rest.service';\n\nexport class ListView<T extends Identifiable> {\n\n user?: IPortalMember;\n items: T[] = [];\n displayedColumns: string[] = [];\n protected _route: ActivatedRoute;\n protected _location: Location;\n protected _userService: UserService;\n protected _restService: RestService<T>;\n\n constructor(\n _route: ActivatedRoute,\n _location: Location,\n _userService: UserService,\n _restService: RestService<T>) {\n this._route = _route;\n this._location = _location;\n this._userService = _userService;\n this._restService = _restService;\n }\n\n onInit(): void {\n this.getItems();\n }\n\n getItems(): void {\n\n if (this.isSelfList()) {\n this._userService.loggedInUser.subscribe(\n user => {\n if (user) { this.onUserChange(user) }\n })\n }\n else {\n this._restService.get().subscribe(items => this.items = items);\n }\n }\n\n private onUserChange(user: IPortalMember) {\n this.user = user;\n this._restService.getForUser(this.user).subscribe(items => this.items = items);\n }\n\n protected isSelfList() {\n const url_segments = this._route.snapshot.url;\n if (url_segments.length == 2) {\n if (url_segments[1].path == \"self\") {\n return true;\n }\n }\n return false;\n }\n\n goBack(): void {\n this._location.back();\n }\n}\n\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [NgIf,\n RouterModule,\n MatButtonModule,\n MatIconModule],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMember> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n}\n","<div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n <mat-icon>arrow_back</mat-icon>\n </a>\n</div>\n \n<div class=\"container\">\n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"item_heading\">{{item.username}} </h3>\n <a mat-mini-fab\n class=\"btn-block\"\n [routerLink]=\"['/users/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n \n <div class=\"item_field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item_field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item_field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n \n </div> \n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router'\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { EditView } from '../../../base/edit-view';\nimport { PortalMember, IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-edit',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMember> {\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n protected override getTemplateItem(): IPortalMember\n {\n return new PortalMember();\n }\n\n\n \n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <form class=\"example-form\">\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n [(ngModel)]=\"item.username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n [(ngModel)]=\"item.email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n [(ngModel)]=\"item.first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form_field\">\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n [(ngModel)]=\"item.last_name\"\n name=\"last_name\">\n </mat-form-field>\n \n </form>\n \n <div style=\"margin:10px; padding:10px;display: flex; flex-direction: row\">\n <button mat-fab class=\"btn-block\" (click)=\"save()\" style=\"padding:10px\"><mat-icon>save</mat-icon></button>\n <button mat-fab class=\"btn-block\" (click)=\"cancel()\" style=\"padding:10px\"><mat-icon>cancel</mat-icon></button>\n </div>\n </div>\n \n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view';\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user',\n imports: [MatListModule, MatCardModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent extends ListView<IPortalMember> implements OnInit{\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n } \n}\n","<div class=\"container\">\n <mat-nav-list>\n @for (item of items; track item){\n <mat-card mat-list-item class=\"item-card\" [routerLink]=\"['/users/detail/', item.id]\" [routerLinkActive]=\"['is-active']\">\n <mat-card-header>\n <mat-card-title-group style=\"padding:5px\">\n <mat-card-title>{{item.first_name}} {{item.last_name}}</mat-card-title>\n <mat-card-subtitle>{{item.username}}</mat-card-subtitle>\n \n </mat-card-title-group>\n </mat-card-header>\n <mat-card-content>\n <p>Email: {{item.email}} </p>\n </mat-card-content>\n </mat-card>\n }\n </mat-nav-list>\n\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroup> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h1 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h1>\n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/groups/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a> \n </div>\n <div class=\"form_field\">{{item.name}}</div>\n </div>\n \n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-group',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent extends ListView<IGroup> implements OnInit {\n\n override displayedColumns: string[] = ['name']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ListView } from '../../../base/list-view'\nimport { Organization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization',\n imports: [\n MatTableModule,\n MatButtonModule,\n MatIconModule,\n RouterModule],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent extends ListView<Organization> implements OnInit {\n\n override displayedColumns: string[] = ['name', 'website', 'is_partner']\n\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n}\n","<div class=\"container\">\n <div>\n <table mat-table [dataSource]=\"items\" class=\"mat-elevation-z8\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"website\">\n <th mat-header-cell *matHeaderCellDef> Website </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.website}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"is_partner\">\n <th mat-header-cell *matHeaderCellDef> Is Partner </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.is_partner}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [routerLink]=\"row.id\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n <div class=\"button_container\">\n <a mat-fab class=\"btn-block\" [routerLink]=\"['create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgIf, Location } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { IOrganization } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [NgIf,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganization> {\n constructor() {\n super(inject(ActivatedRoute),\n inject(Location),\n inject(UserService),\n inject(OrganizationService));\n }\n}\n","<div class=\"container\">\n <div>\n <a mat-icon-button class=\"btn-block\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\"><mat-icon>arrow_back</mat-icon></a>\n </div>\n \n <div *ngIf=\"item\" class=\"item_view\">\n <div>\n <h3 class=\"mat-display-1\" style=\"display:inline\"> {{item.name}} </h3> \n <a mat-mini-fab class=\"btn-block\" [routerLink]=\"['/organizations/edit/', item.id]\">\n <mat-icon>edit</mat-icon>\n </a>\n </div>\n <div class=\"form_field\">{{item.description}}</div>\n <div class=\"form_field\"><h3>Address</h3>{{item.address}}</div>\n <div class=\"form_field\"><h3>Website</h3>{{item.website}}</div>\n </div>\n \n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/group.service';\nexport * from './lib/services/organization.service';\nexport * from './lib/services/left-nav.service';\n\nexport * from './lib/views/top-bar/top-bar.component';\nexport * from './lib/views/left-nav/left-nav.component';\nexport * from './lib/views/landing/landing.component';\nexport * from './lib/views/base/detail-view';\nexport * from './lib/views/base/edit-view';\nexport * from './lib/views/base/list-view';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i5","i4"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -127,15 +127,20 @@ interface NavOption {
|
|
|
127
127
|
name: string;
|
|
128
128
|
route: string;
|
|
129
129
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
groupService: GroupService;
|
|
133
|
-
groups: IGroup[];
|
|
130
|
+
interface NavGroup {
|
|
131
|
+
name: string;
|
|
134
132
|
options: NavOption[];
|
|
133
|
+
}
|
|
134
|
+
declare class LeftNavService {
|
|
135
|
+
activeOptions: Set<NavOption>;
|
|
136
|
+
private _groups;
|
|
137
|
+
private _defaultOptions;
|
|
138
|
+
private _groupService;
|
|
135
139
|
constructor();
|
|
136
140
|
onGroupsUpdated(groups: IGroup[]): void;
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
addNavGroup(group: NavGroup): void;
|
|
142
|
+
setDefaultOptions(options: NavOption[]): void;
|
|
143
|
+
setGroups(groups: NavGroup[]): void;
|
|
139
144
|
static ɵfac: i0.ɵɵFactoryDeclaration<LeftNavService, never>;
|
|
140
145
|
static ɵprov: i0.ɵɵInjectableDeclaration<LeftNavService>;
|
|
141
146
|
}
|
|
@@ -153,9 +158,8 @@ declare class TopBarComponent implements OnInit {
|
|
|
153
158
|
}
|
|
154
159
|
|
|
155
160
|
declare class LeftNavComponent {
|
|
156
|
-
private
|
|
157
|
-
|
|
158
|
-
getOptions(): ichec_angular_core.NavOption[];
|
|
161
|
+
private _leftNavService;
|
|
162
|
+
getOptions(): Set<ichec_angular_core.NavOption>;
|
|
159
163
|
static ɵfac: i0.ɵɵFactoryDeclaration<LeftNavComponent, never>;
|
|
160
164
|
static ɵcmp: i0.ɵɵComponentDeclaration<LeftNavComponent, "lib-left-nav", never, {}, {}, never, never, true, never>;
|
|
161
165
|
}
|
|
@@ -169,43 +173,41 @@ declare const LOGIN_USER: InjectionToken<LoginUser>;
|
|
|
169
173
|
declare class LandingComponent implements OnInit {
|
|
170
174
|
loginUser: LoginUser;
|
|
171
175
|
loginError: string;
|
|
176
|
+
message: string;
|
|
172
177
|
private userService;
|
|
173
178
|
private router;
|
|
174
|
-
constructor();
|
|
175
179
|
ngOnInit(): void;
|
|
176
180
|
login(): rxjs.Subscription;
|
|
177
181
|
onLoginError(error: HttpErrorResponse): void;
|
|
178
182
|
onLoggedIn(): void;
|
|
179
183
|
static ɵfac: i0.ɵɵFactoryDeclaration<LandingComponent, never>;
|
|
180
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LandingComponent, "lib-landing", never, {}, {}, never, never, true, never>;
|
|
184
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LandingComponent, "lib-landing", never, { "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
|
|
181
185
|
}
|
|
182
186
|
|
|
183
|
-
declare abstract class
|
|
187
|
+
declare abstract class DetailView<T extends Identifiable> {
|
|
184
188
|
item?: T;
|
|
185
189
|
protected _route: ActivatedRoute;
|
|
186
190
|
protected _location: Location;
|
|
187
191
|
protected _userService: UserService;
|
|
188
192
|
protected _restService: RestService<T>;
|
|
189
|
-
constructor();
|
|
190
|
-
|
|
193
|
+
constructor(_route: ActivatedRoute, _location: Location, _userService: UserService, _restService: RestService<T>);
|
|
194
|
+
onInit(): void;
|
|
191
195
|
onItemAvailable(): void;
|
|
192
196
|
onItemAndUserAvailable(_: IPortalMember): void;
|
|
193
197
|
goBack(): void;
|
|
194
198
|
private getItem;
|
|
195
199
|
update(): void;
|
|
196
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DetailViewComponent<any>, never>;
|
|
197
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DetailViewComponent<any>, "lib-detail-view", never, {}, {}, never, never, true, never>;
|
|
198
200
|
}
|
|
199
201
|
|
|
200
|
-
declare abstract class
|
|
202
|
+
declare abstract class EditView<T extends Identifiable> {
|
|
201
203
|
item?: T;
|
|
202
204
|
createMode: boolean;
|
|
203
205
|
protected _route: ActivatedRoute;
|
|
204
206
|
protected _location: Location;
|
|
205
207
|
protected _userService: UserService;
|
|
206
208
|
protected _restService: RestService<T>;
|
|
207
|
-
constructor();
|
|
208
|
-
|
|
209
|
+
constructor(_route: ActivatedRoute, _location: Location, _userService: UserService, _restServce: RestService<T>);
|
|
210
|
+
onInit(): void;
|
|
209
211
|
onItemAvailable(): void;
|
|
210
212
|
onItemAndUserAvailable(_: IPortalMember): void;
|
|
211
213
|
goBack(): void;
|
|
@@ -217,11 +219,9 @@ declare abstract class EditViewComponent<T extends Identifiable> implements OnIn
|
|
|
217
219
|
private isCreateRoute;
|
|
218
220
|
private getItem;
|
|
219
221
|
protected onItemUpdated(item: T): void;
|
|
220
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<EditViewComponent<any>, never>;
|
|
221
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EditViewComponent<any>, "lib-edit-view", never, {}, {}, never, never, true, never>;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
declare class
|
|
224
|
+
declare class ListView<T extends Identifiable> {
|
|
225
225
|
user?: IPortalMember;
|
|
226
226
|
items: T[];
|
|
227
227
|
displayedColumns: string[];
|
|
@@ -229,54 +229,61 @@ declare class ListViewComponent<T extends Identifiable> implements OnInit {
|
|
|
229
229
|
protected _location: Location;
|
|
230
230
|
protected _userService: UserService;
|
|
231
231
|
protected _restService: RestService<T>;
|
|
232
|
-
constructor();
|
|
233
|
-
|
|
232
|
+
constructor(_route: ActivatedRoute, _location: Location, _userService: UserService, _restService: RestService<T>);
|
|
233
|
+
onInit(): void;
|
|
234
234
|
getItems(): void;
|
|
235
235
|
private onUserChange;
|
|
236
236
|
protected isSelfList(): boolean;
|
|
237
237
|
goBack(): void;
|
|
238
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ListViewComponent<any>, never>;
|
|
239
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ListViewComponent<any>, "lib-table-view", never, {}, {}, never, never, true, never>;
|
|
240
238
|
}
|
|
241
239
|
|
|
242
|
-
declare class UserDetailComponent extends
|
|
240
|
+
declare class UserDetailComponent extends DetailView<IPortalMember> {
|
|
241
|
+
constructor();
|
|
243
242
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserDetailComponent, never>;
|
|
244
243
|
static ɵcmp: i0.ɵɵComponentDeclaration<UserDetailComponent, "lib-user-detail", never, {}, {}, never, never, true, never>;
|
|
245
244
|
}
|
|
246
245
|
|
|
247
|
-
declare class UserEditComponent extends
|
|
246
|
+
declare class UserEditComponent extends EditView<IPortalMember> {
|
|
247
|
+
constructor();
|
|
248
248
|
protected getTemplateItem(): IPortalMember;
|
|
249
249
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserEditComponent, never>;
|
|
250
250
|
static ɵcmp: i0.ɵɵComponentDeclaration<UserEditComponent, "lib-user-edit", never, {}, {}, never, never, true, never>;
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
declare class UserComponent extends
|
|
253
|
+
declare class UserComponent extends ListView<IPortalMember> implements OnInit {
|
|
254
|
+
constructor();
|
|
255
|
+
ngOnInit(): void;
|
|
254
256
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserComponent, never>;
|
|
255
257
|
static ɵcmp: i0.ɵɵComponentDeclaration<UserComponent, "lib-user", never, {}, {}, never, never, true, never>;
|
|
256
258
|
}
|
|
257
259
|
|
|
258
|
-
declare class GroupDetailComponent extends
|
|
260
|
+
declare class GroupDetailComponent extends DetailView<IGroup> {
|
|
261
|
+
constructor();
|
|
259
262
|
static ɵfac: i0.ɵɵFactoryDeclaration<GroupDetailComponent, never>;
|
|
260
263
|
static ɵcmp: i0.ɵɵComponentDeclaration<GroupDetailComponent, "lib-group-detail", never, {}, {}, never, never, true, never>;
|
|
261
264
|
}
|
|
262
265
|
|
|
263
|
-
declare class GroupComponent extends
|
|
266
|
+
declare class GroupComponent extends ListView<IGroup> implements OnInit {
|
|
264
267
|
displayedColumns: string[];
|
|
265
268
|
constructor();
|
|
269
|
+
ngOnInit(): void;
|
|
266
270
|
static ɵfac: i0.ɵɵFactoryDeclaration<GroupComponent, never>;
|
|
267
271
|
static ɵcmp: i0.ɵɵComponentDeclaration<GroupComponent, "lib-group", never, {}, {}, never, never, true, never>;
|
|
268
272
|
}
|
|
269
273
|
|
|
270
|
-
declare class OrganizationComponent extends
|
|
274
|
+
declare class OrganizationComponent extends ListView<Organization> implements OnInit {
|
|
271
275
|
displayedColumns: string[];
|
|
276
|
+
constructor();
|
|
277
|
+
ngOnInit(): void;
|
|
272
278
|
static ɵfac: i0.ɵɵFactoryDeclaration<OrganizationComponent, never>;
|
|
273
279
|
static ɵcmp: i0.ɵɵComponentDeclaration<OrganizationComponent, "lib-organization", never, {}, {}, never, never, true, never>;
|
|
274
280
|
}
|
|
275
281
|
|
|
276
|
-
declare class OrganizationDetailComponent extends
|
|
282
|
+
declare class OrganizationDetailComponent extends DetailView<IOrganization> {
|
|
283
|
+
constructor();
|
|
277
284
|
static ɵfac: i0.ɵɵFactoryDeclaration<OrganizationDetailComponent, never>;
|
|
278
285
|
static ɵcmp: i0.ɵɵComponentDeclaration<OrganizationDetailComponent, "lib-organization-detail", never, {}, {}, never, never, true, never>;
|
|
279
286
|
}
|
|
280
287
|
|
|
281
|
-
export { ApiError,
|
|
282
|
-
export type { IGroup, IOrganization, IPortalMember, Identifiable, LeftNavCategory, LeftNavOption, NavOption };
|
|
288
|
+
export { ApiError, DetailView, ENDPOINT_URL, EditView, ErrorCode, Group, GroupComponent, GroupDetailComponent, GroupService, LOGIN_USER, LandingComponent, LeftNavComponent, LeftNavService, ListView, Organization, OrganizationComponent, OrganizationDetailComponent, OrganizationService, PortalMember, RestService, TopBarComponent, UserComponent, UserDetailComponent, UserEditComponent, UserService };
|
|
289
|
+
export type { IGroup, IOrganization, IPortalMember, Identifiable, LeftNavCategory, LeftNavOption, NavGroup, NavOption };
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ichec-angular-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^20.1.1",
|
|
6
|
+
"@angular/core": "^20.1.1"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.3.0"
|