feat: Add Brand Fetch logo link for logos (see #43) (#99)

* feat: Add Brand Fetch logo link for logos

* docs: brand fetch integration docs

* Document CLIENT_ID location?

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>

---------

Signed-off-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: Vincent Teo <vinteo@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
Juan José Mata
2025-08-11 13:34:54 -07:00
committed by GitHub
parent 1ae9e3e8fb
commit dd0cb60b56
12 changed files with 81 additions and 9 deletions

View File

@@ -7,7 +7,9 @@
"full" => "w-full h-full"
} %>
<% if account.logo.attached? %>
<% if account.plaid_account_id? && account.institution_domain.present? && Setting.brand_fetch_client_id.present? %>
<%= image_tag "https://cdn.brandfetch.io/#{account.institution_domain}/icon/fallback/lettermark/w/40/h/40?c=#{Setting.brand_fetch_client_id}", class: "shrink-0 rounded-full #{size_classes[size]}" %>
<% elsif account.logo.attached? %>
<%= image_tag account.logo, class: "shrink-0 rounded-full #{size_classes[size]}" %>
<% else %>
<%= render DS::FilledIcon.new(variant: :text, hex_color: color || account.accountable.color, text: account.name, size: size, rounded: true) %>

View File

@@ -3,10 +3,13 @@
<%= turbo_frame_tag dom_id(holding) do %>
<div class="grid grid-cols-12 items-center text-primary text-sm font-medium p-4">
<div class="col-span-4 flex items-center gap-4">
<% if holding.security.logo_url.present? %>
<% if Setting.brand_fetch_client_id.present? %>
<%= image_tag "https://cdn.brandfetch.io/#{holding.ticker}/icon/fallback/lettermark/w/40/h/40?c=#{Setting.brand_fetch_client_id}", class: "w-9 h-9 rounded-full", loading: "lazy" %>
<% elsif holding.security.logo_url.present? %>
<%= image_tag holding.security.logo_url, class: "w-9 h-9 rounded-full", loading: "lazy" %>
<% else %>
<%= render DS::FilledIcon.new(variant: :text, text: holding.name, size: "md", rounded: true) %>
<% end %>
<div class="space-y-0.5">
<%= link_to holding.name, holding_path(holding), data: { turbo_frame: :drawer }, class: "hover:underline" %>

View File

@@ -6,8 +6,12 @@
<%= tag.p @holding.ticker, class: "text-sm text-secondary" %>
</div>
<% if @holding.security.logo_url.present? %>
<% if Setting.brand_fetch_client_id.present? %>
<%= image_tag "https://cdn.brandfetch.io/#{@holding.ticker}/icon/fallback/lettermark/w/40/h/40?c=#{Setting.brand_fetch_client_id}", loading: "lazy", class: "w-9 h-9 rounded-full" %>
<% elsif @holding.security.logo_url.present? %>
<%= image_tag @holding.security.logo_url, loading: "lazy", class: "w-9 h-9 rounded-full" %>
<% else %>
<%= render DS::FilledIcon.new(variant: :text, text: @holding.name, size: "md", rounded: true) %>
<% end %>
</div>
<% end %>

View File

@@ -0,0 +1,26 @@
<div class="space-y-4">
<div>
<h2 class="font-medium mb-1"><%= t(".title") %></h2>
<% if ENV["BRAND_FETCH_CLIENT_ID"].present? %>
<p class="text-sm text-secondary">You have successfully configured your Brand Fetch Client ID through the BRAND_FETCH_CLIENT_ID environment variable.</p>
<% else %>
<p class="text-secondary text-sm mb-4"><%= t(".description") %></p>
<% end %>
</div>
<%= styled_form_with model: Setting.new,
url: settings_hosting_path,
method: :patch,
data: {
controller: "auto-submit-form",
"auto-submit-form-trigger-event-value": "blur"
} do |form| %>
<%= form.text_field :brand_fetch_client_id,
label: t(".label"),
type: "password",
placeholder: t(".placeholder"),
value: ENV.fetch("BRAND_FETCH_CLIENT_ID", Setting.brand_fetch_client_id),
disabled: ENV["BRAND_FETCH_CLIENT_ID"].present?,
data: { "auto-submit-form-target": "auto" } %>
<% end %>
</div>

View File

@@ -2,6 +2,7 @@
<%= settings_section title: t(".general") do %>
<div class="space-y-6">
<%= render "settings/hostings/brand_fetch_settings" %>
<%= render "settings/hostings/twelve_data_settings" %>
</div>
<% end %>