feat: set checkout languageCode based on user locale
Some checks failed
Build and Deploy / build (push) Has been cancelled

- Add languageCode to checkout store state
- Add setLanguageCode action to store
- Pass languageCode when creating checkout
- Header component sets language code from useLocale hook
- Enables multi-language order confirmation emails
This commit is contained in:
Unchained
2026-03-28 12:31:34 +02:00
parent ee574cb736
commit 5ec0e6c92c
2 changed files with 24 additions and 11 deletions

View File

@@ -58,22 +58,24 @@ interface GetCheckoutResponse {
interface SaleorCheckoutStore {
checkout: Checkout | null;
checkoutToken: string | null;
languageCode: string | null;
isOpen: boolean;
isLoading: boolean;
error: string | null;
// Actions
initCheckout: () => Promise<void>;
addLine: (variantId: string, quantity: number) => Promise<void>;
updateLine: (lineId: string, quantity: number) => Promise<void>;
removeLine: (lineId: string) => Promise<void>;
setEmail: (email: string) => Promise<void>;
setLanguageCode: (languageCode: string) => void;
refreshCheckout: () => Promise<void>;
toggleCart: () => void;
openCart: () => void;
closeCart: () => void;
clearError: () => void;
// Getters
getLineCount: () => number;
getTotal: () => number;
@@ -85,13 +87,14 @@ export const useSaleorCheckoutStore = create<SaleorCheckoutStore>()(
(set, get) => ({
checkout: null,
checkoutToken: null,
languageCode: null,
isOpen: false,
isLoading: false,
error: null,
initCheckout: async () => {
const { checkoutToken } = get();
const { checkoutToken, languageCode } = get();
if (checkoutToken) {
// Try to fetch existing checkout
try {
@@ -99,7 +102,7 @@ export const useSaleorCheckoutStore = create<SaleorCheckoutStore>()(
query: GET_CHECKOUT,
variables: { token: checkoutToken },
});
if (data?.checkout) {
set({ checkout: data.checkout });
return;
@@ -108,8 +111,8 @@ export const useSaleorCheckoutStore = create<SaleorCheckoutStore>()(
// Checkout not found or expired, create new one
}
}
// Create new checkout
// Create new checkout with language code
try {
const { data } = await saleorClient.mutate<CheckoutCreateResponse>({
mutation: CHECKOUT_CREATE,
@@ -117,10 +120,11 @@ export const useSaleorCheckoutStore = create<SaleorCheckoutStore>()(
input: {
channel: CHANNEL,
lines: [],
languageCode: languageCode ? languageCode.toUpperCase() : undefined,
},
},
});
if (data?.checkoutCreate?.checkout) {
set({
checkout: data.checkoutCreate.checkout,
@@ -294,6 +298,7 @@ export const useSaleorCheckoutStore = create<SaleorCheckoutStore>()(
openCart: () => set({ isOpen: true }),
closeCart: () => set({ isOpen: false }),
clearError: () => set({ error: null }),
setLanguageCode: (languageCode: string) => set({ languageCode }),
getLineCount: () => {
const { checkout } = get();