mirror of
https://github.com/we-promise/sure.git
synced 2026-05-30 07:49:01 +00:00
- Sync all: replace the hand-rolled `button_to` with `DS::Link.new(variant: "outline", method: :post)` — same component as the "Identify Patterns" button on the recurring-transactions page. - Search input: switch to the icon-overlay pattern used by the Manage-currencies and transaction filter rows (relative wrapper + absolutely positioned search icon + bordered input with `focus:ring-gray-500`). Brings the keyboard focus state in line with the rest of the app's filterable lists. - SnapTrade panel: restore the "needs registration" status row that the drawer-cleanup pass dropped along with the redundant Configured/Not configured footer. The unregistered case is meaningful state, not redundant chrome. - Move the slim health-strip computation out of the controller and into `SettingsHelper#provider_health_strip` (Convention 2: skinny controllers). - Extract `concise_time_ago` helper so the "drop leading 'about '" trick stops being duplicated 3x. - `Settings::ProviderCard#maturity_label` (instance) now delegates to `.maturity_label` (class) instead of duplicating the lookup. - Drop unused `warn_or_err` local in `_connection_row`. - Replace the `data-controller` string-injection + html_safe in `_connection_row` with `tag.details(data: ...)`; safer and more idiomatic. - Add a system test for the empty-filter message wiring.
44 lines
2.0 KiB
Plaintext
44 lines
2.0 KiB
Plaintext
<%# locals: (entry:, open:) %>
|
|
<%
|
|
status = entry[:summary][:status]
|
|
meta = entry[:summary][:meta]
|
|
last_synced = entry[:summary][:last_synced_at]
|
|
border_class =
|
|
case status
|
|
when :warn then "border border-warning/25"
|
|
when :err then "border border-destructive/25"
|
|
else "border border-transparent"
|
|
end
|
|
sync_action = entry[:partial].present? ? render("settings/providers/sync_button", provider_key: entry[:provider_key], last_synced_at: last_synced) : nil
|
|
status_pill = render("settings/providers/status_pill", status: status)
|
|
maturity_lbl = Settings::ProviderCard.maturity_label(entry[:maturity])
|
|
details_data = entry[:auto_open_param].present? ? { controller: "auto-open", auto_open_param_value: entry[:auto_open_param] } : {}
|
|
%>
|
|
<%= tag.details open: open,
|
|
class: "group bg-container shadow-border-xs rounded-xl #{border_class}",
|
|
data: details_data do %>
|
|
<summary class="flex items-center gap-3 px-4 py-3.5 cursor-pointer rounded-xl list-none [&::-webkit-details-marker]:hidden">
|
|
<%= icon "chevron-right", size: "sm", class: "!w-3.5 !h-3.5 text-secondary group-open:rotate-90 transition-transform" %>
|
|
<div class="flex items-center gap-2 flex-wrap min-w-0 flex-1">
|
|
<h3 class="text-sm font-medium text-primary"><%= entry[:title] %></h3>
|
|
<%= render "settings/providers/maturity_badge", label: maturity_lbl %>
|
|
</div>
|
|
<div class="flex items-center gap-2 shrink-0 group-open:hidden">
|
|
<% if meta.present? %>
|
|
<span class="text-xs text-subdued"><%= meta %></span>
|
|
<% end %>
|
|
<%= status_pill %>
|
|
<%= sync_action if sync_action %>
|
|
</div>
|
|
</summary>
|
|
<div class="space-y-4 mt-4 px-4 pb-4">
|
|
<% if entry[:configuration] %>
|
|
<%= render "settings/providers/provider_form", configuration: entry[:configuration] %>
|
|
<% else %>
|
|
<turbo-frame id="<%= entry[:turbo_id] %>-providers-panel">
|
|
<%= render "settings/providers/#{entry[:partial]}" %>
|
|
</turbo-frame>
|
|
<% end %>
|
|
</div>
|
|
<% end %>
|