import { defineStore } from 'pinia'
import renderNewsletter from 'src/utils/renderNewsletter'
import checkNewsletter from 'src/utils/checkNewsletter'
import elements from 'src/utils/elements'
export const useNewsletterStore = defineStore('newsletter', {
state: () => ({
newsletter: {
// newsletter is loaded here
},
elements
}),
actions: {
// load a newsletter from object and validate its format
loadNewsletter (newsletter) {
checkNewsletter(newsletter, this.elements)
// no errors found proceeding to load the newsletter
this.newsletter = newsletter
},
// remove element from newsletter by id
removeElement (id) {
const element = this.newsletter.sections.flatMap(section => section.elements).find(element => element.id === id)
const section = this.newsletter.sections.find(section => section.elements.includes(element))
section.elements = section.elements.filter(element => element.id !== id)
},
// add an element based on its name to a given section (index)
addElement (name, index) {
const section = this.newsletter.sections[index]
section.elements.push({
id: `${index}-${section.elements.length}`,
type: name,
data: JSON.parse(JSON.stringify(this.elements[name].data))
})
}
},
getters: {
renderNewsletter
}
})