diff --git a/src/app-bridge/app-bridge-state.test.ts b/src/app-bridge/app-bridge-state.test.ts index cb1cdd5..7a5fb8b 100644 --- a/src/app-bridge/app-bridge-state.test.ts +++ b/src/app-bridge/app-bridge-state.test.ts @@ -12,6 +12,7 @@ describe("app-bridge-state.ts", () => { ready: false, path: "/", theme: "light", + locale: "en", }); }); @@ -23,10 +24,23 @@ describe("app-bridge-state.ts", () => { id: "foo-bar", path: "/", theme: "light", + locale: "pl", }; instance.setState(newState); expect(instance.getState()).toEqual(expect.objectContaining(newState)); }); + + it("Set \"en\" to be initial locale value", () => { + expect(new AppBridgeStateContainer().getState().locale).toEqual("en"); + }); + + it("Can be constructed with initial locale", () => { + expect( + new AppBridgeStateContainer({ + initialLocale: "pl", + }).getState().locale + ).toBe("pl"); + }); }); diff --git a/src/app-bridge/app-bridge-state.ts b/src/app-bridge/app-bridge-state.ts index d61c57a..687a60d 100644 --- a/src/app-bridge/app-bridge-state.ts +++ b/src/app-bridge/app-bridge-state.ts @@ -7,6 +7,11 @@ export type AppBridgeState = { domain: string; path: string; theme: ThemeType; + locale: string; +}; + +type Options = { + initialLocale?: string; }; export class AppBridgeStateContainer { @@ -16,8 +21,15 @@ export class AppBridgeStateContainer { ready: false, path: "/", theme: "light", + locale: "en", }; + constructor(options: Options = {}) { + if (options.initialLocale) { + this.state.locale = options.initialLocale; + } + } + getState() { return this.state; } diff --git a/src/app-bridge/app-bridge.ts b/src/app-bridge/app-bridge.ts index 6c417eb..11a7faf 100644 --- a/src/app-bridge/app-bridge.ts +++ b/src/app-bridge/app-bridge.ts @@ -37,6 +37,12 @@ function eventStateReducer(state: AppBridgeState, event: Events) { theme: event.payload.theme, }; } + case EventType.localeChanged: { + return { + ...state, + locale: event.payload.locale, + }; + } case EventType.response: { return state; } @@ -56,6 +62,7 @@ const createEmptySubscribeMap = (): SubscribeMap => ({ response: {}, redirect: {}, theme: {}, + localeChanged: {}, }); export type AppBridgeOptions = { diff --git a/src/app-bridge/events.ts b/src/app-bridge/events.ts index 2413eb3..259ad9d 100644 --- a/src/app-bridge/events.ts +++ b/src/app-bridge/events.ts @@ -7,6 +7,7 @@ export const EventType = { response: "response", redirect: "redirect", theme: "theme", + localeChanged: "localeChanged", } as const; export type EventType = Values; @@ -47,7 +48,19 @@ export type ThemeEvent = Event< } >; -export type Events = HandshakeEvent | DispatchResponseEvent | RedirectEvent | ThemeEvent; +export type LocaleChangedEvent = Event< + "localeChanged", + { + locale: string; + } +>; + +export type Events = + | HandshakeEvent + | DispatchResponseEvent + | RedirectEvent + | ThemeEvent + | LocaleChangedEvent; export type PayloadOfEvent< TEventType extends EventType,