<app-spinner *ngIf="(datasetListIsLoading | async) 
    || (attributeListIsLoading | async) 
    || (criteriaFamilyListIsLoading | async) 
    || (outputFamilyListIsLoading | async)
    || (outputCategoryListIsLoading | async)
    || (dataLengthIsLoading | async)">
</app-spinner>

<div *ngIf="(datasetListIsLoaded | async)
    && (attributeListIsLoaded | async) 
    && (criteriaFamilyListIsLoaded | async) 
    && (outputFamilyListIsLoaded | async)
    && (outputCategoryListIsLoaded | async)
    && (dataLengthIsLoaded | async)" class="row mt-4">
    <div class="col-12">
        <div *ngIf="(dataLength | async) < 1" class="jumbotron mb-4 py-4">
            <div class="lead">
                No data found for this search
            </div>
        </div>
        <ng-container *ngIf="(dataLength | async) > 0">
            <div class="jumbotron row mb-4 py-4">
                <div class="col">
                    <div class="lead">
                        <span class="font-weight-bold">{{ dataLength | async }}</span> objects found in the 
                        <span class="font-weight-bold">{{ (dataset | async).label }}</span> dataset 
                        <span *ngIf="(criteriaList | async).length > 0">
                            with <span class="font-weight-bold">{{ (criteriaList | async).length }}</span> search criteria.
                        </span>
                        <app-criteria-list *ngIf="(criteriaList | async).length > 0"
                            [criteriaList]="criteriaList | async"
                            [attributeList]="attributeList | async">
                        </app-criteria-list>
                    </div>
                    <div class="lead mt-4">
                        <app-download-result
                            [instance]="instance | async"
                            [dataset]="dataset | async"
                            [attributeList]="attributeList | async"
                            [criteriaList]="criteriaList | async"
                            [outputList]="outputList | async"
                            [coneSearch]="coneSearch | async"
                            [sampRegistered]="sampRegistered | async"
                            [archiveIsCreating]="archiveIsCreating | async"
                            (sampRegister)="sampRegister()"
                            (sampUnregister)="sampUnregister()"
                            (downloadFile)="downloadFile($event)"
                            (broadcastVotable)="broadcastVotable($event)"
                            (startTaskCreateArchive)="startTaskCreateArchive($event)">
                        </app-download-result>
                    </div>
                </div>
                <div class="col-md-6" *ngIf="coneSearch | async">
                    <app-image-list-result
                        [dataset]="dataset | async"
                        [attributeList]="attributeList | async"
                        [coneSearch]="coneSearch | async"
                        [coneSearchConfig]="coneSearchConfig | async"
                        [data]="data | async"
                        [dataIsLoading]="dataIsLoading | async"
                        [dataIsLoaded]="dataIsLoaded | async"
                        [imageList]="imageList | async"
                        [imageListIsLoading]="imageListIsLoading | async"
                        [imageListIsLoaded]="imageListIsLoaded | async"
                        [sampRegistered]="sampRegistered | async"
                        (downloadFile)="downloadFile($event)">
                    </app-image-list-result>
                </div>
            </div>
            <div class="row">
                <div class="col-2">
                    <app-datatable-actions 
                        [dataset]="dataset | async"
                        [criteriaList]="criteriaList | async"
                        [outputList]="outputList | async"
                        [coneSearch]="coneSearch | async"
                        [attributeList]="attributeList | async"
                        [selectedData]="selectedData | async"
                        [sampRegistered]="sampRegistered | async"
                        [archiveIsCreating]="archiveIsCreating | async"
                        (downloadFile)="downloadFile($event)"
                        (broadcastVotable)="broadcastVotable($event)"
                        (startTaskCreateArchive)="startTaskCreateArchive($event)">
                    </app-datatable-actions>
                </div>
                <div class="col align-self-center">
                    <app-url-display
                        [dataset]="dataset | async"
                        [criteriaList]="criteriaList | async"
                        [outputList]="outputList | async"
                        [coneSearch]="coneSearch | async">
                    </app-url-display>
                </div>
            </div>
            <app-datatable *ngIf="(dataset | async).datatable_enabled"
                [dataset]="dataset | async"
                [instance]="instance | async"
                [attributeList]="attributeList | async"
                [outputList]="outputList | async"
                [queryParams]="queryParams | async"
                [dataLength]="dataLength | async"
                [data]="data | async"
                [dataIsLoading]="dataIsLoading | async"
                [dataIsLoaded]="dataIsLoaded | async"
                [selectedData]="selectedData | async"
                (retrieveData)="retrieveData($event)"
                (addSelectedData)="addSearchData($event)"
                (deleteSelectedData)="deleteSearchData($event)"
                (downloadFile)="downloadFile($event)">
            </app-datatable>
        </ng-container>
    </div>
</div>
<div class="row mt-5 justify-content-between">
    <div class="col">
        <a routerLink="/instance/{{ instanceSelected | async }}/search/output/{{ datasetSelected | async }}" [queryParams]="queryParams | async" class="btn btn-outline-secondary">
            <span class="fas fa-arrow-left"></span> Output
        </a>
    </div>
</div>