fix: review 'Archive' button was mislabeled delete, zero confirmation

The bulk button read 'Archive' but called applyBulkDelete() ->
gateway.deleteReview() - a real hard delete, and reviews have no
archived status in the model at all, so 'archive' was never a real
concept here. Relabeled to 'Delete' and added an app-confirm-dialog
gate, same pattern as products/categories/orders.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-08-13 08:28:56 +04:00
parent 908f10e022
commit 63039b8707
6 changed files with 28 additions and 6 deletions

View File

@@ -53,9 +53,16 @@
<app-button variant="secondary" size="sm" (click)="applyBulkStatus()">{{ 'adminOrders.applyStatus' | translate }}</app-button> <app-button variant="secondary" size="sm" (click)="applyBulkStatus()">{{ 'adminOrders.applyStatus' | translate }}</app-button>
<app-button variant="secondary" size="sm" (click)="facade.applyBulkVisible(false)">{{ 'adminModeration.hideSelected' | translate }}</app-button> <app-button variant="secondary" size="sm" (click)="facade.applyBulkVisible(false)">{{ 'adminModeration.hideSelected' | translate }}</app-button>
<app-button variant="secondary" size="sm" (click)="facade.exportSelectedAsCsv()">{{ 'adminProducts.bulkExportAction' | translate }}</app-button> <app-button variant="secondary" size="sm" (click)="facade.exportSelectedAsCsv()">{{ 'adminProducts.bulkExportAction' | translate }}</app-button>
<app-button variant="danger" size="sm" (click)="facade.applyBulkDelete()">{{ 'adminModeration.archiveSelected' | translate }}</app-button> <app-button variant="danger" size="sm" (click)="bulkDelete()">{{ 'adminModeration.deleteSelected' | translate }}</app-button>
</div> </div>
} }
<app-confirm-dialog
[open]="bulkDeleteConfirmOpen()"
[titleText]="'adminModeration.deleteSelected' | translate"
[message]="'adminModeration.confirmBulkDelete' | translate"
[destructive]="true"
(confirmed)="confirmBulkDelete()"
(cancelled)="bulkDeleteConfirmOpen.set(false)" />
@if (facade.loading()) { @if (facade.loading()) {
<div class="skeleton-rows" role="status" aria-live="polite" aria-busy="true"> <div class="skeleton-rows" role="status" aria-live="polite" aria-busy="true">

View File

@@ -16,11 +16,12 @@ import { SkeletonComponent } from '../../../../shared/ui/skeleton/skeleton.compo
import { CardComponent } from '../../../../shared/ui/card/card.component'; import { CardComponent } from '../../../../shared/ui/card/card.component';
import { ModerationDashboardComponent } from '../components/moderation-dashboard/moderation-dashboard.component'; import { ModerationDashboardComponent } from '../components/moderation-dashboard/moderation-dashboard.component';
import { ReviewHealthWidgetComponent, ReviewHealthItem } from '../components/review-health-widget/review-health-widget.component'; import { ReviewHealthWidgetComponent, ReviewHealthItem } from '../components/review-health-widget/review-health-widget.component';
import { ConfirmDialogComponent } from '../../../../shared/ui/confirm-dialog/confirm-dialog.component';
@Component({ @Component({
selector: 'app-admin-reviews-list-page', selector: 'app-admin-reviews-list-page',
standalone: true, standalone: true,
imports: [CommonModule, FormsModule, TranslatePipe, ButtonComponent, InputComponent, BadgeComponent, TableComponent, PaginationComponent, EmptyStateComponent, SkeletonComponent, CardComponent, ModerationDashboardComponent, ReviewHealthWidgetComponent], imports: [CommonModule, FormsModule, TranslatePipe, ButtonComponent, InputComponent, BadgeComponent, TableComponent, PaginationComponent, EmptyStateComponent, SkeletonComponent, CardComponent, ModerationDashboardComponent, ReviewHealthWidgetComponent, ConfirmDialogComponent],
templateUrl: './admin-reviews-list-page.component.html', templateUrl: './admin-reviews-list-page.component.html',
styleUrls: ['./admin-reviews-list-page.component.scss'], styleUrls: ['./admin-reviews-list-page.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush
@@ -35,6 +36,7 @@ export class AdminReviewsListPageComponent {
readonly allColumns = ALL_REVIEW_COLUMNS; readonly allColumns = ALL_REVIEW_COLUMNS;
protected readonly columnsPanelOpen = signal(false); protected readonly columnsPanelOpen = signal(false);
protected readonly bulkStatusValue = signal<AdminReviewStatus>('approved'); protected readonly bulkStatusValue = signal<AdminReviewStatus>('approved');
protected readonly bulkDeleteConfirmOpen = signal(false);
constructor() { constructor() {
this.facade.loadList(); this.facade.loadList();
@@ -45,6 +47,15 @@ export class AdminReviewsListPageComponent {
return Math.max(1, Math.ceil(this.facade.total() / this.facade.filters().pageSize)); return Math.max(1, Math.ceil(this.facade.total() / this.facade.filters().pageSize));
} }
bulkDelete(): void {
this.bulkDeleteConfirmOpen.set(true);
}
confirmBulkDelete(): void {
this.facade.applyBulkDelete();
this.bulkDeleteConfirmOpen.set(false);
}
view(id: string): void { view(id: string): void {
void this.router.navigate([this.languageService.currentLanguage(), 'backoffice', 'moderation', id]); void this.router.navigate([this.languageService.currentLanguage(), 'backoffice', 'moderation', id]);
} }

View File

@@ -1302,7 +1302,8 @@ export const en: Translations = {
notAvailable: 'Not available yet', notAvailable: 'Not available yet',
changeStatus: 'Change status', changeStatus: 'Change status',
hideSelected: 'Hide', hideSelected: 'Hide',
archiveSelected: 'Archive', deleteSelected: 'Delete',
confirmBulkDelete: 'Delete the selected reviews? This cannot be undone.',
reportsQueue: 'Reports queue', reportsQueue: 'Reports queue',
reportsColumn: 'Reports', reportsColumn: 'Reports',
reportTarget: 'Reported item', reportTarget: 'Reported item',

View File

@@ -1297,7 +1297,8 @@ export const hy: Translations = {
notAvailable: 'Դեռ հասանելի չէ', notAvailable: 'Դեռ հասանելի չէ',
changeStatus: 'Փոխել կարգավիճակը', changeStatus: 'Փոխել կարգավիճակը',
hideSelected: 'Թաքցնել', hideSelected: 'Թաքցնել',
archiveSelected: 'Արխիվացնել', deleteSelected: 'Ջնջել',
confirmBulkDelete: 'Ջնջե՞լ ընտրված կարծիքները։ Հնարավոր չէ հետարկել։',
reportsQueue: 'Բողոքների հերթ', reportsQueue: 'Բողոքների հերթ',
reportsColumn: 'Բողոքներ', reportsColumn: 'Բողոքներ',
reportTarget: 'Բողոքարկված օբյեկտ', reportTarget: 'Բողոքարկված օբյեկտ',

View File

@@ -1297,7 +1297,8 @@ export const ru: Translations = {
notAvailable: 'Пока недоступно', notAvailable: 'Пока недоступно',
changeStatus: 'Изменить статус', changeStatus: 'Изменить статус',
hideSelected: 'Скрыть', hideSelected: 'Скрыть',
archiveSelected: 'В архив', deleteSelected: 'Удалить',
confirmBulkDelete: 'Удалить выбранные отзывы? Это действие нельзя отменить.',
reportsQueue: 'Очередь жалоб', reportsQueue: 'Очередь жалоб',
reportsColumn: 'Жалобы', reportsColumn: 'Жалобы',
reportTarget: 'Объект жалобы', reportTarget: 'Объект жалобы',

View File

@@ -1301,7 +1301,8 @@ export interface Translations {
notAvailable: string; notAvailable: string;
changeStatus: string; changeStatus: string;
hideSelected: string; hideSelected: string;
archiveSelected: string; deleteSelected: string;
confirmBulkDelete: string;
reportsQueue: string; reportsQueue: string;
reportsColumn: string; reportsColumn: string;
reportTarget: string; reportTarget: string;