Add global sync summary component for all providers (#588)

* Add shared sync statistics collection and provider sync summary UI

- Introduced `SyncStats::Collector` concern to centralize sync statistics logic, including account, transaction, holdings, and health stats collection.
- Added collapsible `ProviderSyncSummary` component for displaying sync summaries across providers.
- Updated syncers (e.g., `LunchflowItem::Syncer`) to use the shared collector methods for consistent stats calculation.
- Added rake tasks under `dev:sync_stats` for testing and development purposes, including fake stats generation with optional issues.
- Enhanced provider-specific views to include sync summaries using the new shared component.

* Refactor `ProviderSyncSummary` to improve maintainability

- Extracted `severity_color_class` to simplify severity-to-CSS mapping.
- Replaced `holdings_label` with `holdings_label_key` for streamlined localization.
- Updated locale file to separate `found` and `processed` translations for clarity.

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
LPW
2026-01-09 13:26:37 -05:00
committed by GitHub
parent aaa336b091
commit 140ea78b0e
13 changed files with 998 additions and 130 deletions

View File

@@ -0,0 +1,29 @@
---
en:
provider_sync_summary:
title: Sync summary
last_sync: "Last sync: %{time_ago} ago"
accounts:
title: Accounts
total: "Total: %{count}"
linked: "Linked: %{count}"
unlinked: "Unlinked: %{count}"
institutions: "Institutions: %{count}"
transactions:
title: Transactions
seen: "Seen: %{count}"
imported: "Imported: %{count}"
updated: "Updated: %{count}"
skipped: "Skipped: %{count}"
holdings:
title: Holdings
found: "Found: %{count}"
processed: "Processed: %{count}"
health:
title: Health
rate_limited: "Rate limited %{time_ago}"
recently: recently
errors: "Errors: %{count}"
data_warnings: "Data warnings: %{count}"
notices: "Notices: %{count}"
view_data_quality: View data quality details