From 96a338ef6fb805b551aef4a528269dc37c254bde Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Wed, 15 Jul 2026 02:43:46 +0400 Subject: [PATCH] chore: remove orphaned backoffice/builder dead code Sprint 2 high-priority cleanup: backoffice-dashboard.component.ts and builder-sandbox.component.ts were not routed anywhere, superseded by features/backoffice and features/project-editor. Their sole facades (BackofficeFacade, BuilderConfigFacade) had no other consumers. Co-Authored-By: Claude Sonnet 5 --- src/app/facades/backoffice/.gitkeep | 0 .../facades/backoffice/backoffice.facade.ts | 40 --------- src/app/facades/builder/.gitkeep | 0 .../facades/builder/builder-config.facade.ts | 52 ----------- src/app/pages/backoffice/.gitkeep | 0 .../backoffice-dashboard.component.ts | 87 ------------------- src/app/pages/builder/.gitkeep | 0 .../builder/builder-sandbox.component.ts | 68 --------------- 8 files changed, 247 deletions(-) delete mode 100644 src/app/facades/backoffice/.gitkeep delete mode 100644 src/app/facades/backoffice/backoffice.facade.ts delete mode 100644 src/app/facades/builder/.gitkeep delete mode 100644 src/app/facades/builder/builder-config.facade.ts delete mode 100644 src/app/pages/backoffice/.gitkeep delete mode 100644 src/app/pages/backoffice/backoffice-dashboard.component.ts delete mode 100644 src/app/pages/builder/.gitkeep delete mode 100644 src/app/pages/builder/builder-sandbox.component.ts diff --git a/src/app/facades/backoffice/.gitkeep b/src/app/facades/backoffice/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/facades/backoffice/backoffice.facade.ts b/src/app/facades/backoffice/backoffice.facade.ts deleted file mode 100644 index e2b3688..0000000 --- a/src/app/facades/backoffice/backoffice.facade.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Injectable, signal } from '@angular/core'; -import { ProductCardConfig, CategoryCardConfig } from '../../shared/models/ui'; -import { BackofficeDataService } from '../../core/backoffice/backoffice-data.service'; - -@Injectable({ providedIn: 'root' }) -export class BackofficeFacade { - readonly products = signal([]); - readonly categories = signal([]); - readonly loading = signal(false); - - constructor(private readonly backofficeDataService: BackofficeDataService) {} - - load(): void { - this.loading.set(true); - - this.backofficeDataService.loadProducts().subscribe({ - next: (products) => { - this.products.set(products ?? []); - this.loadCategories(); - }, - error: () => { - this.products.set([]); - this.loadCategories(); - } - }); - } - - private loadCategories(): void { - this.backofficeDataService.loadCategories().subscribe({ - next: (categories) => { - this.categories.set(categories ?? []); - this.loading.set(false); - }, - error: () => { - this.categories.set([]); - this.loading.set(false); - } - }); - } -} diff --git a/src/app/facades/builder/.gitkeep b/src/app/facades/builder/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/facades/builder/builder-config.facade.ts b/src/app/facades/builder/builder-config.facade.ts deleted file mode 100644 index 4d1dd44..0000000 --- a/src/app/facades/builder/builder-config.facade.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Injectable, computed, signal } from '@angular/core'; -import { take } from 'rxjs/operators'; -import { BootstrapConfig } from '../../shared/models/config'; -import { ConfigService } from '../../core/config/config.service'; - -@Injectable({ providedIn: 'root' }) -export class BuilderConfigFacade { - private readonly bootstrapState = signal(null); - - readonly bootstrap = this.bootstrapState.asReadonly(); - readonly branding = computed(() => this.bootstrapState()?.branding ?? null); - readonly featureFlags = computed(() => this.bootstrapState()?.featureFlags ?? null); - - constructor(private readonly configService: ConfigService) {} - - load(): void { - this.configService.loadBootstrap().pipe(take(1)).subscribe({ - next: (config) => this.bootstrapState.set(JSON.parse(JSON.stringify(config)) as BootstrapConfig), - error: () => this.bootstrapState.set(null) - }); - } - - updateBrandName(nextBrandName: string): void { - const current = this.bootstrapState(); - if (!current) { - return; - } - - this.bootstrapState.set({ - ...current, - branding: { - ...current.branding, - brandName: nextBrandName - } - }); - } - - setFeatureFlag(flag: string, enabled: boolean): void { - const current = this.bootstrapState(); - if (!current) { - return; - } - - this.bootstrapState.set({ - ...current, - featureFlags: { - ...current.featureFlags, - [flag]: enabled - } - }); - } -} diff --git a/src/app/pages/backoffice/.gitkeep b/src/app/pages/backoffice/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/pages/backoffice/backoffice-dashboard.component.ts b/src/app/pages/backoffice/backoffice-dashboard.component.ts deleted file mode 100644 index a9275f6..0000000 --- a/src/app/pages/backoffice/backoffice-dashboard.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { BackofficeFacade } from '../../facades/backoffice/backoffice.facade'; -import { TranslatePipe } from '../../i18n/translate.pipe'; - -@Component({ - selector: 'app-backoffice-dashboard', - standalone: true, - imports: [CommonModule, TranslatePipe], - template: ` -
-

{{ 'backoffice.title' | translate }}

-

{{ 'backoffice.subtitle' | translate }}

- - @if (loading()) { -
{{ 'backoffice.loading' | translate }}
- } @else { -
-

{{ 'backoffice.products' | translate }}

- - - - - - - - - - - @for (product of products(); track product.id) { - - - - - - - } - -
{{ 'backoffice.sku' | translate }}{{ 'backoffice.titleColumn' | translate }}{{ 'backoffice.price' | translate }}{{ 'backoffice.status' | translate }}
{{ product.sku }}{{ product.title }}{{ product.price.amount }} {{ product.price.currency }}{{ product.stockStatus ?? ('backoffice.notAvailable' | translate) }}
-
- -
-

{{ 'backoffice.categories' | translate }}

-
    - @for (category of categories(); track category.id) { -
  • {{ category.title }} ({{ category.itemsCount ?? 0 }} {{ 'backoffice.itemsCount' | translate }})
  • - } -
-
- -
-

{{ 'backoffice.otherDomains' | translate }}

-
- {{ 'backoffice.orders' | translate }} - {{ 'backoffice.customers' | translate }} - {{ 'backoffice.inventory' | translate }} - {{ 'backoffice.media' | translate }} - {{ 'backoffice.settings' | translate }} -
-
- } -
- `, - styles: [ - ` - .backoffice-dashboard { padding: 1.5rem; display: grid; gap: 1rem; } - .card { border: 1px solid var(--border-color, #d3dad9); border-radius: 12px; padding: 1rem; background: #fff; } - table { width: 100%; border-collapse: collapse; } - th, td { text-align: left; padding: 0.5rem; border-bottom: 1px solid #ececec; } - ul { margin: 0; padding-left: 1rem; } - .chips { display: flex; gap: 0.5rem; flex-wrap: wrap; } - .chips span { padding: 0.25rem 0.5rem; border-radius: 999px; background: var(--bg-secondary, #f5f5f5); } - ` - ], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class BackofficeDashboardComponent { - private readonly facade = inject(BackofficeFacade); - - readonly products = this.facade.products; - readonly categories = this.facade.categories; - readonly loading = this.facade.loading; - - constructor() { - this.facade.load(); - } -} diff --git a/src/app/pages/builder/.gitkeep b/src/app/pages/builder/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/pages/builder/builder-sandbox.component.ts b/src/app/pages/builder/builder-sandbox.component.ts deleted file mode 100644 index a399722..0000000 --- a/src/app/pages/builder/builder-sandbox.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { BuilderConfigFacade } from '../../facades/builder/builder-config.facade'; -import { TranslatePipe } from '../../i18n/translate.pipe'; - -@Component({ - selector: 'app-builder-sandbox', - standalone: true, - imports: [CommonModule, FormsModule, TranslatePipe], - template: ` -
-

{{ 'builder.title' | translate }}

-

{{ 'builder.subtitle' | translate }}

- - @if (branding(); as brand) { -
-

{{ 'builder.branding' | translate }}

- -
- } - - @if (featureFlags(); as flags) { -
-

{{ 'builder.featureFlags' | translate }}

- @for (flag of featureFlagKeys(); track flag) { - - } -
- } -
- `, - styles: [ - ` - .builder-sandbox { padding: 1.5rem; display: grid; gap: 1rem; } - .builder-card { border: 1px solid var(--border-color, #d3dad9); border-radius: 12px; padding: 1rem; display: grid; gap: 0.75rem; } - input[type='text'] { width: 100%; max-width: 420px; padding: 0.5rem; border-radius: 8px; border: 1px solid var(--border-color, #d3dad9); } - .flag-row { display: flex; align-items: center; gap: 0.5rem; } - ` - ], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class BuilderSandboxComponent { - private readonly facade = inject(BuilderConfigFacade); - - readonly branding = this.facade.branding; - readonly featureFlags = this.facade.featureFlags; - readonly featureFlagKeys = computed(() => Object.keys(this.featureFlags() ?? {}).sort()); - - constructor() { - this.facade.load(); - } - - onBrandNameChange(value: string): void { - this.facade.updateBrandName(value); - } - - onFlagToggle(flag: string, event: Event): void { - const input = event.target as HTMLInputElement; - this.facade.setFeatureFlag(flag, input.checked); - } -}