Files
sure/app/views/settings/hostings/_provider_selection.html.erb
soky srm 7908f7d8a4 Expand financial providers (#1407)
* Initial implementation

* Tiingo fixes

* Adds 2 providers, remove 2

* Add  extra checks

* FIX a big hotwire race condition

// Fix hotwire_combobox race condition: when typing quickly, a slow response for
// an early query (e.g. "A") can overwrite the correct results for the final query
// (e.g. "AAPL"). We abort the previous in-flight request whenever a new one fires,
// so stale Turbo Stream responses never reach the DOM.

* pipelock

* Update price_test.rb

* Reviews

* i8n

* fixes

* fixes

* Update tiingo.rb

* fixes

* Improvements

* Big revamp

* optimisations

* Update 20260408151837_add_offline_reason_to_securities.rb

* Add missing tests, fixes

* small rank tests

* FIX tests

* Update show.html.erb

* Update resolver.rb

* Update usd_converter.rb

* Update holdings_controller.rb

* Update holdings_controller.rb

* Update holdings_controller.rb

* Update holdings_controller.rb

* Update holdings_controller.rb

* Update _yahoo_finance_settings.html.erb
2026-04-09 18:33:59 +02:00

83 lines
3.7 KiB
Plaintext

<div class="space-y-6">
<%# Exchange Rate Provider - single dropdown %>
<div class="space-y-2">
<h3 class="font-medium text-sm"><%= t(".exchange_rate_title") %></h3>
<p class="text-secondary text-xs mb-2"><%= t(".exchange_rate_description") %></p>
<%= styled_form_with model: Setting.new,
url: settings_hosting_path,
method: :patch,
data: {
controller: "auto-submit-form",
"auto-submit-form-trigger-event-value": "change"
} do |form| %>
<%= form.select :exchange_rate_provider,
[
[t(".providers.twelve_data"), "twelve_data"],
[t(".providers.yahoo_finance"), "yahoo_finance"]
],
{ label: t(".exchange_rate_provider_label") },
{
value: ENV.fetch("EXCHANGE_RATE_PROVIDER", Setting.exchange_rate_provider),
disabled: ENV["EXCHANGE_RATE_PROVIDER"].present?,
data: { "auto-submit-form-target": "auto" }
} %>
<% end %>
</div>
<%# Securities Providers - multiple checkboxes %>
<div class="space-y-2">
<h3 class="font-medium text-sm"><%= t(".securities_title") %></h3>
<p class="text-secondary text-xs mb-2"><%= t(".securities_description") %></p>
<%= styled_form_with model: Setting.new,
url: settings_hosting_path,
method: :patch,
data: {
controller: "auto-submit-form"
} do |form| %>
<% disabled = ENV["SECURITIES_PROVIDERS"].present? || ENV["SECURITIES_PROVIDER"].present? %>
<% enabled_providers = Setting.enabled_securities_providers %>
<div class="space-y-2">
<%# Hidden field to ensure empty array is submitted when all unchecked %>
<input type="hidden" name="setting[securities_providers][]" value="">
<% [
["twelve_data", t(".providers.twelve_data"), t(".twelve_data_hint")],
["yahoo_finance", t(".providers.yahoo_finance"), t(".yahoo_finance_hint")],
["tiingo", t(".providers.tiingo"), t(".requires_api_key")],
["eodhd", t(".providers.eodhd"), t(".requires_api_key_eodhd")],
["alpha_vantage", t(".providers.alpha_vantage"), t(".requires_api_key_alpha_vantage")],
["mfapi", t(".providers.mfapi"), t(".mfapi_hint")],
].each do |value, label, hint| %>
<label class="flex items-center gap-2 cursor-pointer">
<input type="checkbox"
name="setting[securities_providers][]"
value="<%= value %>"
class="rounded border-primary text-primary focus:ring-primary"
<%= "checked" if enabled_providers.include?(value) %>
<%= "disabled" if disabled %>
data-auto-submit-form-target="auto">
<span class="text-sm"><%= label %></span>
<% if hint %>
<span class="text-xs text-secondary">(<%= hint %>)</span>
<% end %>
</label>
<% end %>
</div>
<% end %>
</div>
<% if ENV["EXCHANGE_RATE_PROVIDER"].present? || ENV["SECURITIES_PROVIDERS"].present? || ENV["SECURITIES_PROVIDER"].present? %>
<div class="bg-amber-50 border border-amber-200 rounded-lg p-3">
<div class="flex items-start gap-2">
<%= icon("alert-triangle", size: "sm", class: "text-amber-600 mt-0.5 shrink-0") %>
<p class="text-sm text-amber-700">
<%= t(".env_configured_message") %>
</p>
</div>
</div>
<% end %>
</div>