@codee-sh/medusa-plugin-notification-emails 0.0.1 → 0.0.2
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/src/admin/index.js +435 -592
- package/.medusa/server/src/admin/index.mjs +435 -592
- package/.medusa/server/src/templates/emails/index.js +59 -4
- package/.medusa/server/src/templates/emails/inventory-level/index.js +19 -0
- package/.medusa/server/src/templates/emails/inventory-level/template.js +28 -0
- package/.medusa/server/src/templates/emails/inventory-level/translations/en.json +12 -0
- package/.medusa/server/src/templates/emails/inventory-level/translations/index.js +15 -0
- package/.medusa/server/src/templates/emails/inventory-level/translations/pl.json +14 -0
- package/.medusa/server/src/templates/emails/inventory-level/types.js +3 -0
- package/.medusa/server/src/templates/emails/types.js +2 -1
- package/README.md +8 -8
- package/package.json +1 -1
|
@@ -3,15 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TEMPLATES_NAMES = void 0;
|
|
4
4
|
exports.getTemplate = getTemplate;
|
|
5
5
|
exports.renderTemplate = renderTemplate;
|
|
6
|
+
const render_1 = require("@react-email/render");
|
|
6
7
|
const index_1 = require("./contact-form/index");
|
|
7
8
|
const index_2 = require("./order-placed/index");
|
|
8
9
|
const index_3 = require("./order-completed/index");
|
|
10
|
+
const index_4 = require("./inventory-level/index");
|
|
9
11
|
const types_1 = require("./types");
|
|
10
12
|
Object.defineProperty(exports, "TEMPLATES_NAMES", { enumerable: true, get: function () { return types_1.TEMPLATES_NAMES; } });
|
|
11
13
|
const i18n_1 = require("../shared/i18n");
|
|
12
14
|
const translations_1 = require("./contact-form/translations");
|
|
13
15
|
const translations_2 = require("./order-placed/translations");
|
|
14
16
|
const translations_3 = require("./order-completed/translations");
|
|
17
|
+
const translations_4 = require("./inventory-level/translations");
|
|
15
18
|
/**
|
|
16
19
|
* Template translations registry mapping template names to their translations
|
|
17
20
|
*/
|
|
@@ -19,6 +22,7 @@ const templateTranslationsRegistry = {
|
|
|
19
22
|
[types_1.TEMPLATES_NAMES.CONTACT_FORM]: translations_1.translations,
|
|
20
23
|
[types_1.TEMPLATES_NAMES.ORDER_PLACED]: translations_2.translations,
|
|
21
24
|
[types_1.TEMPLATES_NAMES.ORDER_COMPLETED]: translations_3.translations,
|
|
25
|
+
[types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: translations_4.translations,
|
|
22
26
|
};
|
|
23
27
|
/**
|
|
24
28
|
* Template registry mapping template names to their renderers
|
|
@@ -48,6 +52,14 @@ const templateRegistry = {
|
|
|
48
52
|
return await (0, index_3.getOrderCompletedText)(data, options);
|
|
49
53
|
},
|
|
50
54
|
},
|
|
55
|
+
[types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: {
|
|
56
|
+
getHtml: async (data, options) => {
|
|
57
|
+
return await (0, index_4.getInventoryLevelHtml)(data, options);
|
|
58
|
+
},
|
|
59
|
+
getText: async (data, options) => {
|
|
60
|
+
return await (0, index_4.getInventoryLevelText)(data, options);
|
|
61
|
+
},
|
|
62
|
+
},
|
|
51
63
|
};
|
|
52
64
|
/**
|
|
53
65
|
* Get template renderer by template name
|
|
@@ -66,14 +78,57 @@ function getTemplate(templateName) {
|
|
|
66
78
|
/**
|
|
67
79
|
* Generate HTML and text for a template
|
|
68
80
|
*
|
|
69
|
-
* @param templateName - Name of the template
|
|
81
|
+
* @param templateName - Name of the template (optional if createTemplate is provided)
|
|
70
82
|
* @param data - Template data
|
|
71
83
|
* @param options - Optional theme and locale configuration
|
|
84
|
+
* @param createTemplate - Optional custom template function that takes data and options, returns React.ReactElement
|
|
72
85
|
* @returns Object with html, text, and subject properties
|
|
73
86
|
*/
|
|
74
|
-
async function renderTemplate(templateName, data, options) {
|
|
75
|
-
const template = getTemplate(templateName);
|
|
87
|
+
async function renderTemplate(templateName, data, options, createTemplate) {
|
|
76
88
|
const locale = options?.locale || "pl";
|
|
89
|
+
// If createTemplate is provided, use custom template
|
|
90
|
+
if (createTemplate) {
|
|
91
|
+
// Create basic i18n if not provided (for custom templates)
|
|
92
|
+
let i18n = options?.i18n;
|
|
93
|
+
if (!i18n) {
|
|
94
|
+
// Create a simple i18n object for custom templates
|
|
95
|
+
i18n = {
|
|
96
|
+
t: (key, data) => {
|
|
97
|
+
// Try to get from customTranslations if available
|
|
98
|
+
if (options?.customTranslations && templateName) {
|
|
99
|
+
const custom = options.customTranslations[templateName];
|
|
100
|
+
if (custom && custom[key]) {
|
|
101
|
+
return typeof custom[key] === 'function' ? custom[key](data) : custom[key];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Fallback to key or empty string
|
|
105
|
+
return key;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Pass processed i18n in options to render functions
|
|
110
|
+
const renderOptions = {
|
|
111
|
+
...options,
|
|
112
|
+
i18n,
|
|
113
|
+
};
|
|
114
|
+
// Render React component to HTML
|
|
115
|
+
const reactNode = createTemplate(data, renderOptions);
|
|
116
|
+
const htmlRendered = await (0, render_1.render)(reactNode);
|
|
117
|
+
const html = await (0, render_1.pretty)(htmlRendered);
|
|
118
|
+
const text = (0, render_1.toPlainText)(htmlRendered);
|
|
119
|
+
// Get subject from i18n or use default
|
|
120
|
+
const subject = i18n.t("headerTitle", data) || "Email";
|
|
121
|
+
return {
|
|
122
|
+
html,
|
|
123
|
+
text,
|
|
124
|
+
subject,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Original behavior: use template from registry
|
|
128
|
+
if (!templateName) {
|
|
129
|
+
throw new Error("Either templateName or createTemplate must be provided");
|
|
130
|
+
}
|
|
131
|
+
const template = getTemplate(templateName);
|
|
77
132
|
// Get translations for this template
|
|
78
133
|
const translations = templateTranslationsRegistry[templateName];
|
|
79
134
|
if (!translations) {
|
|
@@ -95,4 +150,4 @@ async function renderTemplate(templateName, data, options) {
|
|
|
95
150
|
subject,
|
|
96
151
|
};
|
|
97
152
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0RkEsa0NBVUM7QUFXRCx3Q0F1RkM7QUF2TUQsZ0RBQWtFO0FBRWxFLGdEQUE4RTtBQUM5RSxnREFBZ0Y7QUFDaEYsbURBQXVGO0FBQ3ZGLG1EQUF1RjtBQUN2RixtQ0FBMEM7QUFVakMsZ0dBVkEsdUJBQWUsT0FVQTtBQVR4Qix5Q0FBaUQ7QUFDakQsOERBQXNGO0FBQ3RGLDhEQUFzRjtBQUN0RixpRUFBNEY7QUFDNUYsaUVBQTRGO0FBaUI1Rjs7R0FFRztBQUNILE1BQU0sNEJBQTRCLEdBQThDO0lBQzlFLENBQUMsdUJBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSwyQkFBdUI7SUFDdkQsQ0FBQyx1QkFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLDJCQUF1QjtJQUN2RCxDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsMkJBQTBCO0lBQzdELENBQUMsdUJBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSwyQkFBMEI7Q0FDOUQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBMkM7SUFDL0QsQ0FBQyx1QkFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQTZCLEVBQW1CLEVBQUU7WUFDM0UsT0FBTyxNQUFNLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxPQUE2QixFQUFtQixFQUFFO1lBQzNFLE9BQU8sTUFBTSxJQUFBLDBCQUFrQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO0tBQ0Y7SUFDRCxDQUFDLHVCQUFlLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDOUIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFTLEVBQUUsT0FBNkIsRUFBbUIsRUFBRTtZQUMzRSxPQUFPLE1BQU0sSUFBQSwyQkFBbUIsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQTZCLEVBQW1CLEVBQUU7WUFDM0UsT0FBTyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FDRjtJQUNELENBQUMsdUJBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxPQUE2QixFQUFtQixFQUFFO1lBQzNFLE9BQU8sTUFBTSxJQUFBLDZCQUFxQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFTLEVBQUUsT0FBNkIsRUFBbUIsRUFBRTtZQUMzRSxPQUFPLE1BQU0sSUFBQSw2QkFBcUIsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUM7UUFDM0QsQ0FBQztLQUNGO0lBQ0QsQ0FBQyx1QkFBZSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQTZCLEVBQW1CLEVBQUU7WUFDM0UsT0FBTyxNQUFNLElBQUEsNkJBQXFCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxPQUE2QixFQUFtQixFQUFFO1lBQzNFLE9BQU8sTUFBTSxJQUFBLDZCQUFxQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUMzRCxDQUFDO0tBQ0Y7Q0FDRixDQUFDO0FBVUY7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLFlBQWlCO0lBQzNDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWhELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxZQUFZLHFDQUFxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3pHLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FDbEMsWUFBaUMsRUFDakMsSUFBa0IsRUFDbEIsT0FBbUMsRUFDbkMsY0FBOEY7SUFFOUYsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFFdkMscURBQXFEO0lBQ3JELElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsMkRBQTJEO1FBQzNELElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsbURBQW1EO1lBQ25ELElBQUksR0FBRztnQkFDTCxDQUFDLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBVSxFQUFFLEVBQUU7b0JBQzdCLGtEQUFrRDtvQkFDbEQsSUFBSSxPQUFPLEVBQUUsa0JBQWtCLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDeEQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQzFCLE9BQU8sT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDN0UsQ0FBQztvQkFDSCxDQUFDO29CQUNELGtDQUFrQztvQkFDbEMsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQscURBQXFEO1FBQ3JELE1BQU0sYUFBYSxHQUF3QjtZQUN6QyxHQUFHLE9BQU87WUFDVixJQUFJO1NBQ0wsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSxlQUFNLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGVBQU0sRUFBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFBLG9CQUFXLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFFdkMsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUV2RCxPQUFPO1lBQ0wsSUFBSTtZQUNKLElBQUk7WUFDSixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNDLHFDQUFxQztJQUNyQyxNQUFNLFlBQVksR0FBRyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsOENBQThDO0lBQzlDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkUsTUFBTSxJQUFJLEdBQUcsSUFBQSxzQkFBZSxFQUMxQixNQUFNLEVBQ04sWUFBWSxFQUNaLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNqRSxZQUFZLENBQ2IsQ0FBQztJQUVGLGdDQUFnQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU1QyxxREFBcUQ7SUFDckQsTUFBTSxhQUFhLEdBQXdCO1FBQ3pDLEdBQUcsT0FBTztRQUNWLElBQUk7S0FDTCxDQUFDO0lBRUYsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUNqRCxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7UUFDakQsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInventoryLevelHtml = getInventoryLevelHtml;
|
|
4
|
+
exports.getInventoryLevelText = getInventoryLevelText;
|
|
5
|
+
const template_1 = require("./template");
|
|
6
|
+
/**
|
|
7
|
+
* Generates HTML email for order created notificat
|
|
8
|
+
*
|
|
9
|
+
* @param data - Order data (includes subject)
|
|
10
|
+
* @param options - Optional theme and locale configuration
|
|
11
|
+
* @returns HTML string ready to send
|
|
12
|
+
*/
|
|
13
|
+
async function getInventoryLevelHtml(data, options) {
|
|
14
|
+
return await (0, template_1.renderHTML)(data, options);
|
|
15
|
+
}
|
|
16
|
+
async function getInventoryLevelText(data, options) {
|
|
17
|
+
return await (0, template_1.renderText)(data, options);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSxzREFLQztBQUVELHNEQUtDO0FBckJELHlDQUFvRDtBQUVwRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLElBQW9DLEVBQ3BDLE9BQTRCO0lBRTVCLE9BQU8sTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLElBQW9DLEVBQ3BDLE9BQTRCO0lBRTVCLE9BQU8sTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderHTMLReact = renderHTMLReact;
|
|
4
|
+
exports.renderHTML = renderHTML;
|
|
5
|
+
exports.renderText = renderText;
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const components_1 = require("@react-email/components");
|
|
8
|
+
const render_1 = require("@react-email/render");
|
|
9
|
+
const utils_1 = require("../../shared/utils");
|
|
10
|
+
function renderHTMLReact(data, options) {
|
|
11
|
+
const theme = options.theme || {};
|
|
12
|
+
const i18n = options.i18n;
|
|
13
|
+
if (!i18n) {
|
|
14
|
+
throw new Error("i18n is required in options. It should be provided by renderTemplate.");
|
|
15
|
+
}
|
|
16
|
+
return ((0, jsx_runtime_1.jsxs)(components_1.Html, { children: [(0, jsx_runtime_1.jsx)(components_1.Head, {}), (0, jsx_runtime_1.jsx)(components_1.Tailwind, { config: {
|
|
17
|
+
presets: [components_1.pixelBasedPreset],
|
|
18
|
+
theme: theme
|
|
19
|
+
}, children: (0, jsx_runtime_1.jsx)(components_1.Body, { className: "mx-auto my-auto px-4 font-arial font-normal text-base bg-ui-bg text-ui-text", children: (0, jsx_runtime_1.jsxs)(components_1.Container, { children: [(0, jsx_runtime_1.jsxs)(components_1.Section, { children: [(0, jsx_runtime_1.jsx)(components_1.Heading, { className: "text-xl text-center font-bold mb-4", children: i18n.t('headerTitle', data) }), (0, jsx_runtime_1.jsx)(components_1.Text, { className: "text-center mb-4", children: i18n.t('headerDescription', data) })] }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsxs)(components_1.Row, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { className: "font-semibold", children: i18n.t('labels.inventoryLevelId', data) }), (0, jsx_runtime_1.jsx)(components_1.Column, { className: "text-right", children: (0, utils_1.escapeHtml)(data.inventory_level.id) })] }) }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsxs)(components_1.Row, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { className: "font-semibold", children: i18n.t('labels.inventoryLevelLocation', data) }), (0, jsx_runtime_1.jsx)(components_1.Column, { className: "text-right", children: (0, utils_1.escapeHtml)(data.inventory_level.location_id) })] }) }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsxs)(components_1.Row, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { className: "font-semibold", children: i18n.t('labels.inventoryLevelStockedQuantity', data) }), (0, jsx_runtime_1.jsx)(components_1.Column, { className: "text-right", children: (0, utils_1.escapeHtml)(data.inventory_level.stocked_quantity) })] }) }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsxs)(components_1.Row, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { className: "font-semibold", children: i18n.t('labels.inventoryLevelReservedQuantity', data) }), (0, jsx_runtime_1.jsx)(components_1.Column, { className: "text-right", children: (0, utils_1.escapeHtml)(data.inventory_level.reserved_quantity) })] }) }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsxs)(components_1.Row, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { className: "font-semibold", children: i18n.t('labels.inventoryLevelAvailableQuantity', data) }), (0, jsx_runtime_1.jsx)(components_1.Column, { className: "text-right", children: (0, utils_1.escapeHtml)(data.inventory_level.available_quantity) })] }) }), (0, jsx_runtime_1.jsx)(components_1.Hr, { className: "my-4 border-ui-border" }), (0, jsx_runtime_1.jsx)(components_1.Section, { children: (0, jsx_runtime_1.jsx)(components_1.Text, { className: "text-sm text-gray-600 text-center", children: i18n.t('footer', data) }) })] }) }) })] }));
|
|
20
|
+
}
|
|
21
|
+
async function renderHTML(data, options) {
|
|
22
|
+
return await (0, render_1.pretty)(await (0, render_1.render)(renderHTMLReact(data, options)));
|
|
23
|
+
}
|
|
24
|
+
async function renderText(data, options) {
|
|
25
|
+
const html = await (0, render_1.render)(renderHTMLReact(data, options));
|
|
26
|
+
return (0, render_1.toPlainText)(html);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvdGVtcGxhdGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0EsMENBOEZDO0FBRUQsZ0NBS0M7QUFFRCxnQ0FNQzs7QUFuSEQsd0RBQW1KO0FBQ25KLGdEQUFrRTtBQUdsRSw4Q0FBZ0Q7QUFFaEQsU0FBZ0IsZUFBZSxDQUM3QixJQUFvQyxFQUNwQyxPQUE0QjtJQUU1QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBRTFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsT0FBTyxDQUNMLHdCQUFDLGlCQUFJLGVBQ0gsdUJBQUMsaUJBQUksS0FBRyxFQUNSLHVCQUFDLHFCQUFRLElBQ1AsTUFBTSxFQUFFO29CQUNOLE9BQU8sRUFBRSxDQUFDLDZCQUFnQixDQUFDO29CQUMzQixLQUFLLEVBQUUsS0FBSztpQkFDYixZQUVELHVCQUFDLGlCQUFJLElBQUMsU0FBUyxFQUFDLDZFQUE2RSxZQUMzRix3QkFBQyxzQkFBUyxlQUNSLHdCQUFDLG9CQUFPLGVBQ04sdUJBQUMsb0JBQU8sSUFBQyxTQUFTLEVBQUMsb0NBQW9DLFlBQ3BELElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUNwQixFQUNWLHVCQUFDLGlCQUFJLElBQUMsU0FBUyxFQUFDLGtCQUFrQixZQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxHQUM3QixJQUNDLEVBRVYsdUJBQUMsZUFBRSxJQUFDLFNBQVMsRUFBQyx1QkFBdUIsR0FBRyxFQUd4Qyx1QkFBQyxvQkFBTyxjQUNOLHdCQUFDLGdCQUFHLGVBQ0YsdUJBQUMsbUJBQU0sSUFBQyxTQUFTLEVBQUMsZUFBZSxZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLEdBQVUsRUFDcEYsdUJBQUMsbUJBQU0sSUFBQyxTQUFTLEVBQUMsWUFBWSxZQUFFLElBQUEsa0JBQVUsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFVLElBQ3pFLEdBQ0UsRUFFVix1QkFBQyxlQUFFLElBQUMsU0FBUyxFQUFDLHVCQUF1QixHQUFHLEVBR3hDLHVCQUFDLG9CQUFPLGNBQ04sd0JBQUMsZ0JBQUcsZUFDRix1QkFBQyxtQkFBTSxJQUFDLFNBQVMsRUFBQyxlQUFlLFlBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsR0FBVSxFQUMxRix1QkFBQyxtQkFBTSxJQUFDLFNBQVMsRUFBQyxZQUFZLFlBQUUsSUFBQSxrQkFBVSxFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQVUsSUFDbEYsR0FDRSxFQUVWLHVCQUFDLGVBQUUsSUFBQyxTQUFTLEVBQUMsdUJBQXVCLEdBQUcsRUFHeEMsdUJBQUMsb0JBQU8sY0FDTix3QkFBQyxnQkFBRyxlQUNGLHVCQUFDLG1CQUFNLElBQUMsU0FBUyxFQUFDLGVBQWUsWUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxHQUFVLEVBQ2pHLHVCQUFDLG1CQUFNLElBQUMsU0FBUyxFQUFDLFlBQVksWUFBRSxJQUFBLGtCQUFVLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFVLElBQ3ZGLEdBQ0UsRUFFVix1QkFBQyxlQUFFLElBQUMsU0FBUyxFQUFDLHVCQUF1QixHQUFHLEVBR3hDLHVCQUFDLG9CQUFPLGNBQ04sd0JBQUMsZ0JBQUcsZUFDRix1QkFBQyxtQkFBTSxJQUFDLFNBQVMsRUFBQyxlQUFlLFlBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsRUFBRSxJQUFJLENBQUMsR0FBVSxFQUNsRyx1QkFBQyxtQkFBTSxJQUFDLFNBQVMsRUFBQyxZQUFZLFlBQUUsSUFBQSxrQkFBVSxFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBVSxJQUN4RixHQUNFLEVBRVYsdUJBQUMsZUFBRSxJQUFDLFNBQVMsRUFBQyx1QkFBdUIsR0FBRyxFQUd4Qyx1QkFBQyxvQkFBTyxjQUNOLHdCQUFDLGdCQUFHLGVBQ0YsdUJBQUMsbUJBQU0sSUFBQyxTQUFTLEVBQUMsZUFBZSxZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLEdBQVUsRUFDbkcsdUJBQUMsbUJBQU0sSUFBQyxTQUFTLEVBQUMsWUFBWSxZQUFFLElBQUEsa0JBQVUsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQVUsSUFDekYsR0FDRSxFQUVWLHVCQUFDLGVBQUUsSUFBQyxTQUFTLEVBQUMsdUJBQXVCLEdBQUcsRUFHeEMsdUJBQUMsb0JBQU8sY0FDTix1QkFBQyxpQkFBSSxJQUFDLFNBQVMsRUFBQyxtQ0FBbUMsWUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQ2xCLEdBQ0MsSUFDQSxHQUNQLEdBQ0UsSUFDTixDQUNSLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLFVBQVUsQ0FDOUIsSUFBb0MsRUFDcEMsT0FBNEI7SUFFNUIsT0FBTyxNQUFNLElBQUEsZUFBTSxFQUFDLE1BQU0sSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVNLEtBQUssVUFBVSxVQUFVLENBQzlCLElBQW9DLEVBQ3BDLE9BQTRCO0lBRTVCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBQSxvQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLENBQUMifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"general": {
|
|
3
|
+
"headerTitle": "#{{inventoryLevelId}} - Inventory level has been updated",
|
|
4
|
+
"headerDescription": "Inventory level has been updated. Check the details.",
|
|
5
|
+
"labels": {
|
|
6
|
+
"inventoryLevelId": "Inventory Level ID",
|
|
7
|
+
"inventoryLevelLocation": "Inventory Level Location",
|
|
8
|
+
"inventoryLevelDate": "Inventory Level Date"
|
|
9
|
+
},
|
|
10
|
+
"footer": "If you have any questions, please contact us."
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.en = exports.pl = exports.translations = void 0;
|
|
7
|
+
const pl_json_1 = __importDefault(require("./pl.json"));
|
|
8
|
+
exports.pl = pl_json_1.default;
|
|
9
|
+
const en_json_1 = __importDefault(require("./en.json"));
|
|
10
|
+
exports.en = en_json_1.default;
|
|
11
|
+
exports.translations = {
|
|
12
|
+
pl: pl_json_1.default,
|
|
13
|
+
en: en_json_1.default,
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvdHJhbnNsYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUEyQjtBQVFsQixhQVJGLGlCQUFFLENBUUU7QUFQWCx3REFBMkI7QUFPZCxhQVBOLGlCQUFFLENBT007QUFMRixRQUFBLFlBQVksR0FBcUI7SUFDNUMsRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0NBQ1AsQ0FBQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"general": {
|
|
3
|
+
"headerTitle": "Poziom magazynowy został zmieniony",
|
|
4
|
+
"headerDescription": "Poziom magazynowy został zmieniony. Sprawdź szczegóły.",
|
|
5
|
+
"labels": {
|
|
6
|
+
"inventoryLevelId": "ID",
|
|
7
|
+
"inventoryLevelLocation": "Lokalizacja",
|
|
8
|
+
"inventoryLevelStockedQuantity": "Ilość na stanie",
|
|
9
|
+
"inventoryLevelReservedQuantity": "Ilość zarezerwowana",
|
|
10
|
+
"inventoryLevelAvailableQuantity": "Ilość dostępna"
|
|
11
|
+
},
|
|
12
|
+
"footer": "Jeśli masz pytania dotyczące poziomu magazynowego, skontaktuj się z nami."
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TEMPLATES_NAMES = void 0;
|
|
4
4
|
exports.TEMPLATES_NAMES = {
|
|
5
|
+
INVENTORY_LEVEL: "inventory-level",
|
|
5
6
|
ORDER_PLACED: "order-placed",
|
|
6
7
|
ORDER_COMPLETED: "order-completed",
|
|
7
8
|
CONTACT_FORM: "contact-form",
|
|
8
9
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLGVBQWUsR0FBRztJQUM3QixlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsWUFBWSxFQUFFLGNBQWM7Q0FDcEIsQ0FBQyJ9
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Medusa plugin notification emails
|
|
2
2
|
|
|
3
3
|
A comprehensive notification plugin for Medusa v2 that provides a flexible email template system with internationalization support, custom translations, and seamless integration with Medusa's notification module.
|
|
4
4
|
|
|
@@ -21,9 +21,9 @@ A comprehensive notification plugin for Medusa v2 that provides a flexible email
|
|
|
21
21
|
## Installation
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npm install @codee-sh/medusa-plugin-notification
|
|
24
|
+
npm install @codee-sh/medusa-plugin-notification-emails
|
|
25
25
|
# or
|
|
26
|
-
yarn add @codee-sh/medusa-plugin-notification
|
|
26
|
+
yarn add @codee-sh/medusa-plugin-notification-emails
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## Quick Start
|
|
@@ -35,7 +35,7 @@ Add to your `medusa-config.ts`:
|
|
|
35
35
|
```typescript
|
|
36
36
|
module.exports = defineConfig({
|
|
37
37
|
plugins: [
|
|
38
|
-
"@codee-sh/medusa-plugin-notification"
|
|
38
|
+
"@codee-sh/medusa-plugin-notification-emails"
|
|
39
39
|
]
|
|
40
40
|
})
|
|
41
41
|
```
|
|
@@ -49,7 +49,7 @@ Set up a notification provider - see [Configuration Documentation](./docs/config
|
|
|
49
49
|
The plugin includes built-in subscribers that automatically send email notifications for various events. You can also use templates directly in your code:
|
|
50
50
|
|
|
51
51
|
```typescript
|
|
52
|
-
import { renderTemplate, TEMPLATES_NAMES } from "@codee-sh/medusa-plugin-notification/templates/emails"
|
|
52
|
+
import { renderTemplate, TEMPLATES_NAMES } from "@codee-sh/medusa-plugin-notification-emails/templates/emails"
|
|
53
53
|
|
|
54
54
|
const { html, text, subject } = await renderTemplate(
|
|
55
55
|
TEMPLATES_NAMES.ORDER_PLACED,
|
|
@@ -101,9 +101,9 @@ Access the template preview in Medusa Admin at `/app/notifications/render`. See
|
|
|
101
101
|
|
|
102
102
|
The plugin exports the following:
|
|
103
103
|
|
|
104
|
-
- `@codee-sh/medusa-plugin-notification/templates/emails` - Template rendering functions
|
|
105
|
-
- `@codee-sh/medusa-plugin-notification/templates/emails/types` - Template types and constants
|
|
106
|
-
- `@codee-sh/medusa-plugin-notification/utils` - Utility functions
|
|
104
|
+
- `@codee-sh/medusa-plugin-notification-emails/templates/emails` - Template rendering functions
|
|
105
|
+
- `@codee-sh/medusa-plugin-notification-emails/templates/emails/types` - Template types and constants
|
|
106
|
+
- `@codee-sh/medusa-plugin-notification-emails/utils` - Utility functions
|
|
107
107
|
|
|
108
108
|
## License
|
|
109
109
|
|