{"version":3,"file":"spinque-angular-ui-single-result.mjs","sources":["../../../projects/spinque-angular-ui/single-result/src/single-result.component.ts","../../../projects/spinque-angular-ui/single-result/src/single-result.component.html","../../../projects/spinque-angular-ui/single-result/spinque-angular-ui-single-result.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, inject, input, Input, OnChanges, Output, signal, SimpleChanges, TemplateRef } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SpinqueApiService } from '@spinque/angular-ui';\nimport { Query, ResultItem, TupleTypes, ResultsResponse, SpinqueResultObject } from '@spinque/query-api';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n    selector: 'spinque-single-result',\n    imports: [\n        CommonModule,\n        MatProgressSpinnerModule,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    templateUrl: './single-result.component.html',\n    styles: [\n        ``\n    ]\n})\nexport class SpinqueSingleResult<EndpointOutputType extends TupleTypes[], MappedItemType> implements OnChanges {\n  @ContentChild(TemplateRef) template?: TemplateRef<{ $implicit: MappedItemType; }>;\n\n  noResultMessage = input<string>('Object not found');\n  @Input() queryStack: Query[] | undefined | null;\n\n  /**\n   * A mapping that is to be applied to the SpinqueResultItems in order to get a custom format\n   */\n  @Input() itemMapping: (item: ResultItem<EndpointOutputType>) => MappedItemType = item => item as MappedItemType;\n\n  @Output() loaded = new EventEmitter<{ count: number }>();\n\n  useEntityViews = input(false, { transform: booleanAttribute });\n\n  isLoading = signal(false);\n  error = signal<any>(undefined);\n\n  item = signal<MappedItemType | undefined>(undefined);\n\n  private api = inject(SpinqueApiService);\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['queryStack'] && changes['queryStack'].currentValue && this.queryStack) {\n      this.item.set(undefined);\n      this.getResult(this.queryStack).subscribe((item) => {\n        this.isLoading.set(false);\n        this.item.set(item);\n        this.loaded.emit({ count: 1 });\n      }, (error: any) => {\n        this.isLoading.set(false);\n        this.error.set(error.error || error);\n        console.error(error);\n      });\n    }\n  }\n\n  getResult(queries: Query[]) {\n    this.isLoading.set(true);\n    this.item.set(undefined);\n    this.error.set(undefined);\n\n    const result$ = this.useEntityViews() ? this.api.getResultPage<EndpointOutputType>(queries, { count: 1, offset: 0 }) : this.api.getResults<EndpointOutputType>(queries, { count: 1, offset: 0 });\n\n    return result$.pipe(\n      switchMap(res => {\n        if (!('count' in res) || res.items.length < 1) {\n          return throwError(res);\n        } else {\n          return of(res);\n        }\n      }),\n      map((result) => this.itemMapping(result.items[0]))\n    );\n  }\n}","@if (isLoading()) {\n  <div class=\"loading\" style=\"padding: 75px 0; text-align: center\">\n    <mat-spinner [diameter]=\"50\" aria-label=\"Loading..\" />\n    <span style=\"opacity: 0\">Loading..</span>\n  </div>\n} @else if (error()) {\n  <div class=\"error\">\n    <p>{{ error() | json }}</p>\n    @if (error() && error().message && error().message.includes('401')) {\n      <p>API authorization failed or API is disabled.</p>\n    }\n  </div>\n} @else if (!item()) {\n  <div class=\"error\" style=\"padding: 48px 0\">\n    <h2>{{ noResultMessage() }}</h2>\n  </div>\n} @else {\n  <div style=\"width: 100%\">\n    <div class=\"spinque-result-item\">\n      @if (template) {\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item() }\" />\n      } @else {\n        <pre>{{ item() | json }}</pre>\n      }\n    </div>\n  </div>  \n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}