blob: 35559f707114e55d33fcb32c0a514687f8cbd639 [file] [log] [blame]
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<section class="image-list--wrapper">
<nav class="image-list__nav-bar">
<div class="selection">
<div class="mat-reset">
<div class="control selector-wrapper"
[ngClass]="{'disabled-select': !isProjectsMoreThanOne}"
>
<mat-form-field>
<mat-label>{{placeholder.projectSelect}}</mat-label>
<mat-select
disableOptionCentering
name="project"
[(value)]="activeProjectName"
panelClass="top-select scrolling"
[disabled]="!isProjectsMoreThanOne"
>
<mat-option
*ngIf="isProjectsMoreThanOne"
(click)="onSelectClick()"
>
Show all
</mat-option>
<mat-option
*ngFor="let project of projectList"
[value]="project"
(click)="onSelectClick(project)"
>
{{ project }}
</mat-option>
<mat-option *ngIf="!projectList?.length" class="multiple-select ml-10" disabled>
Projects list is empty
</mat-option>
</mat-select>
<button class="caret" [disabled]="!isProjectsMoreThanOne">
<i class="material-icons">keyboard_arrow_down</i>
</button>
</mat-form-field>
</div>
</div>
</div>
<div class="button--wrapper">
<!-- <span class="action-button&#45;&#45;wrapper">-->
<!-- <button-->
<!-- type="button"-->
<!-- class="butt action-button"-->
<!-- mat-raised-button-->
<!-- [disabled]="!isImageSelected"-->
<!-- (click)="onActionClick()"-->
<!-- >-->
<!-- Actions-->
<!-- <i class="material-icons" >{{ !isActionsOpen ? 'expand_more' : 'expand_less' }}</i>-->
<!-- </button>-->
<!-- <div class="action-menu" *ngIf="isActionsOpen">-->
<!-- <button-->
<!-- type="button"-->
<!-- class="butt action-menu-item"-->
<!-- mat-raised-button-->
<!-- [disabled]="true"-->
<!-- >-->
<!-- Terminate-->
<!-- </button>-->
<!-- <button-->
<!-- type="button"-->
<!-- class="butt action-menu-item"-->
<!-- mat-raised-button-->
<!-- [disabled]="true"-->
<!-- >-->
<!-- Share-->
<!-- </button>-->
<!-- </div>-->
<!-- </span>-->
<div
class="filter__wrapper"
datalabClickedOutsideMatSelect
(clickedOutside)="onClickOutside()"
[isFormOpened]="isFilterOpened | async"
>
<button mat-raised-button [disabled]="!(dataSource | async)?.length && !($isFiltered | async)" class="butt filter__btn" (click)="onFilterClick()">
<i class="material-icons" [ngClass]="{'filtered-icon': $isFiltered | async}">filter_list</i>
<span class="filter__btn--name" [ngClass]="{'filtered-icon': $isFiltered | async}">Filter</span>
<button *ngIf="$isFiltered | async" type="button" (click)="onResetFilterClick($event)" class="close__btn">&times;</button>
</button>
<div *ngIf="isFilterOpened | async" class="filer__component--wrapper">
<datalab-page-filter
[filterDropdownData$]="$filterDropdownData"
[filterFormStartValue$]="$filterFormValue"
(filterFormValue)="onFilterApplyClick($event)"
(closeFilter)="onFilterCancelClick()"
(onValueChanges)="onControlChanges(dropdownFieldNames.imageNames, $event)"
>
</datalab-page-filter>
</div>
</div>
<button
mat-raised-button
class="butt mr-10 show-active__btn"
(click)="toggleShowActive()"
>
<span *ngIf="isShowActive; else inactive">
<i class="material-icons">visibility_off</i> Show active
</span>
<ng-template #inactive>
<span>
<i class="material-icons">visibility</i> Show all
</span>
</ng-template>
</button>
<span>
<button mat-raised-button class="butt" (click)="onRefreshClick()">
<i class="material-icons highlight">autorenew</i>
Refresh
</button>
</span>
</div>
</nav>
<mat-divider></mat-divider>
<table
mat-table
[dataSource]="projectSource | async"
multiTemplateDataRows
class="data-grid resources mat-elevation-z6"
[trackBy]="trackBy"
>
<ng-container matColumnDef="project">
<td mat-cell *matCellDef="let element" [attr.colspan]="8" class="image-page__project">
{{ element?.project }}
</td>
</ng-container>
<ng-container matColumnDef="checkbox">
<th mat-header-cell *matHeaderCellDef class="image-checkbox--wrapper">
<div class="header-cell--wrapper">
<!-- <span *ngIf="(dataSource | async)?.length" >-->
<!-- <datalab-checkbox-->
<!-- (click)="allCheckboxToggle()"-->
<!-- [checked]="checkboxSelected"-->
<!-- class="image-checkbox"-->
<!-- ></datalab-checkbox>-->
<!-- </span>-->
</div>
</th>
</ng-container>
<ng-container matColumnDef="imageName">
<th mat-header-cell *matHeaderCellDef class="name-col header-cell">
<span class="label image-label" [ngClass]="{'filtered-icon': ($filteredColumnState | async)?.imageName}">
{{tableHeaderCellTitles.imageName}}
<button
*ngIf="($filteredColumnState | async)?.imageName"
type="button"
class="close__btn header__close--btn"
(click)="onResetColumn(columnFieldNames.imageName)"
>
&times;
</button>
</span>
</th>
</ng-container>
<ng-container matColumnDef="imageStatus">
<th mat-header-cell *matHeaderCellDef class="status-col header-cell">
<span class="label image-label" [ngClass]="{'filtered-icon': ($filteredColumnState | async)?.statuses}">
{{tableHeaderCellTitles.imageStatus}}
<button
*ngIf="($filteredColumnState | async)?.statuses"
type="button"
class="close__btn header__close--btn"
(click)="onResetColumn(columnFieldNames.statuses)"
>
&times;
</button>
</span>
</th>
</ng-container>
<ng-container matColumnDef="creationDate">
<th mat-header-cell *matHeaderCellDef class="shape-col header-cell">
<span class="label image-label"> {{tableHeaderCellTitles.creationDate}} </span>
</th>
</ng-container>
<ng-container matColumnDef="endpoint">
<th mat-header-cell *matHeaderCellDef class="tag-col header-cell">
<span class="label image-label" [ngClass]="{'filtered-icon': ($filteredColumnState | async)?.endpoints}">
{{tableHeaderCellTitles.endpoint}}
<button
*ngIf="($filteredColumnState | async)?.endpoints"
type="button"
class="close__btn header__close--btn"
(click)="onResetColumn(columnFieldNames.endpoints)"
>
&times;
</button>
</span>
</th>
</ng-container>
<ng-container matColumnDef="templateName">
<th mat-header-cell *matHeaderCellDef class="resources-col label-header">
<span class="label image-label" [ngClass]="{'filtered-icon': ($filteredColumnState | async)?.templateNames}">
{{tableHeaderCellTitles.templateName}}
<button
*ngIf="($filteredColumnState | async)?.templateNames"
type="button"
class="close__btn header__close--btn"
(click)="onResetColumn(columnFieldNames.templateNames)"
>
&times;
</button>
</span>
</th>
</ng-container>
<ng-container matColumnDef="sharedStatus">
<th mat-header-cell *matHeaderCellDef class="cost-col label-header">
<span class="label image-label" [ngClass]="{'filtered-icon': ($filteredColumnState | async)?.sharingStatuses}">
{{tableHeaderCellTitles.sharedStatus}}
<button
*ngIf="($filteredColumnState | async)?.sharingStatuses"
type="button"
class="close__btn header__close--btn"
(click)="onResetColumn(columnFieldNames.sharingStatuses)"
>
&times;
</button>
</span>
</th>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="settings label-header">
<span class="label image-label"> {{tableHeaderCellTitles.actions}} </span>
</th>
</ng-container>
<!-- -------------------------TABLE BODY---------------------------- -->
<ng-container matColumnDef="expandedDetail">
<td mat-cell *matCellDef="let element" class="exploratory" [attr.colspan]="8">
<tr *ngFor="let element of element?.images; let i = index" class="element-row mat-row">
<td mat-cell class="image-checkbox--wrapper">
<!-- <datalab-checkbox-->
<!-- (click)="onCheckboxClick(element)"-->
<!-- class="image-checkbox"-->
<!-- [checked]="element.isSelected"-->
<!-- ></datalab-checkbox>-->
</td>
<td class="name-col image-table-cell">
<span>
{{ element.name }}
</span>
</td>
<td class="status-col status image-table-cell" ngClass="{{ element.status.toLowerCase() || ''}}">
{{element.status | titlecase}}
</td>
<td class="shape-col image-table-cell">
<span> {{element.timestamp | localDate : 'short'}} </span>
</td>
<td class="tag-col selection image-table-cell">
{{element.endpoint }}
</td>
<td class="resources-col image-table-cell">
{{element.templateName }}
</td>
<td class="cost-col image-table-cell">
<div class="shared-status--wrapper">
<span class="shared-status"> {{element.sharingStatus | titlecase}} </span>
</div>
</td>
<td mat-cell class="settings actions-col">
<div class="button--wrapper action__button--wrapper">
<span class="currency_details" (click)="onImageInfoClick(element)">
<i class="material-icons">help_outline</i>
</span>
<span
*ngIf="element.imageUserPermissions | isElementAvailable: isObjectFieldTrue"
class="actions"
#settings
(click)="actions.toggle($event, settings)"
></span>
</div>
<bubble-up #actions class="list-menu" position="bottom-left" alternative="top-left">
<ul class="list-unstyled">
<li *ngIf="element.imageUserPermissions.canShare">
<button
class="action-button__share"
(click)="onActionClick(element, imageActionType.share)"
>
<i class="material-icons">screen_share</i>
<span>Share</span>
</button>
</li>
<li *ngIf="element.imageUserPermissions.canTerminate"
(click)="onActionClick(element, imageActionType.terminate)">
<button class="action-button__share">
<i class="material-icons">phonelink_off</i>
<span>Terminate</span>
</button>
</li>
</ul>
</bubble-up>
</td>
</tr>
</td>
</ng-container>
<ng-container matColumnDef="placeholder">
<td mat-footer-cell *matFooterCellDef class="info" [colSpan]="displayedColumns.length - 1">
<span>{{ ($isFiltered | async) ? 'No matches found' : 'There are no images yet' }}</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns;" class="header-row"></tr>
<tr mat-row [hidden]="!element?.images.length" *matRowDef="let element; columns: ['project']" class="element-row"></tr>
<tr mat-row [hidden]="!row?.images.length" *matRowDef="let row; columns: ['expandedDetail']" class="detail-row"></tr>
<tr [hidden]="!($isProjectListEmpty | async)" mat-footer-row *matFooterRowDef="['placeholder']"></tr>
</table>
</section>