<%# locals: (form:, amount_method:, currency_method:, **options) %> <% currency_value = if options[:currency_value_override].present? options[:currency_value_override] elsif form.object && form.object.respond_to?(currency_method) form.object.public_send(currency_method) end currency = Money::Currency.new(currency_value || options[:default_currency] || "USD") %>
<%= form.label options[:label] || t(".label"), class: "form-field__label" do %> <%= options[:label] || t(".label") %> <% if options[:required] %> * <% end %> <% end %>
<%= currency.symbol %> <%= form.number_field amount_method, class: "form-field__input", inline: true, placeholder: "100", value: if options[:value] sprintf("%.#{currency.default_precision}f", options[:value]) elsif form.object && form.object.respond_to?(amount_method) val = form.object.public_send(amount_method) sprintf("%.#{currency.default_precision}f", val) if val.present? end, min: options[:min] || -99999999999999, max: options[:max] || 99999999999999, step: currency.step, data: { "money-field-target": "amount", "auto-submit-form-target": ("auto" if options[:auto_submit]) }.compact, required: options[:required] %>
<% unless options[:hide_currency] %>
<%= form.select currency_method, currencies_for_select.map(&:iso_code), { inline: true, selected: currency_value }, { class: "w-fit pr-5 disabled:text-gray-400 form-field__input", disabled: options[:disable_currency], data: { "money-field-target": "currency", action: "change->money-field#handleCurrencyChange", "auto-submit-form-target": ("auto" if options[:auto_submit]) }.compact } %>
<% end %>