ichec-angular-core 0.0.13 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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/models/http.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.ts","../../../projects/ichec-angular-core/src/lib/views/landing/landing.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-record.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user-select/user-select.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user-select/user-select.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n profile_url: string;\n}\n\nexport class PortalMember implements IPortalMember {\n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n profile_url = \"\";\n\n constructor(params: Partial<IPortalMember> = {})\n {\n Object.assign(this, params);\n }\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 constructor(params: Partial<IOrganization> = {})\n {\n Object.assign(this, params);\n } \n}\n\n","export enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport interface OptionActionChoice {\n value: string;\n display_name: string;\n}\n\nexport interface OptionAction {\n label: string;\n type: string;\n required: boolean;\n read_only: boolean;\n max_length?: number;\n choices?: OptionActionChoice[];\n}\n\nexport interface IRestOptions {\n name: string;\n description: string;\n renders: string[];\n parses: string[];\n actions?: Record<string, Record<string, OptionAction>>;\n}\n\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nimport { Identifiable, IPortalMember } from '../models/core';\nimport { IRestOptions } from '../models/http';\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\nexport class RestService<T extends Identifiable> {\n\n constructor(private _url: string,\n protected _endpoint_url: string,\n protected _http: HttpClient) {}\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.getBaseUrl() + id + \"/\",\n { headers: this.getHeaders() }).pipe(\n map(_response => { return void (0); }),\n catchError(this.handleError));\n }\n\n getForUser(user: IPortalMember): Observable<T[]> {\n return this.get(\"?user=\" + user.id);\n }\n\n get(query = \"\"): Observable<T[]> {\n return this._http.get<T[]>(this.getBaseUrl() + query,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<T> {\n return this._http.get<T>(this.getBaseUrl() + id,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<T> {\n return this._http.get<T>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.getBaseUrl(),\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T> {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n postFile(id: number, field: string, file: File): Observable<T> {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n\n const form = new FormData();\n form.append(\"file\", file);\n return this._http.post(this.getBaseUrl() + id + \"/\" + field,\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]): Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any) {\n if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends RestService<IPortalMember> {\n\n /** Service to handle IPortalMember via REST and also handle logins.\n */ \n\n loggedInUser: BehaviorSubject<IPortalMember | null> = new BehaviorSubject<IPortalMember | null>(null);\n\n constructor() {\n super('members', inject(ENDPOINT_URL), inject(HttpClient));\n }\n\n login(username: string, password: string): Observable<void> {\n\n console.log(\"Attempting login\");\n const body = new URLSearchParams();\n body.set('username', username);\n body.set('password', password);\n const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });\n const api_auth_endpoint = this._endpoint_url + \"/api-token-auth/\"\n\n return this._http.post<TokenResponse>(api_auth_endpoint,\n body.toString(),\n { headers: headers }).pipe(\n map(token => this.onLoginToken(token)),\n mergeAll(),\n catchError(this.handleError));\n }\n\n logout() {\n if (this.loggedInUser === null) {\n return;\n }\n console.log(\"Logging out\")\n localStorage.removeItem(\"api_token\");\n this.loggedInUser.next(null);\n }\n\n private onLoginToken(token_response: TokenResponse): Observable<void> {\n console.log(\"Got login token - fetching corresponding user.\");\n localStorage.setItem(\"api_token\", token_response.token);\n return this.getItem(Number(token_response.user_id)).pipe(\n tap(user => this.onLoggedIn(user)),\n map(_response => {return void(0);}),\n catchError(this.handleError));\n }\n\n private onLoggedIn(user: IPortalMember) {\n console.log(\"Log in succesful for user: \" + user.username);\n this.loggedInUser.next(user);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service';\nimport { UserService } from './user.service';\nimport { IGroup, IPortalMember } from '../models/core';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends RestService<IGroup> {\n\n userService: UserService = inject(UserService);\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n \n constructor() {\n super(\"groups\", inject(ENDPOINT_URL), inject(HttpClient))\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n }\n\n private refreshUserItems(user: IPortalMember | null)\n {\n if (user)\n {\n this.getForUser(user).subscribe(items => this.userItems.next(items)); \n }\n else\n {\n this.userItems.next([]);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { RestService, ENDPOINT_URL } from './rest.service'\nimport { IOrganization } from '../models/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends RestService<IOrganization> {\n\n constructor() {\n super(\"organizations\", inject(ENDPOINT_URL), inject(HttpClient))\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroup } from '../models/core';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n}\n\nexport interface NavGroup\n{\n name: string;\n options: NavOption[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeOptions: Set<NavOption> = new Set<NavOption>();\n private _groups: NavGroup[] = [];\n private _defaultOptions: NavOption[] = [];\n private _groupService: GroupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroup[]) {\n this.activeOptions = new Set<NavOption>();\n this._defaultOptions.forEach(e => this.activeOptions.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n this.addNavGroup(n)};}));\n }\n\n addNavGroup(group: NavGroup) {\n group.options.forEach(o => this.activeOptions.add(o));\n }\n\n setDefaultOptions(options: NavOption[])\n {\n this._defaultOptions = options;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n}\n","import { Component, OnInit, input, inject, signal, WritableSignal} 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 \n readonly title = input<string>();\n protected user: WritableSignal<IPortalMember | null> = signal(null);\n\n private userService = inject(UserService);\n private leftNavService = inject(LeftNavService);\n\n ngOnInit(): void {\n this.userService.loggedInUser.subscribe(user => {\n this.user.set(user);\n });\n }\n\n onLogout() {\n this.userService.logout();\n }\n}\n","\n@if(user(); as user){\n<mat-toolbar style=\"height:60px\">\n <a mat-icon-button aria-label=\"Home\" [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 \n <button mat-icon-button aria-label=\"User Profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon>person</mat-icon>\n </button>\n\n <mat-menu #profile_menu=\"matMenu\">\n <button mat-menu-item (click)=\"onLogout()\">Log Out</button>\n </mat-menu>\n</mat-toolbar>\n}\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { LeftNavService } from '../../services/left-nav.service';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.css'\n})\nexport class LeftNavComponent {\n\n private _leftNavService: LeftNavService = inject(LeftNavService);\n\n getOptions() {\n return this._leftNavService.activeOptions;\n }\n\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet/>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, OnInit, inject, InjectionToken, input, WritableSignal, signal} 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: WritableSignal<string> = signal(\"\");\n message = input<string>();\n \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.set(\"\");\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:\", error);\n\n if (error.statusText == \"Unknown Error\")\n {\n this.loginError.set(\"There was an error logging in - server not reachable.\");\n }\n else\n {\n this.loginError.set(\"There was an error logging in.\");\n }\n\n }\n\n onLoggedIn() {\n this.router.navigateByUrl(\"/home\");\n }\n\n}\n","\n @if(message(); as message){\n <p>{{message}}</p>\n }\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 { signal, WritableSignal, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router'\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 protected item: WritableSignal<T | null> = signal(null);\n protected route: ActivatedRoute = inject(ActivatedRoute);\n protected userService: UserService = inject(UserService);\n protected restService: RestService<T>\n\n constructor(restService: RestService<T>) {\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 private getItem(): void {\n const id = Number(this.route.snapshot.paramMap.get('id'));\n this.restService.getItem(id).subscribe(item => {\n this.item.set(item);\n this.onItemAvailable();\n });\n }\n}\n","import { signal, WritableSignal, inject, computed } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { IRestOptions, OptionAction } from '../../models/http'; \nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class EditView<T extends Identifiable> {\n\n readonly typename: string = \"\";\n createMode = signal(false);\n heading = computed(() => { const prefix = this.createMode() ? \"New \" : \"Edit \"; return prefix + this.typename; });\n \n protected item: WritableSignal<T |null> = signal(null);\n protected _route = inject(ActivatedRoute);\n protected _location = inject(Location);\n protected _userService = inject(UserService);\n protected _restService: RestService<T>;\n\n constructor(_restServce: RestService<T>) {\n this._restService = _restServce;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable() {\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(user); } });\n }\n\n onItemAndUserAvailable(_: IPortalMember) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n submit() {\n if (this.item()) {\n this.save();\n }\n } \n\n save() {\n if (this.createMode()) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n cancel() {\n this.goBack();\n }\n\n protected fetchRestOptions()\n {\n this._restService.getOptions().subscribe(options => this.onOptions(options)); \n } \n\n protected onUploadedFileReady(_file: File)\n {\n }\n\n protected onFileRead(_content: string | ArrayBuffer)\n {\n }\n\n protected createItem() {\n const item = this.item();\n if (item) {\n this._restService.postItem(item).subscribe(\n item => this.saveFiles(item));\n }\n }\n \n protected updateItem()\n {\n const item = this.item();\n if(item)\n {\n this._restService.putItem(item).subscribe(\n item => this.saveFiles(item)); \n }\n }\n\n protected saveFiles(item: T)\n {\n this.onItemUpdated(item);\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (!urls)\n {\n return false;\n }\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n\n if (this.isCreateRoute()) {\n this.item.set(this.getTemplateItem());\n this.createMode.set(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.set(item);\n this.onItemAvailable()\n });\n }\n }\n\n protected onItemUpdated(item: T) {\n this.item.set(item);\n this.goBack();\n }\n\n protected onOptions(options: IRestOptions)\n {\n if (!options.actions)\n {\n return;\n }\n\n if ('POST' in options.actions)\n {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(_actions: Record<string, OptionAction>)\n {\n\n }\n}\n","import { signal, WritableSignal, inject } from '@angular/core';\nimport { 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 protected items: WritableSignal<T[]> = signal([]);\n displayedColumns: string[] = [];\n\n protected _route = inject(ActivatedRoute);\n protected _location = inject(Location);\n protected _userService = inject(UserService);\n protected _restService: RestService<T>;\n\n constructor(\n _restService: RestService<T>) {\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.set(items));\n }\n }\n\n private onUserChange(user: IPortalMember) {\n this.user = user;\n this._restService.getForUser(this.user).subscribe(items => this.items.set(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 { Location } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-back-button',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './back-button.component.html',\n styleUrl: './back-button.component.scss'\n})\nexport class BackButtonComponent {\n\n protected location = inject(Location);\n\n protected goBack(): void {\n this.location.back();\n }\n\n}\n","<a mat-icon-button class=\"padded-button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n<mat-icon>arrow_back</mat-icon>\n</a>\n\n","import { Component, input, computed } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-detail-header',\n imports: [RouterModule,\n MatButtonModule,\n MatIconModule],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss'\n})\nexport class DetailHeaderComponent {\n id = input<number>(0);\n text = input<string>(\"\");\n route = input<string>(\"\");\n fullRoute = computed(() => \"/\" + this.route() + \"s/edit/\");\n}\n","<div class=\"container\">\n <h3 class=\"header\">{{text()}}</h3>\n <a mat-mini-fab class=\"button\"\n [routerLink]=\"[fullRoute(), id()]\">\n <mat-icon>edit</mat-icon>\n </a>\n</div>\n","import { Component, input, output } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { IFileRecord } from './file-record';\n\nexport interface IPreview\n{\n name: string;\n content: string | ArrayBuffer;\n}\n\nexport interface IFileUpload\n{\n name: string;\n file: File;\n}\n\n@Component({\n selector: 'lib-file-upload',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './file-upload.component.html',\n styleUrl: './file-upload.component.scss'\n})\nexport class FileUploadComponent {\n\n files = input<IFileRecord[]>([]);\n previewLoaded = output<IPreview>();\n fileUploaded = output<IFileUpload>();\n\n protected onPreviewRead(name: string, content: string | ArrayBuffer) {\n this.previewLoaded.emit({name: name, content: content});\n }\n\n protected onFileUpload(name: string, event: Event) {\n if (!event.target)\n {\n return;\n }\n \n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n const file = input_element.files[0];\n this.fileUploaded.emit({name: name, file: file});\n\n const record = this.files().find(f => f.name == name);\n if (record && record.file_type == \"image\")\n {\n this.readFile(name, file);\n }\n }\n }\n\n protected readFile(name: string, file: File)\n {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => { if(reader.result){this.previewLoaded.emit(\n {name: name, content: reader.result})}; }; \n } \n}\n","<div class=\"container\">\n @for( file of files(); track file.name)\n {\n @if (file.local)\n {\n <div class=\"image_holder\">\n <p>Update {{file.display_name}}</p>\n <img alt=\"{{file.display_name}}\" src=\"{{file.local}}\" style=\"height:120px;\">\n </div> \n }\n @else\n {\n @if (file.remote){\n <div class=\"image_holder\">\n <p>Update {{file.display_name}}</p>\n <img alt=\"{{file.display_name}}\" src=\"{{file.remote}}\" style=\"height:120px;\">\n </div>\n }\n @else {\n <div>\n <span>Upload a {{file.display_name}}</span>\n </div> \n }\n \n }\n\n <div class=\"button-row\">\n <button mat-mini-fab (click)=\"fileInput.click()\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\" #fileInput (change)=\"onFileUpload(file.name, $event)\"/>\n </div> \n } \n</div>\n","export interface IFileRecord\n{\n name: string;\n display_name: string;\n file_type: string;\n file: File | null;\n remote: string;\n local: string | ArrayBuffer;\n}\n\nexport class FileRecord\n{\n name = \"\";\n display_name = \"\";\n file_type = \"standard\";\n file: File | null = null;\n remote = \"\";\n local: string | ArrayBuffer = \"\";\n\n constructor(params: Partial<IFileRecord> = {})\n {\n Object.assign(this, params);\n } \n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [NgIf,\n BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMember> implements OnInit {\n\n protected typename = \"user\";\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.username\"\n [id]=\"item.id\"\n [route]=\"typename\"></lib-detail-header>\n\n @if(item.profile_url){\n <div class=\"image-holder\">\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div> \n }\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 }\n</div>\n","import { Component, inject, OnInit, signal, WritableSignal } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\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';\n\nimport { EditView } from '../../../base/edit-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { FileUploadComponent, IFileUpload, IPreview } from '../../../base/file-upload/file-upload.component';\n\nimport { PortalMember, IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { FileRecord, IFileRecord } from '../../../base/file-upload/file-record';\n\n\n@Component({\n selector: 'lib-user-edit',\n imports: [NgIf,\n ReactiveFormsModule,\n MatButtonModule,\n BackButtonComponent,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n FileUploadComponent\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMember> implements OnInit {\n\n override readonly typename: string = \"User\";\n files: WritableSignal<IFileRecord[]> = signal([new FileRecord({name: \"image\",\n display_name: \"Profile Image\",\n file_type: \"image\"})]);\n private formBuilder = inject(FormBuilder);\n form = this.formBuilder.group({\n username: [''],\n email: [''],\n first_name: [''],\n last_name: [''],\n phone: ['']\n });\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n override onItemAvailable() {\n const item = this.item();\n if (!item) {\n return;\n }\n this.form.setValue({\n username: item.username,\n email: item.email,\n first_name: item.first_name,\n last_name: item.last_name,\n phone: item.phone\n });\n\n if (item.profile_url)\n {\n this.files.update(files => {const file = files.find(f => f.name === \"image\"); if(file){file.remote = item.url + item.profile_url}; return files;}); \n }\n\n super.onItemAvailable();\n }\n\n override submit() {\n this.item.update((item) => { if (item) { item = this.updateFromForm(item); } return item; });\n console.log(this.item());\n super.submit();\n }\n\n updateFromForm(item: IPortalMember): IPortalMember {\n item.username = this.form.value.username || \"\";\n item.email = this.form.value.email || \"\";\n item.first_name = this.form.value.first_name || \"\";\n item.last_name = this.form.value.last_name || \"\";\n item.phone = this.form.value.phone || \"\";\n return item;\n }\n\n protected override getTemplateItem(): IPortalMember {\n return new PortalMember();\n }\n\n \n onPreviewLoaded(preview: IPreview)\n {\n this.files.update(files => {const file = files.find(f => f.name === preview.name); if(file){file.local = preview.content}; return files;}); \n }\n\n onFileUploaded(upload: IFileUpload)\n {\n this.files.update(files => {const file = files.find(f => f.name === upload.name); if(file){file.file = upload.file}; return files;}); \n }\n\n protected override saveFiles(item: IPortalMember) {\n this.files().forEach(record => {if(record.file){this._restService.postFile(item.id, record.name, record.file).subscribe(item => this.onItemUpdated(item));};});\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-edit-container\">\n\n <h1 class=\"item-edit-header\">{{heading()}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n formControlName=\"username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n formControlName=\"email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n formControlName=\"first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n formControlName=\"last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <lib-file-upload [files]=\"files()\"\n (previewLoaded)=\"onPreviewLoaded($event)\"\n (fileUploaded)=\"onFileUploaded($event)\"></lib-file-upload>\n \n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div>\n \n </form>\n </div>\n }\n</div>\n","import { Component, OnInit, inject } 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 { 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(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n } \n}\n","<div class=\"content-container\">\n <mat-nav-list>\n @for (item of items(); track item.id){\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 </mat-card-title-group>\n </mat-card-header>\n \n <mat-card-content>\n <p>Email: {{item.email}} </p>\n </mat-card-content>\n </mat-card>\n }\n </mat-nav-list>\n\n</div>\n","import { Component, viewChild, input, output, signal, WritableSignal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgIf, NgFor } from '@angular/common';\n\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { IPortalMember } from '../../../models/core';\n\n@Component({\n selector: 'lib-user-select',\n imports: [NgFor, NgIf, MatTableModule,\n MatFormFieldModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n FormsModule],\n templateUrl: './user-select.component.html',\n styleUrl: './user-select.component.css'\n})\nexport class UserSelectComponent {\n\n toAdd: WritableSignal<number> = signal(0);\n selected = input<IPortalMember[]>([]);\n options = input<IPortalMember[]>([]);\n itemAdded = output<number>();\n itemRemoved = output<number>();\n \n table = viewChild(MatTable);\n tableColumns = [\"first_name\", \"last_name\", \"email\", \"remove\"];\n\n remove(id: number) {\n this.itemRemoved.emit(id);\n this.table()?.renderRows();\n }\n\n add() {\n this.itemAdded.emit(this.toAdd());\n this.table()?.renderRows();\n }\n}\n","<div class='select-container'>\n <p style=\"padding:5px\">\n <b>Members</b>\n </p>\n \n <div>\n <mat-form-field>\n <mat-label>Add Member</mat-label>\n <mat-select [(ngModel)]=\"toAdd\" name=\"to_add\">\n @for(item of options(); track item.id){\n <mat-option [value]=\"item.id\">{{item.username}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n \n <button mat-mini-fab\n type=\"button\"\n class=\"form_action_button\"\n (click)=\"add()\">\n <mat-icon>add\n </mat-icon>\n </button>\n </div>\n\n @if(selected().length > 0){\n <table mat-table [dataSource]=\"selected()\" class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"first_name\">\n <th mat-header-cell *matHeaderCellDef>First Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.first_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>\n Last Name\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.last_name}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef>\n Email\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element.email}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove an item\"\n (click)=\"remove(element.id)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row\n *matHeaderRowDef=\"tableColumns\">\n </tr>\n <tr mat-row\n *matRowDef=\"let row; columns: tableColumns;\">\n </tr>\n </table>\n }\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [NgIf,\n BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroup> implements OnInit {\n\n protected typename = \"group\";\n\n constructor() {\n super(inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n @if(item(); as item) {\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [route]=\"typename\"></lib-detail-header>\n \n <div class=\"item-field\">{{item.name}}</div>\n </div>\n }\n</div>\n","import { Component, OnInit, inject } 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 { ListView } from '../../../base/list-view'\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.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(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<div class=\"tabular-list-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]=\"['/groups/detail/', row.id]\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n </table>\n </div>\n</div>\n","import { Component, OnInit, inject } 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 { ListView } from '../../../base/list-view'\nimport { Organization } from '../../../../models/core';\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(OrganizationService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n}\n","<div class=\"tabular-list-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]=\"['/organizations/detail/', row.id]\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n\n </table>\n </div>\n \n <div class=\"button-container\">\n <a mat-fab class=\"padded-button\" [routerLink]=\"['create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { IOrganization } from '../../../../models/core';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [NgIf,\n BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganization> implements OnInit {\n\n typename = \"organization\";\n \n constructor() {\n super(inject(OrganizationService));\n }\n\n ngOnInit()\n {\n this.onInit();\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [route]=\"typename\"></lib-detail-header>\n\n\n <div class=\"item-field\">\n {{item.description}}\n </div>\n \n <div class=\"item-field\">\n <h3>Address</h3>{{item.address}}\n </div>\n \n <div class=\"item-field\">\n <h3>Website</h3>{{item.website}}\n </div>\n </div>\n }\n</div>\n","import { Component, OnInit, WritableSignal, inject, signal } from '@angular/core';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { EditView } from '../../../base/edit-view';\nimport { Organization, IOrganization, IPortalMember, } from '../../../../models/core';\nimport { OptionActionChoice, OptionAction } from '../../../../models/http';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { UserSelectComponent } from '../../user-select/user-select.component';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [NgIf, NgFor,\n UserSelectComponent,\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule,\n BackButtonComponent],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganization> implements OnInit {\n\n countryOptions: WritableSignal<string[]> = signal([]);\n candidateMembers: WritableSignal<IPortalMember[]> = signal([]);\n selectedMembers: WritableSignal<IPortalMember[]> = signal([]);\n override readonly typename: string = \"Organization\";\n\n private formBuilder = inject(FormBuilder);\n form = this.formBuilder.group({name: [''],\n acronym: [''],\n description: [''],\n address: [''],\n website: [''],\n country: ['']});\n\n constructor() {\n super(inject(OrganizationService)\n );\n }\n\n ngOnInit() {\n this.onInit();\n this.fetchRestOptions();\n }\n\n override onItemAndUserAvailable(_: IPortalMember) {\n const item = this.item();\n\n if (item) {\n this.form.setValue({name: item.name,\n acronym: item.acronym,\n description: item.description,\n address: item.address,\n website: item.website,\n country: item.country \n });\n\n this._userService.get(\"?organization=\" + item.id).subscribe(users => this.selectedMembers.set(users));\n this._userService.get().subscribe(users => this.candidateMembers.set(users));\n }\n }\n\n override submit(){\n this.item.update((item) => { if(item){item = this.updateFromForm(item);} return item;});\n super.submit();\n }\n\n updateFromForm(item: IOrganization): IOrganization\n {\n item.name = this.form.value.name || \"\";\n item.acronym = this.form.value.acronym || \"\";\n item.description = this.form.value.description || \"\";\n item.address = this.form.value.address || \"\";\n item.website = this.form.value.website || \"\";\n item.country = this.form.value.country || \"\";\n return item;\n }\n\n protected override getTemplateItem(): IOrganization {\n return new Organization();\n }\n\n protected override onPostActions(actions: Record<string, OptionAction>) {\n if ('country' in actions && actions['country'].choices) {\n this.onCountryChoices(actions['country'].choices);\n }\n }\n\n protected onCountryChoices(choices: OptionActionChoice[]) {\n this.countryOptions.update(() => choices.map(c => c.display_name));\n }\n\n onMemberRemoved(id: number) {\n const url = this.selectedMembers().find(m => m.id == id)!.url;\n this.selectedMembers.update(members => members.filter(m => m.id != id));\n this.item.update(item => { if (item) { item.members.filter(m => m != url); } return item; });\n }\n\n onMemberAdded(id: number) {\n const selected = this.candidateMembers().find(m => m.id == id);\n if (selected) {\n this.selectedMembers.update(members => { members.push(selected); return members; });\n }\n this.candidateMembers.update(members => members.filter(m => m.id != id));\n\n const url = this.selectedMembers().find(m => m.id == id)!.url;\n this.item.update(item => { if (item) { item.members.push(url); } return item; });\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-edit-container\">\n \n <h1 class=\"item-edit-header\">{{heading()}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label *ngIf=\"!createMode()\" for=\"name\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n id=\"name\"\n formControlName=\"name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label *ngIf=\"!createMode()\" for=\"acronym\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n id=\"acronym\"\n formControlName=\"acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label *ngIf=\"!createMode()\" for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n id=\"description\"\n formControlName=\"description\"\n name=\"description\"\n class=\"medium-textarea\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label *ngIf=\"!createMode()\" for=\"address\">Address</mat-label>\n <textarea matInput placeholder=\"Address\"\n type=\"text\"\n id=\"address\"\n formControlName=\"address\"\n name=\"address\"\n required></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label *ngIf=\"!createMode()\" for=\"country\">Country</mat-label>\n <mat-select formControlName=\"country\" name=\"country\" id=\"country\" required>\n @for(country of countryOptions(); track $index){\n <mat-option [value]=\"country\">{{country}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <lib-user-select [selected]=\"selectedMembers()\"\n [options]=\"candidateMembers()\"\n (itemAdded)=\"onMemberAdded($event)\"\n (itemRemoved)=\"onMemberRemoved($event)\">\n </lib-user-select>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.valid\">\n <mat-icon>save</mat-icon>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n \n </form>\n </div>\n }\n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/http';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/group.service';\nexport * from './lib/services/organization.service';\nexport * from './lib/services/left-nav.service';\n\nexport * from './lib/views/top-bar/top-bar.component';\nexport * from './lib/views/left-nav/left-nav.component';\nexport * from './lib/views/landing/landing.component';\nexport * from './lib/views/base/detail-view';\nexport * from './lib/views/base/edit-view';\nexport * from './lib/views/base/list-view';\nexport * from './lib/views/base/back-button/back-button.component';\nexport * from './lib/views/base/detail-header/detail-header.component';\nexport * from './lib/views/base/file-upload/file-upload.component';\nexport * from './lib/views/base/file-upload/file-record';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/user-select/user-select.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\nexport * from './lib/views/api/organization/edit/organization-edit.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i2","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/models/organization.ts","../../../projects/ichec-angular-core/src/lib/models/http.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/item.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/address.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/base/select-table/select-table.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/select-table.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list-table-view/list-table-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-table-view/list-table-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list-scroll-view/list-scroll-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list-scroll-view/list-scroll-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.html","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list-data-source.ts","../../../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/base/detail-header/detail-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-record.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-detail/user-list-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list-detail/user-list-detail.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/address/edit/address-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["export interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPaginated<T extends Identifiable>{\n count: number;\n next: string | null;\n previous: string | null;\n results: T[];\n}\n\nexport class Paginated<T extends Identifiable> implements IPaginated<T>{\n count = 0;\n next = null;\n previous = null;\n results: T[] = [];\n}\n\nexport interface IPermission extends Identifiable{\n codename: string;\n}\n\nexport class Permission implements IPermission {\n id = 0;\n url = \"\";\n codename = \"\";\n static typename = \"permission\";\n static plural = \"permissions\";\n\n constructor(params: Partial<IPermission> = {})\n {\n Object.assign(this, params);\n }\n}\n\nexport interface IPortalMember extends Identifiable {\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n organization: string;\n profile_url: string;\n all_permissions: string[];\n}\n\nexport class PortalMember implements IPortalMember {\n\n static typename = \"member\";\n static plural = \"members\";\n \n id = 0;\n url = \"\";\n username = \"\";\n email = \"\";\n first_name = \"\";\n last_name = \"\";\n phone = \"\";\n organization = \"\";\n profile_url = \"\";\n all_permissions = [];\n\n constructor(params: Partial<IPortalMember> = {})\n {\n Object.assign(this, params);\n }\n}\n\nexport interface IGroup extends Identifiable {\n name: string;\n}\n\n\nexport class Group implements IGroup {\n\n static typename = \"group\";\n static plural = \"groups\";\n \n name = \"\";\n url = \"\";\n id = 0;\n\n constructor(params: Partial<IGroup> = {})\n {\n Object.assign(this, params);\n } \n}\n\n","import { Identifiable } from \"./core\";\n\nexport interface ICountry {\n name: string \n code: string \n flag: string\n}\n\nexport interface IAddress extends Identifiable {\n line1: string;\n line2: string;\n line3: string;\n city: string;\n region: string;\n postcode: string;\n country: string;\n country_name: string;\n country_flag: string;\n}\n\nexport class Address implements IAddress {\n\n static typename = \"address\";\n static plural = \"addresses\";\n \n id = 0;\n url = \"\";\n line1 = \"\";\n line2 = \"\";\n line3 = \"\";\n city = \"\";\n region = \"\";\n postcode = \"\";\n country = \"\";\n country_name = \"\";\n country_flag = \"\";\n members: string[] = [];\n\n constructor(params: Partial<IAddress> = {})\n {\n Object.assign(this, params);\n } \n}\n\n\nexport interface IOrganization extends Identifiable {\n name: string;\n acronym: string;\n description: string;\n address: string;\n website: string;\n members: string[];\n}\n\nexport class Organization implements IOrganization {\n\n static typename = \"organization\";\n static plural = \"organizations\";\n \n id = 0;\n url = \"\";\n name = \"\";\n acronym = \"\";\n description = \"\";\n address = \"\";\n website = \"\";\n members: string[] = [];\n\n constructor(params: Partial<IOrganization> = {})\n {\n Object.assign(this, params);\n } \n}","export interface IItemQuery\n{\n queries: Map<string, string>;\n page: number;\n page_size: number;\n sort_field: string;\n sort_order: string;\n filter_field: string;\n filter: string;\n}\n\nexport class ItemQuery\n{\n queries = new Map<string, string>();\n page = 0;\n page_size = 0;\n sort_field = \"\";\n sort_order = \"\";\n filter_field = \"\";\n filter = \"\";\n\n constructor(params: Partial<IItemQuery> = {})\n {\n Object.assign(this, params);\n }\n}\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport interface OptionActionChoice {\n value: string;\n display_name: string;\n}\n\nexport interface OptionAction {\n label: string;\n type: string;\n required: boolean;\n read_only: boolean;\n max_length?: number;\n choices?: OptionActionChoice[];\n}\n\nexport interface IRestOptions {\n name: string;\n description: string;\n renders: string[];\n parses: string[];\n actions?: Record<string, Record<string, OptionAction>>;\n}\n\n","import { Observable, catchError, map, mergeMap, throwError, tap } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken, inject } from '@angular/core';\n\nimport { Identifiable, IPaginated, IPortalMember } from '../models/core';\nimport { IRestOptions, IItemQuery, ItemQuery } from '../models/http';\n\nexport const ENDPOINT_URL = new InjectionToken<string>(\"Default endpoint url\");\n\n\nexport class RestService<T extends Identifiable> {\n\n readonly _url: string = \"\";\n protected _endpoint_url = inject(ENDPOINT_URL);\n protected _http = inject(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, query: IItemQuery = new ItemQuery()): Observable<IPaginated<T>> {\n query.queries.set('user', user.id.toString());\n return this.get(query);\n }\n\n get(query: IItemQuery = new ItemQuery()): Observable<IPaginated<T>> {\n\n const params = query.queries;\n if (query.page > 0) {\n params.set('page', query.page.toString());\n }\n if (query.page_size > 0) {\n params.set('page_size', query.page_size.toString());\n }\n if (query.sort_field)\n {\n let sort_field = query.sort_field;\n if (query.sort_order === \"desc\")\n {\n sort_field = \"-\" + sort_field;\n }\n params.set('ordering', sort_field);\n }\n if (query.filter_field)\n {\n params.set('search_field', query.filter_field);\n }\n if (query.filter)\n {\n params.set('search', query.filter);\n }\n console.log(params);\n return this._http.get<IPaginated<T>>(this.getBaseUrl(),\n {\n headers: this.getHeaders(),\n params: new HttpParams({ fromObject: Object.fromEntries(params) })\n }).pipe(\n tap(response => console.log(response)),\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 getPaginatedUrl(url: string): Observable<IPaginated<T>> {\n return this._http.get<IPaginated<T>>(url,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.getBaseUrl(),\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n putItem(item: T, content_type = \"application/json\"): Observable<T> {\n return this._http.put<T>(this.getBaseUrl() + item.id + \"/\",\n item,\n { headers: this.getHeaders(content_type) }).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<T> {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n return this._http.patch(this.getMediaUrl() + id + \"/\",\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n postFile(id: number, field: string, file: File): Observable<T> {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n const headers = new HttpHeaders({\n 'Authorization': token,\n 'Accept': 'application/json'\n });\n\n const form = new FormData();\n form.append(\"file\", file);\n return this._http.post(this.getBaseUrl() + id + \"/\" + field,\n form,\n { headers: headers }).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n patchItem(item: T, include_keys: string[], exclude_keys: string[]): Observable<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any) {\n if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\n return value;\n }\n }\n return this._http.patch(this.getBaseUrl() + item.id + \"/\",\n JSON.stringify(item, replacer),\n { headers: this.getHeaders() }).pipe(\n map(response => response as T),\n catchError(this.handleError));\n }\n\n postItem(item: T): Observable<T> {\n return this._http.post<T>(this.getBaseUrl(),\n item,\n { headers: this.getHeaders() }).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"application/json\"): HttpHeaders {\n const token = \"Token \" + localStorage.getItem(\"api_token\");\n return new HttpHeaders({\n 'Authorization': token,\n 'Content-Type': content_type,\n 'Accept': 'application/json'\n });\n }\n\n private getBaseUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private getMediaUrl(): string {\n return this._endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Observable, map } from 'rxjs';\n\nimport { Identifiable} from '../models/core';\nimport { RestService } from './rest.service';\n\nexport class ItemService<T extends Identifiable> extends RestService<T>{\n\n itemType = \"\";\n \n canEdit(): boolean\n {\n return false;\n }\n\n canCreate(): boolean\n {\n return false;\n }\n\n canDelete(): boolean\n {\n return false;\n }\n\n canView(): boolean\n {\n return false;\n }\n\n instantiateType(_: T): T\n {\n throw new Error('Not Implemented'); \n }\n\n override getItem(id: number): Observable<T> {\n return super.getItem(id).pipe(map(x => this.instantiateType(x)));\n }\n}\n","import { Observable, BehaviorSubject, tap, map, mergeAll, catchError } from 'rxjs';\n\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\n\nimport { ItemService } from './item.service';\nimport { PortalMember, IPortalMember } from '../models/core';\n\ninterface TokenResponse {\n user_id: string;\n token: string;\n}\n\ninterface IPermission{\n feature: string;\n capability: string;\n}\n\nexport class ResolvedPermission{\n canEdit = false;\n canAdd = false;\n canView = false;\n canDelete = false;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class UserService extends ItemService<IPortalMember> {\n\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 override readonly _url = PortalMember.plural;\n override itemType = PortalMember.plural;\n\n private permissions: Map<string, ResolvedPermission> = new Map<string, ResolvedPermission>();\n\n override instantiateType(item: IPortalMember): IPortalMember {\n return new PortalMember(item);\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 hasAddPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canAdd;\n }\n\n hasDeletePermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canDelete;\n } \n\n hasEditPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canEdit;\n } \n\n hasViewPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canView;\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 successful for user: \" + user.username);\n this.loggedInUser.next(user);\n this.processPermissions();\n }\n\n private parsePermission(p: string) : IPermission\n {\n const split_module = p.split(\".\");\n const split_cap = split_module[split_module.length -1].split(\"_\");\n return {feature: split_cap[1], capability: split_cap[0]};\n }\n\n private processPermissions()\n {\n const user = this.loggedInUser.value;\n if (!user)\n {\n return;\n }\n\n user.all_permissions.forEach(p => this.permissions.set(\n this.parsePermission(p).feature, new ResolvedPermission()));\n\n user.all_permissions.forEach(p => {\n const permission = this.parsePermission(p);\n if (permission.capability === \"view\")\n {\n this.permissions.get(permission.feature)!.canView = true;\n }\n else if (permission.capability === \"delete\")\n {\n this.permissions.get(permission.feature)!.canDelete = true;\n }\n else if (permission.capability === \"change\")\n {\n this.permissions.get(permission.feature)!.canEdit = true;\n }\n else if (permission.capability === \"add\")\n {\n this.permissions.get(permission.feature)!.canAdd = true;\n }\n });\n console.log(\"Got permissions:\", this.permissions);\n\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ItemService } from './item.service';\nimport { Address, IAddress } from '../models/organization';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService extends ItemService<IAddress> {\n\n override readonly _url = Address.plural;\n override itemType = Address.plural;\n \n override instantiateType(item: IAddress): IAddress\n {\n return new Address(item);\n } \n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ItemService } from './item.service';\nimport { UserService } from './user.service';\nimport { Group, IGroup, IPortalMember } from '../models/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends ItemService<IGroup> {\n\n userService: UserService = inject(UserService);\n userItems: BehaviorSubject<IGroup[]> = new BehaviorSubject<IGroup[]>([]);\n\n override readonly _url = Group.plural;\n override itemType = Group.plural;\n \n constructor() {\n super();\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.results)); \n }\n else\n {\n this.userItems.next([]);\n }\n }\n\n override instantiateType(item: IGroup): IGroup\n {\n return new Group(item);\n } \n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { ItemService } from './item.service'\nimport { Organization, IOrganization } from '../models/organization'\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends ItemService<IOrganization> {\n\n override readonly _url = Organization.plural;\n override itemType = Organization.plural;\n private userService = inject(UserService);\n\n override instantiateType(item: IOrganization): IOrganization\n {\n return new Organization(item);\n }\n \n override canCreate(): boolean {\n return this.userService.hasAddPermission(Organization.typename);\n }\n\n override canView(): boolean {\n return this.userService.hasViewPermission(Organization.typename);\n }\n\n override canEdit(): boolean {\n return this.userService.hasEditPermission(Organization.typename);\n }\n\n override canDelete(): boolean {\n return this.userService.hasDeletePermission(Organization.typename);\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, OnInit, input, inject, signal, WritableSignal} 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 \n readonly title = input<string>();\n protected user: WritableSignal<IPortalMember | null> = signal(null);\n\n private userService = inject(UserService);\n private leftNavService = inject(LeftNavService);\n\n ngOnInit(): void {\n this.userService.loggedInUser.subscribe(user => {\n this.user.set(user);\n });\n }\n\n onLogout() {\n this.userService.logout();\n }\n}\n","\n@if(user(); as user){\n<mat-toolbar style=\"height:60px\">\n <a mat-icon-button aria-label=\"Home\" [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 \n <button mat-icon-button aria-label=\"User Profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon>person</mat-icon>\n </button>\n\n <mat-menu #profile_menu=\"matMenu\">\n <button mat-menu-item (click)=\"onLogout()\">Log Out</button>\n </mat-menu>\n</mat-toolbar>\n}\n","import { Component, inject, viewChild } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule, MatSidenavContent } 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 sideNavContent = viewChild(MatSidenavContent);\n\n getOptions() {\n return this._leftNavService.activeOptions;\n }\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" opened>\n <mat-nav-list>\n @for (option of getOptions(); track option) {\n <a mat-list-item [routerLink]=\"option.route\" [routerLinkActive]=\"['is-active']\">{{ option.name }}</a>\n }\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\"> \n <router-outlet />\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component, OnInit, inject, InjectionToken, input, WritableSignal, signal} 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: WritableSignal<string> = signal(\"\");\n message = input<string>();\n \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.set(\"\");\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:\", error);\n\n if (error.statusText == \"Unknown Error\")\n {\n this.loginError.set(\"There was an error logging in - server not reachable.\");\n }\n else\n {\n this.loginError.set(\"There was an error logging in.\");\n }\n\n }\n\n onLoggedIn() {\n this.router.navigateByUrl(\"/home\");\n }\n\n}\n","\n @if(message(); as message){\n <p>{{message}}</p>\n }\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 { signal, WritableSignal, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router'\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { ItemService } from '../../services/item.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class DetailView<T extends Identifiable> {\n\n protected item: WritableSignal<T | null> = signal(null);\n protected route: ActivatedRoute = inject(ActivatedRoute);\n protected userService: UserService = inject(UserService);\n protected itemService: ItemService<T>\n\n constructor(itemService: ItemService<T>) {\n this.itemService = itemService;\n }\n \n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable(item: T) {\n this.item.set(item);\n this.userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(item, user); } });\n }\n\n onItemAndUserAvailable(_item: T, _user: IPortalMember) {}\n\n private getItem(): void {\n const id = Number(this.route.snapshot.paramMap.get('id'));\n this.itemService.getItem(id).subscribe(item => {\n this.onItemAvailable(item);\n });\n }\n\n onDelete(): void\n {\n const item = this.item();\n if (item)\n {\n this.itemService.deleteItem(item.id);\n }\n }\n\n protected canEdit(): boolean\n {\n return this.itemService.canEdit();\n }\n\n protected canDelete(): boolean\n {\n return this.itemService.canDelete();\n }\n}\n","import { signal, WritableSignal, inject, computed } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IPortalMember } from '../../models/core';\nimport { IRestOptions, OptionAction } from '../../models/http'; \nimport { RestService } from '../../services/rest.service';\nimport { UserService } from '../../services/user.service';\n\nexport abstract class EditView<T extends Identifiable> {\n\n readonly typename: string = \"\";\n createMode = signal(false);\n heading = computed(() => { const prefix = this.createMode() ? \"New \" : \"Edit \"; return prefix + this.typename; });\n \n protected item: WritableSignal<T |null> = signal(null);\n protected _route = inject(ActivatedRoute);\n protected _location = inject(Location);\n protected _userService = inject(UserService);\n protected _restService: RestService<T>;\n\n constructor(_restService: RestService<T>) {\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\n goBack(): void {\n this._location.back();\n }\n\n submit() {\n if (this.item()) {\n this.save();\n }\n } \n\n save() {\n if (this.createMode()) {\n this.createItem();\n }\n else {\n this.updateItem();\n }\n }\n\n cancel() {\n this.goBack();\n }\n\n protected fetchRestOptions()\n {\n this._restService.getOptions().subscribe(options => this.onOptions(options)); \n } \n\n protected onUploadedFileReady(_file: File)\n {\n }\n\n protected onFileRead(_content: string | ArrayBuffer)\n {\n }\n\n protected createItem() {\n const item = this.item();\n if (item) {\n this._restService.postItem(item).subscribe(\n item => this.saveFiles(item));\n }\n }\n \n protected updateItem()\n {\n const item = this.item();\n if(item)\n {\n this._restService.putItem(item).subscribe(\n item => this.saveFiles(item)); \n }\n }\n\n protected saveFiles(item: T)\n {\n this.onItemUpdated(item);\n }\n\n protected abstract getTemplateItem(): T\n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (!urls)\n {\n return false;\n }\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n\n if (this.isCreateRoute()) {\n this.item.set(this.getTemplateItem());\n this.createMode.set(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.set(item);\n this.onItemAvailable()\n });\n }\n }\n\n protected onItemUpdated(item: T) {\n this.item.set(item);\n this.goBack();\n }\n\n protected onOptions(options: IRestOptions)\n {\n if (!options.actions)\n {\n return;\n }\n\n if ('POST' in options.actions)\n {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(_actions: Record<string, OptionAction>)\n {\n\n }\n}\n","import { signal, inject } from '@angular/core';\nimport { ActivatedRoute} from '@angular/router';\n\nimport { IPortalMember } from '../../models/core';\nimport { UserService } from '../../services/user.service';\n\nexport class ListView {\n\n protected _route = inject(ActivatedRoute);\n protected userService = inject(UserService);\n protected user = signal<IPortalMember | null>(null);\n\n getUser()\n {\n this.userService.loggedInUser.subscribe(\n user => {\n if (user) { this.user.set(user) }\n })\n }\n\n protected isSelfList() {\n const url_segments = this._route.snapshot.url;\n return (url_segments.length == 2) && (url_segments[1].path == \"self\")\n }\n}\n\n","import { Component, viewChild, input, output, computed, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { Identifiable } from '../../../models/core';\nimport { TableColumn } from '../list-table-view/list-table-view.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInputModule } from '@angular/material/input';\n\nexport interface Selectable<T extends Identifiable>\n{\n title: string;\n item: T;\n}\n\n@Component({\n selector: 'lib-select-table',\n imports: [MatTableModule,\n MatFormFieldModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatInputModule],\n templateUrl: './select-table.component.html',\n styleUrl: './select-table.component.css'\n})\nexport class SelectTableComponent<T extends Identifiable> implements OnInit{\n\n itemType = input(\"\");\n selected = input<T[]>([]);\n options = input<Selectable<T>[]>([]);\n\n columns = input<TableColumn[]>([]);\n\n itemAdded = output<string>();\n itemRemoved = output<number>();\n searchChanged = output<string | null>();\n\n columnNames = computed(() => this.columns().map(c => c.name));\n searchControl = new FormControl('');\n\n table = viewChild(MatTable);\n\n ngOnInit(): void {\n this.searchControl.valueChanges.subscribe(value => this.searchChanged.emit(value));\n }\n\n remove(id: number) {\n this.itemRemoved.emit(id);\n this.table()?.renderRows();\n }\n\n add() {\n if (this.searchControl.value)\n {\n this.itemAdded.emit(this.searchControl.value);\n }\n this.table()?.renderRows();\n }\n\n\n}\n","<div class='select-container'>\n <div>\n <mat-form-field>\n <mat-label>Add {{itemType()}}</mat-label>\n <input \n type=\"text\"\n aria-label=\"Selected item\"\n matInput\n [formControl]=\"searchControl\" \n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n @for(item of options(); track item.item.id){\n <mat-option [value]=\"item.title\">{{item.title}}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n\n <button mat-mini-fab type=\"button\" class=\"form_action_button\" (click)=\"add()\">\n <mat-icon>add\n </mat-icon>\n </button>\n </div>\n\n @if(selected().length > 0){\n <table mat-table [dataSource]=\"selected()\" class=\"mat-elevation-z8\">\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.name] }}</td>\n </ng-container>\n }\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove an item\"\n (click)=\"remove(element.id)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\">\n </tr>\n <tr mat-row *matRowDef=\"let row; columns: columnNames();\">\n </tr>\n </table>\n }\n</div>","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { merge, tap } from 'rxjs';\n\nimport { Component, OnInit, AfterViewInit, viewChild, input, computed } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ItemQuery } from '../../../models/http';\nimport { ListDataSource } from '../list-data-source';\n\nexport interface TableColumn {\n name: string;\n title: string;\n element_type: string;\n}\n\n@Component({\n selector: 'lib-list-table-view',\n imports: [MatTableModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatPaginatorModule,\n MatSortModule,\n RouterModule\n ],\n templateUrl: './list-table-view.component.html',\n styleUrl: './list-table-view.component.scss'\n})\nexport class ListTableViewComponent implements OnInit, AfterViewInit {\n\n itemType = input(\"\");\n columns = input<TableColumn[]>([]);\n dataSource = input<ListDataSource<any>>();\n searchFilter = input(\"\");\n pageSizeOptions = [20, 50, 100];\n initialPageSize = 20;\n columnNames = computed(() => this.columns().map(c => c.name));\n\n sort = viewChild(MatSort);\n paginator = viewChild(MatPaginator);\n\n ngOnInit() {\n const data_source = this.dataSource();\n if (data_source) {\n data_source.fetch(new ItemQuery({ page_size: this.initialPageSize }));\n }\n }\n\n ngAfterViewInit() {\n const paginator = this.paginator();\n const sort = this.sort();\n if (!paginator || !sort) {\n return;\n }\n\n sort.sortChange.subscribe(() => this.reset());\n merge(sort.sortChange, paginator.page)\n .pipe(\n tap(() => this.fetch())\n )\n .subscribe();\n }\n\n reset() {\n const paginator = this.paginator();\n if (!paginator) {\n return;\n }\n paginator.pageIndex = 0;\n }\n\n fetch() {\n const paginator = this.paginator();\n const sort = this.sort();\n const data_source = this.dataSource();\n if (!paginator || !sort || !data_source) {\n return;\n }\n\n data_source.fetch(new ItemQuery({\n page: paginator.pageIndex + 1,\n page_size: paginator.pageSize,\n sort_order: sort.direction,\n sort_field: sort.active,\n filter: this.searchFilter()\n }))\n }\n}\n","@if (dataSource(); as dataSource) {\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n matSortActive=\"name\"\n matSortDisableClear\n matSortDirection=\"desc\"\n class=\"mat-elevation-z8\"\n >\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.name] }}</td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: columnNames()\"\n [routerLink]=\"['/' + itemType() + '/detail/', row.id]\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n </table>\n\n <mat-paginator\n [length]=\"dataSource.length()\"\n [pageSize]=\"20\"\n [pageSizeOptions]=\"pageSizeOptions\"\n aria-label=\"Select page\"\n >\n </mat-paginator>\n}\n","// Datasource needs any\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Component, OnInit, input, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { MatListModule } from '@angular/material/list';\n\nimport { ListDataSource } from '../list-data-source';\n\n@Component({\n selector: 'lib-list-scroll-view',\n imports: [MatListModule,\n NgTemplateOutlet,\n ScrollingModule],\n templateUrl: './list-scroll-view.component.html',\n styleUrl: './list-scroll-view.component.scss'\n})\n\nexport class ListScrollViewComponent implements OnInit {\n\n searchTerm = input<string>(\"\");\n pageSize = input(20);\n dataSource = input<ListDataSource<any> >();\n listItemTemplate = input<TemplateRef<unknown> | null>(null);\n \n ngOnInit() {\n this.reset();\n }\n\n reset()\n {\n const data_source = this.dataSource();\n if(!data_source)\n {\n return;\n }\n// sort_order: this.sort!.direction,\n// sort_field: this.sort!.active, \n data_source.reset(this.searchTerm(), this.pageSize());\n } \n \n}\n","<mat-nav-list>\n <cdk-virtual-scroll-viewport\n itemSize=\"150\"\n class=\"scrollable-list\"\n style=\"height: 600px; width: 500px\"\n >\n <ng-container *cdkVirtualFor=\"let item of dataSource()\">\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate(); context: { item: item }\"\n >\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</mat-nav-list>\n","import { Component, inject } from '@angular/core';\nimport { Location } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-back-button',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './back-button.component.html',\n styleUrl: './back-button.component.scss'\n})\nexport class BackButtonComponent {\n\n protected location = inject(Location);\n\n protected goBack(): void {\n this.location.back();\n }\n\n}\n","<a mat-icon-button class=\"padded-button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n<mat-icon>arrow_back</mat-icon>\n</a>\n\n","import { tap, debounceTime, distinctUntilChanged } from 'rxjs';\n\nimport { AfterViewInit, Component, input, output, signal } from '@angular/core';\n\nimport { TitleCasePipe } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'lib-search-bar',\n imports: [ReactiveFormsModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n TitleCasePipe],\n templateUrl: './search-bar.component.html',\n styleUrl: './search-bar.component.scss'\n})\n\nexport class SearchBarComponent implements AfterViewInit {\n itemType = input(\"\");\n sortFields = input<string[]>([]);\n sortAscending = signal(true);\n searchChanged = output<string>();\n\n searchFilter = new FormControl();\n\n ngAfterViewInit() {\n this.searchFilter.valueChanges.pipe(\n debounceTime(150),\n distinctUntilChanged(),\n tap(() => {\n this.searchEntered();\n\n })\n ).subscribe();\n }\n\n clearSearch() {\n this.searchFilter.setValue(\"\");\n }\n\n searchEntered() {\n this.searchChanged.emit(this.searchFilter.value)\n }\n}\n","<div class=\"container\">\n <mat-form-field class=\"search\" style=\"margin: 10px;\">\n <mat-label>Search</mat-label>\n <input matInput [formControl]=\"searchFilter\" placeholder=\"Search {{ itemType() | titlecase }}\" />\n\n @if(searchFilter.value){\n <button matSuffix mat-icon-button aria-label=\"Cancel\" (click)=\"clearSearch()\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n @else(){\n <button matSuffix mat-icon-button aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n }\n </mat-form-field>\n\n @if(sortFields().length > 0){\n <mat-form-field style=\"margin: 10px\">\n <mat-label>Sort By</mat-label>\n <mat-select>\n @for(field of sortFields(); track field)\n {\n <mat-option>{{field}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button mat-icon-button aria-label=\"Sort Order\" matTooltip=\"Toggle sort order\">\n <mat-icon>sort</mat-icon>\n </button>\n }\n</div>","import { catchError, of, finalize, BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { signal } from '@angular/core';\n\nimport { DataSource, CollectionViewer, ListRange } from '@angular/cdk/collections';\n\nimport { IItemQuery, ItemQuery } from '../../models/http';\nimport { IPaginated, Paginated, Identifiable } from '../../models/core';\n\nimport { ItemService } from '../../services/item.service';\n\nexport class ListDataSource<T extends Identifiable> extends DataSource<T> {\n \n length = signal(0);\n loading = signal(true);\n searchTerm = signal<string>(\"\"); \n pageSize = signal(20);\n\n private consumerType: string;\n private items = new BehaviorSubject<T[]>([]);\n itemService: ItemService<T>;\n private subscription = new Subscription();\n private fetchedPages = new Set<number>();\n\n constructor(itemService: ItemService<T>, consumerType = \"table\") {\n super();\n this.itemService = itemService;\n this.consumerType = consumerType;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]>\n {\n if (!this.hasTableConsumer())\n {\n this.subscription.add(collectionViewer.viewChange.subscribe((range) => this.onRange(range))); \n }\n\n return this.items.asObservable();\n }\n\n hasTableConsumer(): boolean\n {\n return this.consumerType === \"table\";\n }\n\n onRange(range: ListRange)\n {\n const start_page = Math.floor(range.start / this.pageSize());\n const end_page = Math.floor(range.end / this.pageSize());\n for (let idx = start_page; idx <= end_page; idx++)\n {\n this.fetchPage(idx);\n }\n }\n\n reset(searchTerm = \"\", pageSize = 20)\n {\n this.fetchedPages = new Set<number>();\n this.length.set(0);\n this.searchTerm.set(searchTerm);\n this.pageSize.set(pageSize);\n this.loading.set(true);\n this.items.next([]);\n this.fetchPage(0);\n }\n\n fetchPage(idx: number)\n {\n if (this.fetchedPages.has(idx))\n {\n return;\n }\n this.fetchedPages.add(idx);\n this.fetch(new ItemQuery({page: idx + 1,\n page_size: this.pageSize(),\n filter: this.searchTerm()}));\n }\n\n fetch(query: IItemQuery)\n {\n this.loading.set(true);\n this.itemService.get(query).pipe(\n catchError(() => of(new Paginated<T>())),\n finalize(() => this.loading.set(false))\n ).subscribe(response => this.onResponse(response))\n }\n\n onResponse(response: IPaginated<T>) {\n this.length.set(response.count);\n\n if(this.hasTableConsumer())\n {\n this.items.next(response.results);\n }\n else\n {\n this.items.next([...this.items.value, ...response.results]); \n }\n }\n\n disconnect(): void {\n this.items.complete();\n if (this.subscription)\n {\n this.subscription.unsubscribe(); \n }\n\n }\n}\n","import { tap } from 'rxjs';\n\nimport { AfterViewInit, Component, OnInit, input, signal, inject, TemplateRef, viewChild, computed } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { RouterModule, ActivatedRoute } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatSort } from '@angular/material/sort';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule, MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListTableViewComponent, TableColumn } from '../list-table-view/list-table-view.component';\nimport { ListScrollViewComponent } from '../list-scroll-view/list-scroll-view.component';\nimport { BackButtonComponent } from '../back-button/back-button.component';\nimport { SearchBarComponent } from \"../search-bar/search-bar.component\";\nimport { ListDataSource } from '../list-data-source';\n\nimport { Identifiable } from '../../../models/core';\nimport { ItemService } from '../../../services/item.service';\n\n@Component({\n selector: 'lib-list-view',\n imports: [ListTableViewComponent,\n ListScrollViewComponent,\n BackButtonComponent,\n MatFormFieldModule,\n MatButtonToggleModule,\n MatProgressSpinnerModule,\n MatIconModule,\n ReactiveFormsModule,\n RouterModule,\n TitleCasePipe,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n SearchBarComponent],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.scss'\n})\nexport class ListViewComponent<T extends Identifiable> implements OnInit, AfterViewInit {\n\n viewType = input(\"table\");\n itemService = input<ItemService<T>>();\n itemDetailTemplate = input<TemplateRef<unknown> | null>(null);\n columns = input<TableColumn[]>([]);\n sortFields = input<string[]>([]);\n noSelfItemsMessage = input<string>();\n noItemsCanCreateMessage = input<string>();\n noItemsMessage = input<string>();\n\n selectedViewType = signal(\"table\");\n\n pageSize = 20;\n pageSizeOptions = [20, 50, 100];\n\n protected route = inject(ActivatedRoute);\n dataSource: ListDataSource<T> | undefined = undefined;\n sort = viewChild(MatSort);\n columnNames = computed(() => this.columns().map(c => c.name));\n\n searchTerm = \"\";\n\n ngOnInit() {\n this.selectedViewType.set(this.viewType());\n this.resetDataSource();\n }\n\n ngAfterViewInit() {\n const sort = this.sort();\n if (sort) {\n sort.sortChange.pipe(tap(() => this.reset())).subscribe();\n }\n }\n\n onSearchChange(value: string)\n {\n this.searchTerm = value;\n this.reset();\n }\n\n canCreate(): boolean {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.canCreate();\n }\n return false;\n }\n\n itemType(): string {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.itemType;\n }\n return \"\";\n }\n\n isTableView(): boolean {\n return this.selectedViewType() === \"table\";\n }\n\n resetDataSource() {\n const item_service = this.itemService();\n if (item_service)\n {\n this.dataSource = new ListDataSource<T>(item_service, this.selectedViewType());\n }\n this.reset();\n }\n\n reset() {\n if (this.dataSource) {\n this.dataSource.reset(this.searchTerm, this.pageSize);\n }\n }\n\n viewChanged(event: MatButtonToggleChange) {\n this.selectedViewType.set(event.value);\n console.log(this.selectedViewType());\n this.resetDataSource();\n }\n\n protected isSelfList() {\n const url_segments = this.route.snapshot.url;\n return (url_segments.length == 2) && (url_segments[1].path == \"self\")\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"container\">\n <div class=\"header\">\n <h1 class=\"title\">{{ itemType() | titlecase }}</h1>\n\n @if (canCreate()) {\n <div class=\"button-container\">\n <a mat-fab class=\"padded-button\" aria-label=\"Add new item\" matTooltip=\"Add new item\" [routerLink]=\"['create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n }\n </div>\n\n <div class=\"controls\">\n <lib-search-bar [itemType]=\"itemType()\" [sortFields]=\"sortFields()\"\n (searchChanged)=\"onSearchChange($event)\"></lib-search-bar>\n\n @if(itemDetailTemplate()){\n <div style=\"margin: 10px\">\n <mat-button-toggle-group name=\"viewType\" aria-label=\"View Type\" [value]=\"selectedViewType()\"\n (change)=\"viewChanged($event)\">\n\n <mat-button-toggle value=\"table\" matTooltip=\"Show as table\">\n <mat-icon>table_view</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle value=\"scroll\" matTooltip=\"Show as list\">\n <mat-icon>list</mat-icon>\n </mat-button-toggle>\n\n </mat-button-toggle-group>\n </div>\n }\n </div>\n\n @if(dataSource)\n {\n @if (dataSource.loading()) {\n <div class=\"spinner-container\">\n <mat-spinner></mat-spinner>\n </div>\n }\n @else{\n @if(dataSource.length() === 0)\n {\n @if(isSelfList())\n {\n @if(noSelfItemsMessage())\n {\n <p>{{noSelfItemsMessage()}}</p>\n }\n @else {\n <p>You do not have any {{itemType()}}.</p> \n }\n\n }\n @else{\n @if(canCreate()){\n @if(noItemsCanCreateMessage())\n {\n <p>{{noItemsCanCreateMessage()}}</p>\n }\n @else{\n <p>There are currently no {{itemType()}}, click above to add one.</p>\n }\n }\n @else{\n @if(noItemsMessage())\n {\n <p>{{noItemsMessage()}}</p>\n }\n @else\n {\n <p>There are currently no {{itemType()}}.</p>\n }\n }\n }\n }\n @else{\n @if(isTableView()) {\n <lib-list-table-view [itemType]=\"itemType()\" [columns]=\"columns()\" [dataSource]=\"dataSource\">\n </lib-list-table-view>\n } \n @else {\n <lib-list-scroll-view [listItemTemplate]=\"itemDetailTemplate()\" [dataSource]=\"dataSource\"></lib-list-scroll-view>\n }\n }\n }\n }\n</div>","import { Component, input, computed, output } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-detail-header',\n imports: [RouterModule,\n MatButtonModule,\n MatIconModule, MatTooltipModule],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss'\n})\nexport class DetailHeaderComponent {\n id = input<number>(0);\n text = input<string>(\"\");\n route = input<string>(\"\");\n canEdit = input<boolean>(false);\n canDelete = input<boolean>(false);\n deleteClicked = output<void>();\n fullRoute = computed(() => \"/\" + this.route() + \"s/edit/\");\n\n deleteClick() {\n this.deleteClicked.emit();\n }\n}\n\n","<div class=\"container\">\n\n <h1 class=\"header\">{{text()}}</h1>\n\n <div class=\"controls\">\n @if(canEdit()){\n <a mat-mini-fab class=\"control-button\" matTooltip=\"Edit the item\" title=\"Click to edit this item\" aria-label=\"Click to edit this item\"\n [routerLink]=\"[fullRoute(), id()]\">\n <mat-icon>edit</mat-icon>\n </a>\n }\n\n @if(canDelete()){\n <button mat-mini-fab class=\"control-button\" (click)=\"deleteClick()\" matTooltip=\"Delete the item\" title=\"Click to delete this item\"\n aria-label=\"Click to delete this item\">\n <mat-icon>delete</mat-icon></button>\n }\n </div>\n\n</div>","import { Component, input, output } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { IFileRecord } from './file-record';\n\nexport interface IPreview\n{\n name: string;\n content: string | ArrayBuffer;\n}\n\nexport interface IFileUpload\n{\n name: string;\n file: File;\n}\n\n@Component({\n selector: 'lib-file-upload',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './file-upload.component.html',\n styleUrl: './file-upload.component.scss'\n})\nexport class FileUploadComponent {\n\n files = input<IFileRecord[]>([]);\n previewLoaded = output<IPreview>();\n fileUploaded = output<IFileUpload>();\n\n protected onPreviewRead(name: string, content: string | ArrayBuffer) {\n this.previewLoaded.emit({name: name, content: content});\n }\n\n protected onFileUpload(name: string, event: Event) {\n if (!event.target)\n {\n return;\n }\n \n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n const file = input_element.files[0];\n this.fileUploaded.emit({name: name, file: file});\n\n const record = this.files().find(f => f.name == name);\n if (record && record.file_type == \"image\")\n {\n this.readFile(name, file);\n }\n }\n }\n\n protected readFile(name: string, file: File)\n {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => { if(reader.result){this.previewLoaded.emit(\n {name: name, content: reader.result})}; }; \n } \n}\n","<div class=\"container\">\n @for( file of files(); track file.name)\n {\n @if (file.local)\n {\n <div class=\"image_holder\">\n <p>Update {{file.display_name}}</p>\n <img alt=\"{{file.display_name}}\" src=\"{{file.local}}\" style=\"height:120px;\">\n </div> \n }\n @else\n {\n @if (file.remote){\n <div class=\"image_holder\">\n <p>Update {{file.display_name}}</p>\n <img alt=\"{{file.display_name}}\" src=\"{{file.remote}}\" style=\"height:120px;\">\n </div>\n }\n @else {\n <div>\n <span>Upload a {{file.display_name}}</span>\n </div> \n }\n \n }\n\n <div class=\"button-row\">\n <button mat-mini-fab (click)=\"fileInput.click()\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\" #fileInput (change)=\"onFileUpload(file.name, $event)\"/>\n </div> \n } \n</div>\n","export interface IFileRecord\n{\n name: string;\n display_name: string;\n file_type: string;\n file: File | null;\n remote: string;\n local: string | ArrayBuffer;\n}\n\nexport class FileRecord\n{\n name = \"\";\n display_name = \"\";\n file_type = \"standard\";\n file: File | null = null;\n remote = \"\";\n local: string | ArrayBuffer = \"\";\n\n constructor(params: Partial<IFileRecord> = {})\n {\n Object.assign(this, params);\n } \n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\nimport { IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [NgIf,\n BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMember> implements OnInit {\n\n protected typename = \"user\";\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.username\"\n [id]=\"item.id\"\n [route]=\"typename\"\n [canEdit]=\"canEdit()\"\n [canDelete]=\"canDelete()\"\n (onDelete)=\"onDelete\"></lib-detail-header>\n\n @if(item.profile_url){\n <div class=\"image-holder\">\n <img alt=\"User Profile Image\" src=\"{{item.url}}{{item.profile_url}}\" style=\"height:120px;\">\n </div> \n }\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 }\n</div>\n","import { Component, inject, OnInit, signal, WritableSignal } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\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';\n\nimport { EditView } from '../../../base/edit-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { FileUploadComponent, IFileUpload, IPreview } from '../../../base/file-upload/file-upload.component';\n\nimport { PortalMember, IPortalMember } from '../../../../models/core';\nimport { UserService } from '../../../../services/user.service';\nimport { FileRecord, IFileRecord } from '../../../base/file-upload/file-record';\n\n\n@Component({\n selector: 'lib-user-edit',\n imports: [NgIf,\n ReactiveFormsModule,\n MatButtonModule,\n BackButtonComponent,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n FileUploadComponent\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMember> implements OnInit {\n\n override readonly typename: string = \"User\";\n files: WritableSignal<IFileRecord[]> = signal([new FileRecord({name: \"image\",\n display_name: \"Profile Image\",\n file_type: \"image\"})]);\n private formBuilder = inject(FormBuilder);\n form = this.formBuilder.group({\n username: [''],\n email: [''],\n first_name: [''],\n last_name: [''],\n phone: ['']\n });\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n override onItemAvailable() {\n const item = this.item();\n if (!item) {\n return;\n }\n this.form.setValue({\n username: item.username,\n email: item.email,\n first_name: item.first_name,\n last_name: item.last_name,\n phone: item.phone\n });\n\n if (item.profile_url)\n {\n this.files.update(files => {const file = files.find(f => f.name === \"image\"); if(file){file.remote = item.url + item.profile_url}; return files;}); \n }\n\n super.onItemAvailable();\n }\n\n override submit() {\n this.item.update((item) => { if (item) { item = this.updateFromForm(item); } return item; });\n console.log(this.item());\n super.submit();\n }\n\n updateFromForm(item: IPortalMember): IPortalMember {\n item.username = this.form.value.username || \"\";\n item.email = this.form.value.email || \"\";\n item.first_name = this.form.value.first_name || \"\";\n item.last_name = this.form.value.last_name || \"\";\n item.phone = this.form.value.phone || \"\";\n return item;\n }\n\n protected override getTemplateItem(): IPortalMember {\n return new PortalMember();\n }\n\n \n onPreviewLoaded(preview: IPreview)\n {\n this.files.update(files => {const file = files.find(f => f.name === preview.name); if(file){file.local = preview.content}; return files;}); \n }\n\n onFileUploaded(upload: IFileUpload)\n {\n this.files.update(files => {const file = files.find(f => f.name === upload.name); if(file){file.file = upload.file}; return files;}); \n }\n\n protected override saveFiles(item: IPortalMember) {\n this.files().forEach(record => {if(record.file){this._restService.postFile(item.id, record.name, record.file).subscribe(item => this.onItemUpdated(item));};});\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-edit-container\">\n\n <h1 class=\"item-edit-header\">{{heading()}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n formControlName=\"username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n formControlName=\"email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n formControlName=\"first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n formControlName=\"last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <lib-file-upload [files]=\"files()\"\n (previewLoaded)=\"onPreviewLoaded($event)\"\n (fileUploaded)=\"onFileUploaded($event)\"></lib-file-upload>\n \n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div>\n \n </form>\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\n\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { IPortalMember } from '../../../../models/core';\n\n@Component({\n selector: 'lib-user-list-detail',\n imports: [MatListModule,\n MatCardModule],\n templateUrl: './user-list-detail.component.html',\n styleUrl: './user-list-detail.component.scss'\n})\nexport class UserListDetailComponent {\n\n item = input<IPortalMember>();\n}\n","<mat-card mat-list-item class=\"item-card\">\n @if(item(); as item){\n <mat-card-header>\n <mat-card-title-group style=\"padding: 5px\">\n <mat-card-title\n >{{ item.first_name }} {{ item.last_name }}</mat-card-title\n >\n <mat-card-subtitle>{{ item.username }}</mat-card-subtitle>\n </mat-card-title-group>\n </mat-card-header>\n\n <mat-card-content>\n <p>Email: {{ item.email }}</p>\n </mat-card-content>\n }\n</mat-card>\n","import { Component, inject, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { TableColumn } from '../../../base/list-table-view/list-table-view.component';\nimport { ListViewComponent } from '../../../base/list-view/list-view.component';\n\nimport { UserService } from '../../../../services/user.service';\nimport { UserListDetailComponent } from '../list-detail/user-list-detail.component';\n\n@Component({\n selector: 'lib-user',\n imports: [ListViewComponent, UserListDetailComponent, RouterModule],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent {\n viewType = signal(\"list\");\n itemService = inject(UserService);\n columns: TableColumn[] = [{name: 'username', title: 'Name', element_type: 'string'}]; \n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [itemDetailTemplate]=\"listItemTemplate\"\n [columns]=\"columns\"\n [viewType]=\"viewType()\"\n >\n <ng-template #listItemTemplate let-item=\"item\">\n <lib-user-list-detail [item]=\"item\"\n [routerLink]=\"['/' + itemService.itemType + '/detail/', item.id]\"\n [routerLinkActive]=\"['is-active']\">\n </lib-user-list-detail>\n </ng-template>\n</lib-list-view>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\nimport { IGroup } from '../../../../models/core';\nimport { GroupService } from '../../../../services/group.service';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [NgIf,\n BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroup> implements OnInit {\n\n protected typename = \"group\";\n\n constructor() {\n super(inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n @if(item(); as item) {\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [route]=\"typename\"></lib-detail-header>\n \n <div class=\"item-field\">{{item.name}}</div>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\n\nimport { TableColumn } from '../../../base/list-table-view/list-table-view.component';\nimport { ListViewComponent } from '../../../base/list-view/list-view.component';\n\nimport { GroupService } from '../../../../services/group.service';\n\n@Component({\n selector: 'lib-group',\n imports: [ListViewComponent],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent {\n itemService = inject(GroupService);\n columns: TableColumn[] = [{ name: 'name', title: 'Name', element_type: 'string' }];\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [columns]=\"columns\"\n >\n</lib-list-view>\n\n","import { Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ICountry } from '../../../../models/organization';\n\n@Component({\n selector: 'lib-address-edit',\n imports: [MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n ReactiveFormsModule\n ],\n templateUrl: './address-edit.component.html',\n styleUrl: './address-edit.component.scss'\n})\nexport class AddressEditComponent {\n countryOptions = input<ICountry[]>([]);\n form = input<FormGroup>();\n}\n","@if(form(); as form){\n<div [formGroup]=\"form\" style=\"display: flex; flex-direction: column; width:100%\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line1\">Line 1</mat-label>\n <input matInput placeholder=\"Address Line 1\" type=\"text\" id=\"line1\" formControlName=\"line1\" name=\"line1\"\n required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line2\">Line 2</mat-label>\n <input matInput placeholder=\"Address Line 2\" type=\"text\" id=\"line2\" formControlName=\"line2\" name=\"line1\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line3\">Line 3</mat-label>\n <input matInput placeholder=\"Address Line 3\" type=\"text\" id=\"line3\" formControlName=\"line3\" name=\"line3\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"city\">City</mat-label>\n <input matInput placeholder=\"City\" type=\"text\" id=\"city\" formControlName=\"city\" name=\"city\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"region\">Region</mat-label>\n <input matInput placeholder=\"Region\" type=\"text\" id=\"region\" formControlName=\"region\" name=\"region\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"line1\">Post Code</mat-label>\n <input matInput placeholder=\"Post Code\" type=\"text\" id=\"postcode\" formControlName=\"postcode\" name=\"postcode\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"country\">Country</mat-label>\n <mat-select formControlName=\"country\" name=\"country\" id=\"country\" required>\n @for(country of countryOptions(); track $index){\n <mat-option [value]=\"country.code\">{{country.name}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n</div>\n}","import { Component, input } from '@angular/core';\n\nimport { IAddress } from '../../../../models/organization';\n\n@Component({\n selector: 'lib-address-detail',\n imports: [],\n templateUrl: './address-detail.component.html',\n styleUrl: './address-detail.component.scss'\n})\nexport class AddressDetailComponent {\n address = input<IAddress>();\n}\n","@if(address(); as address){\n<div class=\"item-field\" style=\"display:flex;flex-wrap: wrap;justify-content: center;align-content: center;\">\n <span style=\"margin-left: 3px;\">{{address.line1}}, </span>\n <span style=\"margin-left: 3px;\">{{address.line2}},</span>\n @if(address.line3){\n <span style=\"margin-left: 3px;\">{{address.line3}},</span>\n }\n @if(address.city){\n <span style=\"margin-left: 3px;\">{{address.city}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.region}},</span>\n @if(address.postcode){ \n <span style=\"margin-left: 3px;\">{{address.postcode}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.country_name}}</span>\n</div>\n}","import { inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { IAddress} from '../../../../models/organization';\n\nexport class AddressForm {\n private formBuilder = inject(FormBuilder);\n form = this.formBuilder.group({\n line1: [''],\n line2: [''],\n line3: [''],\n city: [''],\n region: [''],\n postcode: [''],\n country: ['']\n });\n\n setValue(item: IAddress) {\n this.form.setValue({\n line1: item.line1,\n line2: item.line2,\n line3: item.line3,\n city: item.city,\n region: item.region,\n postcode: item.postcode,\n country: item.country\n });\n }\n\n updateItem(item: IAddress): IAddress\n {\n const value = this.form.value;\n item.line1 = value.line1 || \"\";\n item.line2 = value.line2 || \"\";\n item.line3 = value.line3 || \"\";\n item.city = value.city || \"\";\n item.region = value.region || \"\";\n item.postcode = value.postcode || \"\";\n item.country = value.country || \"\";\n return item;\n }\n}","import { Component, inject } from '@angular/core';\n\nimport { TableColumn } from '../../../base/list-table-view/list-table-view.component';\nimport { ListViewComponent } from '../../../base/list-view/list-view.component';\n\nimport { OrganizationService } from '../../../../services/organization.service';\n\n@Component({\n selector: 'lib-organization',\n imports: [\n ListViewComponent],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent {\n itemService = inject(OrganizationService);\n columns: TableColumn[] = [{name: 'name', title: 'Name', element_type: 'string'},\n {name: 'website', title: 'Website', element_type: 'url'},\n {name: 'is_partner', title: 'Is Partner', element_type: 'boolean'}];\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [columns]=\"columns\"\n >\n</lib-list-view>\n\n\n\n","import { Component, OnInit, inject, signal } from '@angular/core';\n\nimport { DetailView } from '../../../base/detail-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { IAddress, IOrganization } from '../../../../models/organization';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { DetailHeaderComponent } from '../../../base/detail-header/detail-header.component';\n\nimport { IPortalMember } from '../../../../models/core';\nimport { AddressService } from '../../../../services/address.service';\nimport { AddressDetailComponent } from \"../../address/detail/address-detail.component\";\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [BackButtonComponent,\n DetailHeaderComponent, AddressDetailComponent],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganization> implements OnInit {\n\n typename = \"organization\";\n address = signal<IAddress | null>(null);\n private addressService = inject(AddressService);\n \n constructor() {\n super(inject(OrganizationService));\n }\n\n ngOnInit()\n {\n this.onInit();\n }\n\n override onItemAndUserAvailable(item: IOrganization, _user: IPortalMember) {\n this.addressService.getUrl(item.address).subscribe(address => this.address.set(address));\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [canEdit]=\"itemService.canEdit()\"\n [canDelete]=\"itemService.canDelete()\"\n [route]=\"typename\"></lib-detail-header>\n\n <div class=\"item-field\">\n {{item.description}}\n </div>\n \n @if(address(); as address)\n {\n <h3>Address</h3>\n <lib-address-detail [address]=\"address\"></lib-address-detail>\n }\n <div class=\"item-field\">\n <h3>Website</h3>{{item.website}}\n </div>\n </div>\n }\n</div>\n","import { inject } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\n\nimport { IOrganization } from '../../../../models/organization';\nimport { AddressForm } from '../../address/edit/address-form';\n\nexport class OrganizationForm {\n private formBuilder = inject(FormBuilder);\n form: FormGroup;\n address= new AddressForm();\n\n constructor()\n {\n this.form = this.formBuilder.group({\n name: [''],\n acronym: [''],\n description: [''],\n website: [''],\n address: [this.address.form]\n });\n }\n\n updateFromItem(item: IOrganization) {\n this.form.setValue({\n name: item.name,\n acronym: item.acronym,\n description: item.description,\n website: item.website,\n address: this.address.form\n });\n }\n\n updateItem(item: IOrganization): IOrganization\n {\n item.name = this.form.value.name || \"\";\n item.acronym = this.form.value.acronym || \"\";\n item.description = this.form.value.description || \"\";\n item.website = this.form.value.website || \"\";\n return item;\n }\n\n}","import { tap, Observable } from 'rxjs';\n\nimport { Component, OnInit, inject, signal } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { EditView } from '../../../base/edit-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { SelectTableComponent, Selectable } from '../../../base/select-table/select-table.component';\nimport { TableColumn } from '../../../base/list-table-view/list-table-view.component';\n\nimport { AddressEditComponent } from \"../../address/edit/address-edit.component\";\n\nimport { IPaginated, IPortalMember} from '../../../../models/core';\nimport { Organization, IOrganization, ICountry, IAddress, Address} from '../../../../models/organization';\nimport { OptionActionChoice, OptionAction, ItemQuery } from '../../../../models/http';\nimport { OrganizationService } from '../../../../services/organization.service';\nimport { AddressService } from '../../../../services/address.service';\n\nimport { OrganizationForm } from './organization-form';\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule,\n BackButtonComponent,\n AddressEditComponent,\n SelectTableComponent\n],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganization> implements OnInit {\n\n override readonly typename: string = \"Organization\";\n\n countryOptions = signal<ICountry[]>([]);\n\n candidateMembers = signal<Selectable<IPortalMember>[]>([]);\n selectedMembers = signal<IPortalMember[]>([]);\n columns: TableColumn[] = [{name: 'first_name', title: 'First Name', element_type: 'string'},\n {name: 'last_name', title: 'Surname', element_type: 'string'},\n {name: 'username', title: 'Username', element_type: 'string'},\n {name: 'email', title: 'Email', element_type: 'string'}];\n\n form = new OrganizationForm();\n\n address: IAddress = new Address(); \n addressService = inject(AddressService);\n\n constructor() {\n super(inject(OrganizationService));\n }\n\n ngOnInit() {\n this.onInit();\n this.addressService.getOptions().subscribe(options => this.onOptions(options));\n }\n\n override onItemAndUserAvailable(_: IPortalMember) {\n const item = this.item();\n\n if (item) {\n this.fetchAddress(item.address);\n this.form.updateFromItem(item);\n\n const queries = new Map<string, string>([[\"organization\", item.id.toString()]]);\n const query = new ItemQuery({queries : queries});\n this._userService.get(query).subscribe(users => this.selectedMembers.set(users.results));\n this._userService.get().subscribe(users => this.updateCandidates(users));\n }\n }\n\n protected updateCandidates(users: IPaginated<IPortalMember>)\n {\n this.candidateMembers.set(users.results.map(user => {return {title: user.username, item: user};}));\n }\n\n override submit(){\n this.syncFromForm();\n\n if (this.createMode())\n {\n this.createAddress().subscribe(_ => super.submit());\n }\n else\n {\n this.updateAddress();\n super.submit();\n }\n\n }\n\n protected fetchAddress(url: string)\n {\n if(url)\n {\n this.addressService.getUrl(url).subscribe(address => this.onAddressUpdated(address));\n }\n }\n\n protected updateAddress()\n {\n this.addressService.putItem(this.address).subscribe(address => this.onAddressUpdated(address));\n }\n\n protected createAddress(): Observable<IAddress>\n {\n return this.addressService.postItem(this.address).pipe(tap(address => {this.onAddressCreated(address)}));\n } \n\n protected onAddressUpdated(address: IAddress)\n {\n this.address = address;\n this.form.address.setValue(this.address);\n }\n\n protected onAddressCreated(address: IAddress)\n {\n this.onAddressUpdated(address);\n this.item.update(item => {if(item){item.address = address.url;} return item;});\n } \n\n protected syncFromForm()\n {\n this.address = this.form.address.updateItem(this.address)\n this.item.update((item) => { if(item){item = this.form.updateItem(item);} return item;}); \n }\n\n protected override getTemplateItem(): IOrganization {\n return new Organization();\n }\n\n protected override onPostActions(actions: Record<string, OptionAction>) {\n if ('country' in actions && actions['country'].choices) {\n this.onCountryChoices(actions['country'].choices);\n }\n }\n\n protected onCountryChoices(choices: OptionActionChoice[]) {\n this.countryOptions.update(() => choices.map(c => {return {name: c.display_name, code: c.value, flag: \"\"};}));\n }\n\n onMemberRemoved(id: number) {\n const url = this.selectedMembers().find(m => m.id == id)!.url;\n this.selectedMembers.update(members => members.filter(m => m.id != id));\n this.item.update(item => { if (item) { item.members.filter(m => m != url); } return item; });\n }\n\n onMemberAdded(title: string) {\n const selected = this.candidateMembers().find(m => m.title == title);\n if (selected) {\n this.selectedMembers.update(members => { members.push(selected.item); return members; });\n }\n this.candidateMembers.update(members => members.filter(m => m.title != title));\n\n const url = this.selectedMembers().find(m => m.username == title)!.url;\n this.item.update(item => { if (item) { item.members.push(url); } return item; });\n }\n\n onSearchChanged(searchTerm: string | null)\n {\n console.log(\"Batch requested\");\n if (searchTerm)\n {\n this._userService.get(new ItemQuery({filter: searchTerm})).subscribe(users => this.updateCandidates(users));\n }\n else\n {\n this._userService.get().subscribe(users => this.updateCandidates(users));\n }\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-edit-container\">\n \n <h1 class=\"item-edit-header\">{{heading()}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form.form\" (ngSubmit)=\"submit()\">\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"name\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n id=\"name\"\n formControlName=\"name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label for=\"acronym\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n id=\"acronym\"\n formControlName=\"acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n id=\"description\"\n formControlName=\"description\"\n name=\"description\"\n class=\"medium-textarea\"\n required></textarea>\n </mat-form-field>\n\n <h3>Address</h3>\n <lib-address-edit \n [countryOptions]=\"countryOptions()\"\n [form]=\"form.address.form\"\n ></lib-address-edit>\n\n <h3>Members</h3>\n <lib-select-table [selected]=\"selectedMembers()\"\n [itemType]=\"'Members'\"\n [columns]=\"columns\"\n [options]=\"candidateMembers()\"\n (itemAdded)=\"onMemberAdded($event)\"\n (itemRemoved)=\"onMemberRemoved($event)\"\n (searchChanged)=\"onSearchChanged($event)\">\n </lib-select-table>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.form.valid\">\n <mat-icon>save</mat-icon>\n </button>\n \n <button mat-fab\n class=\"form_action_button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n \n </form>\n </div>\n }\n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models/core';\nexport * from './lib/models/organization';\nexport * from './lib/models/http';\nexport * from './lib/models/left-nav-options';\n\nexport * from './lib/services/rest.service';\nexport * from './lib/services/item.service';\nexport * from './lib/services/user.service';\nexport * from './lib/services/address.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';\nexport * from './lib/views/base/list-view';\nexport * from './lib/views/base/select-table/select-table.component';\nexport * from './lib/views/base/list-view/list-view.component';\nexport * from './lib/views/base/list-table-view/list-table-view.component';\nexport * from './lib/views/base/back-button/back-button.component';\nexport * from './lib/views/base/detail-header/detail-header.component';\nexport * from './lib/views/base/search-bar/search-bar.component';\nexport * from './lib/views/base/file-upload/file-upload.component';\nexport * from './lib/views/base/file-upload/file-record';\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/address/edit/address-edit.component';\nexport * from './lib/views/api/address/detail/address-detail.component';\nexport * from './lib/views/api/address/edit/address-form';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\nexport * from './lib/views/api/organization/edit/organization-edit.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","i5","i6","i8"],"mappings":"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"}