feat(): Add support for store locales end point (#14307)
**What** Add support for `store/locales` which return the configured supported locales
This commit is contained in:
committed by
GitHub
parent
665b80adb1
commit
0f1566c644
6
.changeset/wicked-candles-mate.md
Normal file
6
.changeset/wicked-candles-mate.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/medusa": patch
|
||||||
|
"@medusajs/link-modules": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat(): Add support for store locales end point
|
||||||
93
integration-tests/http/__tests__/store/store/locale.spec.ts
Normal file
93
integration-tests/http/__tests__/store/store/locale.spec.ts
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
import { medusaIntegrationTestRunner } from "@medusajs/test-utils"
|
||||||
|
import { MedusaContainer } from "@medusajs/types"
|
||||||
|
import { Modules } from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
generatePublishableKey,
|
||||||
|
generateStoreHeaders,
|
||||||
|
} from "../../../../helpers/create-admin-user"
|
||||||
|
|
||||||
|
jest.setTimeout(30000)
|
||||||
|
|
||||||
|
process.env.MEDUSA_FF_TRANSLATION = "true"
|
||||||
|
|
||||||
|
medusaIntegrationTestRunner({
|
||||||
|
testSuite: ({ getContainer, api }) => {
|
||||||
|
describe("Store Locales API", () => {
|
||||||
|
let appContainer: MedusaContainer
|
||||||
|
let storeHeaders
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
appContainer = getContainer()
|
||||||
|
})
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const publishableKey = await generatePublishableKey(appContainer)
|
||||||
|
storeHeaders = generateStoreHeaders({ publishableKey })
|
||||||
|
|
||||||
|
const storeModule = appContainer.resolve(Modules.STORE)
|
||||||
|
const [defaultStore] = await storeModule.listStores(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
select: ["id"],
|
||||||
|
take: 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await storeModule.updateStores(defaultStore.id, {
|
||||||
|
supported_locales: [
|
||||||
|
{ locale_code: "en-US" },
|
||||||
|
{ locale_code: "fr-FR" },
|
||||||
|
{ locale_code: "de-DE" },
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
delete process.env.MEDUSA_FF_TRANSLATION
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("GET /store/locales", () => {
|
||||||
|
it("should return store supported locales", async () => {
|
||||||
|
const response = await api.get("/store/locales", storeHeaders)
|
||||||
|
|
||||||
|
expect(response.status).toEqual(200)
|
||||||
|
expect(response.data.locales).toHaveLength(3)
|
||||||
|
expect(response.data.locales).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
{
|
||||||
|
code: "en-US",
|
||||||
|
name: expect.any(String),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "fr-FR",
|
||||||
|
name: expect.any(String),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "de-DE",
|
||||||
|
name: expect.any(String),
|
||||||
|
},
|
||||||
|
])
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return empty array when no locales configured", async () => {
|
||||||
|
const storeModule = appContainer.resolve(Modules.STORE)
|
||||||
|
const [defaultStore] = await storeModule.listStores(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
select: ["id"],
|
||||||
|
take: 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await storeModule.updateStores(defaultStore.id, {
|
||||||
|
supported_locales: [],
|
||||||
|
})
|
||||||
|
|
||||||
|
const response = await api.get("/store/locales", storeHeaders)
|
||||||
|
|
||||||
|
expect(response.status).toEqual(200)
|
||||||
|
expect(response.data.locales).toEqual([])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -85,6 +85,7 @@ module.exports = defineConfig({
|
|||||||
},
|
},
|
||||||
featureFlags: {
|
featureFlags: {
|
||||||
index_engine: process.env.ENABLE_INDEX_MODULE === "true",
|
index_engine: process.env.ENABLE_INDEX_MODULE === "true",
|
||||||
|
translation: process.env.MEDUSA_FF_TRANSLATION === "true",
|
||||||
},
|
},
|
||||||
modules,
|
modules,
|
||||||
})
|
})
|
||||||
|
|||||||
9
packages/medusa/src/api/store/locales/middlewares.ts
Normal file
9
packages/medusa/src/api/store/locales/middlewares.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||||
|
|
||||||
|
export const storeLocalesRoutesMiddlewares: MiddlewareRoute[] = [
|
||||||
|
{
|
||||||
|
method: ["GET"],
|
||||||
|
matcher: "/store/locales",
|
||||||
|
middlewares: [],
|
||||||
|
},
|
||||||
|
]
|
||||||
28
packages/medusa/src/api/store/locales/route.ts
Normal file
28
packages/medusa/src/api/store/locales/route.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
||||||
|
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||||
|
|
||||||
|
export const GET = async (req: MedusaRequest, res: MedusaResponse) => {
|
||||||
|
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: [store],
|
||||||
|
} = await query.graph({
|
||||||
|
entity: "store",
|
||||||
|
fields: ["supported_locales.*", "supported_locales.locale.*"],
|
||||||
|
pagination: {
|
||||||
|
take: 1,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const locales = store?.supported_locales.reduce((acc, locale) => {
|
||||||
|
acc.push({
|
||||||
|
code: locale.locale_code,
|
||||||
|
name: locale.locale.name,
|
||||||
|
})
|
||||||
|
return acc
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
locales,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||||
|
import { storeLocalesRoutesMiddlewares } from "./locales/middlewares"
|
||||||
import { storeReturnsRoutesMiddlewares } from "./returns/middlewares"
|
import { storeReturnsRoutesMiddlewares } from "./returns/middlewares"
|
||||||
|
|
||||||
export const storeRoutesMiddlewares: MiddlewareRoute[] = [
|
export const storeRoutesMiddlewares: MiddlewareRoute[] = [
|
||||||
|
...storeLocalesRoutesMiddlewares,
|
||||||
...storeReturnsRoutesMiddlewares,
|
...storeReturnsRoutesMiddlewares,
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
import { ModuleJoinerConfig } from "@medusajs/framework/types"
|
import { ModuleJoinerConfig } from "@medusajs/framework/types"
|
||||||
import {
|
import { MEDUSA_SKIP_FILE, Modules } from "@medusajs/framework/utils"
|
||||||
FeatureFlag,
|
|
||||||
MEDUSA_SKIP_FILE,
|
|
||||||
Modules,
|
|
||||||
} from "@medusajs/framework/utils"
|
|
||||||
|
|
||||||
export const StoreLocales: ModuleJoinerConfig = {
|
export const StoreLocales: ModuleJoinerConfig = {
|
||||||
[MEDUSA_SKIP_FILE]: !FeatureFlag.isFeatureEnabled("translation"),
|
[MEDUSA_SKIP_FILE]: process.env.MEDUSA_FF_TRANSLATION !== "true",
|
||||||
isLink: true,
|
isLink: true,
|
||||||
isReadOnlyLink: true,
|
isReadOnlyLink: true,
|
||||||
extends: [
|
extends: [
|
||||||
|
|||||||
Reference in New Issue
Block a user