@travetto/email-inky
Version:
Email Inky templating module
30 lines (24 loc) • 916 B
text/typescript
import { createElement } from '@travetto/email-inky/jsx-runtime';
import { castTo, FileLoader } from '@travetto/runtime';
import { EmailTemplateLocation, EmailResourceLoader } from '@travetto/email';
import { JSXElementByFn, c } from '../components';
export type RenderContextInit = EmailTemplateLocation & { loader?: FileLoader, columnCount?: number };
/**
* Render Context
*/
export class RenderContext implements RenderContextInit {
columnCount: number = 12;
file: string;
module: string;
loader: FileLoader;
constructor(ctx: RenderContextInit) {
Object.assign(this, ctx);
this.loader ??= new EmailResourceLoader(ctx.module);
}
/**
* Create a new element from a given JSX factory
*/
createElement<K extends keyof typeof c>(name: K, props: JSXElementByFn<K>['props']): JSXElementByFn<K> {
return castTo(createElement(castTo<Record<string, string>>(c)[name], props));
}
}