@ngageoint/mage.web-core-lib 6.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/common/index.d.ts +6 -0
- package/common/mage-common.module.d.ts +9 -0
- package/common/mage-common.module.d.ts.map +1 -0
- package/common/ngageoint-mage.web-core-lib-common.d.ts.map +1 -0
- package/common/public-api.d.ts +3 -0
- package/common/public-api.d.ts.map +1 -0
- package/common/xhr-img.component.d.ts +59 -0
- package/common/xhr-img.component.d.ts.map +1 -0
- package/esm2020/common/mage-common.module.mjs +25 -0
- package/esm2020/common/ngageoint-mage.web-core-lib-common.mjs +5 -0
- package/esm2020/common/public-api.mjs +3 -0
- package/esm2020/common/xhr-img.component.mjs +104 -0
- package/esm2020/event/event-read.service.mjs +3 -0
- package/esm2020/event/event.model.mjs +2 -0
- package/esm2020/event/ngageoint-mage.web-core-lib-event.mjs +5 -0
- package/esm2020/event/public-api.mjs +3 -0
- package/esm2020/feed/feed.model.mjs +2 -0
- package/esm2020/feed/feed.service.mjs +105 -0
- package/esm2020/feed/ngageoint-mage.web-core-lib-feed.mjs +5 -0
- package/esm2020/feed/public-api.mjs +3 -0
- package/esm2020/mage-core-lib.module.mjs +19 -0
- package/esm2020/ngageoint-mage.web-core-lib.mjs +5 -0
- package/esm2020/paging/ngageoint-mage.web-core-lib-paging.mjs +5 -0
- package/esm2020/paging/paging.cdk-data-source.adapter.mjs +52 -0
- package/esm2020/paging/paging.model.mjs +25 -0
- package/esm2020/paging/public-api.mjs +3 -0
- package/esm2020/plugin/ngageoint-mage.web-core-lib-plugin.mjs +5 -0
- package/esm2020/plugin/plugin.model.mjs +2 -0
- package/esm2020/plugin/public-api.mjs +2 -0
- package/esm2020/public-api.mjs +5 -0
- package/esm2020/static-icon/ngageoint-mage.web-core-lib-static-icon.mjs +5 -0
- package/esm2020/static-icon/public-api.mjs +7 -0
- package/esm2020/static-icon/static-icon-form-field/static-icon-form-field.component.mjs +145 -0
- package/esm2020/static-icon/static-icon-img/static-icon-img.component.mjs +35 -0
- package/esm2020/static-icon/static-icon-select/static-icon-select.component.mjs +52 -0
- package/esm2020/static-icon/static-icon.model.mjs +10 -0
- package/esm2020/static-icon/static-icon.module.mjs +54 -0
- package/esm2020/static-icon/static-icon.service.mjs +82 -0
- package/esm2020/user/ngageoint-mage.web-core-lib-user.mjs +5 -0
- package/esm2020/user/public-api.mjs +5 -0
- package/esm2020/user/user-read.service.mjs +40 -0
- package/esm2020/user/user-select/user-select.component.mjs +159 -0
- package/esm2020/user/user.model.mjs +2 -0
- package/esm2020/user/user.module.mjs +64 -0
- package/event/event-read.service.d.ts +12 -0
- package/event/event-read.service.d.ts.map +1 -0
- package/event/event.model.d.ts +7 -0
- package/event/event.model.d.ts.map +1 -0
- package/event/index.d.ts +6 -0
- package/event/ngageoint-mage.web-core-lib-event.d.ts.map +1 -0
- package/event/public-api.d.ts +3 -0
- package/event/public-api.d.ts.map +1 -0
- package/feed/feed.model.d.ts +84 -0
- package/feed/feed.model.d.ts.map +1 -0
- package/feed/feed.service.d.ts +41 -0
- package/feed/feed.service.d.ts.map +1 -0
- package/feed/index.d.ts +6 -0
- package/feed/ngageoint-mage.web-core-lib-feed.d.ts.map +1 -0
- package/feed/public-api.d.ts +3 -0
- package/feed/public-api.d.ts.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-common.mjs +142 -0
- package/fesm2015/ngageoint-mage.web-core-lib-common.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-event.mjs +10 -0
- package/fesm2015/ngageoint-mage.web-core-lib-event.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-feed.mjs +114 -0
- package/fesm2015/ngageoint-mage.web-core-lib-feed.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-paging.mjs +83 -0
- package/fesm2015/ngageoint-mage.web-core-lib-paging.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-plugin.mjs +4 -0
- package/fesm2015/ngageoint-mage.web-core-lib-plugin.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-static-icon.mjs +392 -0
- package/fesm2015/ngageoint-mage.web-core-lib-static-icon.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-user.mjs +279 -0
- package/fesm2015/ngageoint-mage.web-core-lib-user.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib.mjs +32 -0
- package/fesm2015/ngageoint-mage.web-core-lib.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-common.mjs +133 -0
- package/fesm2020/ngageoint-mage.web-core-lib-common.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-event.mjs +10 -0
- package/fesm2020/ngageoint-mage.web-core-lib-event.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-feed.mjs +112 -0
- package/fesm2020/ngageoint-mage.web-core-lib-feed.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-paging.mjs +83 -0
- package/fesm2020/ngageoint-mage.web-core-lib-paging.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-plugin.mjs +4 -0
- package/fesm2020/ngageoint-mage.web-core-lib-plugin.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-static-icon.mjs +368 -0
- package/fesm2020/ngageoint-mage.web-core-lib-static-icon.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-user.mjs +262 -0
- package/fesm2020/ngageoint-mage.web-core-lib-user.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib.mjs +30 -0
- package/fesm2020/ngageoint-mage.web-core-lib.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/mage-core-lib.module.d.ts +8 -0
- package/mage-core-lib.module.d.ts.map +1 -0
- package/ngageoint-mage.web-core-lib.d.ts.map +1 -0
- package/package.json +102 -0
- package/paging/index.d.ts +6 -0
- package/paging/ngageoint-mage.web-core-lib-paging.d.ts.map +1 -0
- package/paging/paging.cdk-data-source.adapter.d.ts +21 -0
- package/paging/paging.cdk-data-source.adapter.d.ts.map +1 -0
- package/paging/paging.model.d.ts +28 -0
- package/paging/paging.model.d.ts.map +1 -0
- package/paging/public-api.d.ts +3 -0
- package/paging/public-api.d.ts.map +1 -0
- package/plugin/index.d.ts +6 -0
- package/plugin/ngageoint-mage.web-core-lib-plugin.d.ts.map +1 -0
- package/plugin/plugin.model.d.ts +14 -0
- package/plugin/plugin.model.d.ts.map +1 -0
- package/plugin/public-api.d.ts +2 -0
- package/plugin/public-api.d.ts.map +1 -0
- package/public-api.d.ts +2 -0
- package/public-api.d.ts.map +1 -0
- package/static-icon/index.d.ts +6 -0
- package/static-icon/ngageoint-mage.web-core-lib-static-icon.d.ts.map +1 -0
- package/static-icon/public-api.d.ts +7 -0
- package/static-icon/public-api.d.ts.map +1 -0
- package/static-icon/static-icon-form-field/static-icon-form-field.component.d.ts +32 -0
- package/static-icon/static-icon-form-field/static-icon-form-field.component.d.ts.map +1 -0
- package/static-icon/static-icon-img/static-icon-img.component.d.ts +13 -0
- package/static-icon/static-icon-img/static-icon-img.component.d.ts.map +1 -0
- package/static-icon/static-icon-select/static-icon-select.component.d.ts +22 -0
- package/static-icon/static-icon-select/static-icon-select.component.d.ts.map +1 -0
- package/static-icon/static-icon.model.d.ts +20 -0
- package/static-icon/static-icon.model.d.ts.map +1 -0
- package/static-icon/static-icon.module.d.ts +15 -0
- package/static-icon/static-icon.module.d.ts.map +1 -0
- package/static-icon/static-icon.service.d.ts +21 -0
- package/static-icon/static-icon.service.d.ts.map +1 -0
- package/user/index.d.ts +6 -0
- package/user/ngageoint-mage.web-core-lib-user.d.ts.map +1 -0
- package/user/public-api.d.ts +5 -0
- package/user/public-api.d.ts.map +1 -0
- package/user/user-read.service.d.ts +25 -0
- package/user/user-read.service.d.ts.map +1 -0
- package/user/user-select/user-select.component.d.ts +39 -0
- package/user/user-select/user-select.component.d.ts.map +1 -0
- package/user/user.model.d.ts +86 -0
- package/user/user.model.d.ts.map +1 -0
- package/user/user.module.d.ts +18 -0
- package/user/user.module.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-static-icon.mjs","sources":["../../../projects/core-lib/static-icon/static-icon.model.ts","../../../projects/core-lib/static-icon/static-icon.service.ts","../../../projects/core-lib/static-icon/static-icon-form-field/static-icon-form-field.component.ts","../../../projects/core-lib/static-icon/static-icon-form-field/static-icon-form-field.component.html","../../../projects/core-lib/static-icon/static-icon-img/static-icon-img.component.ts","../../../projects/core-lib/static-icon/static-icon-select/static-icon-select.component.html","../../../projects/core-lib/static-icon/static-icon-select/static-icon-select.component.ts","../../../projects/core-lib/static-icon/static-icon.module.ts","../../../projects/core-lib/static-icon/ngageoint-mage.web-core-lib-static-icon.ts"],"sourcesContent":["\nexport interface StaticIcon {\n id: string\n sourceUrl: string\n contentPath: string\n title?: string\n summary?: string\n fileName?: string\n tags?: string[]\n}\n\nexport interface RegisteredStaticIconReference {\n id: string\n sourceUrl?: never\n}\n\nexport interface SourceUrlStaticIconReference {\n sourceUrl: string\n id?: never\n}\n\nexport const contentPathOfIcon = (icon?: StaticIcon | RegisteredStaticIconReference | string | null | undefined): string | undefined => {\n if (!icon) {\n return\n }\n if (typeof icon !== 'string') {\n icon = icon.id\n }\n return `/api/icons/${icon}/content`\n}\n\nexport type StaticIconReference = RegisteredStaticIconReference | SourceUrlStaticIconReference\n","import { HttpClient, HttpParams } from '@angular/common/http'\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs'\nimport { catchError } from 'rxjs/operators'\nimport { PageOf, PagingParameters } from '@ngageoint/mage.web-core-lib/paging'\nimport { StaticIcon, StaticIconReference } from './static-icon.model'\n\n\nexport interface IconFetch extends PagingParameters {\n searchText?: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StaticIconService {\n\n constructor(private http: HttpClient) { }\n\n fetchIcons(fetch?: IconFetch): Observable<PageOf<StaticIcon>> {\n const now = Date.now()\n const results = new Observable<PageOf<StaticIcon>>(observer => {\n const icons: StaticIcon[] = []\n let remaining = 100\n while (remaining--) {\n const id = now - remaining\n icons.unshift({\n id: String(id),\n title: `Icon ${id}`,\n fileName: `icon-${id}.png`,\n sourceUrl: `https://test.mage/${id}.png`,\n contentPath: `/icons/${id}/content`\n })\n }\n setTimeout(() => {\n observer.next({\n pageSize: 100,\n pageIndex: 0,\n totalCount: 100,\n items: icons\n })\n observer.complete()\n }, 0)\n return {\n unsubscribe() { }\n }\n })\n return results\n }\n\n fetchIconById(id: string): Observable<StaticIcon | null> {\n return this.http.get<StaticIcon>(`/api/icons/${id}`).pipe(\n catchError((err, caught) => {\n // TODO: this is probably better practice to insulate app layer from\n // http errors\n // if (err instanceof HttpErrorResponse) {\n // if (err.status === 404) {\n // return null\n // }\n // }\n return throwError(err)\n })\n )\n }\n\n fetchIconBySourceUrl(url: string): Observable<StaticIcon> {\n return this.http.get<StaticIcon | null>(`/api/icons`, {\n params: new HttpParams().set('source_url', url)\n })\n }\n\n fetchIconByReference(ref: StaticIconReference): Observable<StaticIcon | null> {\n if (ref.id) {\n return this.fetchIconById(ref.id)\n }\n else if (ref.sourceUrl) {\n return this.fetchIconBySourceUrl(ref.sourceUrl)\n }\n throw new Error('no icon id or source url')\n }\n\n registerIconUrl(url: string): Observable<StaticIcon> {\n throw new Error('unimplemented')\n }\n\n uploadIcon(): void {\n throw new Error('unimplemented')\n }\n}\n","import { HttpClient } from '@angular/common/http'\nimport { Component, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'\nimport { AbstractControl, ControlValueAccessor, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, Validators } from '@angular/forms'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport { StaticIcon, StaticIconReference } from '../static-icon.model'\nimport { StaticIconService } from '../static-icon.service'\n\n\n@Component({\n selector: 'mage-static-icon-form-field',\n templateUrl: './static-icon-form-field.component.html',\n styleUrls: ['./static-icon-form-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: StaticIconFormFieldComponent\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: StaticIconFormFieldComponent\n },\n ]\n})\nexport class StaticIconFormFieldComponent implements OnChanges, OnDestroy, ControlValueAccessor, Validator {\n\n iconRef: StaticIconReference = null\n\n form: UntypedFormGroup = new UntypedFormGroup({\n iconRefToken: new UntypedFormControl(null),\n iconRefType: new UntypedFormControl(null, Validators.required)\n })\n icon: StaticIcon | null\n\n private onChange: (iconRef: StaticIconReference) => void = (iconRef: StaticIconReference) => {}\n private onValidatorChange: () => void = () => {}\n private onTouched: () => void = () => {}\n\n constructor(private iconService: StaticIconService, private httpClient: HttpClient, private sanitizer: DomSanitizer) {\n this.form.valueChanges.subscribe((x: IconRefFormValue) => {\n this.iconRef = iconRefForFormValue(x)\n this.onChange(this.iconRef)\n })\n }\n\n registerOnValidatorChange?(fn: () => void): void {\n this.onValidatorChange = fn\n }\n\n ngOnChanges(changes: SimpleChanges) { }\n\n ngOnDestroy() { }\n\n onSelectIcon() { }\n\n writeValue(iconRef: StaticIconReference): void {\n this.iconRef = iconRef\n const formValue = formValueForIconRef(iconRef)\n this.form.setValue(formValue, { emitEvent: false })\n this.resolveIconRef()\n }\n\n registerOnChange(fn: (x: StaticIconReference | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.form.disable()\n }\n else {\n this.form.enable()\n }\n }\n\n validate(control: AbstractControl): ValidationErrors {\n return this.form.errors\n }\n\n private resolveIconRef() {\n if (!this.iconRef) {\n this.icon = null\n return\n }\n this.iconService.fetchIconByReference(this.iconRef).subscribe(x => {\n this.icon = x\n if (!this.icon) {\n return\n }\n })\n }\n}\n\nenum IconRefType {\n Registered = 'id',\n SourceUrl = 'sourceUrl'\n}\n\ntype IconRefFormValue = {\n iconRefToken: string | null\n iconRefType: IconRefType | null\n}\n\nfunction iconRefForFormValue(x: IconRefFormValue): StaticIconReference | null {\n if (!x.iconRefType) {\n return null\n }\n switch (x.iconRefType) {\n case IconRefType.Registered:\n return { [IconRefType.Registered]: x.iconRefToken }\n case IconRefType.SourceUrl:\n return { [IconRefType.SourceUrl]: x.iconRefToken }\n default:\n throw new Error('invalid icon ref type: ' + x.iconRefToken)\n }\n}\n\nfunction formValueForIconRef(x: StaticIconReference | null): IconRefFormValue {\n if (!x) {\n return {\n iconRefType: null,\n iconRefToken: null\n }\n }\n let iconRefType: IconRefType | null = null\n let iconRefToken: string | null = null\n if (x.hasOwnProperty(IconRefType.Registered)) {\n iconRefType = IconRefType.Registered || null\n iconRefToken = x[IconRefType.Registered] || null\n }\n else if (x.hasOwnProperty(IconRefType.SourceUrl)) {\n iconRefType = IconRefType.SourceUrl || null\n iconRefToken = x[IconRefType.SourceUrl] || null\n }\n return {\n iconRefType,\n iconRefToken\n }\n}\n","<div [formGroup]=\"form\">\n <mage-xhr-img class=\"icon-image\" [src]=\"icon?.contentPath\"></mage-xhr-img>\n <input type=\"hidden\" formControlName=\"iconRefType\"/>\n <input type=\"hidden\" formControlName=\"iconRefToken\"/>\n</div>","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { RegisteredStaticIconReference, contentPathOfIcon } from '../static-icon.model'\n\n@Component({\n selector: 'mage-static-icon-img',\n template: `<mage-xhr-img [src]=\"iconPath\"></mage-xhr-img>`,\n})\nexport class StaticIconImgComponent implements OnInit, OnChanges {\n\n @Input()\n iconRef: RegisteredStaticIconReference | string | null\n iconPath: string | null\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.iconRef) {\n if (this.iconRef) {\n this.iconPath = contentPathOfIcon(this.iconRef)\n }\n else {\n this.iconPath = null\n }\n }\n }\n}\n","<div class=\"icon-select\">\n <cdk-virtual-scroll-viewport [itemSize]=\"40\">\n <mat-card *cdkVirtualFor=\"let icon of icons\" class=icon-select-item>\n <mat-card-header>\n <mat-card-title>{{icon.title}}</mat-card-title>\n </mat-card-header>\n <img mat-card-img [src]=\"icon.path\" />\n </mat-card>\n </cdk-virtual-scroll-viewport>\n</div>\n<!--\n <button mat-button class=\"add__button\" type=\"button\" color=\"primary\" (click)=\"file.click()\">\n Upload Icon\n </button>\n <input [hidden]=\"true\" type=\"file\" #file multiple (change)=\"onAttachmentFile($event)\">\n-->","import { Component, OnInit } from '@angular/core'\nimport { PagingParameters, PagingDataSource } from '@ngageoint/mage.web-core-lib/paging'\nimport { StaticIcon } from '../static-icon.model'\nimport { StaticIconService } from '../static-icon.service'\n\nexport interface StaticIconSelectItem {\n id: string\n path: string\n title: string\n fileName: string\n}\n\n@Component({\n selector: 'static-icon-select',\n templateUrl: './static-icon-select.component.html',\n styleUrls: ['./static-icon-select.component.scss']\n})\nexport class StaticIconSelectComponent implements OnInit {\n\n icons: StaticIcon[] | null = null\n dataSource: PagingDataSource<StaticIcon>\n\n constructor(\n private iconService: StaticIconService\n ) {\n this.dataSource = new PagingDataSource<StaticIcon>(250, (paging: PagingParameters) => {\n return this.iconService.fetchIcons(paging)\n })\n }\n\n ngOnInit() {\n this.iconService.fetchIcons().subscribe(x => {\n this.icons = x.items\n })\n }\n\n onBrowseForUploadIcon() {\n throw new Error('unimplemented')\n }\n}\n\n","import { ScrollingModule } from '@angular/cdk/scrolling'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { MatCardModule } from '@angular/material/card'\nimport { MageCommonModule } from '@ngageoint/mage.web-core-lib/common'\nimport { StaticIconFormFieldComponent } from './static-icon-form-field/static-icon-form-field.component'\nimport { StaticIconImgComponent } from './static-icon-img/static-icon-img.component'\nimport { StaticIconSelectComponent } from './static-icon-select/static-icon-select.component'\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatCardModule,\n MageCommonModule,\n ScrollingModule\n ],\n declarations: [\n StaticIconFormFieldComponent,\n StaticIconImgComponent,\n StaticIconSelectComponent,\n ],\n exports: [\n StaticIconFormFieldComponent,\n StaticIconImgComponent,\n StaticIconSelectComponent,\n ]\n})\nexport class StaticIconModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StaticIconService","i2"],"mappings":";;;;;;;;;;;;;;;;;;AAqBa,MAAA,iBAAiB,GAAG,CAAC,IAA6E,KAAwB;IACrI,IAAI,CAAC,IAAI,EAAE;QACT,OAAM;AACP,KAAA;AACD,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAA;AACf,KAAA;IACD,OAAO,CAAA,WAAA,EAAc,IAAI,CAAA,QAAA,CAAU,CAAA;AACrC;;MCda,iBAAiB,CAAA;AAE5B,IAAA,WAAA,CAAoB,IAAgB,EAAA;AAAhB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAK;AAEzC,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAqB,QAAQ,IAAG;YAC5D,MAAM,KAAK,GAAiB,EAAE,CAAA;YAC9B,IAAI,SAAS,GAAG,GAAG,CAAA;YACnB,OAAO,SAAS,EAAE,EAAE;AAClB,gBAAA,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,CAAA;gBAC1B,KAAK,CAAC,OAAO,CAAC;AACZ,oBAAA,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;oBACd,KAAK,EAAE,CAAQ,KAAA,EAAA,EAAE,CAAE,CAAA;oBACnB,QAAQ,EAAE,CAAQ,KAAA,EAAA,EAAE,CAAM,IAAA,CAAA;oBAC1B,SAAS,EAAE,CAAqB,kBAAA,EAAA,EAAE,CAAM,IAAA,CAAA;oBACxC,WAAW,EAAE,CAAU,OAAA,EAAA,EAAE,CAAU,QAAA,CAAA;AACpC,iBAAA,CAAC,CAAA;AACH,aAAA;YACD,UAAU,CAAC,MAAK;gBACd,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,KAAK,EAAE,KAAK;AACb,iBAAA,CAAC,CAAA;gBACF,QAAQ,CAAC,QAAQ,EAAE,CAAA;aACpB,EAAE,CAAC,CAAC,CAAA;YACL,OAAO;AACL,gBAAA,WAAW,MAAM;aAClB,CAAA;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,OAAO,CAAA;KACf;AAED,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAa,CAAA,WAAA,EAAc,EAAE,CAAE,CAAA,CAAC,CAAC,IAAI,CACvD,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;;;;;;;;AAQzB,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;SACvB,CAAC,CACH,CAAA;KACF;AAED,IAAA,oBAAoB,CAAC,GAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoB,YAAY,EAAE;YACpD,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;AAChD,SAAA,CAAC,CAAA;KACH;AAED,IAAA,oBAAoB,CAAC,GAAwB,EAAA;QAC3C,IAAI,GAAG,CAAC,EAAE,EAAE;YACV,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAClC,SAAA;aACI,IAAI,GAAG,CAAC,SAAS,EAAE;YACtB,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAChD,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;AAED,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;KACjC;IAED,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;KACjC;;kFAxEU,iBAAiB,EAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,CAAA,EAAA,CAAA;uEAAjB,iBAAiB,EAAA,OAAA,EAAjB,iBAAiB,CAAA,IAAA,EAAA,UAAA,EAFhB,MAAM,EAAA,CAAA,CAAA;;4EAEP,iBAAiB,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;;MCWY,4BAA4B,CAAA;AAcvC,IAAA,WAAA,CAAoB,WAA8B,EAAU,UAAsB,EAAU,SAAuB,EAAA;AAA/F,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAAU,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAAU,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;AAZnH,QAAA,IAAO,CAAA,OAAA,GAAwB,IAAI,CAAA;AAEnC,QAAA,IAAI,CAAA,IAAA,GAAqB,IAAI,gBAAgB,CAAC;AAC5C,YAAA,YAAY,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC/D,SAAA,CAAC,CAAA;QAGM,IAAA,CAAA,QAAQ,GAA2C,CAAC,OAA4B,KAAM,GAAC,CAAA;AACvF,QAAA,IAAA,CAAA,iBAAiB,GAAe,MAAK,GAAG,CAAA;AACxC,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,GAAG,CAAA;QAGtC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAmB,KAAI;AACvD,YAAA,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC7B,SAAC,CAAC,CAAA;KACH;AAED,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAA;KAC5B;IAED,WAAW,CAAC,OAAsB,EAAA,GAAK;AAEvC,IAAA,WAAW,MAAM;AAEjB,IAAA,YAAY,MAAM;AAElB,IAAA,UAAU,CAAC,OAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;AACtB,QAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,cAAc,EAAE,CAAA;KACtB;AAED,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;KACnB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;KACpB;AAED,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;AACpB,SAAA;AACI,aAAA;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;AACnB,SAAA;KACF;AAED,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;KACxB;IAEO,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,OAAM;AACP,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAChE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,OAAM;AACP,aAAA;AACH,SAAC,CAAC,CAAA;KACH;;wGAtEU,4BAA4B,EAAA,EAAA,CAAA,iBAAA,CAAAA,iBAAA,CAAA,EAAA,EAAA,CAAA,iBAAA,CAAAC,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,YAAA,CAAA,CAAA,CAAA,EAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,IAAA,EAAA,4BAA4B,EAb5B,SAAA,EAAA,CAAA,CAAA,6BAAA,CAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,4BAA4B;AAC1C,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,4BAA4B;AAC1C,aAAA;AACF,SAAA,CAAA,EAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,EAAA,WAAA,CAAA,EAAA,CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,KAAA,CAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,CAAA,EAAA,QAAA,EAAA,SAAA,qCAAA,CAAA,EAAA,EAAA,GAAA,EAAA;QAAA,IAAA,EAAA,GAAA,CAAA,EAAA;YCvBH,EAAwB,CAAA,cAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,CAAA,CAAA;YACtB,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,cAAA,EAAA,CAAA,CAA0E,eAAA,CAAA,CAAA,EAAA,OAAA,EAAA,CAAA,CAAA,CAAA;YAG5E,EAAM,CAAA,YAAA,EAAA,CAAA;;;YAJD,EAAkB,CAAA,UAAA,CAAA,WAAA,EAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACY,YAAA,EAAyB,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA;YAAzB,EAAyB,CAAA,UAAA,CAAA,KAAA,EAAA,GAAA,CAAA,IAAA,IAAA,IAAA,GAAA,IAAA,GAAA,GAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA;;;;4EDwB/C,4BAA4B,EAAA,CAAA;kBAjBxC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAG5B,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAA8B,4BAAA;AAC1C,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAA8B,4BAAA;AAC1C,yBAAA;qBACF,EAAA,QAAA,EAAA,+OAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA,CAAA;;;AA2EH,IAAK,WAGJ,CAAA;AAHD,CAAA,UAAK,WAAW,EAAA;AACd,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,IAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACzB,CAAC,EAHI,WAAW,KAAX,WAAW,GAGf,EAAA,CAAA,CAAA,CAAA;AAOD,SAAS,mBAAmB,CAAC,CAAmB,EAAA;AAC9C,IAAA,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;AAClB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;IACD,QAAQ,CAAC,CAAC,WAAW;QACnB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;QACrD,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,EAAE,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;AACpD,QAAA;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,CAAC,YAAY,CAAC,CAAA;AAC9D,KAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,CAA6B,EAAA;IACxD,IAAI,CAAC,CAAC,EAAE;QACN,OAAO;AACL,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,IAAI;SACnB,CAAA;AACF,KAAA;IACD,IAAI,WAAW,GAAuB,IAAI,CAAA;IAC1C,IAAI,YAAY,GAAkB,IAAI,CAAA;IACtC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;AAC5C,QAAA,WAAW,GAAG,WAAW,CAAC,UAAU,IAAI,IAAI,CAAA;QAC5C,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,CAAA;AACjD,KAAA;SACI,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;AAChD,QAAA,WAAW,GAAG,WAAW,CAAC,SAAS,IAAI,IAAI,CAAA;QAC3C,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;AAChD,KAAA;IACD,OAAO;QACL,WAAW;QACX,YAAY;KACb,CAAA;AACH;;MExIa,sBAAsB,CAAA;AAMjC,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAChD,aAAA;AACI,iBAAA;AACH,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACrB,aAAA;AACF,SAAA;KACF;;4FApBU,sBAAsB,GAAA,CAAA,EAAA,CAAA;yEAAtB,sBAAsB,EAAA,SAAA,EAAA,CAAA,CAAA,sBAAA,CAAA,CAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,EAAA,QAAA,EAAA,SAAA,+BAAA,CAAA,EAAA,EAAA,GAAA,EAAA;QAAA,IAAA,EAAA,GAAA,CAAA,EAAA;YAFtB,EAA8C,CAAA,SAAA,CAAA,CAAA,EAAA,cAAA,EAAA,CAAA,CAAA,CAAA;;;YAAhC,EAAgB,CAAA,UAAA,CAAA,KAAA,EAAA,GAAA,CAAA,QAAA,CAAA,CAAA;;;;4EAE9B,sBAAsB,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,CAAgD,8CAAA,CAAA;iBAC3D,CAAA;0CAIC,OAAO,EAAA,CAAA;sBADN,KAAK;;;;;;ACPJ,QAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,UAAA,EAAA,CAAA,CAAoE,sBAAA,CAAA,CAAA,EAAA,gBAAA,CAAA,CAAA;AAEhD,QAAA,EAAc,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,QAAA,EAAA,CAAA,YAAA,EAAiB,EAAA,CAAA;QAEjD,EAAsC,CAAA,SAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,CAAA,CAAA;QACxC,EAAW,CAAA,YAAA,EAAA,CAAA;;;;AAHS,QAAA,EAAc,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAAd,QAAA,EAAc,CAAA,iBAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAEd,QAAA,EAAiB,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAAjB,QAAA,EAAiB,CAAA,UAAA,CAAA,KAAA,EAAA,OAAA,CAAA,IAAA,EAAA,EAAA,CAAA,aAAA,CAAA,CAAA;;;MCW5B,yBAAyB,CAAA;AAKpC,IAAA,WAAA,CACU,WAA8B,EAAA;AAA9B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAJxC,QAAA,IAAK,CAAA,KAAA,GAAwB,IAAI,CAAA;QAM/B,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAa,GAAG,EAAE,CAAC,MAAwB,KAAI;YACnF,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;AAC5C,SAAC,CAAC,CAAA;KACH;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;AACtB,SAAC,CAAC,CAAA;KACH;IAED,qBAAqB,GAAA;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;KACjC;;kGArBU,yBAAyB,EAAA,EAAA,CAAA,iBAAA,CAAAD,iBAAA,CAAA,CAAA,CAAA,EAAA,CAAA;4EAAzB,yBAAyB,EAAA,SAAA,EAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,EAAA,aAAA,CAAA,EAAA,CAAA,CAAA,EAAA,UAAA,CAAA,EAAA,CAAA,OAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,CAAA,EAAA,KAAA,CAAA,CAAA,EAAA,QAAA,EAAA,SAAA,kCAAA,CAAA,EAAA,EAAA,GAAA,EAAA;QAAA,IAAA,EAAA,GAAA,CAAA,EAAA;ADjBtC,YAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,CAAyB,CAAA,CAAA,EAAA,6BAAA,EAAA,CAAA,CAAA,CAAA;AAErB,YAAA,EAKW,CAAA,UAAA,CAAA,CAAA,EAAA,6CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,CAAA,CAAA;AACb,YAAA,EAAA,CAAA,YAAA,EAA8B,EAAA,CAAA;;;AAPD,YAAA,EAAe,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAAf,YAAA,EAAe,CAAA,UAAA,CAAA,UAAA,EAAA,EAAA,CAAA,CAAA;AACP,YAAA,EAAQ,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA;YAAR,EAAQ,CAAA,UAAA,CAAA,iBAAA,EAAA,GAAA,CAAA,KAAA,CAAA,CAAA;;;;4ECelC,yBAAyB,EAAA,CAAA;kBALrC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,omBAAA,EAAA,MAAA,EAAA,CAAA,uIAAA,CAAA,EAAA,CAAA;;;;MCkBnB,gBAAgB,CAAA;;gFAAhB,gBAAgB,GAAA,CAAA,EAAA,CAAA;kEAAhB,gBAAgB,EAAA,CAAA,CAAA;sEAlBzB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,aAAa;QACb,gBAAgB;QAChB,eAAe,CAAA,EAAA,CAAA,CAAA;;4EAaN,gBAAgB,EAAA,CAAA;kBApB5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,eAAe;AAChB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,4BAA4B;wBAC5B,sBAAsB;wBACtB,yBAAyB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,4BAA4B;wBAC5B,sBAAsB;wBACtB,yBAAyB;AAC1B,qBAAA;iBACF,CAAA;;;AACY,CAAA,YAAA;AAAA,IAAA,CAAA,OAAA,SAAA,KAAA,WAAA,IAAA,SAAA,KAAA,EAAA,CAAA,kBAAA,CAAA,gBAAgB,mBAVzB,4BAA4B;YAC5B,sBAAsB;AACtB,YAAA,yBAAyB,aAVzB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,gBAAgB;AAChB,YAAA,eAAe,aAQf,4BAA4B;YAC5B,sBAAsB;YACtB,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAAA,CAAA,GAAA;;AC5B7B;;AAEG;;;;"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, InjectionToken, forwardRef, Component, ViewChild, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common/http';
|
|
4
|
+
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
7
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
8
|
+
import { MatDialogModule } from '@angular/material/dialog';
|
|
9
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
10
|
+
import { MatInputModule } from '@angular/material/input';
|
|
11
|
+
import { MatListModule } from '@angular/material/list';
|
|
12
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
13
|
+
import * as i2 from '@ng-select/ng-select';
|
|
14
|
+
import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select';
|
|
15
|
+
import { pageForItemIndex } from '@ngageoint/mage.web-core-lib/paging';
|
|
16
|
+
import { Subject } from 'rxjs';
|
|
17
|
+
import { distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
|
18
|
+
|
|
19
|
+
const USER_READ_BASE_URL = '/api/next-users';
|
|
20
|
+
const reqKeys = {
|
|
21
|
+
term: 'term',
|
|
22
|
+
pageSize: 'page_size',
|
|
23
|
+
pageIndex: 'page',
|
|
24
|
+
includeTotalCount: 'total',
|
|
25
|
+
};
|
|
26
|
+
class UserReadService {
|
|
27
|
+
constructor(http) {
|
|
28
|
+
this.http = http;
|
|
29
|
+
}
|
|
30
|
+
search(which) {
|
|
31
|
+
const queryParams = {
|
|
32
|
+
page_size: String(which.pageSize),
|
|
33
|
+
page: String(which.pageIndex),
|
|
34
|
+
};
|
|
35
|
+
if (typeof which.term === 'string') {
|
|
36
|
+
queryParams.term = which.term;
|
|
37
|
+
}
|
|
38
|
+
if (typeof which.includeTotalCount === 'boolean') {
|
|
39
|
+
queryParams.total = which.includeTotalCount ? 'true' : 'false';
|
|
40
|
+
}
|
|
41
|
+
return this.http.get(`${USER_READ_BASE_URL}/search`, {
|
|
42
|
+
params: queryParams
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
UserReadService.ɵfac = function UserReadService_Factory(t) { return new (t || UserReadService)(i0.ɵɵinject(i1.HttpClient)); };
|
|
47
|
+
UserReadService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: UserReadService, factory: UserReadService.ɵfac, providedIn: 'root' });
|
|
48
|
+
(function () {
|
|
49
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserReadService, [{
|
|
50
|
+
type: Injectable,
|
|
51
|
+
args: [{
|
|
52
|
+
providedIn: 'root'
|
|
53
|
+
}]
|
|
54
|
+
}], function () { return [{ type: i1.HttpClient }]; }, null);
|
|
55
|
+
})();
|
|
56
|
+
const USER_READ_SERVICE = new InjectionToken('UserReadService');
|
|
57
|
+
|
|
58
|
+
function UserSelectComponent_ng_template_1_Template(rf, ctx) {
|
|
59
|
+
if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "small", 3);
|
|
61
|
+
i0.ɵɵtext(1);
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
}
|
|
64
|
+
if (rf & 2) {
|
|
65
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
66
|
+
i0.ɵɵadvance(1);
|
|
67
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.totalCount, " matching users");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function UserSelectComponent_ng_template_2_Template(rf, ctx) {
|
|
71
|
+
if (rf & 1) {
|
|
72
|
+
i0.ɵɵelementStart(0, "div", 4)(1, "p", 5);
|
|
73
|
+
i0.ɵɵtext(2);
|
|
74
|
+
i0.ɵɵelementEnd();
|
|
75
|
+
i0.ɵɵelementStart(3, "p", 6);
|
|
76
|
+
i0.ɵɵtext(4);
|
|
77
|
+
i0.ɵɵelementEnd();
|
|
78
|
+
i0.ɵɵelementStart(5, "p", 6);
|
|
79
|
+
i0.ɵɵtext(6);
|
|
80
|
+
i0.ɵɵelementEnd()();
|
|
81
|
+
}
|
|
82
|
+
if (rf & 2) {
|
|
83
|
+
const user_r2 = ctx.item;
|
|
84
|
+
i0.ɵɵadvance(2);
|
|
85
|
+
i0.ɵɵtextInterpolate2("", user_r2.displayName, " (", user_r2.username, ")");
|
|
86
|
+
i0.ɵɵadvance(2);
|
|
87
|
+
i0.ɵɵtextInterpolate(user_r2.email || "[no email]");
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵtextInterpolate(user_r2.allPhones || "[no phone]");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
class UserSelectComponent {
|
|
93
|
+
constructor(userService) {
|
|
94
|
+
this.userService = userService;
|
|
95
|
+
this.baseFindParams = Object.freeze({
|
|
96
|
+
pageSize: 100,
|
|
97
|
+
pageIndex: 0,
|
|
98
|
+
term: null
|
|
99
|
+
});
|
|
100
|
+
this.nextPageScrollThreshold = 15;
|
|
101
|
+
this.searchTermDebounceTime = 500;
|
|
102
|
+
this.trackByUserId = x => x.id;
|
|
103
|
+
this.users = [];
|
|
104
|
+
this.totalCount = 0;
|
|
105
|
+
this.searchTerm$ = new Subject();
|
|
106
|
+
this.currentSearchTerm = null;
|
|
107
|
+
this.currentFetch = null;
|
|
108
|
+
}
|
|
109
|
+
get loading() {
|
|
110
|
+
return !!this.currentFetch && !this.currentFetch.closed;
|
|
111
|
+
}
|
|
112
|
+
ngOnInit() {
|
|
113
|
+
this.searchTerm$.pipe(distinctUntilChanged(), debounceTime(this.searchTermDebounceTime))
|
|
114
|
+
.subscribe(x => {
|
|
115
|
+
this.currentSearchTerm = x;
|
|
116
|
+
this.users = [];
|
|
117
|
+
this.totalCount = 0;
|
|
118
|
+
if (this.currentFetch) {
|
|
119
|
+
this.currentFetch.unsubscribe();
|
|
120
|
+
this.currentFetch = null;
|
|
121
|
+
}
|
|
122
|
+
this.fetchNextPage();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
ngOnChanges(changes) {
|
|
126
|
+
}
|
|
127
|
+
ngAfterViewInit() {
|
|
128
|
+
}
|
|
129
|
+
writeValue(x) {
|
|
130
|
+
this.userSelect.writeValue(x);
|
|
131
|
+
}
|
|
132
|
+
registerOnChange(fn) {
|
|
133
|
+
this.userSelect.registerOnChange(fn);
|
|
134
|
+
}
|
|
135
|
+
registerOnTouched(fn) {
|
|
136
|
+
this.userSelect.registerOnTouched(fn);
|
|
137
|
+
}
|
|
138
|
+
setDisabledState(isDisabled) {
|
|
139
|
+
this.userSelect.setDisabledState(isDisabled);
|
|
140
|
+
}
|
|
141
|
+
onOpen() {
|
|
142
|
+
if (this.users.length === 0) {
|
|
143
|
+
this.fetchNextPage();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
onScroll({ end }) {
|
|
147
|
+
if (end < this.users.length - this.nextPageScrollThreshold || this.users.length === this.totalCount) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.fetchNextPage();
|
|
151
|
+
}
|
|
152
|
+
onScrollToEnd() {
|
|
153
|
+
}
|
|
154
|
+
fetchNextPage() {
|
|
155
|
+
if (this.currentFetch) {
|
|
156
|
+
if (this.currentFetch.closed) {
|
|
157
|
+
this.currentFetch = null;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const nextPage = pageForItemIndex(this.users.length, this.baseFindParams.pageSize);
|
|
164
|
+
const findParams = Object.assign(Object.assign({}, this.baseFindParams), { pageIndex: nextPage });
|
|
165
|
+
if (this.currentSearchTerm) {
|
|
166
|
+
findParams.term = this.currentSearchTerm;
|
|
167
|
+
}
|
|
168
|
+
this.currentFetch = this.userService.search(findParams).subscribe(page => {
|
|
169
|
+
this.users = this.users.concat(page.items);
|
|
170
|
+
if (typeof page.totalCount === 'number') {
|
|
171
|
+
this.totalCount = page.totalCount;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
UserSelectComponent.ɵfac = function UserSelectComponent_Factory(t) { return new (t || UserSelectComponent)(i0.ɵɵdirectiveInject(UserReadService)); };
|
|
177
|
+
UserSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserSelectComponent, selectors: [["mage-user-select"]], viewQuery: function UserSelectComponent_Query(rf, ctx) {
|
|
178
|
+
if (rf & 1) {
|
|
179
|
+
i0.ɵɵviewQuery(NgSelectComponent, 7);
|
|
180
|
+
}
|
|
181
|
+
if (rf & 2) {
|
|
182
|
+
let _t;
|
|
183
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.userSelect = _t.first);
|
|
184
|
+
}
|
|
185
|
+
}, features: [i0.ɵɵProvidersFeature([
|
|
186
|
+
{
|
|
187
|
+
provide: NG_VALUE_ACCESSOR,
|
|
188
|
+
multi: true,
|
|
189
|
+
useExisting: forwardRef(() => UserSelectComponent)
|
|
190
|
+
}
|
|
191
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 3, vars: 5, consts: [["appendTo", "body", "placeholder", "Choose a user", "bindLabel", "displayName", 3, "items", "typeahead", "virtualScroll", "loading", "trackByFn", "open", "scroll", "scrollToEnd"], ["ng-header-tmp", ""], ["class", "user-option", "ng-option-tmp", ""], [1, "form-text", "text-muted"], [1, "user-option"], [1, "user-option__line", "primary"], [1, "user-option__line", "detail"]], template: function UserSelectComponent_Template(rf, ctx) {
|
|
192
|
+
if (rf & 1) {
|
|
193
|
+
i0.ɵɵelementStart(0, "ng-select", 0);
|
|
194
|
+
i0.ɵɵlistener("open", function UserSelectComponent_Template_ng_select_open_0_listener() { return ctx.onOpen(); })("scroll", function UserSelectComponent_Template_ng_select_scroll_0_listener($event) { return ctx.onScroll($event); })("scrollToEnd", function UserSelectComponent_Template_ng_select_scrollToEnd_0_listener() { return ctx.onScrollToEnd(); });
|
|
195
|
+
i0.ɵɵtemplate(1, UserSelectComponent_ng_template_1_Template, 2, 1, "ng-template", 1);
|
|
196
|
+
i0.ɵɵtemplate(2, UserSelectComponent_ng_template_2_Template, 7, 4, "ng-template", 2);
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
}
|
|
199
|
+
if (rf & 2) {
|
|
200
|
+
i0.ɵɵproperty("items", ctx.users)("typeahead", ctx.searchTerm$)("virtualScroll", true)("loading", ctx.loading)("trackByFn", ctx.trackByUserId);
|
|
201
|
+
}
|
|
202
|
+
}, dependencies: [i2.NgSelectComponent, i2.NgOptionTemplateDirective, i2.NgHeaderTemplateDirective], styles: [".user-option[_ngcontent-%COMP%]{margin:.85em 0}.user-option[_ngcontent-%COMP%] > .user-option__line[_ngcontent-%COMP%]{margin:0 0 .6em;padding:0;line-height:1em;overflow:hidden;text-overflow:ellipsis}.user-option[_ngcontent-%COMP%] > .user-option__line.primary[_ngcontent-%COMP%]{font-size:1em}.user-option[_ngcontent-%COMP%] > .user-option__line.detail[_ngcontent-%COMP%]{font-size:.85em;opacity:.75}"] });
|
|
203
|
+
(function () {
|
|
204
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserSelectComponent, [{
|
|
205
|
+
type: Component,
|
|
206
|
+
args: [{ selector: 'mage-user-select', providers: [
|
|
207
|
+
{
|
|
208
|
+
provide: NG_VALUE_ACCESSOR,
|
|
209
|
+
multi: true,
|
|
210
|
+
useExisting: forwardRef(() => UserSelectComponent)
|
|
211
|
+
}
|
|
212
|
+
], template: "<ng-select [items]=\"users\"\n [typeahead]=\"searchTerm$\"\n [virtualScroll]=\"true\"\n [loading]=\"loading\"\n [trackByFn]=\"trackByUserId\"\n appendTo=\"body\"\n placeholder=\"Choose a user\"\n bindLabel=\"displayName\"\n (open)=\"onOpen()\"\n (scroll)=\"onScroll($event)\"\n (scrollToEnd)=\"onScrollToEnd()\"\n >\n <ng-template ng-header-tmp>\n <small class=\"form-text text-muted\">{{totalCount}} matching users</small>\n </ng-template>\n <ng-template class=\"user-option\" ng-option-tmp let-user=\"item\" let-index=\"index\">\n <div class=\"user-option\">\n <p class=\"user-option__line primary\">{{user.displayName}} ({{user.username}})</p>\n <p class=\"user-option__line detail\">{{user.email || '[no email]'}}</p>\n <p class=\"user-option__line detail\">{{user.allPhones || '[no phone]'}}</p>\n </div>\n </ng-template>\n</ng-select>\n", styles: [".user-option{margin:.85em 0}.user-option>.user-option__line{margin:0 0 .6em;padding:0;line-height:1em;overflow:hidden;text-overflow:ellipsis}.user-option>.user-option__line.primary{font-size:1em}.user-option>.user-option__line.detail{font-size:.85em;opacity:.75}\n"] }]
|
|
213
|
+
}], function () { return [{ type: UserReadService }]; }, { userSelect: [{
|
|
214
|
+
type: ViewChild,
|
|
215
|
+
args: [NgSelectComponent, { static: true }]
|
|
216
|
+
}] });
|
|
217
|
+
})();
|
|
218
|
+
|
|
219
|
+
class MageUserModule {
|
|
220
|
+
}
|
|
221
|
+
MageUserModule.ɵfac = function MageUserModule_Factory(t) { return new (t || MageUserModule)(); };
|
|
222
|
+
MageUserModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MageUserModule });
|
|
223
|
+
MageUserModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
224
|
+
FormsModule,
|
|
225
|
+
ReactiveFormsModule,
|
|
226
|
+
ScrollingModule,
|
|
227
|
+
MatAutocompleteModule,
|
|
228
|
+
MatDialogModule,
|
|
229
|
+
MatFormFieldModule,
|
|
230
|
+
MatInputModule,
|
|
231
|
+
MatListModule,
|
|
232
|
+
MatSelectModule,
|
|
233
|
+
NgSelectModule] });
|
|
234
|
+
(function () {
|
|
235
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MageUserModule, [{
|
|
236
|
+
type: NgModule,
|
|
237
|
+
args: [{
|
|
238
|
+
imports: [
|
|
239
|
+
CommonModule,
|
|
240
|
+
FormsModule,
|
|
241
|
+
ReactiveFormsModule,
|
|
242
|
+
ScrollingModule,
|
|
243
|
+
MatAutocompleteModule,
|
|
244
|
+
MatDialogModule,
|
|
245
|
+
MatFormFieldModule,
|
|
246
|
+
MatInputModule,
|
|
247
|
+
MatListModule,
|
|
248
|
+
MatSelectModule,
|
|
249
|
+
NgSelectModule,
|
|
250
|
+
],
|
|
251
|
+
declarations: [
|
|
252
|
+
UserSelectComponent
|
|
253
|
+
],
|
|
254
|
+
exports: [
|
|
255
|
+
UserSelectComponent
|
|
256
|
+
]
|
|
257
|
+
}]
|
|
258
|
+
}], null, null);
|
|
259
|
+
})();
|
|
260
|
+
(function () {
|
|
261
|
+
(typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MageUserModule, { declarations: [UserSelectComponent], imports: [CommonModule,
|
|
262
|
+
FormsModule,
|
|
263
|
+
ReactiveFormsModule,
|
|
264
|
+
ScrollingModule,
|
|
265
|
+
MatAutocompleteModule,
|
|
266
|
+
MatDialogModule,
|
|
267
|
+
MatFormFieldModule,
|
|
268
|
+
MatInputModule,
|
|
269
|
+
MatListModule,
|
|
270
|
+
MatSelectModule,
|
|
271
|
+
NgSelectModule], exports: [UserSelectComponent] });
|
|
272
|
+
})();
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Generated bundle index. Do not edit.
|
|
276
|
+
*/
|
|
277
|
+
|
|
278
|
+
export { MageUserModule, USER_READ_BASE_URL, USER_READ_SERVICE, UserReadService, UserSelectComponent };
|
|
279
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-user.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-user.mjs","sources":["../../../projects/core-lib/user/user-read.service.ts","../../../projects/core-lib/user/user-select/user-select.component.html","../../../projects/core-lib/user/user-select/user-select.component.ts","../../../projects/core-lib/user/user.module.ts","../../../projects/core-lib/user/ngageoint-mage.web-core-lib-user.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http'\nimport { InjectionToken, Injectable } from '@angular/core'\nimport { PageOf, PagingParameters } from '@ngageoint/mage.web-core-lib/paging'\nimport { Observable } from 'rxjs'\nimport { User } from './user.model'\n\nexport const USER_READ_BASE_URL = '/api/next-users'\n\ntype SearchQueryParams = {\n page_size: string,\n page: string,\n term?: string,\n total?: 'true' | 'false'\n}\n\nconst reqKeys: { [SearchParamKey in keyof UserSearchParams]: string } = {\n term: 'term',\n pageSize: 'page_size',\n pageIndex: 'page',\n includeTotalCount: 'total',\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserReadService {\n\n constructor(private http: HttpClient) { }\n\n search(which: UserSearchParams): Observable<PageOf<UserSearchResult>> {\n const queryParams: SearchQueryParams = {\n page_size: String(which.pageSize),\n page: String(which.pageIndex),\n }\n if (typeof which.term === 'string') {\n queryParams.term = which.term\n }\n if (typeof which.includeTotalCount === 'boolean') {\n queryParams.total = which.includeTotalCount ? 'true' : 'false'\n }\n return this.http.get<PageOf<UserSearchResult>>(`${USER_READ_BASE_URL}/search`, {\n params: queryParams\n })\n }\n}\n\nexport interface UserSearchParams extends PagingParameters {\n term?: string | null | undefined\n}\n\nexport type UserSearchResult = Pick<User, 'id' | 'username' | 'displayName' | 'email' | 'active' | 'enabled'> & {\n /**\n * A reduction of all the phone numbers to a single string\n */\n allPhones?: string | null | undefined\n}\n\nexport const USER_READ_SERVICE = new InjectionToken<UserReadService>('UserReadService')","<ng-select [items]=\"users\"\n [typeahead]=\"searchTerm$\"\n [virtualScroll]=\"true\"\n [loading]=\"loading\"\n [trackByFn]=\"trackByUserId\"\n appendTo=\"body\"\n placeholder=\"Choose a user\"\n bindLabel=\"displayName\"\n (open)=\"onOpen()\"\n (scroll)=\"onScroll($event)\"\n (scrollToEnd)=\"onScrollToEnd()\"\n >\n <ng-template ng-header-tmp>\n <small class=\"form-text text-muted\">{{totalCount}} matching users</small>\n </ng-template>\n <ng-template class=\"user-option\" ng-option-tmp let-user=\"item\" let-index=\"index\">\n <div class=\"user-option\">\n <p class=\"user-option__line primary\">{{user.displayName}} ({{user.username}})</p>\n <p class=\"user-option__line detail\">{{user.email || '[no email]'}}</p>\n <p class=\"user-option__line detail\">{{user.allPhones || '[no phone]'}}</p>\n </div>\n </ng-template>\n</ng-select>\n","import { AfterViewInit, Component, Input, OnChanges, SimpleChanges, ViewChild, forwardRef, OnInit } from '@angular/core'\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { NgSelectComponent } from '@ng-select/ng-select'\nimport { User } from '../user.model'\nimport { UserReadService, UserSearchParams, UserSearchResult } from '../user-read.service'\nimport { pageForItemIndex, itemRangeOfPage } from '@ngageoint/mage.web-core-lib/paging'\nimport { Subject, BehaviorSubject, SubscriptionLike, Unsubscribable } from 'rxjs'\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators'\nimport { X } from '@angular/cdk/keycodes'\n\n@Component({\n selector: 'mage-user-select',\n templateUrl: './user-select.component.html',\n styleUrls: [\n './user-select.component.scss'\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => UserSelectComponent)\n }\n ]\n})\nexport class UserSelectComponent implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor {\n\n readonly baseFindParams: Readonly<UserSearchParams> = Object.freeze({\n pageSize: 100,\n pageIndex: 0,\n term: null\n })\n readonly nextPageScrollThreshold = 15\n readonly searchTermDebounceTime = 500\n readonly trackByUserId: (x: User) => User['id'] = x => x.id\n get loading(): boolean {\n return !!this.currentFetch && !this.currentFetch.closed\n }\n\n users: UserSearchResult[] = []\n totalCount = 0\n searchTerm$ = new Subject<string | null>()\n currentSearchTerm: string | null = null\n @ViewChild(NgSelectComponent, { static: true })\n userSelect: NgSelectComponent\n\n private currentFetch: SubscriptionLike | null = null\n\n constructor(private userService: UserReadService) { }\n\n ngOnInit() {\n this.searchTerm$.pipe(\n distinctUntilChanged(),\n debounceTime(this.searchTermDebounceTime),\n )\n .subscribe(x => {\n this.currentSearchTerm = x\n this.users = []\n this.totalCount = 0\n if (this.currentFetch) {\n this.currentFetch.unsubscribe()\n this.currentFetch = null\n }\n this.fetchNextPage()\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n }\n\n ngAfterViewInit() {\n }\n\n writeValue(x: User | null): void {\n this.userSelect.writeValue(x)\n }\n\n registerOnChange(fn: (...args: any[]) => any): void {\n this.userSelect.registerOnChange(fn)\n }\n\n registerOnTouched(fn: (...args: any[]) => any): void {\n this.userSelect.registerOnTouched(fn)\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.userSelect.setDisabledState(isDisabled)\n }\n\n onOpen() {\n if (this.users.length === 0) {\n this.fetchNextPage()\n }\n }\n\n onScroll({ end }: { start: number, end: number }) {\n if (end < this.users.length - this.nextPageScrollThreshold || this.users.length === this.totalCount) {\n return\n }\n this.fetchNextPage()\n }\n\n onScrollToEnd() {\n\n }\n\n fetchNextPage() {\n if (this.currentFetch) {\n if (this.currentFetch.closed) {\n this.currentFetch = null\n }\n else {\n return\n }\n }\n const nextPage = pageForItemIndex(this.users.length, this.baseFindParams.pageSize)\n const findParams: UserSearchParams = {\n ...this.baseFindParams,\n pageIndex: nextPage\n }\n if (this.currentSearchTerm) {\n findParams.term = this.currentSearchTerm\n }\n this.currentFetch = this.userService.search(findParams).subscribe(page => {\n this.users = this.users.concat(page.items)\n if (typeof page.totalCount === 'number') {\n this.totalCount = page.totalCount\n }\n })\n }\n}","import { ScrollingModule } from '@angular/cdk/scrolling'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { MatAutocompleteModule } from '@angular/material/autocomplete'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatListModule } from '@angular/material/list'\nimport { MatSelectModule } from '@angular/material/select'\nimport { UserSelectComponent } from './user-select/user-select.component'\nimport { NgSelectModule } from '@ng-select/ng-select'\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ScrollingModule,\n MatAutocompleteModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatListModule,\n MatSelectModule,\n NgSelectModule,\n ],\n declarations: [\n UserSelectComponent\n ],\n exports: [\n UserSelectComponent\n ]\n})\nexport class MageUserModule {\n\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserReadService"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
class MageCoreLibModule {
|
|
6
|
+
}
|
|
7
|
+
MageCoreLibModule.ɵfac = function MageCoreLibModule_Factory(t) { return new (t || MageCoreLibModule)(); };
|
|
8
|
+
MageCoreLibModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MageCoreLibModule });
|
|
9
|
+
MageCoreLibModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule] });
|
|
10
|
+
(function () {
|
|
11
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MageCoreLibModule, [{
|
|
12
|
+
type: NgModule,
|
|
13
|
+
args: [{
|
|
14
|
+
declarations: [],
|
|
15
|
+
imports: [
|
|
16
|
+
CommonModule
|
|
17
|
+
]
|
|
18
|
+
}]
|
|
19
|
+
}], null, null);
|
|
20
|
+
})();
|
|
21
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MageCoreLibModule, { imports: [CommonModule] }); })();
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Public API Surface of core-lib
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Generated bundle index. Do not edit.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
export { MageCoreLibModule };
|
|
32
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib.mjs","sources":["../../../projects/core-lib/src/mage-core-lib.module.ts","../../../projects/core-lib/src/public-api.ts","../../../projects/core-lib/src/ngageoint-mage.web-core-lib.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class MageCoreLibModule { }\n","/*\n * Public API Surface of core-lib\n */\n\nexport * from './mage-core-lib.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAWa,iBAAiB,CAAA;;kFAAjB,iBAAiB,GAAA,CAAA,EAAA,CAAA;mEAAjB,iBAAiB,EAAA,CAAA,CAAA;uEAH1B,YAAY,CAAA,EAAA,CAAA,CAAA;;4EAGH,iBAAiB,EAAA,CAAA;kBAN7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;iBACF,CAAA;;;AACY,CAAA,YAAA,EAAA,CAAA,OAAA,SAAA,KAAA,WAAA,IAAA,SAAA,KAAA,EAAA,CAAA,kBAAA,CAAA,iBAAiB,cAH1B,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA,GAAA;;ACRhB;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Component, Inject, Input, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common/http';
|
|
4
|
+
import * as i2 from '@angular/platform-browser';
|
|
5
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
6
|
+
|
|
7
|
+
const selector = 'mage-xhr-img';
|
|
8
|
+
const OBJECT_URL_SERVICE = new InjectionToken(`${selector}.objectUrlService`);
|
|
9
|
+
/**
|
|
10
|
+
* This component allows fetching images by `XMLHttpRequest` rather than the
|
|
11
|
+
* browser's native mechanism. These image requests are subject to HTTP
|
|
12
|
+
* interceptors that can add authorization headers to the request instead of
|
|
13
|
+
* using cache-defeating URL query parameters to set an auth token. Applying
|
|
14
|
+
* headers to the browser's native `img` requests is impossible, so a query
|
|
15
|
+
* parameter is necessary for authorization, but adding the parameter to the
|
|
16
|
+
* URL effectively bypasses the browser's caching mechanism when the auth token
|
|
17
|
+
* changes for images that
|
|
18
|
+
* should otherwise be subject to caching.
|
|
19
|
+
*
|
|
20
|
+
* The catch to fetching images by XHR is the response must be fetched as a
|
|
21
|
+
* `Blob`. The user then gets a browser-specific URL for the blob by
|
|
22
|
+
* `URL.createObjectURL(blob)`, which can then be assigned to the `src`
|
|
23
|
+
* attribute of an `img` tag. These blob URLs must then be "revoked" by
|
|
24
|
+
* `URL.revokeObjectURL(url)` in order to reclaim object URL's associated
|
|
25
|
+
* resources. See [Mozilla's docs](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications#example_using_object_urls_to_display_images)
|
|
26
|
+
* on the subject.
|
|
27
|
+
*
|
|
28
|
+
* To use the component, simply add the tag to a template and bind the `src`
|
|
29
|
+
* attribute to the source URL of the desired image.
|
|
30
|
+
* ```
|
|
31
|
+
* <mage-xhr-img [src]="someComponent.imageUrlRequiresAuth"></mage-xhr-img>
|
|
32
|
+
* ```
|
|
33
|
+
* The component encapsulates the logic of creating and releasing the object
|
|
34
|
+
* URLs for the image data, preventing memory leaks.
|
|
35
|
+
*/
|
|
36
|
+
class XhrImgComponent {
|
|
37
|
+
constructor(objectUrlService, http, sanitizer) {
|
|
38
|
+
this.objectUrlService = objectUrlService;
|
|
39
|
+
this.http = http;
|
|
40
|
+
this.sanitizer = sanitizer;
|
|
41
|
+
this.sourceUrl = null;
|
|
42
|
+
this.safeBlobUrl = null;
|
|
43
|
+
}
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (!changes.sourceUrl) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (changes.sourceUrl.isFirstChange() && !this.sourceUrl) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.disposeCurrent();
|
|
52
|
+
if (!this.sourceUrl) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.subscription = this.http.get(this.sourceUrl, { responseType: 'blob' })
|
|
56
|
+
.subscribe(x => {
|
|
57
|
+
this.objectUrlService.revokeObjectURL(this.blobUrl);
|
|
58
|
+
this.blobUrl = this.objectUrlService.createObjectURL(x);
|
|
59
|
+
this.safeBlobUrl = this.sanitizer.bypassSecurityTrustUrl(this.blobUrl);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
ngOnDestroy() {
|
|
63
|
+
this.disposeCurrent();
|
|
64
|
+
}
|
|
65
|
+
onImgLoad() {
|
|
66
|
+
this.disposeCurrent();
|
|
67
|
+
}
|
|
68
|
+
disposeCurrent() {
|
|
69
|
+
if (this.blobUrl) {
|
|
70
|
+
this.objectUrlService.revokeObjectURL(this.blobUrl);
|
|
71
|
+
}
|
|
72
|
+
if (this.subscription) {
|
|
73
|
+
this.subscription.unsubscribe();
|
|
74
|
+
}
|
|
75
|
+
this.blobUrl = null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
XhrImgComponent.ɵfac = function XhrImgComponent_Factory(t) { return new (t || XhrImgComponent)(i0.ɵɵdirectiveInject(OBJECT_URL_SERVICE), i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.DomSanitizer)); };
|
|
79
|
+
XhrImgComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: XhrImgComponent, selectors: [["mage-xhr-img"]], inputs: { sourceUrl: ["src", "sourceUrl"] }, features: [i0.ɵɵProvidersFeature([
|
|
80
|
+
{
|
|
81
|
+
provide: OBJECT_URL_SERVICE,
|
|
82
|
+
useValue: URL
|
|
83
|
+
}
|
|
84
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "load"]], template: function XhrImgComponent_Template(rf, ctx) { if (rf & 1) {
|
|
85
|
+
i0.ɵɵelementStart(0, "img", 0);
|
|
86
|
+
i0.ɵɵlistener("load", function XhrImgComponent_Template_img_load_0_listener() { return ctx.onImgLoad(); });
|
|
87
|
+
i0.ɵɵelementEnd();
|
|
88
|
+
} if (rf & 2) {
|
|
89
|
+
i0.ɵɵattribute("src", ctx.safeBlobUrl, i0.ɵɵsanitizeUrl);
|
|
90
|
+
} }, styles: ["img[_ngcontent-%COMP%]{height:100%;width:100%}"] });
|
|
91
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(XhrImgComponent, [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ selector: `${selector}`, template: `<img [attr.src]="safeBlobUrl" (load)="onImgLoad()"/>`, providers: [
|
|
94
|
+
{
|
|
95
|
+
provide: OBJECT_URL_SERVICE,
|
|
96
|
+
useValue: URL
|
|
97
|
+
}
|
|
98
|
+
], styles: ["img{height:100%;width:100%}\n"] }]
|
|
99
|
+
}], function () { return [{ type: undefined, decorators: [{
|
|
100
|
+
type: Inject,
|
|
101
|
+
args: [OBJECT_URL_SERVICE]
|
|
102
|
+
}] }, { type: i1.HttpClient }, { type: i2.DomSanitizer }]; }, { sourceUrl: [{
|
|
103
|
+
type: Input,
|
|
104
|
+
args: ['src']
|
|
105
|
+
}] }); })();
|
|
106
|
+
|
|
107
|
+
class MageCommonModule {
|
|
108
|
+
}
|
|
109
|
+
MageCommonModule.ɵfac = function MageCommonModule_Factory(t) { return new (t || MageCommonModule)(); };
|
|
110
|
+
MageCommonModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MageCommonModule });
|
|
111
|
+
MageCommonModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [BrowserModule] });
|
|
112
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MageCommonModule, [{
|
|
113
|
+
type: NgModule,
|
|
114
|
+
args: [{
|
|
115
|
+
imports: [
|
|
116
|
+
BrowserModule
|
|
117
|
+
],
|
|
118
|
+
declarations: [
|
|
119
|
+
XhrImgComponent
|
|
120
|
+
],
|
|
121
|
+
exports: [
|
|
122
|
+
XhrImgComponent
|
|
123
|
+
]
|
|
124
|
+
}]
|
|
125
|
+
}], null, null); })();
|
|
126
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MageCommonModule, { declarations: [XhrImgComponent], imports: [BrowserModule], exports: [XhrImgComponent] }); })();
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Generated bundle index. Do not edit.
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
export { MageCommonModule, OBJECT_URL_SERVICE, XhrImgComponent };
|
|
133
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-common.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-common.mjs","sources":["../../../projects/core-lib/common/xhr-img.component.ts","../../../projects/core-lib/common/mage-common.module.ts","../../../projects/core-lib/common/ngageoint-mage.web-core-lib-common.ts"],"sourcesContent":["import { Component, ElementRef, Inject, InjectionToken, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser'\nimport { Subscription } from 'rxjs'\n\nconst selector = 'mage-xhr-img'\n\n/**\n * This is a simple interface that includes the [methods](https://www.w3.org/TR/FileAPI/#creating-revoking)\n * from the [URL API](https://developer.mozilla.org/en-US/docs/Web/API/URL) for\n * managing blob URLs. This allows a service to be injected into\n * `XhrImgComponent` and overridden for testing.\n */\nexport interface ObjectUrlService {\n createObjectURL: (typeof URL)['createObjectURL']\n revokeObjectURL: (typeof URL)['revokeObjectURL']\n}\nexport const OBJECT_URL_SERVICE = new InjectionToken<ObjectUrlService>(`${selector}.objectUrlService`)\n\n/**\n * This component allows fetching images by `XMLHttpRequest` rather than the\n * browser's native mechanism. These image requests are subject to HTTP\n * interceptors that can add authorization headers to the request instead of\n * using cache-defeating URL query parameters to set an auth token. Applying\n * headers to the browser's native `img` requests is impossible, so a query\n * parameter is necessary for authorization, but adding the parameter to the\n * URL effectively bypasses the browser's caching mechanism when the auth token\n * changes for images that\n * should otherwise be subject to caching.\n *\n * The catch to fetching images by XHR is the response must be fetched as a\n * `Blob`. The user then gets a browser-specific URL for the blob by\n * `URL.createObjectURL(blob)`, which can then be assigned to the `src`\n * attribute of an `img` tag. These blob URLs must then be \"revoked\" by\n * `URL.revokeObjectURL(url)` in order to reclaim object URL's associated\n * resources. See [Mozilla's docs](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications#example_using_object_urls_to_display_images)\n * on the subject.\n *\n * To use the component, simply add the tag to a template and bind the `src`\n * attribute to the source URL of the desired image.\n * ```\n * <mage-xhr-img [src]=\"someComponent.imageUrlRequiresAuth\"></mage-xhr-img>\n * ```\n * The component encapsulates the logic of creating and releasing the object\n * URLs for the image data, preventing memory leaks.\n */\n@Component({\n selector: `${selector}`,\n template: `<img [attr.src]=\"safeBlobUrl\" (load)=\"onImgLoad()\"/>`,\n styles: [ `img { height: 100%; width: 100% }` ],\n providers: [\n {\n provide: OBJECT_URL_SERVICE,\n useValue: URL\n }\n ]\n})\nexport class XhrImgComponent implements OnChanges, OnDestroy {\n\n @Input('src')\n sourceUrl: string | null = null\n safeBlobUrl: SafeUrl | null = null\n\n private blobUrl: string\n private subscription: Subscription\n\n constructor(@Inject(OBJECT_URL_SERVICE) private objectUrlService: ObjectUrlService, private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.sourceUrl) {\n return\n }\n if (changes.sourceUrl.isFirstChange() && !this.sourceUrl) {\n return\n }\n this.disposeCurrent()\n if (!this.sourceUrl) {\n return\n }\n this.subscription = this.http.get(this.sourceUrl, { responseType: 'blob' })\n .subscribe(x => {\n this.objectUrlService.revokeObjectURL(this.blobUrl)\n this.blobUrl = this.objectUrlService.createObjectURL(x)\n this.safeBlobUrl = this.sanitizer.bypassSecurityTrustUrl(this.blobUrl)\n })\n }\n\n ngOnDestroy() {\n this.disposeCurrent()\n }\n\n onImgLoad() {\n this.disposeCurrent()\n }\n\n private disposeCurrent() {\n if (this.blobUrl) {\n this.objectUrlService.revokeObjectURL(this.blobUrl)\n }\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.blobUrl = null\n }\n}","import { NgModule } from '@angular/core'\nimport { BrowserModule } from '@angular/platform-browser'\nimport { XhrImgComponent } from './xhr-img.component'\n\n@NgModule({\n imports: [\n BrowserModule\n ],\n declarations: [\n XhrImgComponent\n ],\n exports: [\n XhrImgComponent\n ]\n})\nexport class MageCommonModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
const EVENT_READ_SERVICE = new InjectionToken('EventReadService');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generated bundle index. Do not edit.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export { EVENT_READ_SERVICE };
|
|
10
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-event.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-event.mjs","sources":["../../../projects/core-lib/event/event-read.service.ts","../../../projects/core-lib/event/ngageoint-mage.web-core-lib-event.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { PagingParameters } from '@ngageoint/mage.web-core-lib/paging'\nimport { Observable } from 'rxjs'\nimport { MageEvent } from './event.model'\n\nexport interface EventReadService {\n find(which: EventReadParams): Observable<MageEvent[]>\n}\n\nexport interface EventReadParams {\n page: PagingParameters\n}\n\nexport const EVENT_READ_SERVICE = new InjectionToken<EventReadService>('EventReadService')","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAaa,kBAAkB,GAAG,IAAI,cAAc,CAAmB,kBAAkB;;ACbzF;;AAEG;;;;"}
|