Files
marketplaces/src/app/features/admin/dashboard/components/dashboard-status-row.component.scss
sdarbinyan 419cb9a32c 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>
2026-07-18 08:59:29 +04:00

49 lines
953 B
SCSS

.dashboard-status-row {
display: flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-xs) 0;
font-size: 1rem;
}
.dashboard-status-row__icon {
font-size: 1rem;
flex-shrink: 0;
}
.dashboard-status-row__label {
flex: 1 1 auto;
color: var(--text-primary);
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dashboard-status-row__value {
font-weight: 600;
color: var(--text-primary);
}
.dashboard-status-row__status-text {
font-size: 0.75rem;
color: var(--text-light);
white-space: nowrap;
}
.dashboard-status-row--healthy .dashboard-status-row__icon {
color: var(--success-color);
}
.dashboard-status-row--attention .dashboard-status-row__icon {
color: var(--warning-color);
}
.dashboard-status-row--unhealthy .dashboard-status-row__icon {
color: var(--error-color);
}
.dashboard-status-row--unknown .dashboard-status-row__icon {
color: var(--text-light);
}