diff --git a/src/app/features/admin/categories/pages/admin-categories-list-page.component.ts b/src/app/features/admin/categories/pages/admin-categories-list-page.component.ts index e6bf355..00ee187 100644 --- a/src/app/features/admin/categories/pages/admin-categories-list-page.component.ts +++ b/src/app/features/admin/categories/pages/admin-categories-list-page.component.ts @@ -1,14 +1,18 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { Router } from '@angular/router'; import { AdminCategoriesFacade } from '../facade/admin-categories.facade'; import { AdminCategoriesListComponent } from '../components/admin-categories-list.component'; import { LanguageService } from '../../../../services/language.service'; import { TranslateService } from '../../../../i18n/translate.service'; +import { ConfirmDialogComponent } from '../../../../shared/ui/confirm-dialog/confirm-dialog.component'; +import { DialogComponent } from '../../../../shared/ui/dialog/dialog.component'; +import { ButtonComponent } from '../../../../shared/ui/button/button.component'; +import { TranslatePipe } from '../../../../i18n/translate.pipe'; @Component({ selector: 'app-admin-categories-list-page', standalone: true, - imports: [AdminCategoriesListComponent], + imports: [AdminCategoriesListComponent, ConfirmDialogComponent, DialogComponent, ButtonComponent, TranslatePipe], template: ``, + (columnToggle)="facade.setColumnVisible($event.column, $event.visible)" /> + + + @if (deleteBlockedMessage()) { + +

{{ deleteBlockedMessage() }}

+
+ {{ 'common.confirm' | translate }} +
+
+ }`, changeDetection: ChangeDetectionStrategy.OnPush }) export class AdminCategoriesListPageComponent { @@ -57,6 +83,10 @@ export class AdminCategoriesListPageComponent { readonly isExpandedFn = (id: string) => this.facade.isExpanded(id); readonly canDeleteFn = (id: string) => this.facade.canDelete(id); + readonly pendingDeleteId = signal(null); + readonly bulkDeleteConfirmOpen = signal(false); + readonly deleteBlockedMessage = signal(null); + constructor() { this.facade.loadList(); this.facade.loadDashboardStats(); @@ -75,12 +105,27 @@ export class AdminCategoriesListPageComponent { deleteOne(id: string): void { if (!this.facade.canDelete(id)) { - window.alert(this.translate.t('adminCategories.deleteBlocked')); + this.deleteBlockedMessage.set(this.translate.t('adminCategories.deleteBlocked')); return; } - if (window.confirm(this.translate.t('adminCategories.confirmDelete'))) { + this.pendingDeleteId.set(id); + } + + confirmDelete(): void { + const id = this.pendingDeleteId(); + if (id) { this.facade.deleteOne(id); } + this.pendingDeleteId.set(null); + } + + bulkDelete(): void { + this.bulkDeleteConfirmOpen.set(true); + } + + confirmBulkDelete(): void { + this.facade.applyBulkDelete(); + this.bulkDeleteConfirmOpen.set(false); } private lang(): string { diff --git a/src/app/i18n/en.ts b/src/app/i18n/en.ts index ae76e39..e70468a 100644 --- a/src/app/i18n/en.ts +++ b/src/app/i18n/en.ts @@ -1549,6 +1549,8 @@ export const en: Translations = { saveDraft: 'Save draft', publish: 'Publish', confirmDelete: 'Delete this category? This cannot be undone.', + confirmBulkDelete: 'Delete the selected categories? This cannot be undone.', + deleteTitle: 'Delete category', confirmLeaveUnsaved: 'You have unsaved changes. Leave without saving?', deleteBlocked: 'This category can\'t be deleted while it has subcategories or assigned products.', emptyTitle: 'No categories yet', diff --git a/src/app/i18n/hy.ts b/src/app/i18n/hy.ts index 8c471d9..20a1793 100644 --- a/src/app/i18n/hy.ts +++ b/src/app/i18n/hy.ts @@ -1544,6 +1544,8 @@ export const hy: Translations = { saveDraft: 'Պահպանել սևագիրը', publish: 'Հրապարակել', confirmDelete: 'Ջնջե՞լ այս կատեգորիան։ Հնարավոր չէ հետարկել։', + confirmBulkDelete: 'Ջնջե՞լ ընտրված կատեգորիաները։ Հնարավոր չէ հետարկել։', + deleteTitle: 'Ջնջել կատեգորիան', confirmLeaveUnsaved: 'Դուք ունեք չպահպանված փոփոխություններ։ Դո՞ւրս գալ առանց պահպանելու։', deleteBlocked: 'Այս կատեգորիան հնարավոր չէ ջնջել, քանի դեռ ունի ենթակատեգորիաներ կամ նշանակված ապրանքներ։', emptyTitle: 'Կատեգորիաներ դեռ չկան', diff --git a/src/app/i18n/ru.ts b/src/app/i18n/ru.ts index 5f9d6dd..d17c01e 100644 --- a/src/app/i18n/ru.ts +++ b/src/app/i18n/ru.ts @@ -1544,6 +1544,8 @@ export const ru: Translations = { saveDraft: 'Сохранить черновик', publish: 'Опубликовать', confirmDelete: 'Удалить эту категорию? Это действие нельзя отменить.', + confirmBulkDelete: 'Удалить выбранные категории? Это действие нельзя отменить.', + deleteTitle: 'Удалить категорию', confirmLeaveUnsaved: 'У вас есть несохранённые изменения. Выйти без сохранения?', deleteBlocked: 'Эту категорию нельзя удалить, пока у неё есть подкатегории или назначенные товары.', emptyTitle: 'Категорий пока нет', diff --git a/src/app/i18n/translations.ts b/src/app/i18n/translations.ts index 2a9d780..ef1db8d 100644 --- a/src/app/i18n/translations.ts +++ b/src/app/i18n/translations.ts @@ -1557,6 +1557,8 @@ export interface Translations { saveDraft: string; publish: string; confirmDelete: string; + confirmBulkDelete: string; + deleteTitle: string; confirmLeaveUnsaved: string; deleteBlocked: string; emptyTitle: string;