Files
marketplaces/src/app/shared/media/media-picker/media-picker.component.html

61 lines
2.0 KiB
HTML
Raw Normal View History

<app-dialog
[open]="open()"
[titleText]="'mediaLibrary.title' | translate"
size="lg"
(closed)="requestClose()"
>
<div class="media-picker">
<div class="media-picker__toolbar">
<app-input
[ngModel]="facade.search()"
(ngModelChange)="facade.setSearch($event)"
[placeholder]="'mediaLibrary.searchPlaceholder' | translate"
/>
<input
#fileInput
type="file"
accept="image/jpeg,image/png,image/webp,image/gif,image/svg+xml,application/pdf"
hidden
(change)="onFileSelected($event)"
/>
<app-button variant="secondary" [loading]="facade.uploading()" (click)="triggerFileInput()">
{{ (facade.uploading() ? 'mediaLibrary.uploading' : 'mediaLibrary.upload') | translate }}
</app-button>
</div>
@if (facade.error()) {
<p class="media-picker__error">{{ facade.error() }}</p>
}
@if (facade.loading()) {
<div class="media-picker__grid">
@for (i of [1, 2, 3, 4]; track i) {
<app-skeleton shape="rect" height="110px" />
}
</div>
} @else if (facade.items().length === 0) {
<app-empty-state
[title]="'mediaLibrary.emptyTitle' | translate"
[description]="'mediaLibrary.emptyDescription' | translate"
/>
} @else {
<div class="media-picker__grid">
@for (asset of facade.items(); track asset.id) {
<app-card padding="sm" [interactive]="true" (click)="pick(asset)">
@if (asset.mimeType.startsWith('image/')) {
<img class="media-picker__preview" [src]="asset.url" [alt]="asset.filename" />
} @else {
<div class="media-picker__preview media-picker__preview--file">{{ asset.mimeType }}</div>
}
<span class="media-picker__filename">{{ asset.filename }}</span>
</app-card>
}
</div>
@if (totalPages() > 1) {
<app-pagination [currentPage]="facade.page()" [totalPages]="totalPages()" (pageChange)="facade.setPage($event)" />
}
}
</div>
</app-dialog>