{"version":3,"file":"spinque-angular-ui-result-grid.mjs","sources":["../../../projects/spinque-angular-ui/result-grid/src/result-grid.component.ts","../../../projects/spinque-angular-ui/result-grid/src/result-grid.component.html","../../../projects/spinque-angular-ui/result-grid/spinque-angular-ui-result-grid.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';\nimport {MatGridListModule} from '@angular/material/grid-list';\n\n@Component({\n    selector: 'spinque-result-grid',\n    templateUrl: './result-grid.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, MatGridListModule],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SpinqueResultGrid<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  @Input() cols = 4;\n  @Input() rowHeight = 200;\n  @Input() gutterSize = 1;\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    <mat-grid-list [cols]=\"cols\" [rowHeight]=\"rowHeight\" [gutterSize]=\"'' + gutterSize\" style=\"width: 100%;\">\n      @for (item of items(); track item) {\n        <mat-grid-tile>\n          @if (template) {\n            <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\" />\n          } @else {\n            <pre>{{ item | json }}</pre>\n          }\n        </mat-grid-tile>\n      }\n    </mat-grid-list>\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":"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"}