diff --git a/app/components/settings/health_summary.html.erb b/app/components/settings/health_summary.html.erb deleted file mode 100644 index 7112e9f61..000000000 --- a/app/components/settings/health_summary.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -
- <% tiles.each do |tile| %> -
-
<%= tile[:count] %>
-
<%= tile[:label] %>
-
- <% end %> -
diff --git a/app/components/settings/health_summary.rb b/app/components/settings/health_summary.rb deleted file mode 100644 index 0fa4d96ad..000000000 --- a/app/components/settings/health_summary.rb +++ /dev/null @@ -1,38 +0,0 @@ -class Settings::HealthSummary < ApplicationComponent - def initialize(counts:) - @counts = counts - end - - private - attr_reader :counts - - def connected_count = counts[:connected] - def needs_attention_count = counts[:needs_attention] - def errors_count = counts[:errors] - def accounts_synced_count = counts[:accounts_synced] - - def tiles - [ - { - count: connected_count, - label: t("settings.providers.health.connected"), - color_class: connected_count > 0 ? "text-success" : "text-subdued" - }, - { - count: needs_attention_count, - label: t("settings.providers.health.needs_attention"), - color_class: needs_attention_count > 0 ? "text-warning" : "text-subdued" - }, - { - count: errors_count, - label: t("settings.providers.health.errors"), - color_class: errors_count > 0 ? "text-destructive" : "text-subdued" - }, - { - count: accounts_synced_count, - label: t("settings.providers.health.accounts_synced"), - color_class: "text-primary" - } - ] - end -end diff --git a/app/components/settings/provider_card.html.erb b/app/components/settings/provider_card.html.erb index 50ab60d58..d607dd1ca 100644 --- a/app/components/settings/provider_card.html.erb +++ b/app/components/settings/provider_card.html.erb @@ -1,4 +1,6 @@ -
+<%= link_to connect_path, + class: "bg-container shadow-border-xs rounded-xl p-4 flex flex-col gap-3 text-primary hover:bg-container-hover transition-colors", + data: { turbo_frame: "drawer", turbo_prefetch: "false" } do %>
<%= logo_text %> @@ -18,12 +20,8 @@ <% if tagline.present? %>

<%= tagline %>

<% end %> -
- <%= link_to connect_path, - class: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:text-primary/70 transition-colors", - data: { turbo_frame: "drawer", turbo_prefetch: "false" } do %> - <%= t("settings.providers.connect") %> - <%= helpers.icon "arrow-right", class: "w-4 h-4" %> - <% end %> +
+ <%= t("settings.providers.connect") %> + <%= helpers.icon "arrow-right", class: "w-4 h-4" %>
-
+<% end %> diff --git a/app/controllers/settings/providers_controller.rb b/app/controllers/settings/providers_controller.rb index 9cd689d51..159ca3ef5 100644 --- a/app/controllers/settings/providers_controller.rb +++ b/app/controllers/settings/providers_controller.rb @@ -261,13 +261,6 @@ class Settings::ProvidersController < ApplicationController @connected = entries.select { |e| e[:summary][:status] == :ok } @needs_attention = entries.select { |e| [ :warn, :err ].include?(e[:summary][:status]) } @available = entries.select { |e| e[:summary][:status] == :off } - - @health_counts = { - connected: @connected.size + @needs_attention.size, - needs_attention: @needs_attention.size, - errors: @needs_attention.count { |e| e[:summary][:status] == :err }, - accounts_synced: Current.family.accounts.joins(:account_providers).distinct.count - } end # Returns a hash mapping provider key → { error:, last_synced_at:, stale: } diff --git a/app/models/provider/metadata.rb b/app/models/provider/metadata.rb index 378e133ed..e2326990d 100644 --- a/app/models/provider/metadata.rb +++ b/app/models/provider/metadata.rb @@ -4,7 +4,6 @@ class Provider simplefin: { region: "US", kind: "Bank", - tier: "Free", maturity: :stable, logo_bg: "bg-blue-600", logo_text: "SF" @@ -12,7 +11,6 @@ class Provider lunchflow: { region: "US", kind: "Lunch", - tier: "Free", maturity: :stable, logo_bg: "bg-orange-500", logo_text: "LF" @@ -20,7 +18,6 @@ class Provider enable_banking: { region: "EU", kind: "Bank", - tier: "Free", maturity: :beta, logo_bg: "bg-purple-600", logo_text: "EB" @@ -28,7 +25,6 @@ class Provider coinstats: { region: "Global", kind: "Crypto", - tier: "Free", maturity: :beta, logo_bg: "bg-yellow-500", logo_text: "CS" @@ -36,7 +32,6 @@ class Provider mercury: { region: "US", kind: "Bank", - tier: "Free", maturity: :beta, logo_bg: "bg-cyan-600", logo_text: "ME" @@ -44,7 +39,6 @@ class Provider coinbase: { region: "Global", kind: "Crypto", - tier: "Free", maturity: :beta, logo_bg: "bg-blue-500", logo_text: "CB" @@ -52,7 +46,6 @@ class Provider binance: { region: "Global", kind: "Crypto", - tier: "Free", maturity: :beta, logo_bg: "bg-yellow-400", logo_text: "BI" @@ -60,7 +53,6 @@ class Provider snaptrade: { region: "US / CA", kind: "Investment", - tier: "Free", maturity: :beta, logo_bg: "bg-green-600", logo_text: "ST" @@ -68,7 +60,6 @@ class Provider indexa_capital: { region: "ES", kind: "Investment", - tier: "Free", maturity: :alpha, logo_bg: "bg-red-600", logo_text: "IC" @@ -76,7 +67,6 @@ class Provider sophtron: { region: "US", kind: "Bank", - tier: "Free", maturity: :alpha, logo_bg: "bg-teal-600", logo_text: "SO" diff --git a/app/views/settings/providers/show.html.erb b/app/views/settings/providers/show.html.erb index 0b4ae09c7..31f41a974 100644 --- a/app/views/settings/providers/show.html.erb +++ b/app/views/settings/providers/show.html.erb @@ -20,23 +20,19 @@ method: :post, disabled: sync_all_disabled, title: sync_all_disabled ? t("settings.providers.sync_all_recently") : nil, - class: "inline-flex items-center gap-2 shrink-0 px-3 py-1.5 text-sm font-medium text-secondary hover:text-primary border border-secondary rounded-lg hover:border-primary transition-colors disabled:opacity-50 disabled:cursor-not-allowed" do %> + class: "inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-3 py-1.5 text-sm font-medium text-secondary hover:text-primary border border-secondary rounded-lg hover:border-primary transition-colors disabled:opacity-50 disabled:cursor-not-allowed" do %> <%= icon "refresh-cw", class: "w-4 h-4" %> <%= t("settings.providers.sync_all") %> <% end %> <% end %>
- <%= render Settings::HealthSummary.new(counts: @health_counts) %> - <% all_connections = @needs_attention + @connected %> - <%= render "settings/providers/group_heading", - title: t("settings.providers.groups.your_connections"), - count: all_connections.size %> - - <% if all_connections.empty? %> -

<%= t("settings.providers.groups.empty_connected") %>

+ <% if all_connections.any? %> + <%= render "settings/providers/group_heading", + title: t("settings.providers.groups.your_connections"), + count: all_connections.size %> <% end %> <% all_connections.each do |entry| %> diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml index 028cb2f79..bf511edaa 100644 --- a/config/locales/views/settings/en.yml +++ b/config/locales/views/settings/en.yml @@ -176,7 +176,7 @@ en: whats_new_label: What's new api_keys_label: API Key appearance_label: Appearance - bank_sync_label: Bank Sync + bank_sync_label: Bank sync settings_nav_link_large: next: Next previous: Back @@ -188,7 +188,7 @@ en: providers: not_authorized: Not authorized bank_sync: - page_title: Bank Sync + page_title: Bank sync lede: Connect external accounts so transactions, balances and holdings flow into Sure automatically. status: ok: Connected @@ -204,13 +204,7 @@ en: connected: Connected needs_attention: Action needed available: Available - empty_connected: Nothing connected yet — pick a provider below to get started. empty_available: All available providers are connected. - health: - connected: Connected - needs_attention: Action needed - errors: Errors - accounts_synced: Accounts synced meta: sync_error: Sync error no_recent_sync: Sync overdue diff --git a/test/system/settings/providers_test.rb b/test/system/settings/providers_test.rb index 2de951c31..fd5870e6b 100644 --- a/test/system/settings/providers_test.rb +++ b/test/system/settings/providers_test.rb @@ -81,17 +81,6 @@ class Settings::ProvidersTest < ApplicationSystemTestCase assert_operator available_y, :<, available_grid_top, "Available heading should appear above the card grid" end - test "health strip shows four tiles with correct counts" do - SimplefinItem.create!(family: @family, name: "Test SimpleFIN", access_url: "https://bridge.simplefin.org/simplefin/access") - - visit settings_providers_path - - assert_text "Connected" - assert_text "Action needed" - assert_text "Errors" - assert_text "Accounts synced" - end - test "action needed group is absent when no providers have issues" do SimplefinItem.create!(family: @family, name: "Test SimpleFIN", access_url: "https://bridge.simplefin.org/simplefin/access") @@ -149,14 +138,11 @@ class Settings::ProvidersTest < ApplicationSystemTestCase end end - test "clicking a provider card connect link opens the connect drawer" do + test "clicking a provider card opens the connect drawer" do visit settings_providers_path within available_provider_cards_container do - card = find(:xpath, ".//div[contains(concat(' ', normalize-space(@class), ' '), ' bg-container ')][.//span[normalize-space()='SimpleFIN']]") - within(card) do - find("a[data-turbo-frame='drawer']", text: "Connect").click - end + find("a[data-turbo-frame='drawer']", text: "SimpleFIN").click end assert_selector "dialog[open]" diff --git a/test/system/settings_test.rb b/test/system/settings_test.rb index 68b85f297..4aef39d0e 100644 --- a/test/system/settings_test.rb +++ b/test/system/settings_test.rb @@ -9,7 +9,7 @@ class SettingsTest < ApplicationSystemTestCase [ "Accounts", accounts_path ] ] - @settings_links << [ "Bank Sync", settings_providers_path ] if @user.admin? + @settings_links << [ "Bank sync", settings_providers_path ] if @user.admin? @settings_links += [ [ "Preferences", settings_preferences_path ], @@ -91,7 +91,7 @@ class SettingsTest < ApplicationSystemTestCase # Assert that admin-only settings are not present in the navigation assert_no_selector "li", text: "AI Prompts" assert_no_selector "li", text: "API Key" - assert_no_selector "li", text: "Bank Sync" + assert_no_selector "li", text: "Bank sync" end end