Skip to content

Commit fe86e97

Browse files
committed
fix(): use self i18n when injecting dynamic menu items
1 parent 3e11e73 commit fe86e97

File tree

1 file changed

+35
-5
lines changed
  • packages/brick-kit/src/internal

1 file changed

+35
-5
lines changed

packages/brick-kit/src/internal/menu.ts

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ export async function fetchMenuById(
119119
},
120120
})
121121
).list as MenuRawData[]);
122-
await Promise.all(menuList.map(loadDynamicMenuItems));
123-
const menuData = mergeMenu(menuList);
122+
const menuData = await mergeMenu(menuList, kernel);
124123
if (!menuData) {
125124
throw new Error(`Menu not found: ${menuId}`);
126125
}
@@ -129,7 +128,10 @@ export async function fetchMenuById(
129128
return menuData;
130129
}
131130

132-
function mergeMenu(menuList: MenuRawData[]): RuntimeMenuRawData {
131+
async function mergeMenu(
132+
menuList: MenuRawData[],
133+
kernel: Kernel
134+
): Promise<RuntimeMenuRawData> {
133135
const mainMenu = menuList.find((menu) => menu.type !== "inject");
134136
if (!mainMenu) {
135137
return undefined;
@@ -151,6 +153,13 @@ function mergeMenu(menuList: MenuRawData[]): RuntimeMenuRawData {
151153
});
152154
menuWithI18n.set(menu, menuI18nNamespace);
153155
}
156+
}
157+
158+
await Promise.all(
159+
menuList.map((menu) => loadDynamicMenuItems(menu, kernel, menuWithI18n))
160+
);
161+
162+
for (const menu of menuList) {
154163
if (menu.items?.length > 0) {
155164
if (menu.type === "inject" && menu.injectMenuGroupId) {
156165
let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);
@@ -164,6 +173,7 @@ function mergeMenu(menuList: MenuRawData[]): RuntimeMenuRawData {
164173
}
165174
}
166175
}
176+
167177
return {
168178
...mainMenu,
169179
items: validMenuList.flatMap((menu) =>
@@ -213,9 +223,29 @@ function processGroupInject(
213223
});
214224
}
215225

216-
async function loadDynamicMenuItems(menu: MenuRawData): Promise<void> {
226+
async function loadDynamicMenuItems(
227+
menu: MenuRawData,
228+
kernel: Kernel,
229+
menuWithI18n: WeakMap<MenuRawData, string>
230+
): Promise<void> {
217231
if (menu.dynamicItems && menu.itemsResolve) {
218232
const itemsConf: Partial<{ items: MenuItemRawData[] }> = {};
233+
const overrideAppId = menu.app[0].appId;
234+
const context = _internalApiGetCurrentContext();
235+
let newContext = context;
236+
if (
237+
overrideAppId !== context.app.id &&
238+
attemptToVisit(menu.itemsResolve, ["APP", "I18N"])
239+
) {
240+
const storyboard = kernel.bootstrapData.storyboards.find(
241+
(story) => story.app.id === overrideAppId
242+
);
243+
newContext = {
244+
...context,
245+
overrideApp: storyboard?.app,
246+
appendI18nNamespace: menuWithI18n.get(menu),
247+
};
248+
}
219249
await _internalApiGetResolver().resolveOne(
220250
"reference",
221251
{
@@ -225,7 +255,7 @@ async function loadDynamicMenuItems(menu: MenuRawData): Promise<void> {
225255
},
226256
itemsConf,
227257
null,
228-
_internalApiGetCurrentContext()
258+
newContext
229259
);
230260
menu.items = itemsConf.items;
231261
}

0 commit comments

Comments
 (0)