Context: I am trying to create a template builder for emails and I have noticed that I can't update the theme colours as JavaScript passes the values into the object.
I have two object's, theme
and templates
.
// Theme settings
const theme = [
{
primary: '#0074ff',
secondary: '#222222',
text: '#111111',
fontSize: '14px',
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
background: '#e0e2e3',
container: '#ffffff',
padding: '16px 16px',
}
];
// Templates
const emailTemplates = [
{
title: 'Template 1',
fields: [
{ id: 'image', name: 'Image URL', type: 'text', default: 'https://via.placeholder.com/200x80' },
{ id: 'imageWidth', name: 'Image width (pixels)', type: 'number', default: '200' }
],
code: `<div style="padding: ${theme[0].padding}"><img src="{{image}}" width="{{imageWidth}}"/></div>`
},
{
title: 'Template 2',
fields: [
{ id: 'text', name: 'Body text', type: 'text', default: 'Lorem ipsum' }
],
code: `<p style="color: ${theme[0].text}">{{text}}</p>`
},
// Other templates
]
Note: don't worry about the use of inline styles as this is designed for HTML emails which for compatibility reasons requires inline styling.
What have I tried: I have tried to do the solution in this StackOverflow . But it doesn't seem to add the values in either.
When I console.log
the emailTemplates
object, the values for the theme variables appear to be hard coded in the code
property. How can I make it so that it is able to be updated.
For example:
If I update the theme
variables, I'd like the values in the emailTemplates
to also update.
console.log(theme[0].text); // returns '#111111'
console.log(emailTemplates[1].code); // returns '<p style="color: #111111">{{text}}</p>'
// If I change the value for the theme, I want the emailTemplates value to also update
theme[0].text = '#222222';
console.log(theme[0].text); // returns '#222222'
console.log(emailTemplates[1].code); // returns '<p style="color: #111111">{{text}}</p>'
Please let me know if something like this is possible.