UNPKG

@ng-doc/app

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

1 lines 13.1 kB
{"version":3,"file":"ng-doc-app-components-api-list.mjs","sources":["../../../../libs/app/components/api-list/api-list.component.ts","../../../../libs/app/components/api-list/api-list.component.html","../../../../libs/app/components/api-list/ng-doc-app-components-api-list.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { ActivatedRoute, ParamMap, Router, RouterLink } from '@angular/router';\nimport { NgDocKindIconComponent } from '@ng-doc/app/components/kind-icon';\nimport { NgDocFormPartialValue } from '@ng-doc/app/types';\nimport { asArray } from '@ng-doc/core/helpers/as-array';\nimport { NgDocApiList, NgDocApiListItem } from '@ng-doc/core/interfaces';\nimport {\n NgDocAutofocusDirective,\n NgDocButtonToggleComponent,\n NgDocIconComponent,\n NgDocInputStringDirective,\n NgDocInputWrapperComponent,\n NgDocRadioGroupDirective,\n NgDocTextComponent,\n NgDocTooltipDirective,\n} from '@ng-doc/ui-kit';\nimport { NG_REQUEST_BASE_PATH } from '@ng-doc/ui-kit/tokens';\nimport { startWith } from 'rxjs/operators';\n\ninterface ApiFilterForm {\n filter: FormControl<string | null>;\n scope: FormControl<string | null>;\n type: FormControl<string | null>;\n}\n\n@Component({\n selector: 'ng-doc-api-list',\n templateUrl: './api-list.component.html',\n styleUrls: ['./api-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgDocTextComponent,\n FormsModule,\n ReactiveFormsModule,\n NgDocInputWrapperComponent,\n NgDocIconComponent,\n NgDocInputStringDirective,\n NgDocAutofocusDirective,\n NgDocKindIconComponent,\n NgDocTooltipDirective,\n RouterLink,\n NgDocRadioGroupDirective,\n NgDocButtonToggleComponent,\n ],\n})\nexport class NgDocApiListComponent implements OnInit {\n private readonly baseUrl = inject(NG_REQUEST_BASE_PATH);\n\n title = input<string>('API References');\n segment = input<string>();\n\n apiList: WritableSignal<NgDocApiList[]> = signal([]);\n filteredApiList: Signal<NgDocApiList[]>;\n filter: Signal<any>;\n scopes: Signal<string[]>;\n types: Signal<string[]>;\n\n protected formGroup: FormGroup<ApiFilterForm>;\n\n private readonly formBuilder = inject(FormBuilder);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly httpClient = inject(HttpClient);\n\n constructor() {\n this.formGroup = this.formBuilder.group({\n filter: [''],\n scope: [''],\n type: [''],\n });\n\n this.filter = toSignal(this.formGroup.valueChanges.pipe(startWith(this.formGroup.value)), {\n initialValue: this.formGroup.value,\n });\n\n this.scopes = computed(() =>\n asArray(new Set(this.apiList().flatMap((api: NgDocApiList) => api.title))).sort(),\n );\n\n this.types = computed(() =>\n asArray(\n new Set(\n this.apiList()\n .flatMap((api: NgDocApiList) => api.items)\n .flatMap((item: NgDocApiListItem) => item.type),\n ),\n ).sort(),\n );\n\n this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe((paramMap: ParamMap) =>\n this.formGroup.setValue({\n filter: paramMap.get('filter') || null,\n scope: paramMap.get('scope') || null,\n type: paramMap.get('type') || null,\n }),\n );\n\n this.formGroup.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((formValue: NgDocFormPartialValue<typeof this.formGroup>) =>\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: formValue,\n queryParamsHandling: 'merge',\n }),\n );\n\n this.filteredApiList = computed(() => {\n const { filter, scope, type } = this.filter();\n\n return this.apiList()\n .filter((api: NgDocApiList) => !scope || api.title === scope)\n .map((api: NgDocApiList) => ({\n ...api,\n items: api.items\n .filter(\n (item: NgDocApiListItem) =>\n item.name.toLowerCase().includes(filter?.toLowerCase() ?? '') &&\n (!type || item.type === type),\n )\n .sort(\n (a: NgDocApiListItem, b: NgDocApiListItem) =>\n a.type.localeCompare(b.type) || a.name.localeCompare(b.name),\n ),\n }))\n .filter((api: NgDocApiList) => api.items.length);\n });\n }\n\n ngOnInit(): void {\n this.httpClient\n .get<\n NgDocApiList[]\n >(this.baseUrl + asArray('assets/ng-doc', this.segment(), 'api-list.json').join('/'))\n .subscribe((apiList) => this.apiList.set(apiList));\n }\n}\n","<h1 ng-doc-text>{{ title() }}</h1>\n<div class=\"ng-doc-api-list-wrapper\">\n <form [formGroup]=\"formGroup\">\n @if (types().length) {\n <h3>Declaration types</h3>\n <ul class=\"ng-doc-filter-list\" ngDocRadioGroup formControlName=\"type\">\n @for (type of types(); track type) {\n <li>\n <button class=\"ng-doc-filter-button\" ng-doc-button-toggle [value]=\"type\">\n <ng-doc-kind-icon [kind]=\"type\" size=\"medium\"></ng-doc-kind-icon>\n {{ type }}\n </button>\n </li>\n }\n </ul>\n }\n\n @if (scopes().length) {\n <h3>Scopes</h3>\n <ul class=\"ng-doc-filter-list\" ngDocRadioGroup formControlName=\"scope\">\n @for (scope of scopes(); track scope) {\n <li>\n <button class=\"ng-doc-filter-button\" ng-doc-button-toggle [value]=\"scope\">\n {{ scope }}\n </button>\n </li>\n }\n </ul>\n }\n\n <h3>Filter</h3>\n <ng-doc-input-wrapper class=\"ng-doc-api-list-filter-input\">\n <ng-doc-icon icon=\"search\" ngDocInputWrapperLeft></ng-doc-icon>\n <input\n ngDocInputString\n formControlName=\"filter\"\n placeholder=\"Declaration name...\"\n ngDocAutofocus />\n </ng-doc-input-wrapper>\n </form>\n\n <div class=\"ng-doc-api-list\">\n @for (scope of filteredApiList(); track scope) {\n <div class=\"ng-doc-api-scope\">\n <h3 class=\"ng-doc-scope-title\" ng-doc-text>{{ scope.title }}</h3>\n @if (scope.items.length) {\n <ul class=\"ng-doc-scope-items\">\n @for (apiReference of scope.items; track apiReference) {\n <li class=\"ng-doc-scope-item\">\n <a class=\"ng-doc-scope-item-link\" [routerLink]=\"[apiReference.route]\">\n <ng-doc-kind-icon\n [kind]=\"apiReference.type\"\n size=\"medium\"\n [ngDocTooltip]=\"apiReference.type\">\n </ng-doc-kind-icon>\n {{ apiReference.name }}\n </a>\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}