<%# locals: (holding:, editable: true) %> <% # Pre-calculate values for the form # Note: cost_basis field stores per-share cost, so calculate total for display current_per_share = holding.cost_basis.present? && holding.cost_basis.positive? ? holding.cost_basis : nil current_total = current_per_share && holding.qty.positive? ? (current_per_share * holding.qty).round(2) : nil currency = Money::Currency.new(holding.currency) %> <%= turbo_frame_tag dom_id(holding, :cost_basis) do %> <% if holding.cost_basis_locked? && !editable %> <%# Locked and not editable (from holdings list) - just show value, right-aligned %>
<%= tag.span format_money(holding.avg_cost) %> <%= icon "lock", size: "xs", class: "text-secondary" %>
<% else %> <%# Unlocked OR editable context (drawer) - show clickable menu %> <%= render DS::Menu.new(variant: :button, placement: "bottom-end") do |menu| %> <% menu.with_button(class: "hover:text-primary cursor-pointer group") do %> <% if holding.avg_cost %>
<%= tag.span format_money(holding.avg_cost) %> <% if holding.cost_basis_locked? %> <%= icon "lock", size: "xs", class: "text-secondary" %> <% end %> <%= icon "pencil", size: "xs", class: "text-secondary opacity-0 group-hover:opacity-100 transition-opacity" %>
<% else %>
<%= icon "pencil", size: "xs" %> Set
<% end %> <% end %> <% menu.with_custom_content do %>

<%= t(".set_cost_basis_header", ticker: holding.ticker, qty: format_quantity(holding.qty)) %>

<% form_data = { turbo: false } if holding.avg_cost form_data[:turbo_confirm] = { title: t(".overwrite_confirm_title"), body: t(".overwrite_confirm_body", current: format_money(holding.avg_cost)) } end %> <%= styled_form_with model: holding, url: holding_path(holding), method: :patch, class: "space-y-3", data: form_data do |f| %>
<%= currency.symbol %> <%= currency.iso_code %>

= <%= currency.symbol %><%= number_with_precision(current_per_share, precision: 2) || "0.00" %> <%= t(".per_share") %>

<%= currency.symbol %> <%= currency.iso_code %>
<%= f.submit t(".save"), class: "inline-flex items-center gap-1 px-2 py-1 rounded-md text-sm font-medium text-inverse bg-inverse hover:bg-inverse-hover" %>
<% end %>
<% end %> <% end %> <% end %> <% end %>