I'm building an e-commerce marketplace with Firebase and Svelte where every user can create their store. Not every store will look the same. The users will structure their site using pre-made components and behind the scenes, it might look something like this:
<Header logo="" name"".../>
<FAQ questions=.../>
<ProductList .../>
<ContactForm .../>
<Footer .../>
or like:
<Header logo="" name"".../>
<Video link="".../>
<ProductList .../>
<MailingList .../>
<Footer .../>
And yes, I know about <svelte:component this={...}/> for dynamic components.
But how should I store the sites? Should I just keep the full ".svelte" file in a field of the store's document in the database, then on the client side just create every component with the technique I talked about above? This seems pretty inefficient and heavy in the long run. What's the standard way of doing it?
Thanks.
I would probably store the structure as JSON to decouple it from the implementation, e.g.
(Quite possibly with additional containers for layout purposes, e.g. vertical/horizontal/grid.)
Then a generic component can resolve this.
If e.g. a layout container is found,
{#each}can be used with<svelte:self>for recursion.This should not be that impactful for a few components. The DB query result can also be cached to prevent round trips.