Skip to content
Snippets Groups Projects
configure-dataset.component.html 12.3 KiB
Newer Older
<app-spinner *ngIf="(attributeListIsLoading | async) 
    || (datasetListIsLoading | async)
    || (criteriaFamilyListIsLoading | async)
    || (outputFamilyListIsLoading | async)
    || (outputCategoryListIsLoading | async)
    || (imageListIsLoading | async)
    || (detailConfigIsLoading | async)
    || (coneSearchConfigIsLoading | async)">
</app-spinner>

<div *ngIf="(attributeListIsLoaded | async) 
    && (datasetListIsLoaded | async)
    && (criteriaFamilyListIsLoaded | async)
    && (outputFamilyListIsLoaded | async)
    && (outputCategoryListIsLoaded | async)
    && (imageListIsLoaded | async)
    && (detailConfigIsLoaded | async)
    && (coneSearchConfigIsLoaded | async)" class="container-fluid">
    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            <li class="breadcrumb-item">
                <a routerLink="/admin/instance/instance-list">Instances</a>
            </li>
            <li class="breadcrumb-item">
                <a routerLink="/admin/instance/configure-instance/{{ (instance | async).name }}">
                    Configure instance {{ (instance | async).label }}
                </a>
            </li>
            <li class="breadcrumb-item active" aria-current="page">
                Configure dataset {{ (dataset | async).label }}
            </li>
        </ol>
    </nav>

    <div class="row mb-3">
        <div class="col-12">
            <app-add-attribute
                [columnList]="columnList | async"
                [columnListIsLoading]="columnListIsLoading | async"
                [columnListIsLoaded]="columnListIsLoaded | async"
                [attributeList]="attributeList | async"
                (loadColumnList)="loadColumnList()"
                (add)="addAttribute($event)">
            </app-add-attribute>
        </div>
    </div>

    <div class="row mt-1">
        <div class="col-12">
            <div *ngIf="(attributeList | async).length < 1" class="alert alert-warning" role="alert">
                <span class="fas fa-exclamation-triangle"></span> You must add at least one attribute to use this dataset
            </div>
            
            <div *ngIf="(attributeList | async).length > 0" class="card">
                <div class="card-header">
                    <ul class="nav nav-tabs card-header-tabs">
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'general'}" [ngClass]="{'active': (tabSelected | async) === 'general'}">General</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'criteria'}" [ngClass]="{'active': (tabSelected | async) === 'criteria'}">Criteria</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'output'}" [ngClass]="{'active': (tabSelected | async) === 'output'}">Output</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'result'}" [ngClass]="{'active': (tabSelected | async) === 'result'}">Result</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'detail'}" [ngClass]="{'active': (tabSelected | async) === 'detail'}">Detail</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'vo'}" [ngClass]="{'disabled': !getVoEnabled(), 'active': (tabSelected | async) === 'vo'}">VO</a>
                        </li>
                        <li class="nav-item ml-auto">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'cfamilies'}" [ngClass]="{'active': (tabSelected | async) === 'cfamilies'}">Criteria Families</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'ofamilies'}" [ngClass]="{'active': (tabSelected | async) === 'ofamilies'}">Output Families</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'ocategories'}" [ngClass]="{'active': (tabSelected | async) === 'ocategories'}">Output Categories</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'images'}" [ngClass]="{'active': (tabSelected | async) === 'images'}">Images</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'files'}" [ngClass]="{'active': (tabSelected | async) === 'files'}">Files</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'cone-search'}" [ngClass]="{'active': (tabSelected | async) === 'cone-search'}">Cone-search</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" routerLink="./" [queryParams]="{tab_selected: 'detail-page'}" [ngClass]="{'active': (tabSelected | async) === 'detail-page'}">Detail page</a>
                        </li>
                    </ul>
                </div>
                <div class="card-body" [ngSwitch]="tabSelected | async">
                    <app-table-general *ngSwitchCase="'general'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            general
                            [attribute]="attribute"
                            (save)="editAttribute($event)"
                            (delete)="deleteAttribute($event)">
                        </tr>
                    </app-table-general>
                    <app-table-criteria *ngSwitchCase="'criteria'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            criteria
                            [attribute]="attribute"
                            [criteriaFamilyList]="criteriaFamilyList | async"
                            [attributeDistinctList]="attributeDistinctList | async"
                            [attributeDistinctListIsLoading]="attributeDistinctListIsLoading | async"
                            [attributeDistinctListIsLoaded]="attributeDistinctListIsLoaded | async"
                            (loadAttributeDistinctList)="loadAttributeDistinctList(attribute)"
                            (save)="editAttribute($event)">
                        </tr>
                    </app-table-criteria>
                    <app-table-output *ngSwitchCase="'output'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            output
                            [attribute]="attribute"
                            [outputFamilyList]="outputFamilyList | async"
                            [outputCategoryList]="outputCategoryList | async"
                            (save)="editAttribute($event)">
                        </tr>
                    </app-table-output>
                    <app-table-result *ngSwitchCase="'result'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            result
                            [attribute]="attribute"
                            (save)="editAttribute($event)">
                        </tr>
                    </app-table-result>
                    <app-table-detail *ngSwitchCase="'detail'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            detail
                            [attribute]="attribute"
                            [outputCategoryList]="outputCategoryList | async"
                            (save)="editAttribute($event)">
                        </tr>
                    </app-table-detail>
                    <app-table-vo *ngSwitchCase="'vo'">
                        <tr *ngFor="let attribute of (attributeList | async)"
                            vo
                            [attribute]="attribute"
                            (save)="editAttribute($event)">
                        </tr>
                    </app-table-vo>
                    <app-criteria-family-list 
                        *ngSwitchCase="'cfamilies'"
                        [criteriaFamilyList]="criteriaFamilyList | async"
                        (add)="addCriteriaFamily($event)"
                        (edit)="editCriteriaFamily($event)"
                        (delete)="deleteCriteriaFamily($event)">
                    </app-criteria-family-list>
                    <app-output-family-list 
                        *ngSwitchCase="'ofamilies'"
                        [outputFamilyList]="outputFamilyList | async"
                        (add)="addOutputFamily($event)"
                        (edit)="editOutputFamily($event)"
                        (delete)="deleteOutputFamily($event)">
                    </app-output-family-list>
                    <app-output-category-list 
                        *ngSwitchCase="'ocategories'"
                        [outputCategoryList]="outputCategoryList | async"
                        [outputFamilyList]="outputFamilyList | async"
                        (add)="addOutputCategory($event)"
                        (edit)="editOutputCategory($event)"
                        (delete)="deleteOutputCategory($event)">
                    </app-output-category-list>
                    <app-image-list
                        *ngSwitchCase="'images'"
                        [imageList]="imageList | async"
                        [instance]="instance | async"
                        [dataset]="dataset | async"
                        [files]="files | async"
                        [filesIsLoading]="filesIsLoading | async"
                        [filesIsLoaded]="filesIsLoaded | async"
                        [fitsImageLimits]="fitsImageLimits | async"
                        [fitsImageLimitsIsLoading]="fitsImageLimitsIsLoading | async"
                        [fitsImageLimitsIsLoaded]="fitsImageLimitsIsLoaded | async"
                        (loadRootDirectory)="loadRootDirectory($event)"
                        (retrieveFitsImageLimits)="retrieveFitsImageLimits($event)"
                        (add)="addImage($event)"
                        (edit)="editImage($event)"
                        (delete)="deleteImage($event)">
                    </app-image-list>
                    <app-file-list
                        *ngSwitchCase="'files'"
                        [fileList]="fileList | async"
                        [instance]="instance | async"
                        [dataset]="dataset | async"
                        [files]="files | async"
                        [filesIsLoading]="filesIsLoading | async"
                        [filesIsLoaded]="filesIsLoaded | async"
                        (loadRootDirectory)="loadRootDirectory($event)"
                        (add)="addFile($event)"
                        (edit)="editFile($event)"
                        (delete)="deleteFile($event)">
                    </app-file-list>
                    <app-cone-search-config
                        *ngSwitchCase="'cone-search'"
                        [dataset]="dataset | async"
                        [coneSearchConfig]="coneSearchConfig | async"
                        [attributeList]="attributeList | async"
                        (addConeSearchConfig)="addConeSearchConfig($event)"
                        (editConeSearchConfig)="editConeSearchConfig($event)">
                    </app-cone-search-config>
                    <app-detail-config
                        *ngSwitchCase="'detail-page'"
                        [detailConfig]="detailConfig | async"
                        (addDetailConfig)="addDetailConfig($event)"
                        (editDetailConfig)="editDetailConfig($event)">
                    </app-detail-config>
                </div>
            </div>
        </div>
    </div>
</div>