Skip to content

Commit b74d9f1

Browse files
committed
Add messages loader
Signed-off-by: Marcos Candeia <marrcooos@gmail.com>
1 parent 0316c65 commit b74d9f1

File tree

4 files changed

+344
-26
lines changed

4 files changed

+344
-26
lines changed

live.gen.ts

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,21 @@ import * as $$1 from "./accounts/yourViews.ts";
3636
import * as $$2 from "./accounts/vtex.ts";
3737
import * as $$3 from "./accounts/shopify.ts";
3838
import * as $$4 from "./accounts/occ.ts";
39-
import * as $$$0 from "./loaders/vtex/legacy/productList.ts";
40-
import * as $$$1 from "./loaders/vtex/legacy/productDetailsPage.ts";
41-
import * as $$$2 from "./loaders/vtex/legacy/productListingPage.ts";
42-
import * as $$$3 from "./loaders/vtex/legacy/relatedProductsLoader.ts";
43-
import * as $$$4 from "./loaders/vtex/wishlist.ts";
44-
import * as $$$5 from "./loaders/vtex/navbar.ts";
45-
import * as $$$6 from "./loaders/vtex/proxy.ts";
46-
import * as $$$7 from "./loaders/vtex/intelligentSearch/productList.ts";
47-
import * as $$$8 from "./loaders/vtex/intelligentSearch/productDetailsPage.ts";
48-
import * as $$$9 from "./loaders/vtex/intelligentSearch/productListingPage.ts";
49-
import * as $$$10 from "./loaders/vtex/intelligentSearch/suggestions.ts";
50-
import * as $$$11 from "./loaders/vtex/cart.ts";
51-
import * as $$$12 from "./loaders/vtex/user.ts";
39+
import * as $$$0 from "./loaders/messages.ts";
40+
import * as $$$1 from "./loaders/vtex/legacy/productList.ts";
41+
import * as $$$2 from "./loaders/vtex/legacy/productDetailsPage.ts";
42+
import * as $$$3 from "./loaders/vtex/legacy/productListingPage.ts";
43+
import * as $$$4 from "./loaders/vtex/legacy/relatedProductsLoader.ts";
44+
import * as $$$5 from "./loaders/vtex/wishlist.ts";
45+
import * as $$$6 from "./loaders/vtex/navbar.ts";
46+
import * as $$$7 from "./loaders/vtex/proxy.ts";
47+
import * as $$$8 from "./loaders/vtex/intelligentSearch/productList.ts";
48+
import * as $$$9 from "./loaders/vtex/intelligentSearch/productDetailsPage.ts";
49+
import * as $$$10 from "./loaders/vtex/intelligentSearch/productListingPage.ts";
50+
import * as $$$11 from "./loaders/vtex/intelligentSearch/suggestions.ts";
51+
import * as $$$12 from "./loaders/vtex/cart.ts";
52+
import * as $$$13 from "./loaders/vtex/user.ts";
53+
import * as $$$14 from "./loaders/message.ts";
5254
import * as $$$$0 from "./routes/404.tsx";
5355
import * as $$$$1 from "./routes/styles.css.ts";
5456
import * as $$$$2 from "./routes/_app.tsx";
@@ -161,19 +163,22 @@ const manifest = {
161163
"$live/loaders/state.ts": i1$0,
162164
"$live/loaders/workflows/events.ts": i1$1,
163165
"$live/loaders/workflows/get.ts": i1$2,
164-
"deco-sites/std/loaders/vtex/cart.ts": $$$11,
165-
"deco-sites/std/loaders/vtex/intelligentSearch/productDetailsPage.ts": $$$8,
166-
"deco-sites/std/loaders/vtex/intelligentSearch/productList.ts": $$$7,
167-
"deco-sites/std/loaders/vtex/intelligentSearch/productListingPage.ts": $$$9,
168-
"deco-sites/std/loaders/vtex/intelligentSearch/suggestions.ts": $$$10,
169-
"deco-sites/std/loaders/vtex/legacy/productDetailsPage.ts": $$$1,
170-
"deco-sites/std/loaders/vtex/legacy/productList.ts": $$$0,
171-
"deco-sites/std/loaders/vtex/legacy/productListingPage.ts": $$$2,
172-
"deco-sites/std/loaders/vtex/legacy/relatedProductsLoader.ts": $$$3,
173-
"deco-sites/std/loaders/vtex/navbar.ts": $$$5,
174-
"deco-sites/std/loaders/vtex/proxy.ts": $$$6,
175-
"deco-sites/std/loaders/vtex/user.ts": $$$12,
176-
"deco-sites/std/loaders/vtex/wishlist.ts": $$$4,
166+
"deco-sites/std/loaders/message.ts": $$$14,
167+
"deco-sites/std/loaders/messages.ts": $$$0,
168+
"deco-sites/std/loaders/vtex/cart.ts": $$$12,
169+
"deco-sites/std/loaders/vtex/intelligentSearch/productDetailsPage.ts": $$$9,
170+
"deco-sites/std/loaders/vtex/intelligentSearch/productList.ts": $$$8,
171+
"deco-sites/std/loaders/vtex/intelligentSearch/productListingPage.ts":
172+
$$$10,
173+
"deco-sites/std/loaders/vtex/intelligentSearch/suggestions.ts": $$$11,
174+
"deco-sites/std/loaders/vtex/legacy/productDetailsPage.ts": $$$2,
175+
"deco-sites/std/loaders/vtex/legacy/productList.ts": $$$1,
176+
"deco-sites/std/loaders/vtex/legacy/productListingPage.ts": $$$3,
177+
"deco-sites/std/loaders/vtex/legacy/relatedProductsLoader.ts": $$$4,
178+
"deco-sites/std/loaders/vtex/navbar.ts": $$$6,
179+
"deco-sites/std/loaders/vtex/proxy.ts": $$$7,
180+
"deco-sites/std/loaders/vtex/user.ts": $$$13,
181+
"deco-sites/std/loaders/vtex/wishlist.ts": $$$5,
177182
},
178183
"routes": {
179184
"./routes/_app.tsx": $$$$2,

loaders/message.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import {
2+
Language,
3+
MessageKey,
4+
Messages,
5+
MessageText,
6+
} from "deco-sites/std/loaders/messages.ts";
7+
import { Context } from "deco-sites/std/packs/vtex/accounts/vtex.ts";
8+
9+
export interface Props {
10+
messages: Messages;
11+
lang?: Language;
12+
key: MessageKey;
13+
}
14+
15+
/**
16+
* @title Get a message from messages
17+
*/
18+
export default function GetMessage(
19+
props: Props,
20+
_req: Request,
21+
ctx: Context,
22+
): MessageText {
23+
const culture = ctx.configVTEX?.defaultLocale ?? "default";
24+
return props?.messages?.[props.key]?.[culture];
25+
}

loaders/messages.ts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
export interface i18nMessage {
2+
/**
3+
* @title Language
4+
* @description The target user language
5+
* @default en-US
6+
*/
7+
lang: Language;
8+
/**
9+
* @title Text
10+
*/
11+
text: MessageText;
12+
}
13+
/**
14+
* @title Message key
15+
*/
16+
export type MessageKey = string;
17+
/**
18+
* @title Language
19+
*/
20+
export type Language = string;
21+
22+
/**
23+
* @title Message text
24+
*/
25+
export type MessageText = string;
26+
export interface Message {
27+
/**
28+
* @title Message key
29+
*/
30+
key: MessageKey;
31+
/**
32+
* @title Messages
33+
* @description Internationalization messages
34+
*/
35+
i18n: i18nMessage[];
36+
/**
37+
* @title Default Message
38+
*/
39+
defaultText: MessageText;
40+
}
41+
42+
export interface Props {
43+
messages: Message[];
44+
}
45+
46+
export type Messages = Record<
47+
MessageKey,
48+
Record<Language | "default", MessageText>
49+
>;
50+
51+
/**
52+
* @title Internationalization
53+
* @description Used to display messages in different languages.
54+
*/
55+
export default function Messages(props: Props): Messages {
56+
const msgs: Messages = {};
57+
for (const message of props?.messages ?? []) {
58+
msgs[message.key] = { default: message.defaultText };
59+
for (const { lang, text } of (message.i18n ?? [])) {
60+
msgs[message.key][lang] = text;
61+
}
62+
}
63+
64+
return msgs;
65+
}

0 commit comments

Comments
 (0)