@@ -37,6 +37,10 @@ const sendgridAddRecipientsToList = (listId, recipientIds) => {
3737 } )
3838}
3939
40+ const replaceLinebreaksToHtml = str => {
41+ return _ . replace ( str , / \n / gm, '<br />' )
42+ }
43+
4044// A function that takes in the email body as a string and replaces the tags with corresponding dynamic information
4145const replaceBodyTags = ( str , event , user ) => {
4246 if ( typeof str !== 'string' || ! str . length ) {
@@ -48,82 +52,115 @@ const replaceBodyTags = (str, event, user) => {
4852 }
4953
5054 if ( ! user || typeof user !== 'object' ) {
51- throw new Error ( " User object is missing or not an object" )
55+ throw new Error ( ' User object is missing or not an object' )
5256 }
5357
5458 const data = {
55- "{USER_ID}" : user . userId ,
56- "{FIRST_NAME}" : user . firstName ,
57- "{LAST_NAME}" : user . lastName ,
58- "{EVENT_NAME}" : event . name ,
59- "{REGISTRATION_START_TIME}" : moment ( event . registrationStartTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
60- "{REGISTRATION_END_TIME}" : moment ( event . registrationEndTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
61- "{SUBMISSION_START_TIME}" : moment ( event . submissionStartTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
62- "{SUBMISSION_END_TIME}" : moment ( event . submissionEndTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
63- "{REVIEW_START_TIME}" : moment ( event . reviewStartTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
64- "{REVIEW_END_TIME}" : moment ( event . reviewEndTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
65- "{EVENT_START_TIME}" : moment ( event . startTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
66- "{EVENT_END_TIME}" : moment ( event . endTime ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
67- "{CURRENT_TIME}" : moment ( ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
59+ '{USER_ID}' : user . userId ,
60+ '{FIRST_NAME}' : user . firstName ,
61+ '{LAST_NAME}' : user . lastName ,
62+ '{EVENT_NAME}' : event . name ,
63+ '{REGISTRATION_START_TIME}' : moment ( event . registrationStartTime ) . format (
64+ 'MMMM Do YYYY, h:mm:ss a' ,
65+ ) ,
66+ '{REGISTRATION_END_TIME}' : moment ( event . registrationEndTime ) . format (
67+ 'MMMM Do YYYY, h:mm:ss a' ,
68+ ) ,
69+ '{SUBMISSION_START_TIME}' : moment ( event . submissionStartTime ) . format (
70+ 'MMMM Do YYYY, h:mm:ss a' ,
71+ ) ,
72+ '{SUBMISSION_END_TIME}' : moment ( event . submissionEndTime ) . format (
73+ 'MMMM Do YYYY, h:mm:ss a' ,
74+ ) ,
75+ '{REVIEW_START_TIME}' : moment ( event . reviewStartTime ) . format (
76+ 'MMMM Do YYYY, h:mm:ss a' ,
77+ ) ,
78+ '{REVIEW_END_TIME}' : moment ( event . reviewEndTime ) . format (
79+ 'MMMM Do YYYY, h:mm:ss a' ,
80+ ) ,
81+ '{EVENT_START_TIME}' : moment ( event . startTime ) . format (
82+ 'MMMM Do YYYY, h:mm:ss a' ,
83+ ) ,
84+ '{EVENT_END_TIME}' : moment ( event . endTime ) . format (
85+ 'MMMM Do YYYY, h:mm:ss a' ,
86+ ) ,
87+ '{CURRENT_TIME}' : moment ( ) . format ( 'MMMM Do YYYY, h:mm:ss a' ) ,
6888 }
6989 try {
7090 for ( const key in data ) {
7191 if ( data [ key ] === null || data [ key ] === undefined ) {
7292 console . error ( `Data for key ${ key } is missing or undefined` )
73- continue // We skip this replacement if the data is missing
93+ continue // We skip this replacement if the data is missing
7494 }
7595 str = str . replace ( new RegExp ( key , 'g' ) , data [ key ] ) // Replace all instances of the tag with the corresponding data
7696 }
7797 } catch ( err ) {
78- console . error ( " Error replacing body tags:" , err )
98+ console . error ( ' Error replacing body tags:' , err )
7999 return str
80100 }
81-
82101 return str
83102}
84103
104+ const formatBody = ( str , event , user ) => {
105+ return replaceBodyTags ( replaceLinebreaksToHtml ( str ) , event , user )
106+ }
107+
85108const SendgridService = {
86109 sendAcceptanceEmail : ( event , user ) => {
87-
88-
89- var header_image_url = null
90- if ( typeof event . coverImage !== "undefined" ) {
110+ let header_image_url = null
111+ if ( typeof event . coverImage !== 'undefined' ) {
91112 header_image_url = event . coverImage . url
92113 }
93114 const msg = SendgridService . buildTemplateMessage (
94115 user . email ,
95116 global . gConfig . SENDGRID_GENERIC_TEMPLATE ,
96117 {
97118 header_image : header_image_url ,
98- subject : event . emailConfig . acceptanceEmail . title || `Congratulations!` ,
99- subtitle : event . emailConfig . acceptanceEmail . subtitle || `You've been accepted to ${ event . name } !` ,
100- body : replaceBodyTags ( event . emailConfig . acceptanceEmail . body , event , user ) ,
119+ subject :
120+ event . emailConfig . acceptanceEmail . title ||
121+ `Congratulations!` ,
122+ subtitle :
123+ event . emailConfig . acceptanceEmail . subtitle ||
124+ `You've been accepted to ${ event . name } !` ,
125+ body : formatBody (
126+ event . emailConfig . acceptanceEmail . body ,
127+ event ,
128+ user ,
129+ ) ,
101130 cta_text : 'Event dashboard' ,
102131 cta_link : `${ global . gConfig . FRONTEND_URL } /dashboard/event/${ event . slug } ` ,
103132 } ,
104133 )
105134 return SendgridService . send ( msg )
106135 } ,
107136 sendRejectionEmail : ( event , user ) => {
108- var header_image_url = null
109- if ( typeof event . coverImage !== " undefined" ) {
137+ let header_image_url = null
138+ if ( typeof event . coverImage !== ' undefined' ) {
110139 header_image_url = event . coverImage . url
111140 }
112141 const msg = SendgridService . buildTemplateMessage (
113142 user . email ,
114143 global . gConfig . SENDGRID_GENERIC_TEMPLATE ,
115144 {
116- header_image_url : header_image_url ,
117- subject : event . emailConfig . rejectionEmail . title || `Oh-oh, bad news...` ,
118- subtitle : event . emailConfig . rejectionEmail . subtitle || `We couldn't give you a spot at ${ event . name } .` ,
119- body : replaceBodyTags ( event . emailConfig . rejectionEmail . body , event , user ) ,
145+ header_image : header_image_url ,
146+ subject :
147+ event . emailConfig . rejectionEmail . title ||
148+ `Oh-oh, bad news...` ,
149+ subtitle :
150+ event . emailConfig . rejectionEmail . subtitle ||
151+ `We couldn't give you a spot at ${ event . name } .` ,
152+ body : formatBody (
153+ event . emailConfig . rejectionEmail . body ,
154+ event ,
155+ user ,
156+ ) ,
120157 } ,
121158 )
122159 return SendgridService . send ( msg )
123160 } ,
124161 sendRegisteredEmail : ( event , user ) => {
125- var header_image_url = null
126- if ( typeof event . coverImage !== " undefined" ) {
162+ let header_image_url = null
163+ if ( typeof event . coverImage !== ' undefined' ) {
127164 header_image_url = event . coverImage . url
128165 }
129166 let msg
@@ -133,9 +170,17 @@ const SendgridService = {
133170 global . gConfig . SENDGRID_GENERIC_TEMPLATE ,
134171 {
135172 header_image : header_image_url ,
136- subject : event . emailConfig . registrationEmail . title || `Thanks for registering to ${ event . name } !` ,
137- subtitle : event . emailConfig . registrationEmail . subtitle || 'Awesome! Now just sit back and relax.' ,
138- body : replaceBodyTags ( event . emailConfig . registrationEmail . body , event , user ) ,
173+ subject :
174+ event . emailConfig . registrationEmail . title ||
175+ `Thanks for registering to ${ event . name } !` ,
176+ subtitle :
177+ event . emailConfig . registrationEmail . subtitle ||
178+ 'Awesome! Now just sit back and relax.' ,
179+ body : formatBody (
180+ event . emailConfig . registrationEmail . body ,
181+ event ,
182+ user ,
183+ ) ,
139184 cta_text : 'Event dashboard' ,
140185 cta_link : `${ global . gConfig . FRONTEND_URL } /dashboard/event/${ event . slug } ` ,
141186 } ,
@@ -146,8 +191,12 @@ const SendgridService = {
146191 global . gConfig . SENDGRID_GENERIC_TEMPLATE ,
147192 {
148193 header_image : header_image_url ,
149- subject : event . emailConfig . registrationEmail . title || `Thanks for registering to ${ event . name } !` ,
150- subtitle : event . emailConfig . registrationEmail . subtitle || `Thank you for registering to ${ event . name } !` ,
194+ subject :
195+ event . emailConfig . registrationEmail . title ||
196+ `Thanks for registering to ${ event . name } !` ,
197+ subtitle :
198+ event . emailConfig . registrationEmail . subtitle ||
199+ `Thank you for registering to ${ event . name } !` ,
151200 body : `You can modify your registration until the registration period ends <b>${ moment (
152201 event . registrationEndTime ,
153202 ) . format (
@@ -315,19 +364,23 @@ const SendgridService = {
315364 return SendgridService . sendGenericEmail ( user . email , params )
316365 } ,
317366 sendGenericEmail : ( to , params , from = { } , event , user ) => {
367+ let header_image_url = null
368+ if ( typeof event . coverImage !== 'undefined' ) {
369+ header_image_url = event . coverImage . url
370+ }
318371 const msg = SendgridService . buildTemplateMessage (
319372 to ,
320373 global . gConfig . SENDGRID_GENERIC_TEMPLATE ,
321374 {
322375 subject : params . subject ,
323376 subtitle : params . subtitle ,
324- header_image : params . header_image ,
325- body : replaceBodyTags ( params . body , event , user ) ,
377+ header_image : header_image_url ,
378+ body : formatBody ( params . body , event , user ) ,
326379 cta_text : params . cta_text ,
327380 cta_link : params . cta_link ,
328381 reply_to : params . reply_to ,
329382 } ,
330- from
383+ from ,
331384 )
332385 console . log ( 'sending' , msg )
333386 return SendgridService . send ( msg )
0 commit comments