@@ -23,11 +23,12 @@ defmodule AlgoraWeb.Admin.CampaignLive do
2323 field :csv , :string
2424 field :from_name , :string
2525 field :from_email , :string
26+ field :preheader , :string
2627 end
2728
2829 def changeset ( campaign , attrs \\ % { } ) do
2930 campaign
30- |> cast ( attrs , [ :subject , :template , :csv , :from_name , :from_email ] )
31+ |> cast ( attrs , [ :subject , :template , :csv , :from_name , :from_email , :preheader ] )
3132 |> validate_required ( [ :subject , :template , :csv , :from_name , :from_email ] )
3233 |> validate_length ( :subject , min: 1 )
3334 |> validate_length ( :template , min: 1 )
@@ -86,8 +87,9 @@ defmodule AlgoraWeb.Admin.CampaignLive do
8687 template = get_change ( socket . assigns . form . source , :template )
8788 from_name = get_change ( socket . assigns . form . source , :from_name )
8889 from_email = get_change ( socket . assigns . form . source , :from_email )
90+ preheader = get_change ( socket . assigns . form . source , :preheader )
8991
90- case enqueue_emails ( recipients , subject , template , from_name , from_email ) do
92+ case enqueue_emails ( recipients , subject , template , from_name , from_email , preheader ) do
9193 { :ok , _ } ->
9294 { :noreply , put_flash ( socket , :info , "Enqueued #{ length ( recipients ) } emails for sending" ) }
9395
@@ -119,6 +121,12 @@ defmodule AlgoraWeb.Admin.CampaignLive do
119121 < . input type = "email " field = { @ form [ :from_email ] } label = "From Email " />
120122 </ div >
121123 < . input type = "text " field = { @ form [ :subject ] } label = "Subject " />
124+ < . input
125+ type = "text "
126+ field = { @ form [ :preheader ] }
127+ label = "Preheader "
128+ helptext = "A short summary that appears after the subject line in email clients "
129+ />
122130
123131 < . input
124132 type = "textarea "
@@ -137,6 +145,10 @@ defmodule AlgoraWeb.Admin.CampaignLive do
137145 < dt class = "font-bold " > Subject:</ dt >
138146 < dd > { get_change ( @ form . source , :subject ) } </ dd >
139147 </ div >
148+ < div class = "flex gap-1 " >
149+ < dt class = "font-bold " > Preheader:</ dt >
150+ < dd class = "line-clamp-1 " > { get_change ( @ form . source , :preheader ) } </ dd >
151+ </ div >
140152 < div class = "flex gap-1 " >
141153 < dt class = "font-bold " > From:</ dt >
142154 < dd >
@@ -284,10 +296,11 @@ defmodule AlgoraWeb.Admin.CampaignLive do
284296 subject :: String . t ( ) ,
285297 template :: String . t ( ) ,
286298 from_name :: String . t ( ) ,
287- from_email :: String . t ( )
299+ from_email :: String . t ( ) ,
300+ preheader :: String . t ( )
288301 ) ::
289302 { :ok , term } | { :error , term }
290- def enqueue_emails ( recipients , subject , template , from_name , from_email ) do
303+ def enqueue_emails ( recipients , subject , template , from_name , from_email , preheader ) do
291304 Repo . transact ( fn _ ->
292305 recipients
293306 |> Enum . map ( fn recipient ->
@@ -306,7 +319,8 @@ defmodule AlgoraWeb.Admin.CampaignLive do
306319 recipient: Algora.Util . term_to_base64 ( recipient ) ,
307320 template_params: Algora.Util . term_to_base64 ( template_params ) ,
308321 from_name: from_name ,
309- from_email: from_email
322+ from_email: from_email ,
323+ preheader: preheader
310324 }
311325 end )
312326 |> Enum . with_index ( )
@@ -323,35 +337,43 @@ defmodule AlgoraWeb.Admin.CampaignLive do
323337 recipient :: map ( ) ,
324338 subject :: String . t ( ) ,
325339 template_params :: Keyword . t ( ) ,
326- from :: { String . t ( ) , String . t ( ) }
340+ from :: { String . t ( ) , String . t ( ) } ,
341+ opts :: Keyword . t ( )
327342 ) ::
328343 { :ok , term } | { :error , term }
329- def deliver_email ( recipient , subject , template_params , from ) do
344+ def deliver_email ( recipient , subject , template_params , from , opts \\ [ ] ) do
330345 case :get
331346 |> Finch . build ( "https://algora.io/og/go/#{ recipient [ "repo_owner" ] } /#{ recipient [ "repo_name" ] } " )
332347 |> Finch . request ( Algora.Finch ) do
333348 { :ok , % Finch.Response { status: status , body: body } } when status in 200 .. 299 ->
334- deliver ( recipient [ "email" ] , subject , template_params , from , [
335- Swoosh.Attachment . new ( { :data , body } ,
336- filename: "#{ recipient [ "repo_owner" ] } .png" ,
337- content_type: "image/png" ,
338- type: :inline
339- )
340- ] )
349+ deliver (
350+ recipient [ "email" ] ,
351+ subject ,
352+ template_params ,
353+ from ,
354+ [
355+ Swoosh.Attachment . new ( { :data , body } ,
356+ filename: "#{ recipient [ "repo_owner" ] } .png" ,
357+ content_type: "image/png" ,
358+ type: :inline
359+ )
360+ ] ,
361+ opts
362+ )
341363
342364 { :error , reason } ->
343365 raise reason
344366 end
345367 end
346368
347- defp deliver ( to , subject , template_params , from , attachments ) do
369+ defp deliver ( to , subject , template_params , from , attachments , opts \\ [ ] ) do
348370 email =
349371 Email . new ( )
350372 |> Email . to ( to )
351373 |> Email . from ( from )
352374 |> Email . subject ( subject )
353375 |> Email . text_body ( Mailer . text_template ( template_params ) )
354- |> Email . html_body ( Mailer . html_template ( template_params ) )
376+ |> Email . html_body ( Mailer . html_template ( template_params , preheader: opts [ :preheader ] ) )
355377
356378 email = Enum . reduce ( attachments , email , fn attachment , acc -> Email . attachment ( acc , attachment ) end )
357379
0 commit comments