<%= form_with model: mailing, class: "grid gap-6 lg:grid-cols-[1fr_16rem]", html: { multipart: true } do |f| %>
<%= render "shared/errors", object: mailing %> <% if @mail_identities.blank? %>
Serve almeno un account SMTP attivo. <% if current_user.admin? %> <%= link_to "Censiscine uno", new_mail_identity_path, class: "font-medium underline" %>. <% end %>
<% end %>
<%= f.text_field :name, required: true, class: input_class %>
<%= f.collection_select :mail_identity_id, @mail_identities, :id, :name, { prompt: "Scegli SMTP" }, { class: input_class, required: true } %>
<%= f.select :audience, Catalog::MAILING_AUDIENCES.map { |k, v| [v, k] }, {}, class: input_class %>
<%= f.number_field :interval_seconds, min: 0, max: 86_400, class: input_class %>

0 = in coda una dopo l’altra, senza attesa. Es. 120 = una email ogni 2 minuti.

" data-send-window-target="panel">
<%= f.time_field :send_window_start_tod, include_seconds: false, step: 60, class: input_class %>
<%= f.time_field :send_window_end_tod, include_seconds: false, step: 60, class: input_class %>
" data-ab-test-target="panel"> <%= f.select :ab_assignment, Catalog::MAILING_AB_ASSIGNMENTS.map { |k, v| [v, k] }, {}, class: input_class %>

«Già in scheda» usa il Test A/B della trattativa (es. campagna MatchLiveTV). «Suddividi a metà» alterna A e B sulla lista.

<% templates_payload = mail_templates_picker_payload(@mail_templates) %>
" data-ab-test-target="grid"> <%= tag.div class: "space-y-4", data: { controller: "template-picker", template_picker_templates_value: templates_payload } do %>

Variante A

<%= f.collection_select :mail_template_id, @mail_templates, :id, :name, { include_blank: "Nessuno — scrivi a mano" }, { class: input_class, data: { template_picker_target: "select", action: "change->template-picker#apply" } } %>

Scegliendo un template, oggetto e testo si copiano qui sotto. Poi puoi modificarli solo per questo invio.

<%= f.text_field :subject, required: true, class: input_class, data: { template_picker_target: "subject" } %>
<%= render "shared/wysiwyg_field", form: f, method: :body_html, label: "Corpo HTML A" %>
<% end %> <%= tag.div class: "space-y-4 #{'hidden' unless mailing.ab_test?}", data: { controller: "template-picker", template_picker_templates_value: templates_payload, ab_test_target: "panel" } do %>

Variante B

<%= f.collection_select :mail_template_b_id, @mail_templates, :id, :name, { include_blank: "Nessuno — scrivi a mano" }, { class: input_class, data: { template_picker_target: "select", action: "change->template-picker#apply" } } %>

Stesso meccanismo della variante A: il template riempie oggetto e corpo B.

<%= f.text_field :subject_b, class: input_class, data: { template_picker_target: "subject" } %>
<%= render "shared/wysiwyg_field", form: f, method: :body_html_b, label: "Corpo HTML B" %>
<% end %>
<%= f.file_field :files, multiple: true, class: "block w-full text-sm text-zinc-600 file:mr-3 file:rounded-lg file:border-0 file:bg-zinc-900 file:px-3 file:py-2 file:text-sm file:font-medium file:text-white dark:text-zinc-300 dark:file:bg-zinc-100 dark:file:text-zinc-900" %> <% if mailing.files.attached? %> <% end %>
<%= f.submit mailing.new_record? ? "Crea bozza" : "Salva", class: "#{btn_primary} w-full sm:w-auto" %> <%= link_to "Annulla", mailing.new_record? ? dashboard_mailings_path : mailing_path(mailing), class: "#{btn_secondary} w-full sm:w-auto" %>
<%= render "shared/merge_tokens" %>
<% end %>