<!--
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.
-->
<div id="nifi-registry-workflow-administration-perspective-buckets-container" class="mat-elevation-z5">
    <div fxFlex class="pad-top-md pad-bottom-sm pad-left-md pad-right-md">
        <mat-card-title class="ellipsis">
            Buckets ({{nfRegistryService.buckets.length}})
        </mat-card-title>
        <div flex class="push-right-sm" fxLayout="row" fxLayoutAlign="end center">
            <td-chips class="push-right-sm"
                      [items]="nfRegistryService.autoCompleteBuckets"
                      (add)="nfRegistryService.bucketsSearchAdd($event)"
                      (remove)="nfRegistryService.bucketsSearchRemove($event)"></td-chips>
            <div matTooltip="{{(!nfRegistryService.currentUser.resourcePermissions.buckets.canWrite) ? 'You do not have permission. Please contact your system administrator.': ''}}">
                <button data-automation-id = "new-bucket-button"
                        class="push-top-sm push-right-sm"
                        color="fds-secondary"
                        mat-raised-button
                        [disabled]="!nfRegistryService.currentUser.resourcePermissions.buckets.canWrite"
                        (click)="createBucket()">
                    New Bucket
                </button>
            </div>
            <button class="push-top-sm" [disabled]="nfRegistryService.isMultiBucketActionsDisabled" color="fds-primary" mat-raised-button [matMenuTriggerFor]="bucketActionMenu">
                Actions<i class="fa fa-caret-down" aria-hidden="true"></i>
            </button>
        </div>
        <mat-menu class="fds-primary-dropdown-button-menu" #bucketActionMenu="matMenu" [overlapTrigger]="false">
            <button mat-menu-item
                    [disabled]="nfRegistryService.disableMultiBucketDeleteAction"
                    (click)="nfRegistryService.deleteSelectedBuckets()">
                <span>Delete</span>
            </button>
        </mat-menu>
        <div id="nifi-registry-workflow-administration-buckets-list-container-column-header" fxLayout="row"
             fxLayoutAlign="space-between center" class="td-data-table">
            <div class="td-data-table-column" (click)="nfRegistryService.sortBuckets(column)"
                 *ngFor="let column of nfRegistryService.bucketColumns"
                 fxFlex="{{column.width}}">
                {{column.label}}
                <i *ngIf="column.active && column.sortable && column.sortOrder === 'ASC'" class="fa fa-caret-up"
                   aria-hidden="true"></i>
                <i *ngIf="column.active && column.sortable && column.sortOrder === 'DESC'" class="fa fa-caret-down"
                   aria-hidden="true"></i>
            </div>
            <div class="td-data-table-column">
                <div fxLayout="row" fxLayoutAlign="end center">
                    <mat-checkbox class="pad-left-sm" [(ngModel)]="nfRegistryService.allBucketsSelected"
                                  (checked)="nfRegistryService.allBucketsSelected"
                                  (change)="nfRegistryService.toggleBucketsSelectAll()"></mat-checkbox>
                </div>
            </div>
        </div>
        <div id="nifi-registry-workflow-administration-buckets-list-container">
            <div fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row"
                 [ngClass]="{'nonconfigurable' : row.configurable === false, 'selected-nonconfigurable' : (row.checked === true && row.configurable === false), 'selected' : row.checked === true}"
                 *ngFor="let row of nfRegistryService.filteredBuckets"
                 (click)="row.checked = !row.checked;nfRegistryService.determineAllBucketsSelectedState()">
                <div class="td-data-table-cell" *ngFor="let column of nfRegistryService.bucketColumns"
                     fxFlex="{{column.width}}">
                    <div class="ellipsis" matTooltip="{{column.format ? column.format(row[column.name]) : row[column.name]}}">
                        {{column.format ? column.format(row[column.name]) : row[column.name]}}
                    </div>
                </div>
                <div class="td-data-table-cell">
                    <div>
                        <div *ngIf="nfRegistryService.bucketActions.length <= 4" fxLayout="row" fxLayoutAlign="end center">
                            <button (click)="nfRegistryService.executeBucketAction(action, row);row.checked = !row.checked;"
                                    *ngFor="let action of nfRegistryService.bucketActions"
                                    matTooltip="{{action.tooltip}}" mat-icon-button color="accent"
                                    [disabled]="action.disabled(row)">
                                <i class="{{action.icon}}" aria-hidden="true"></i>
                            </button>
                            <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked"
                                          (change)="nfRegistryService.determineAllBucketsSelectedState()"
                                          (click)="row.checked = !row.checked;nfRegistryService.determineAllBucketsSelectedState()"></mat-checkbox>
                        </div>
                        <div *ngIf="nfRegistryService.bucketActions.length > 4" fxLayout="row" fxLayoutAlign="end center">
                            <button (click)="row.checked = !row.checked" matTooltip="Actions" mat-icon-button
                                    [matMenuTriggerFor]="bucketTableActionMenu">
                                <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
                            </button>
                            <mat-menu #bucketTableActionMenu="matMenu" [overlapTrigger]="false">
                                <button (click)="nfRegistryService.executeBucketAction(action, row);row.checked = !row.checked;"
                                        *ngFor="let action of nfRegistryService.bucketActions"
                                        matTooltip="{{action.tooltip}}" mat-menu-item
                                        [disabled]="action.disabled(row)">
                                    <i class="{{action.icon}}" aria-hidden="true"></i>
                                    <span>{{action.name}}</span>
                                </button>
                            </mat-menu>
                            <mat-checkbox [(ngModel)]="row.checked" [checked]="row.checked"
                                          (change)="nfRegistryService.determineAllBucketsSelectedState()"
                                          (click)="row.checked = !row.checked;nfRegistryService.determineAllBucketsSelectedState()"></mat-checkbox>
                        </div>
                    </div>
                    <div *ngIf="!nfRegistryService.bucketActions" fxLayout="row" fxLayoutAlign="end center">
                        <mat-checkbox [(ngModel)]="row.checked" [checked]="row.checked"
                                      (change)="nfRegistryService.determineAllBucketsSelectedState(row)"
                                      (click)="row.checked = !row.checked;nfRegistryService.determineAllBucketsSelectedState()"></mat-checkbox>
                    </div>
                </div>
            </div>
        </div>
        <div class="mat-padding" *ngIf="nfRegistryService.filteredBuckets.length === 0" layout="row"
             layout-align="center center">
            <h3 data-automation-id="no-buckets-message">No results to display.</h3>
        </div>
    </div>
</div>
<router-outlet></router-outlet>
