1
0
mirror of https://github.com/bitwarden/browser synced 2026-01-23 04:43:36 +00:00
Files
browser/apps/web/src/app/tools/send/send.component.html
bmbitwarden 27d43c500f PM-28183 implemented new sends filter and search design (#17901)
* PM-28183 implemented new sends filter and search design

* PM-28183 resolved table issue fallout from merge conflict

* PM-28183 resolved browser paste url issue

* PM-28183 put new feature behind feature flag

* PM-28183 resolved feature flag

* PM-28183 resolved type-safe approach pr comment

* PM-28183 resolved DesktopSendUIRefresh feature flag is enabled. pr comment

* PM-28183 restored SendUIRefresh

* PM-28183 resolved query parameter subscription pr comment

* PM-28183 resolved pr comment re enum like objects

* PM-28183 resolved remove enum like objects  pr comment

* PM-28183 resolved pr comment re defining filteredSends member variable

* PM-28183 resolved pr comment re Code Duplication in syncCompleted Handler

* PM-28183 resolved pr comment re Floating Promise

* PM-28183 restored feature flag

* PM-28183 resolved pr comment re Dual Binding Pattern

* PM28183 resolved options cell button pr comment

* PM 28183 resolved pr comment re Incorrect CSS Class - Breaking Layout

* PM 28183 resolved pr comment re uery Param Update Causes Redundant Filter Application

* PM-28183 resolved lint issues

* PM 28183 resolved lint issues

* PM-28183 resolved type issue with import

* PM-28183 resolved import in failling test

* chore: rerun web build

* PM-28183 resolved build issues

* PM-28183 resolved build issues

* PM-28183 resolved lint issues
2026-01-12 13:26:50 -05:00

176 lines
6.2 KiB
HTML

<app-header>
<ng-container slot="title-suffix">
<small #actionSpinner [appApiAction]="actionPromise">
<ng-container *ngIf="$any(actionSpinner).loading">
<i
class="bwi bwi-spinner bwi-spin tw-text-muted"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>
<span class="tw-sr-only">{{ "loading" | i18n }}</span>
</ng-container>
</small>
</ng-container>
<tools-new-send-dropdown *ngIf="!disableSend"></tools-new-send-dropdown>
</app-header>
<bit-callout type="warning" title="{{ 'sendDisabled' | i18n }}" *ngIf="disableSend">
{{ "sendDisabledWarning" | i18n }}
</bit-callout>
@if (SendUIRefresh$ | async) {
<div class="tw-mb-4 tw-max-w-md">
<bit-search
[(ngModel)]="searchText"
[placeholder]="'searchSends' | i18n"
(input)="searchTextChanged()"
appAutofocus
/>
</div>
<div class="tw-mb-4">
<bit-toggle-group [selected]="selectedToggleValue" (selectedChange)="onToggleChange($event)">
<bit-toggle [value]="'all'">{{ "allSends" | i18n }}</bit-toggle>
<bit-toggle [value]="'text'">{{ "sendTypeText" | i18n }}</bit-toggle>
<bit-toggle [value]="'file'">{{ "sendTypeFile" | i18n }}</bit-toggle>
</bit-toggle-group>
</div>
<div>
<div class="tw-@container/send-table">
<tools-send-table
*ngIf="filteredSends && filteredSends.length"
[dataSource]="dataSource"
[disableSend]="disableSend"
(editSend)="editSend($event)"
(copySend)="copy($event)"
(removePassword)="removePassword($event)"
(deleteSend)="delete($event)"
/>
<div *ngIf="filteredSends && !filteredSends.length">
<ng-container *ngIf="!loaded">
<i
class="bwi bwi-spinner bwi-spin tw-text-muted"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>
<span class="tw-sr-only">{{ "loading" | i18n }}</span>
</ng-container>
<ng-container *ngIf="loaded">
<bit-no-items [icon]="noItemIcon" class="tw-text-main">
<ng-container slot="title">{{ "sendsTitleNoItems" | i18n }}</ng-container>
<ng-container slot="description">{{ "sendsBodyNoItems" | i18n }}</ng-container>
<tools-new-send-dropdown
[hideIcon]="true"
*ngIf="!disableSend"
slot="button"
></tools-new-send-dropdown>
</bit-no-items>
</ng-container>
</div>
</div>
</div>
} @else {
<div class="tw-grid tw-grid-cols-12 tw-gap-4">
<div class="tw-col-span-3">
<div
class="tw-border tw-border-solid tw-border-secondary-300 tw-rounded"
data-testid="filters"
>
<div
class="tw-bg-background-alt tw-border-0 tw-border-b tw-border-solid tw-border-secondary-100 tw-rounded-t tw-px-5 tw-py-2.5 tw-font-medium tw-uppercase"
data-testid="filters-header"
>
{{ "filters" | i18n }}
</div>
<div class="tw-p-5" data-testid="filters-body">
<div class="tw-mb-4">
<bit-search
[(ngModel)]="searchText"
[placeholder]="'searchSends' | i18n"
(input)="searchTextChanged()"
appAutofocus
/>
</div>
<div class="filter">
<ul class="filter-options">
<li class="filter-option" [ngClass]="{ active: selectedAll }">
<span class="filter-buttons">
<button type="button" class="filter-button" appStopClick (click)="selectAll()">
<i class="bwi bwi-fw bwi-filter"></i>{{ "allSends" | i18n }}
</button>
</span>
</li>
</ul>
</div>
<div class="filter">
<div class="filter-heading">
<h3>{{ "types" | i18n }}</h3>
</div>
<ul class="filter-options">
<li class="filter-option" [ngClass]="{ active: selectedType === sendType.Text }">
<span class="filter-buttons">
<button
type="button"
class="filter-button"
appStopClick
(click)="selectType(sendType.Text)"
>
<i class="bwi bwi-fw bwi-file-text"></i>{{ "sendTypeText" | i18n }}
</button>
</span>
</li>
<li class="filter-option" [ngClass]="{ active: selectedType === sendType.File }">
<span class="filter-buttons">
<button
type="button"
class="filter-button"
appStopClick
(click)="selectType(sendType.File)"
>
<i class="bwi bwi-fw bwi-file"></i>{{ "sendTypeFile" | i18n }}
</button>
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="tw-col-span-9 tw-@container/send-table">
<!--Listing Table-->
<tools-send-table
*ngIf="filteredSends && filteredSends.length"
[dataSource]="dataSource"
[disableSend]="disableSend"
(editSend)="editSend($event)"
(copySend)="copy($event)"
(removePassword)="removePassword($event)"
(deleteSend)="delete($event)"
/>
<div *ngIf="filteredSends && !filteredSends.length">
<ng-container *ngIf="!loaded">
<i
class="bwi bwi-spinner bwi-spin tw-text-muted"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>
<span class="tw-sr-only">{{ "loading" | i18n }}</span>
</ng-container>
<ng-container *ngIf="loaded">
<bit-no-items [icon]="noItemIcon" class="tw-text-main">
<ng-container slot="title">{{ "sendsTitleNoItems" | i18n }}</ng-container>
<ng-container slot="description">{{ "sendsBodyNoItems" | i18n }}</ng-container>
<tools-new-send-dropdown
[hideIcon]="true"
*ngIf="!disableSend"
slot="button"
></tools-new-send-dropdown>
</bit-no-items>
</ng-container>
</div>
</div>
</div>
}