feat(admin): redesign dashboard into professional SaaS homepage

Replaced the placeholder dashboard with a real business homepage built
on 6 new reusable widget components (DashboardSection, DashboardCard,
DashboardMetric, DashboardStatusRow, DashboardTimeline,
DashboardShortcutCard), all wired through shared app-card/app-skeleton/
app-empty-state.

Sections: Welcome (tenant, env badge, current user, last publish/save -
all real facade signals, never blank), Quick Actions (large cards: add
product, create category, open builder, edit homepage, media, orders),
Draft Status (real dirty/modifiedFields/publish/discard from
ProjectEditorFacade), Marketplace Health (9 checks - config, product/
category counts, missing translations, draft, static-pages-unpublished,
homepage/theme configured, all real; images-without-alt shown as
'not tracked yet' rather than fabricated), Recent Activity (existing
localStorage-backed history service, loading/empty states), Useful
Shortcuts, Documentation (honest coming-soon list, no dead links).

12-column responsive grid: 3-across cards on desktop, 2-column on
tablet, single column on mobile, no horizontal scroll. Keyboard/focus/
ARIA per shortcut card and status row; health status never conveyed by
color alone (icon + text every time).

AdminDashboardHealthCheck (boolean 'healthy' shape) and its facade
signal are untouched - AdminMonitoringPageComponent also consumes them.
New richer status data lives in a separate homeHealthChecks signal/
AdminDashboardHomeHealthCheck type instead of widening the shared one.

Added ~50 new dashboard.* / kept existing i18n strings across ru/en/hy;
no raw keys.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-18 08:59:29 +04:00
parent eb7b5c996d
commit 419cb9a32c
39 changed files with 1291 additions and 589 deletions

View File

@@ -720,7 +720,7 @@ export const hy: Translations = {
actionAnalytics: 'Վերլուծություն',
actionPreviewMarketplace: 'Դիտել մարքեթփլեյսը',
activityTitle: 'Վերջին ակտիվություն',
activityEmpty: 'Դեռ ակտիվություն չկա։ Պահպանեք կամ հրապարակեք փոփոխություն՝ այն այստեղ տեսնելու համար։',
activityEmpty: 'Դեռ ակտիվություն չկա',
activityDraftSaved: 'Սևագիրը պահպանվեց',
activityPublished: 'Հրապարակվեց',
healthTitle: 'Համակարգի վիճակ',
@@ -734,6 +734,54 @@ export const hy: Translations = {
comingSoonTitle: 'Շուտով',
comingSoonDescription: 'Այս բաժինը դեռ կառուցված չէ։ Ստուգեք ավելի ուշ։',
backToDashboard: 'Վերադառնալ վահանակ',
welcomeEyebrow: 'Բարի վերադարձ',
welcomeFallbackTenant: 'Ձեր մարկետփլեյսը',
envProduction: 'Պրոդակշն',
envDevelopment: 'Մշակում',
factCurrentUser: 'Ընթացիկ օգտատեր',
factTenant: 'Խանութ',
quickActionsDescription: 'Ձեր ամենահաճախակի առաջադրանքները՝ սկսեք այստեղից',
actionAddProduct: 'Ավելացնել ապրանք',
actionAddProductDescription: 'Ստեղծել նոր ապրանքի քարտ',
actionCreateCategory: 'Ստեղծել կատեգորիա',
actionCreateCategoryDescription: 'Ավելացնել կատեգորիա կատալոգում',
actionEditProjectDescription: 'Բացել մարկետփլեյսի կոնստրուկտորը',
actionEditHomepage: 'Խմբագրել գլխավոր էջը',
actionEditHomepageDescription: 'Կարգավորել գլխավոր էջի վիջեթները',
actionMediaLibraryDescription: 'Վերբեռնեք և կազմակերպեք ֆայլերը',
actionOrdersDescription: 'Դիտեք վերջին պատվերները',
draftStatusTitle: 'Սևագրի կարգավիճակ',
draftStatusHasChanges: 'Կան չհրապարակված փոփոխություններ։',
draftStatusAllPublished: 'Ամեն ինչ հրապարակված է։ Սևագիր չկա։',
draftStatusMoreFields: '+{{count}} ևս',
draftOpenBuilder: 'Բացել կոնստրուկտորը',
draftPublish: 'Հրապարակել',
draftDiscard: 'Չեղարկել սևագիրը',
healthProductsCount: 'Ապրանքներ',
healthCategoriesCount: 'Կատեգորիաներ',
healthDraftExists: 'Սևագիր',
healthImagesWithoutAlt: 'Alt տեքստ չունեցող պատկերներ',
healthStaticPagesUnpublished: 'Չհրապարակված ստատիկ էջեր',
healthHomepageConfigured: 'Գլխավոր էջը կարգավորված է',
healthThemeConfigured: 'Թեման կարգավորված է',
statusHealthy: 'Կարգին է',
statusAttention: 'Ուշադրություն է պահանջում',
statusUnhealthy: 'Խնդիր',
statusUnknown: 'Դեռ չի հետևվում',
activityEmptyHint: 'Պահպանեք կամ հրապարակեք փոփոխություն՝ այն այստեղ տեսնելու համար։',
activityUnavailable: 'Ակտիվության պատմությունը հասանելի չէ',
activityUnavailableHint: 'Չհաջողվեց միանալ տվյալների աղբյուրին։ Փորձեք թարմացնել ավելի ուշ։',
activityErrorHint: 'Չհաջողվեց բեռնել վերջին ակտիվությունը։',
shortcutsTitle: 'Օգտակար հղումներ',
shortcutsDescription: 'Ադմին վահանակի հաճախակի օգտագործվող բաժինները',
shortcutMarketplaceBuilder: 'Մարկետփլեյսի կոնստրուկտոր',
shortcutSettings: 'Կարգավորումներ',
shortcutContent: 'Բովանդակություն',
docTitle: 'Փաստաթղթեր',
docDocumentation: 'Փաստաթղթեր',
docKeyboardShortcuts: 'Ստեղնաշարի դյուրանցումներ',
docReportIssue: 'Հայտնել խնդրի մասին',
docReleaseNotes: 'Թողարկման նշումներ',
},
staticPages: {
notFound: 'Էջը չի գտնվել',