@codee-sh/medusa-plugin-notification-emails 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/emails-previews/contact-form.js +14 -8
- package/.medusa/server/emails-previews/inventory-level.js +8 -4
- package/.medusa/server/emails-previews/order-completed.js +70 -35
- package/.medusa/server/emails-previews/order-placed.js +70 -34
- package/.medusa/server/src/admin/index.js +1684 -262
- package/.medusa/server/src/admin/index.mjs +1684 -262
- package/.medusa/server/src/api/admin/notification-plugin/render-template/route.js +9 -5
- package/.medusa/server/src/subscribers/order-completed.js +10 -6
- package/.medusa/server/src/subscribers/order-placed.js +8 -4
- package/.medusa/server/src/templates/emails/contact-form/config.js +5 -1
- package/.medusa/server/src/templates/emails/email-template-service.js +210 -0
- package/.medusa/server/src/templates/emails/index.js +6 -248
- package/.medusa/server/src/templates/emails/inventory-level/config.js +5 -1
- package/.medusa/server/src/templates/emails/order/completed/config.js +5 -1
- package/.medusa/server/src/templates/emails/order/completed/index.js +1 -2
- package/.medusa/server/src/templates/emails/order/placed/config.js +5 -1
- package/.medusa/server/src/templates/emails/order/updated/config.js +5 -1
- package/.medusa/server/src/templates/emails/types.js +1 -1
- package/.medusa/server/src/templates/shared/abstract-template-service.js +104 -0
- package/.medusa/server/src/templates/shared/index.js +22 -0
- package/.medusa/server/src/templates/shared/types.js +6 -0
- package/.medusa/server/src/templates/slack/index.js +12 -0
- package/.medusa/server/src/templates/slack/inventory-level/config.js +52 -0
- package/.medusa/server/src/templates/slack/inventory-level/index.js +8 -0
- package/.medusa/server/src/templates/slack/inventory-level/translations/en.json +18 -0
- package/.medusa/server/src/templates/slack/inventory-level/translations/pl.json +18 -0
- package/.medusa/server/src/templates/slack/order/archived/config.js +48 -0
- package/.medusa/server/src/templates/slack/order/archived/index.js +7 -0
- package/.medusa/server/src/templates/slack/order/archived/translations/en.json +11 -0
- package/.medusa/server/src/templates/slack/order/archived/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/order/archived/translations/pl.json +11 -0
- package/.medusa/server/src/templates/slack/order/canceled/config.js +48 -0
- package/.medusa/server/src/templates/slack/order/canceled/index.js +7 -0
- package/.medusa/server/src/templates/slack/order/canceled/translations/en.json +11 -0
- package/.medusa/server/src/templates/slack/order/canceled/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/order/canceled/translations/pl.json +11 -0
- package/.medusa/server/src/templates/slack/order/completed/config.js +48 -0
- package/.medusa/server/src/templates/slack/order/completed/index.js +7 -0
- package/.medusa/server/src/templates/slack/order/completed/translations/en.json +11 -0
- package/.medusa/server/src/templates/slack/order/completed/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/order/completed/translations/pl.json +11 -0
- package/.medusa/server/src/templates/slack/order/placed/config.js +48 -0
- package/.medusa/server/src/templates/slack/order/placed/index.js +7 -0
- package/.medusa/server/src/templates/slack/order/placed/translations/en.json +11 -0
- package/.medusa/server/src/templates/slack/order/placed/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/order/placed/translations/pl.json +11 -0
- package/.medusa/server/src/templates/slack/order/updated/config.js +48 -0
- package/.medusa/server/src/templates/slack/order/updated/index.js +7 -0
- package/.medusa/server/src/templates/slack/order/updated/translations/en.json +11 -0
- package/.medusa/server/src/templates/slack/order/updated/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/order/updated/translations/pl.json +11 -0
- package/.medusa/server/src/templates/slack/product/config.js +48 -0
- package/.medusa/server/src/templates/slack/product/index.js +7 -0
- package/.medusa/server/src/templates/slack/product/translations/en.json +14 -0
- package/.medusa/server/src/templates/slack/product/translations/pl.json +14 -0
- package/.medusa/server/src/templates/slack/product-variant/config.js +48 -0
- package/.medusa/server/src/templates/slack/product-variant/index.js +7 -0
- package/.medusa/server/src/templates/slack/product-variant/translations/en.json +14 -0
- package/.medusa/server/src/templates/slack/product-variant/translations/index.js +15 -0
- package/.medusa/server/src/templates/slack/product-variant/translations/pl.json +14 -0
- package/.medusa/server/src/templates/slack/slack-template-service.js +219 -0
- package/.medusa/server/src/templates/slack/types.js +15 -0
- package/.medusa/server/src/utils/i18n/i18n.js +7 -10
- package/README.md +45 -15
- package/package.json +4 -1
- package/.medusa/server/src/subscribers/payment-captured.js +0 -86
|
@@ -16,14 +16,18 @@ async function POST(req, res) {
|
|
|
16
16
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Template name, template data and locale are required");
|
|
17
17
|
}
|
|
18
18
|
const transformedTemplateData = (0, transforms_1.transformContext)(contextType, context, locale);
|
|
19
|
-
const { html, text } = await
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
const { html, text } = await emails_1.emailService.render({
|
|
20
|
+
templateName,
|
|
21
|
+
data: transformedTemplateData,
|
|
22
|
+
options: {
|
|
23
|
+
locale: locale,
|
|
24
|
+
theme: pluginOptions?.theme || theme_1.defaultTheme,
|
|
25
|
+
translations: pluginOptions?.customTranslations?.[templateName]
|
|
26
|
+
}
|
|
23
27
|
});
|
|
24
28
|
res.status(200).json({
|
|
25
29
|
html,
|
|
26
30
|
text,
|
|
27
31
|
});
|
|
28
32
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25vdGlmaWNhdGlvbi1wbHVnaW4vcmVuZGVyLXRlbXBsYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0JBZ0NDO0FBdENELHFEQUF1RDtBQUN2RCw4REFBaUU7QUFDakUseURBQTRFO0FBQzVFLDZEQUErRDtBQUMvRCx1REFBNEQ7QUFFckQsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBNEYsRUFDNUYsR0FBbUI7SUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLENBQUE7SUFFekYsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUE7SUFDM0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUE7SUFDakMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUE7SUFFekMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBO0lBRXZDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO0lBQ25ILENBQUM7SUFFRCxNQUFNLHVCQUF1QixHQUFHLElBQUEsNkJBQWdCLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU5RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0scUJBQVksQ0FBQyxNQUFNLENBQUM7UUFDL0MsWUFBWTtRQUNaLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssSUFBSSxvQkFBWTtZQUMzQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ2hFO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSTtRQUNKLElBQUk7S0FDTCxDQUFDLENBQUE7QUFDSixDQUFDIn0=
|
|
@@ -24,11 +24,15 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
// Transform raw order data to email template format
|
|
27
|
-
const
|
|
27
|
+
const context = (0, transforms_1.transformContext)("order", order, "pl");
|
|
28
28
|
const templateName = types_1.TEMPLATES_NAMES.ORDER_COMPLETED;
|
|
29
|
-
const { html, text, subject } = await
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const { html, text, subject } = await emails_1.emailService.render({
|
|
30
|
+
templateName,
|
|
31
|
+
data: context,
|
|
32
|
+
options: {
|
|
33
|
+
locale: "pl",
|
|
34
|
+
translations: pluginOptions?.customTranslations?.[templateName]
|
|
35
|
+
}
|
|
32
36
|
});
|
|
33
37
|
const result = await notificationModuleService.createNotifications({
|
|
34
38
|
to: order.order.customer.email,
|
|
@@ -37,7 +41,7 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
37
41
|
trigger_type: triggerType,
|
|
38
42
|
resource_id: id,
|
|
39
43
|
resource_type: "order",
|
|
40
|
-
data:
|
|
44
|
+
data: context,
|
|
41
45
|
content: {
|
|
42
46
|
subject: subject,
|
|
43
47
|
html,
|
|
@@ -48,4 +52,4 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
48
52
|
exports.config = {
|
|
49
53
|
event: "order.completed",
|
|
50
54
|
};
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFrRDtBQUNsRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUV0RCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLGVBQWUsQ0FBQTtJQUVwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3hELFlBQVk7UUFDWixJQUFJLEVBQUUsT0FBTztRQUNiLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxJQUFJO1lBQ1osWUFBWSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztTQUNoRTtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsT0FBTztRQUNiLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUk7WUFDSixJQUFJO1NBQ0w7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxpQkFBaUI7Q0FDekIsQ0FBQSJ9
|
|
@@ -26,9 +26,13 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
26
26
|
// Transform raw order data to email template format
|
|
27
27
|
const templateData = (0, transforms_1.transformContext)("order", order, "pl");
|
|
28
28
|
const templateName = types_1.TEMPLATES_NAMES.ORDER_PLACED;
|
|
29
|
-
const { html, text, subject } = await
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const { html, text, subject } = await emails_1.emailService.render({
|
|
30
|
+
templateName,
|
|
31
|
+
data: templateData,
|
|
32
|
+
options: {
|
|
33
|
+
locale: "pl",
|
|
34
|
+
customTranslations: pluginOptions?.customTranslations?.[templateName]
|
|
35
|
+
}
|
|
32
36
|
});
|
|
33
37
|
const result = await notificationModuleService.createNotifications({
|
|
34
38
|
to: order.order.customer.email,
|
|
@@ -48,4 +52,4 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
48
52
|
exports.config = {
|
|
49
53
|
event: "order.placed",
|
|
50
54
|
};
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFrRDtBQUNsRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLFlBQVksQ0FBQTtJQUUvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1FBQzFELFlBQVk7UUFDWixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsSUFBSTtZQUNaLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztTQUN0RTtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsY0FBYztDQUN0QixDQUFBIn0=
|
|
@@ -15,6 +15,10 @@ exports.translations = {
|
|
|
15
15
|
en: en_json_1.default,
|
|
16
16
|
de: de_json_1.default,
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Contact form template blocks
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
18
22
|
exports.templateBlocks = [
|
|
19
23
|
{
|
|
20
24
|
type: "section",
|
|
@@ -76,4 +80,4 @@ exports.templateBlocks = [
|
|
|
76
80
|
},
|
|
77
81
|
},
|
|
78
82
|
];
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvY29udGFjdC1mb3JtL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFJL0IsYUFKRixpQkFBRSxDQUlFO0FBSFgscUVBQXdDO0FBRzNCLGFBSE4saUJBQUUsQ0FHTTtBQUZmLHFFQUF3QztBQUV2QixhQUZWLGlCQUFFLENBRVU7QUFFTixRQUFBLFlBQVksR0FBcUI7SUFDNUMsRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0NBQ1AsQ0FBQztBQUVGOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHO0lBQzVCO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixFQUFFLEVBQUUsV0FBVztRQUNmLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsV0FBVztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsaUNBQWlDO3dCQUN4QyxLQUFLLEVBQUUsK0JBQStCO3FCQUN2QztpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailTemplateService = void 0;
|
|
4
|
+
const abstract_template_service_1 = require("../shared/abstract-template-service");
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
const base_template_1 = require("./base-template");
|
|
7
|
+
const contact_form_1 = require("./contact-form");
|
|
8
|
+
const inventory_level_1 = require("./inventory-level");
|
|
9
|
+
const placed_1 = require("./order/placed");
|
|
10
|
+
const completed_1 = require("./order/completed");
|
|
11
|
+
const updated_1 = require("./order/updated");
|
|
12
|
+
const types_1 = require("./types");
|
|
13
|
+
/**
|
|
14
|
+
* Email template service
|
|
15
|
+
* Handles registration and rendering of email templates
|
|
16
|
+
*/
|
|
17
|
+
class EmailTemplateService extends abstract_template_service_1.AbstractTemplateService {
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
this.baseTemplateConfig = {
|
|
21
|
+
getHtml: async (data, options) => {
|
|
22
|
+
return await (0, base_template_1.getBaseTemplateHtml)(data, options);
|
|
23
|
+
},
|
|
24
|
+
getText: async (data, options) => {
|
|
25
|
+
return await (0, base_template_1.getBaseTemplateText)(data, options);
|
|
26
|
+
},
|
|
27
|
+
getReactNode: (data, options) => {
|
|
28
|
+
return (0, base_template_1.getBaseTemplateReactNode)(data, options);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
this.interpolateFunction = this.interpolateBlocks.bind(this);
|
|
32
|
+
// Register base template
|
|
33
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.BASE_TEMPLATE, this.baseTemplateConfig);
|
|
34
|
+
// Initialize default templates
|
|
35
|
+
this.initializeDefaultTemplates();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Initialize default email templates
|
|
39
|
+
*/
|
|
40
|
+
initializeDefaultTemplates() {
|
|
41
|
+
// Contact form template
|
|
42
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.CONTACT_FORM, {
|
|
43
|
+
...this.baseTemplateConfig,
|
|
44
|
+
getConfig: () => {
|
|
45
|
+
return {
|
|
46
|
+
blocks: contact_form_1.templateBlocks,
|
|
47
|
+
translations: contact_form_1.translations,
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// Order placed template
|
|
52
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_PLACED, {
|
|
53
|
+
...this.baseTemplateConfig,
|
|
54
|
+
getConfig: () => {
|
|
55
|
+
return {
|
|
56
|
+
blocks: placed_1.templateBlocks,
|
|
57
|
+
translations: placed_1.translations,
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
// Order completed template
|
|
62
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_COMPLETED, {
|
|
63
|
+
...this.baseTemplateConfig,
|
|
64
|
+
getConfig: () => {
|
|
65
|
+
return {
|
|
66
|
+
blocks: completed_1.templateBlocks,
|
|
67
|
+
translations: completed_1.translations,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// Order updated template
|
|
72
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_UPDATED, {
|
|
73
|
+
...this.baseTemplateConfig,
|
|
74
|
+
getConfig: () => {
|
|
75
|
+
return {
|
|
76
|
+
blocks: updated_1.templateBlocks,
|
|
77
|
+
translations: updated_1.translations,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
// Inventory level template
|
|
82
|
+
this.registerTemplate(types_1.TEMPLATES_NAMES.INVENTORY_LEVEL, {
|
|
83
|
+
...this.baseTemplateConfig,
|
|
84
|
+
getConfig: () => {
|
|
85
|
+
return {
|
|
86
|
+
blocks: inventory_level_1.templateBlocks,
|
|
87
|
+
translations: inventory_level_1.translations,
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Recursively interpolate text in blocks using the multiInterpolate function
|
|
94
|
+
* Processes props.[property] in each block and nested blocks
|
|
95
|
+
*
|
|
96
|
+
* @param blocks - Blocks to interpolate
|
|
97
|
+
* @param data - Data object for interpolation
|
|
98
|
+
* @param translator - Translator instance with t method (created using createTranslator function)
|
|
99
|
+
* @param config - Configuration object
|
|
100
|
+
* @returns Interpolated blocks
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
*
|
|
104
|
+
* const blocks = [ { type: "text", props: { value: "Order {{data.order.id}} - {{translations.headerTitle}}" } } ]
|
|
105
|
+
* const data = { order: { id: "123" } }
|
|
106
|
+
* const translator = translator instance (created using createTranslator function)
|
|
107
|
+
* const config = {}
|
|
108
|
+
*
|
|
109
|
+
* const interpolatedBlocks = interpolateBlocks(blocks, data, translator, config)
|
|
110
|
+
*
|
|
111
|
+
* Return: [ { type: "text", props: { value: "Order 123 - Order Confirmation" } } ]
|
|
112
|
+
*
|
|
113
|
+
*/
|
|
114
|
+
interpolateBlocks(blocks, data, translator, config) {
|
|
115
|
+
return blocks.map((block) => {
|
|
116
|
+
const processedBlock = { ...block };
|
|
117
|
+
// Process all string properties in props
|
|
118
|
+
if (processedBlock.props && typeof processedBlock.props === "object") {
|
|
119
|
+
const processedProps = { ...processedBlock.props };
|
|
120
|
+
// Iterate over all properties in props
|
|
121
|
+
for (const [key, value] of Object.entries(processedProps)) {
|
|
122
|
+
// Skip non-string values and special properties (blocks, itemBlocks, separator, arrayPath)
|
|
123
|
+
if (typeof value === "string" &&
|
|
124
|
+
key !== "blocks" &&
|
|
125
|
+
key !== "itemBlocks" &&
|
|
126
|
+
key !== "arrayPath") {
|
|
127
|
+
processedProps[key] = (0, utils_1.multiInterpolate)(value, data, translator, config);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
processedBlock.props = processedProps;
|
|
131
|
+
}
|
|
132
|
+
// Recursively process nested blocks
|
|
133
|
+
if (processedBlock.props?.blocks &&
|
|
134
|
+
Array.isArray(processedBlock.props.blocks)) {
|
|
135
|
+
processedBlock.props = {
|
|
136
|
+
...processedBlock.props,
|
|
137
|
+
blocks: this.interpolateBlocks(processedBlock.props.blocks, data, translator),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (processedBlock.type === "repeater") {
|
|
141
|
+
const { arrayPath, itemBlocks } = processedBlock.props || {};
|
|
142
|
+
if (arrayPath && itemBlocks) {
|
|
143
|
+
const array = (0, utils_1.pickValueFromObject)(arrayPath, data);
|
|
144
|
+
if (Array.isArray(array) && array.length > 0) {
|
|
145
|
+
const interpolatedItemBlocks = array.map((item) => this.interpolateBlocks(itemBlocks, item, translator, {
|
|
146
|
+
arrayPath: arrayPath,
|
|
147
|
+
})[0]);
|
|
148
|
+
processedBlock.props = {
|
|
149
|
+
...processedBlock.props,
|
|
150
|
+
itemBlocks: interpolatedItemBlocks,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return processedBlock;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Render email template
|
|
160
|
+
*
|
|
161
|
+
* @param params - Render parameters
|
|
162
|
+
* @returns Rendered email with html, text, and subject
|
|
163
|
+
*/
|
|
164
|
+
async render(params) {
|
|
165
|
+
if (!params.templateName) {
|
|
166
|
+
throw new Error("Template name is required");
|
|
167
|
+
}
|
|
168
|
+
const { template, blocks, translator } = this.prepareData({
|
|
169
|
+
templateName: params.templateName,
|
|
170
|
+
data: params.data,
|
|
171
|
+
options: params.options,
|
|
172
|
+
});
|
|
173
|
+
const options = {
|
|
174
|
+
...params.options,
|
|
175
|
+
blocks,
|
|
176
|
+
};
|
|
177
|
+
return {
|
|
178
|
+
html: await template.getHtml(params.data, options),
|
|
179
|
+
text: await template.getText(params.data, options),
|
|
180
|
+
subject: (0, utils_1.multiInterpolate)("{{translations.headerTitle}}", params.data, translator),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Render email template synchronously (for previews)
|
|
185
|
+
*
|
|
186
|
+
* @param params - Render parameters
|
|
187
|
+
* @returns React node
|
|
188
|
+
*/
|
|
189
|
+
renderSync(params) {
|
|
190
|
+
if (!params.templateName) {
|
|
191
|
+
throw new Error("Template name is required");
|
|
192
|
+
}
|
|
193
|
+
const { template, blocks } = this.prepareData({
|
|
194
|
+
templateName: params.templateName,
|
|
195
|
+
data: params.data,
|
|
196
|
+
options: params.options,
|
|
197
|
+
});
|
|
198
|
+
const options = {
|
|
199
|
+
...params.options,
|
|
200
|
+
blocks,
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
reactNode: template.getReactNode
|
|
204
|
+
? template.getReactNode(params.data, options)
|
|
205
|
+
: undefined,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.EmailTemplateService = EmailTemplateService;
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtdGVtcGxhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90ZW1wbGF0ZXMvZW1haWxzL2VtYWlsLXRlbXBsYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUZBRzRDO0FBQzVDLHVDQUdvQjtBQUNwQixtREFJd0I7QUFDeEIsaURBR3VCO0FBQ3ZCLHVEQUcwQjtBQUMxQiwyQ0FHdUI7QUFDdkIsaURBRzBCO0FBQzFCLDZDQUd3QjtBQUN4QixtQ0FJZ0I7QUFFaEI7OztHQUdHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxtREFBNEI7SUFDcEU7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUVQLElBQUksQ0FBQyxrQkFBa0IsR0FBRztZQUN4QixPQUFPLEVBQUUsS0FBSyxFQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7Z0JBQ25CLE9BQU8sTUFBTSxJQUFBLG1DQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQTtZQUN4RCxDQUFDO1lBQ0QsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO2dCQUNuQixPQUFPLE1BQU0sSUFBQSxtQ0FBbUIsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUNELFlBQVksRUFBRSxDQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7Z0JBQ25CLE9BQU8sSUFBQSx3Q0FBd0IsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUE7WUFDdkQsQ0FBQztTQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUNuQix1QkFBZSxDQUFDLGFBQWEsRUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUN4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
|
|
@@ -1,254 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TEMPLATES_NAMES = void 0;
|
|
4
|
-
exports.interpolateBlocks = interpolateBlocks;
|
|
5
|
-
exports.getTemplate = getTemplate;
|
|
6
|
-
exports.renderTemplate = renderTemplate;
|
|
7
|
-
exports.renderTemplateSync = renderTemplateSync;
|
|
8
|
-
const index_1 = require("./base-template/index");
|
|
3
|
+
exports.emailService = exports.TEMPLATES_NAMES = void 0;
|
|
9
4
|
const types_1 = require("./types");
|
|
10
5
|
Object.defineProperty(exports, "TEMPLATES_NAMES", { enumerable: true, get: function () { return types_1.TEMPLATES_NAMES; } });
|
|
11
|
-
const
|
|
12
|
-
const inventory_level_1 = require("./inventory-level");
|
|
13
|
-
const placed_1 = require("./order/placed");
|
|
14
|
-
const completed_1 = require("./order/completed");
|
|
15
|
-
const updated_1 = require("./order/updated");
|
|
16
|
-
const utils_1 = require("../../utils");
|
|
6
|
+
const email_template_service_1 = require("./email-template-service");
|
|
17
7
|
/**
|
|
18
|
-
*
|
|
8
|
+
* Email template service instance (singleton)
|
|
9
|
+
* Use this to register custom templates or access service methods
|
|
19
10
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
const baseTemplateConfig = {
|
|
24
|
-
[types_1.TEMPLATES_NAMES.BASE_TEMPLATE]: {
|
|
25
|
-
getHtml: async (data, options) => {
|
|
26
|
-
return await (0, index_1.getBaseTemplateHtml)(data, options);
|
|
27
|
-
},
|
|
28
|
-
getText: async (data, options) => {
|
|
29
|
-
return await (0, index_1.getBaseTemplateText)(data, options);
|
|
30
|
-
},
|
|
31
|
-
getReactNode: (data, options) => {
|
|
32
|
-
return (0, index_1.getBaseTemplateReactNode)(data, options);
|
|
33
|
-
},
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Template registry mapping template names to their renderers
|
|
38
|
-
*/
|
|
39
|
-
const templateRegistry = {
|
|
40
|
-
...baseTemplateConfig,
|
|
41
|
-
[types_1.TEMPLATES_NAMES.CONTACT_FORM]: {
|
|
42
|
-
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
43
|
-
getConfig: () => {
|
|
44
|
-
return {
|
|
45
|
-
blocks: contact_form_1.templateBlocks,
|
|
46
|
-
translations: contact_form_1.translations,
|
|
47
|
-
};
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
[types_1.TEMPLATES_NAMES.ORDER_PLACED]: {
|
|
51
|
-
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
52
|
-
getConfig: () => {
|
|
53
|
-
return {
|
|
54
|
-
blocks: placed_1.templateBlocks,
|
|
55
|
-
translations: placed_1.translations,
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
[types_1.TEMPLATES_NAMES.ORDER_COMPLETED]: {
|
|
60
|
-
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
61
|
-
getConfig: () => {
|
|
62
|
-
return {
|
|
63
|
-
blocks: completed_1.templateBlocks,
|
|
64
|
-
translations: completed_1.translations,
|
|
65
|
-
};
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
[types_1.TEMPLATES_NAMES.ORDER_UPDATED]: {
|
|
69
|
-
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
70
|
-
getConfig: () => {
|
|
71
|
-
return {
|
|
72
|
-
blocks: updated_1.templateBlocks,
|
|
73
|
-
translations: updated_1.translations,
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
[types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: {
|
|
78
|
-
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
79
|
-
getConfig: () => {
|
|
80
|
-
return {
|
|
81
|
-
blocks: inventory_level_1.templateBlocks,
|
|
82
|
-
translations: inventory_level_1.translations,
|
|
83
|
-
};
|
|
84
|
-
},
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Recursively interpolate text in blocks
|
|
89
|
-
* Processes props.[property] in each block and nested blocks
|
|
90
|
-
*/
|
|
91
|
-
function interpolateBlocks(blocks, data, translator, config) {
|
|
92
|
-
return blocks.map((block) => {
|
|
93
|
-
const processedBlock = { ...block };
|
|
94
|
-
// Process all string properties in props
|
|
95
|
-
if (processedBlock.props && typeof processedBlock.props === "object") {
|
|
96
|
-
const processedProps = { ...processedBlock.props };
|
|
97
|
-
// Iterate over all properties in props
|
|
98
|
-
for (const [key, value] of Object.entries(processedProps)) {
|
|
99
|
-
// Skip non-string values and special properties (blocks, itemBlocks, separator, arrayPath)
|
|
100
|
-
if ((typeof value === "string") &&
|
|
101
|
-
key !== "blocks" &&
|
|
102
|
-
key !== "itemBlocks" &&
|
|
103
|
-
key !== "arrayPath") {
|
|
104
|
-
processedProps[key] = (0, utils_1.multiInterpolate)(value, data, translator, config);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
processedBlock.props = processedProps;
|
|
108
|
-
}
|
|
109
|
-
// Recursively process nested blocks
|
|
110
|
-
if (processedBlock.props?.blocks &&
|
|
111
|
-
Array.isArray(processedBlock.props.blocks)) {
|
|
112
|
-
processedBlock.props = {
|
|
113
|
-
...processedBlock.props,
|
|
114
|
-
blocks: interpolateBlocks(processedBlock.props.blocks, data, translator),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
if (processedBlock.type === "repeater") {
|
|
118
|
-
const { arrayPath, itemBlocks } = processedBlock.props || {};
|
|
119
|
-
if (arrayPath && itemBlocks) {
|
|
120
|
-
const array = (0, utils_1.pickValueFromObject)(arrayPath, data);
|
|
121
|
-
if (Array.isArray(array) && array.length > 0) {
|
|
122
|
-
const interpolatedItemBlocks = array.map((item) => interpolateBlocks(itemBlocks, item, translator, {
|
|
123
|
-
arrayPath: arrayPath,
|
|
124
|
-
})[0]);
|
|
125
|
-
processedBlock.props = {
|
|
126
|
-
...processedBlock.props,
|
|
127
|
-
itemBlocks: interpolatedItemBlocks,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return processedBlock;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Get template renderer by template name
|
|
137
|
-
*
|
|
138
|
-
* @param templateName - Name of the template
|
|
139
|
-
* @returns Template renderer with getHtml and getText methods
|
|
140
|
-
* @throws Error if template name is not found
|
|
141
|
-
*/
|
|
142
|
-
function getTemplate(templateName) {
|
|
143
|
-
const template = templateRegistry[templateName];
|
|
144
|
-
if (!template) {
|
|
145
|
-
throw new Error(`Template "${templateName}" not found. Available templates: ${Object.keys(templateRegistry).join(", ")}`);
|
|
146
|
-
}
|
|
147
|
-
return template;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Prepare template data (translations, blocks, translator, processedBlocks)
|
|
151
|
-
* Shared logic for renderTemplate and renderTemplateSync
|
|
152
|
-
*/
|
|
153
|
-
function prepareTemplateData(templateName, data, options) {
|
|
154
|
-
const locale = options?.locale || "pl";
|
|
155
|
-
const template = getTemplate(templateName);
|
|
156
|
-
const config = template.getConfig?.() || {};
|
|
157
|
-
// Get translations for this template
|
|
158
|
-
const translations = config?.translations || templateTranslationsRegistry[templateName] || {};
|
|
159
|
-
// If blocks are not provided, use basic blocks from config
|
|
160
|
-
const providedBlocks = options?.blocks || [];
|
|
161
|
-
let blocks = providedBlocks.length > 0 ? providedBlocks : config?.blocks || [];
|
|
162
|
-
// Process translations once
|
|
163
|
-
const customTranslations = options?.customTranslations?.[templateName];
|
|
164
|
-
// Merge translations
|
|
165
|
-
const mergedTranslations = (0, utils_1.mergeTranslations)(translations, customTranslations);
|
|
166
|
-
// Create translator function
|
|
167
|
-
const translator = (0, utils_1.createTranslator)(locale, mergedTranslations);
|
|
168
|
-
// Interpolate blocks if provided
|
|
169
|
-
const processedBlocks = blocks.length > 0 ? interpolateBlocks(blocks, data, translator) : blocks;
|
|
170
|
-
// Pass processed blocks in options to render functions
|
|
171
|
-
const renderOptions = {
|
|
172
|
-
...options,
|
|
173
|
-
blocks: processedBlocks,
|
|
174
|
-
};
|
|
175
|
-
return {
|
|
176
|
-
template,
|
|
177
|
-
translator,
|
|
178
|
-
processedBlocks,
|
|
179
|
-
renderOptions,
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Generate HTML and text for a template
|
|
184
|
-
*
|
|
185
|
-
* @param templateName - Name of the template (optional if createTemplate is provided)
|
|
186
|
-
* @param data - Template data
|
|
187
|
-
* @param options - Optional theme and locale configuration
|
|
188
|
-
* @param createTemplate - Optional custom template function that takes data and options, returns React.ReactElement
|
|
189
|
-
* @returns Object with html, text, and subject properties
|
|
190
|
-
*/
|
|
191
|
-
async function renderTemplate(templateName, data, options, createTemplate) {
|
|
192
|
-
// // If createTemplate is provided, use custom template
|
|
193
|
-
// if (createTemplate) {
|
|
194
|
-
// // Create basic i18n if not provided (for custom templates)
|
|
195
|
-
// let i18n = options?.customTranslations?.[templateName];
|
|
196
|
-
// if (!i18n) {
|
|
197
|
-
// // Create a simple i18n object for custom templates
|
|
198
|
-
// i18n = {
|
|
199
|
-
// t: (key: string, data?: any) => {
|
|
200
|
-
// // Try to get from customTranslations if available
|
|
201
|
-
// if (options?.customTranslations && templateName) {
|
|
202
|
-
// const custom = options.customTranslations[templateName];
|
|
203
|
-
// if (custom && custom[key]) {
|
|
204
|
-
// return typeof custom[key] === "function"
|
|
205
|
-
// ? custom[key](data)
|
|
206
|
-
// : custom[key];
|
|
207
|
-
// }
|
|
208
|
-
// }
|
|
209
|
-
// // Fallback to key or empty string
|
|
210
|
-
// return key;
|
|
211
|
-
// },
|
|
212
|
-
// };
|
|
213
|
-
// }
|
|
214
|
-
// // Pass processed i18n in options to render functions
|
|
215
|
-
// const renderOptions: TemplateOptionsType = {
|
|
216
|
-
// ...options,
|
|
217
|
-
// i18n,
|
|
218
|
-
// };
|
|
219
|
-
// // Render React component to HTML
|
|
220
|
-
// const reactNode = createTemplate(data, renderOptions);
|
|
221
|
-
// const htmlRendered = await render(reactNode);
|
|
222
|
-
// const html = await pretty(htmlRendered);
|
|
223
|
-
// const text = toPlainText(htmlRendered);
|
|
224
|
-
// // Get subject from i18n or use default
|
|
225
|
-
// const subject = i18n.t("headerTitle", data) || "Email";
|
|
226
|
-
// return {
|
|
227
|
-
// html,
|
|
228
|
-
// text,
|
|
229
|
-
// subject,
|
|
230
|
-
// };
|
|
231
|
-
// }
|
|
232
|
-
// Original behavior: use template from registry
|
|
233
|
-
if (!templateName) {
|
|
234
|
-
throw new Error("Either templateName or createTemplate must be provided");
|
|
235
|
-
}
|
|
236
|
-
const { template, translator, renderOptions } = prepareTemplateData(templateName, data, options);
|
|
237
|
-
return {
|
|
238
|
-
html: await template.getHtml(data, renderOptions),
|
|
239
|
-
text: await template.getText(data, renderOptions),
|
|
240
|
-
subject: (0, utils_1.multiInterpolate)("{{translations.headerTitle}}", data, translator),
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
function renderTemplateSync(templateName, data, options) {
|
|
244
|
-
if (!templateName) {
|
|
245
|
-
throw new Error("Either templateName or createTemplate must be provided");
|
|
246
|
-
}
|
|
247
|
-
const { template, renderOptions } = prepareTemplateData(templateName, data, options);
|
|
248
|
-
return {
|
|
249
|
-
reactNode: template.getReactNode
|
|
250
|
-
? template.getReactNode(data, renderOptions)
|
|
251
|
-
: undefined,
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSkEsOENBd0VDO0FBU0Qsa0NBVUM7QUFrRUQsd0NBdUVDO0FBRUQsZ0RBZ0JDO0FBblpELGlEQUkrQjtBQUUvQixtQ0FBMEM7QUFpQ2pDLGdHQWpDQSx1QkFBZSxPQWlDQTtBQS9CeEIsaURBR3dCO0FBQ3hCLHVEQUcyQjtBQUMzQiwyQ0FHd0I7QUFDeEIsaURBRzJCO0FBQzNCLDZDQUd5QjtBQUV6Qix1Q0FLcUI7QUFpQnJCOztHQUVHO0FBQ0gsTUFBTSw0QkFBNEIsR0FFOUI7SUFDRixDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsOEJBQTBCO0NBQzlELENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUEyQztJQUNqRSxDQUFDLHVCQUFlLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDL0IsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsWUFBWSxFQUFFLENBQ1osSUFBUyxFQUNULE9BQTZCLEVBQ1osRUFBRTtZQUNuQixPQUFPLElBQUEsZ0NBQXdCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBUWxCO0lBQ0YsR0FBRyxrQkFBa0I7SUFDckIsQ0FBQyx1QkFBZSxDQUFD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
|
|
11
|
+
exports.emailService = new email_template_service_1.EmailTemplateService();
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBMEk7QUFPakksZ0dBUGdELHVCQUFlLE9BT2hEO0FBTnhCLHFFQUFnRTtBQWlCaEU7OztHQUdHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsSUFBSSw2Q0FBb0IsRUFBRSxDQUFDIn0=
|
|
@@ -12,6 +12,10 @@ exports.translations = {
|
|
|
12
12
|
pl: pl_json_1.default,
|
|
13
13
|
en: en_json_1.default,
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Inventory level template blocks
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
15
19
|
exports.templateBlocks = [
|
|
16
20
|
{
|
|
17
21
|
type: "section",
|
|
@@ -123,4 +127,4 @@ exports.templateBlocks = [
|
|
|
123
127
|
},
|
|
124
128
|
},
|
|
125
129
|
];
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvaW52ZW50b3J5LWxldmVsL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFHL0IsYUFIRixpQkFBRSxDQUdFO0FBRlgscUVBQXdDO0FBRTNCLGFBRk4saUJBQUUsQ0FFTTtBQUVGLFFBQUEsWUFBWSxHQUFxQjtJQUM1QyxFQUFFLEVBQUUsaUJBQUU7SUFDTixFQUFFLEVBQUUsaUJBQUU7Q0FDUCxDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxjQUFjLEdBQUc7SUFDNUI7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxXQUFXO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsUUFBUTtvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLG9DQUFvQztxQkFDNUM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsMENBQTBDO3dCQUNqRCxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsZ0RBQWdEO3dCQUN2RCxLQUFLLEVBQUUsc0NBQXNDO3FCQUM5QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsdURBQXVEO3dCQUM5RCxLQUFLLEVBQUUsMkNBQTJDO3FCQUNuRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsd0RBQXdEO3dCQUMvRCxLQUFLLEVBQUUsNENBQTRDO3FCQUNwRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUseURBQXlEO3dCQUNoRSxLQUFLLEVBQUUsNkNBQTZDO3FCQUNyRDtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGFBQWE7UUFDakIsSUFBSSxFQUFFLFdBQVc7S0FDbEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsRUFBRSxFQUFFLFdBQVc7UUFDZixLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSx5QkFBeUI7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQyJ9
|