{"version":3,"file":"spinque-angular-ui-result-list.mjs","sources":["../../../projects/spinque-angular-ui/result-list/src/result-list.component.ts","../../../projects/spinque-angular-ui/result-list/src/result-list.component.html","../../../projects/spinque-angular-ui/result-list/spinque-angular-ui-result-list.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, inject, input, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SpinqueApiService } from '@spinque/angular-ui';\nimport { SpinqueResultBase } from '@spinque/angular-ui/result-base';\nimport { TupleTypes } from '@spinque/query-api';\n\n@Component({\n    selector: 'spinque-result-list',\n    templateUrl: './result-list.component.html',\n    styles: [\n        `\n      .spinque-result-item {\n        margin: 16px 0;\n      }\n      .loading {\n        justify-content: center;\n        display: flex;\n        padding: 35px 0;\n      }\n    `\n    ],\n    imports: [CommonModule, MatProgressSpinnerModule],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SpinqueResultList<EndpointOutputType extends TupleTypes[], MappedItemType> extends SpinqueResultBase<EndpointOutputType, MappedItemType> implements OnChanges {\n  // public override api = inject(SpinqueApiService);\n\n  @ContentChild(TemplateRef) template?: TemplateRef<{ $implicit: MappedItemType }>;\n\n  scroll = input<{ top: number; bottom: number }>();\n  @Input() scrollOffset = 100;\n  @Input() noResultsMessage = 'No results';\n  @Input() noResultsSecondaryMessage?: string;\n\n  override ngOnChanges(changes: SimpleChanges) {\n    super.ngOnChanges(changes);\n\n    if (changes['scroll'] && !changes['scroll'].firstChange && this.queryStack()) {\n      const bottom = changes['scroll'].currentValue.bottom;\n      if (bottom < this.scrollOffset && !this.isLoading() && !this.allLoaded()) {\n        const offset = this.items().length;\n        this.getResults(this.queryStack(), offset).subscribe(data => {\n          this.items.set([...this.items(), ...data.items]);\n        });\n      }\n    }\n  }\n}","@if (items().length === 0) {\n  @if (isLoading()) {\n    <div class=\"loading\">\n      <mat-spinner [diameter]=\"50\" aria-label=\"Loading results\" />\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 {\n    <div class=\"error\" style=\"padding: 48px 0\">\n      <h2>{{ noResultsMessage }}</h2>\n      @if (noResultsSecondaryMessage) {\n        <p>{{ noResultsSecondaryMessage }}</p>\n      }\n    </div>\n  }\n} @else if (items().length > 0) {\n  <div style=\"width: 100%\">\n    @for (item of items(); track item) {\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    }\n    @if (isLoading()) {\n      <div class=\"loading\">\n        <mat-spinner [diameter]=\"50\" aria-label=\"Loading results\" />\n      </div>\n    }\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;AAyBM,MAAO,iBAA2E,SAAQ,iBAAqD,CAAA;AAlBrJ,IAAA,WAAA,GAAA;;AAuBE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAAmC;QACxC,IAAA,CAAA,YAAY,GAAG,GAAG;QAClB,IAAA,CAAA,gBAAgB,GAAG,YAAY;AAgBzC,IAAA;AAbU,IAAA,WAAW,CAAC,OAAsB,EAAA;AACzC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAE1B,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,MAAM;AACpD,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC1D,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;8GAtBW,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ytBAGd,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B3B,ooCAsCA,EAAA,MAAA,EAAA,CAAA,mGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBc,YAAY,qMAAE,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGvC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;+BACI,qBAAqB,EAAA,OAAA,EActB,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAChC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ooCAAA,EAAA,MAAA,EAAA,CAAA,mGAAA,CAAA,EAAA;;sBAKhD,YAAY;uBAAC,WAAW;;sBAGxB;;sBACA;;sBACA;;;AEjCH;;AAEG;;;;"}