%# locals: (simplefin_item:) %> <%= tag.div id: dom_id(simplefin_item) do %> <% accounts = simplefin_item.accounts %> <%# Compute unlinked count early so it's available for both menu and bottom section %> <% unlinked_count = if defined?(@simplefin_unlinked_count_map) && @simplefin_unlinked_count_map @simplefin_unlinked_count_map[simplefin_item.id] || 0 else begin simplefin_item.simplefin_accounts .left_joins(:account, :account_provider) .where(accounts: { id: nil }, account_providers: { id: nil }) .count rescue => e Rails.logger.warn("SimpleFin card: unlinked_count fallback failed: #{e.class} - #{e.message}") 0 end end %> <% setup_token_update_required = simplefin_item.setup_token_update_required? %> <%= render DS::Disclosure.new(variant: :card, open: true) do |disclosure| %> <% disclosure.with_summary_content do %>
<%= t(".deletion_in_progress") %>
<% end %><%= simplefin_item.institution_summary %>
<%# Extra inline badges from latest sync stats - only show warnings %> <% stats = (@simplefin_sync_stats_map || {})[simplefin_item.id] || {} %> <% has_warnings = stats["accounts_skipped"].to_i > 0 || stats["rate_limited"].present? || stats["rate_limited_at"].present? || stats["total_errors"].to_i > 0 || (stats["errors"].is_a?(Array) && stats["errors"].any?) %> <% if has_warnings %><% if simplefin_item.last_synced_at %> <% if simplefin_item.sync_status_summary %> <%= t(".status_with_summary", timestamp: time_ago_in_words(simplefin_item.last_synced_at), summary: simplefin_item.sync_status_summary) %> <% else %> <%= t(".status", timestamp: time_ago_in_words(simplefin_item.last_synced_at)) %> <% end %> <% else %> <%= t(".status_never") %> <% end %>
<% end %><%= t(".setup_needed") %>
<%= t(".setup_description") %>
<%= render DS::Link.new( text: t(".setup_action"), icon: "settings", variant: "primary", href: setup_accounts_simplefin_item_path(simplefin_item), frame: :modal ) %><%= t(".no_accounts_title") %>
<%= t(".no_accounts_description") %>