diff --git a/frontend/package.json b/frontend/package.json index b7dcb4f..964c2e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "muffin-admin", - "version": "3.12.2", + "version": "3.12.3", "description": "NPM package for https://github.com/klen/muffin-admin", "files": [ "src", diff --git a/frontend/src/MuffinAdmin.tsx b/frontend/src/MuffinAdmin.tsx index 85f98f3..80311b3 100644 --- a/frontend/src/MuffinAdmin.tsx +++ b/frontend/src/MuffinAdmin.tsx @@ -17,7 +17,7 @@ import { import { ConfirmationProvider } from "./common" import { useMuffinAdminOpts } from "./hooks" import { buildProvider, muffinTranslations } from "./i18n" -import { buildAdmin, findBuilder, findIcon, setupAdmin } from "./utils" +import { buildAdmin, deepMerge, findBuilder, findIcon, setupAdmin } from "./utils" export function MuffinAdmin(props: AdminProps) { const opts = useMuffinAdminOpts() @@ -29,7 +29,7 @@ export function MuffinAdmin(props: AdminProps) { ? Object.fromEntries( Object.entries(muffinTranslations).map(([locale, messages]) => [ locale, - { ...messages, ...backendLocales[locale], ...(buildAdmin(["locale", locale]) || {}) }, + deepMerge({}, messages, backendLocales[locale], buildAdmin(["locale", locale]) || {}), ]) ) : muffinTranslations diff --git a/frontend/src/utils.tsx b/frontend/src/utils.tsx index 57ca1e1..2284fc8 100644 --- a/frontend/src/utils.tsx +++ b/frontend/src/utils.tsx @@ -64,3 +64,24 @@ export function buildIcon(icon?: string) { const Icon = findIcon(icon) if (Icon) return } + +function isObject(item: any) { + return item && typeof item === "object" && !Array.isArray(item) +} + +export function deepMerge(target: any, ...sources: any[]): any { + if (!sources.length) return target + const source = sources.shift() + + if (isObject(target) && isObject(source)) { + for (const key in source) { + if (isObject(source[key])) { + if (!target[key]) Object.assign(target, { [key]: {} }) + deepMerge(target[key], source[key]) + } else { + Object.assign(target, { [key]: source[key] }) + } + } + } + return deepMerge(target, ...sources) +} diff --git a/pyproject.toml b/pyproject.toml index 00a4275..6d2f561 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "muffin-admin" -version = "3.12.2" +version = "3.12.3" description = "Admin interface for Muffin Framework" readme = "README.rst" license = "MIT"