feat(admin): sprint 19 admin dashboard, routing, i18n

- Add admin dashboard feature (models/gateway/facade/components/page)
- Wire admin/products routes and backoffice coming-soon placeholders
- Add lastPublishedAt to ProjectEditorFacade/state
- Add dashboard i18n keys (en/ru/hy) and docs/ADMIN.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-14 12:21:33 +04:00
parent 6aec2ebcb2
commit 325dc17911
36 changed files with 1386 additions and 5 deletions

View File

@@ -0,0 +1,5 @@
<div class="coming-soon">
<h1 class="coming-soon__title">{{ titleKey | translate }}</h1>
<p class="coming-soon__description">{{ 'dashboard.comingSoonDescription' | translate }}</p>
<a class="coming-soon__link" [routerLink]="['../dashboard']">{{ 'dashboard.backToDashboard' | translate }}</a>
</div>

View File

@@ -0,0 +1,32 @@
.coming-soon {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
max-width: 640px;
margin: 40px auto;
padding: 24px;
text-align: left;
}
.coming-soon__title {
margin: 0;
font-size: 24px;
font-weight: 800;
color: var(--text-primary, #1e3c38);
}
.coming-soon__description {
margin: 0;
color: var(--text-secondary, #667a77);
}
.coming-soon__link {
color: var(--primary-color, #497671);
font-weight: 600;
text-decoration: none;
}
.coming-soon__link:hover {
text-decoration: underline;
}

View File

@@ -0,0 +1,19 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ActivatedRoute, RouterLink } from '@angular/router';
import { TranslatePipe } from '../../../i18n/translate.pipe';
/** Landing page for backoffice sections not built yet (categories, static pages, transactions, orders, media). Route `data.titleKey` sets the section name; falls back to the generic "coming soon" title. */
@Component({
selector: 'app-backoffice-coming-soon-page',
standalone: true,
imports: [CommonModule, RouterLink, TranslatePipe],
templateUrl: './backoffice-coming-soon-page.component.html',
styleUrls: ['./backoffice-coming-soon-page.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class BackofficeComingSoonPageComponent {
private readonly route = inject(ActivatedRoute);
readonly titleKey: string = this.route.snapshot.data['titleKey'] ?? 'dashboard.comingSoonTitle';
}