feat(translation,fulfillment,customer,product,region,tax,core-flows,medusa,types): Implement dynamic translation settings management (#14536)
* Add is_active field to translation_settings model * Types * Workflows * Api layer * Tests * Add changeset * Add comment * Hook to create or deactivate translatable entities on startup * Cleanup old code * Configure translatable option for core entities * Validation step and snake case correction * Cleanup * Tests * Comment in PR * Update changeset * Mock DmlEntity.getTranslatableEntities * Move validation to module service layer * Remove validation from remaining workflow * Return object directly * Type improvements * Remove .only from tests * Apply snakeCase * Fix tests * Fix tests * Remove unnecessary map and use set instead * Fix tests * Comments * Include translatable product properties * Avoid race condition in translations tests * Update test
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
} from "@medusajs/framework"
|
||||
import {
|
||||
AdminBatchTranslations,
|
||||
AdminBatchTranslationSettings,
|
||||
AdminGetTranslationsParams,
|
||||
AdminTranslationEntitiesParams,
|
||||
AdminTranslationSettingsParams,
|
||||
@@ -44,6 +45,11 @@ export const adminTranslationsRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
validateAndTransformQuery(AdminTranslationSettingsParams, {}),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/translations/settings/batch",
|
||||
middlewares: [validateAndTransformBody(AdminBatchTranslationSettings)],
|
||||
},
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/translations/entities",
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { batchTranslationSettingsWorkflow } from "@medusajs/core-flows"
|
||||
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework"
|
||||
import { defineFileConfig, FeatureFlag } from "@medusajs/framework/utils"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import TranslationFeatureFlag from "../../../../../feature-flags/translation"
|
||||
import { AdminBatchTranslationSettingsType } from "../../validators"
|
||||
|
||||
/**
|
||||
* @since 2.12.5
|
||||
* @featureFlag translation
|
||||
*/
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<AdminBatchTranslationSettingsType>,
|
||||
res: MedusaResponse<HttpTypes.AdminBatchTranslationSettingsResponse>
|
||||
) => {
|
||||
const { create = [], update = [], delete: deleteIds = [] } = req.validatedBody
|
||||
|
||||
const { result } = await batchTranslationSettingsWorkflow(req.scope).run({
|
||||
input: {
|
||||
create,
|
||||
update,
|
||||
delete: deleteIds,
|
||||
},
|
||||
})
|
||||
|
||||
return res.status(200).json({
|
||||
created: result.created,
|
||||
updated: result.updated,
|
||||
deleted: {
|
||||
ids: deleteIds,
|
||||
object: "translation_settings",
|
||||
deleted: true,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
defineFileConfig({
|
||||
isDisabled: () => !FeatureFlag.isFeatureEnabled(TranslationFeatureFlag.key),
|
||||
})
|
||||
@@ -72,6 +72,27 @@ export const AdminTranslationSettingsParams = z.object({
|
||||
entity_type: z.string().optional(),
|
||||
})
|
||||
|
||||
const AdminUpdateTranslationSettings = z.object({
|
||||
id: z.string(),
|
||||
entity_type: z.string().optional(),
|
||||
fields: z.array(z.string()).optional(),
|
||||
is_active: z.boolean().optional(),
|
||||
})
|
||||
|
||||
const AdminCreateTranslationSettings = z.object({
|
||||
entity_type: z.string(),
|
||||
fields: z.array(z.string()),
|
||||
is_active: z.boolean().optional(),
|
||||
})
|
||||
|
||||
export type AdminBatchTranslationSettingsType = z.infer<
|
||||
typeof AdminBatchTranslationSettings
|
||||
>
|
||||
export const AdminBatchTranslationSettings = createBatchBody(
|
||||
AdminCreateTranslationSettings,
|
||||
AdminUpdateTranslationSettings
|
||||
)
|
||||
|
||||
export type AdminTranslationEntitiesParamsType = z.infer<
|
||||
typeof AdminTranslationEntitiesParams
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user