fix: plugin locale merge re-runs on HMR; API Key form allows Personal

- locale-merger: drop the module-level dedup Set. addLocale is
  idempotent, and the guard made HMR-added plugin locale keys
  silently skipped — strings like organizations.members.selectUsers
  stayed unresolved until a full dev-server restart.
- api-keys form: pass allowPersonal: true to CreateOrgScopeField so
  admin in Platform-wide mode can target their own Personal Org when
  creating a key (unlike infra resources where Personal doesn't fit).
This commit is contained in:
gitlawr
2026-05-12 14:20:18 +08:00
committed by jialin
parent c279a7f186
commit 10781da086
2 changed files with 12 additions and 14 deletions
@@ -45,7 +45,10 @@ const APIKeyForm: React.FC<{
></CInput.Input>
</Form.Item>
<PluginExtraFields name="CreateOrgScopeField" context={{ action }} />
<PluginExtraFields
name="CreateOrgScopeField"
context={{ action, allowPersonal: true }}
/>
<Form.Item<FormData>
name="expires_in"
+8 -13
View File
@@ -1,32 +1,27 @@
import { addLocale } from '@umijs/max';
const mergedLocales = new Set<string>();
/**
* Merge enterprise plugin locales into the main application
* Merge enterprise plugin locales into the main application.
*
* `addLocale` is idempotent: re-calling with the latest message dict
* overwrites previous entries, so we always pass the freshest plugin
* locales through. A previous version deduped via a module-level Set
* and that broke HMR — newly added keys in plugin locale files were
* skipped on the second merge, leaving the placeholder/validation
* strings unresolved until a full server restart.
*/
export function mergeEnterpriseLocales(locales: Record<string, any> = {}) {
if (!locales) {
return;
}
console.log('Merging enterprise plugin locales:', Object.keys(locales));
// Iterate over all locale configurations of the enterprise plugin
Object.entries(locales).forEach(([locale, messages]) => {
try {
if (mergedLocales.has(locale)) {
return;
}
// Merge the enterprise locale into the main application
addLocale(locale, messages, {
momentLocale: '',
// @ts-ignore
antd: locale
});
mergedLocales.add(locale);
console.log(`✓ Merged enterprise locale: ${locale}`, messages);
} catch (error) {
console.error(`Failed to merge enterprise locale ${locale}:`, error);
}