@next-bricks/nav 1.26.6 → 1.26.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bricks.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "id": "bricks/nav",
3
3
  "bricks": [
4
- "nav.easyops-navbar-alerts",
5
4
  "nav.launchpad-config",
5
+ "nav.easyops-navbar-alerts",
6
6
  "nav.app-bar-wrapper",
7
+ "nav.nav-logo",
7
8
  "nav.poll-announce",
8
9
  "nav.get-menu-config-options",
9
- "nav.nav-logo",
10
10
  "nav.get-menu-config-tree",
11
11
  "nav.query-search"
12
12
  ],
13
13
  "elements": [
14
14
  "eo-nav-menu",
15
+ "eo-launchpad-button",
16
+ "eo-launchpad-button-v2",
15
17
  "eo-launchpad-quick-access",
16
18
  "eo-search-launchpad",
17
19
  "eo-launchpad-recent-visits",
@@ -21,22 +23,16 @@
21
23
  "eo-sidebar-menu-group",
22
24
  "eo-sidebar-menu-submenu",
23
25
  "eo-sidebar-menu",
24
- "eo-sidebar-sub-menu",
25
26
  "eo-sidebar",
26
- "eo-launchpad-button",
27
- "eo-launchpad-button-v2",
27
+ "eo-sidebar-sub-menu",
28
28
  "eo-directory",
29
- "eo-directory-tree-leaf",
30
29
  "eo-directory-tree",
30
+ "eo-directory-tree-leaf",
31
31
  "eo-directory-tree-internal-node"
32
32
  ],
33
33
  "processors": [],
34
34
  "editors": [],
35
35
  "dependencies": {
36
- "nav.easyops-navbar-alerts": [
37
- "eo-icon",
38
- "eo-link"
39
- ],
40
36
  "eo-nav-menu": [
41
37
  "eo-menu-item",
42
38
  "eo-popover",
@@ -46,7 +42,12 @@
46
42
  "eo-input",
47
43
  "eo-tooltip"
48
44
  ],
49
- "eo-launchpad-quick-access": [
45
+ "eo-launchpad-button": [
46
+ "eo-icon",
47
+ "eo-link"
48
+ ],
49
+ "eo-launchpad-button-v2": [
50
+ "basic.lock-body-scroll",
50
51
  "eo-icon",
51
52
  "eo-link",
52
53
  "basic.show-dialog",
@@ -58,6 +59,16 @@
58
59
  "eo-dropdown-actions",
59
60
  "basic.show-dialog"
60
61
  ],
62
+ "nav.easyops-navbar-alerts": [
63
+ "eo-icon",
64
+ "eo-link"
65
+ ],
66
+ "eo-launchpad-quick-access": [
67
+ "eo-icon",
68
+ "eo-link",
69
+ "basic.show-dialog",
70
+ "basic.show-notification"
71
+ ],
61
72
  "eo-search-launchpad": [
62
73
  "eo-icon",
63
74
  "eo-link",
@@ -95,14 +106,6 @@
95
106
  "eo-sidebar-menu-group",
96
107
  "eo-sidebar-menu-submenu"
97
108
  ],
98
- "eo-sidebar-sub-menu": [
99
- "eo-icon",
100
- "eo-menu",
101
- "eo-menu-group",
102
- "eo-menu-item-sub-menu",
103
- "eo-menu-item",
104
- "eo-link"
105
- ],
106
109
  "eo-sidebar": [
107
110
  "eo-tooltip",
108
111
  "eo-icon",
@@ -111,40 +114,37 @@
111
114
  "eo-sidebar-menu-group",
112
115
  "eo-sidebar-menu-submenu"
113
116
  ],
114
- "eo-launchpad-button": [
117
+ "eo-sidebar-sub-menu": [
115
118
  "eo-icon",
119
+ "eo-menu",
120
+ "eo-menu-group",
121
+ "eo-menu-item-sub-menu",
122
+ "eo-menu-item",
116
123
  "eo-link"
117
124
  ],
118
- "eo-launchpad-button-v2": [
119
- "basic.lock-body-scroll",
120
- "eo-icon",
121
- "eo-link",
122
- "basic.show-dialog",
123
- "basic.show-notification"
124
- ],
125
125
  "eo-directory": [
126
126
  "eo-icon",
127
127
  "eo-tooltip"
128
128
  ],
129
- "eo-directory-tree-leaf": [
130
- "eo-icon"
131
- ],
132
129
  "eo-directory-tree": [
133
130
  "eo-search",
134
131
  "eo-directory-tree-leaf",
135
132
  "eo-directory-tree-internal-node",
136
133
  "eo-icon"
137
134
  ],
138
- "eo-directory-tree-internal-node": [
135
+ "eo-directory-tree-leaf": [
139
136
  "eo-icon"
140
137
  ],
141
- "nav.poll-announce": [
142
- "basic.show-notification"
138
+ "eo-directory-tree-internal-node": [
139
+ "eo-icon"
143
140
  ],
144
141
  "nav.nav-logo": [
145
142
  "eo-icon",
146
143
  "eo-link"
147
144
  ],
145
+ "nav.poll-announce": [
146
+ "basic.show-notification"
147
+ ],
148
148
  "nav.query-search": [
149
149
  "eo-icon",
150
150
  "eo-button",
@@ -152,5 +152,5 @@
152
152
  "eo-tooltip"
153
153
  ]
154
154
  },
155
- "filePath": "bricks/nav/dist/index.356e8b34.js"
155
+ "filePath": "bricks/nav/dist/index.7434eac1.js"
156
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunks/6502.ac50fc1b.js","mappings":"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","sources":["webpack:///./src/shared/DeferredService.ts","webpack:///./src/launchpad-button-v2/wrapped-bricks.ts","webpack:///./src/launchpad-button-v2/i18n.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///./src/launchpad-button-v2/constants.ts","webpack:///./src/launchpad-button-v2/api.ts","webpack:///./src/launchpad-button-v2/search.ts","webpack:///./src/launchpad-button-v2/useLaunchpadInfo.ts"],"sourcesContent":["export class DeferredService {\n private preFetchId: number | null = null;\n private preFetchScheduled = false;\n private firstFetchPromise: Promise<unknown> | null = null;\n private isFetching = false;\n private readonly task: () => Promise<unknown>;\n\n constructor(task: () => Promise<unknown>) {\n this.task = task;\n }\n\n schedulePrefetch(): void {\n if (!this.preFetchScheduled) {\n this.preFetchScheduled = true;\n const preFetchLaunchpadInfo = async (): Promise<void> => {\n this.preFetchId = null;\n this.fetch();\n };\n // istanbul ignore if\n if (typeof window.requestIdleCallback === \"function\") {\n this.preFetchId = window.requestIdleCallback(preFetchLaunchpadInfo);\n } else {\n this.preFetchId = setTimeout(\n preFetchLaunchpadInfo\n ) as unknown as number;\n }\n }\n }\n\n fetch(eager?: boolean): Promise<unknown> {\n if (this.preFetchId) {\n // istanbul ignore if\n if (typeof window.cancelIdleCallback === \"function\") {\n cancelIdleCallback(this.preFetchId);\n } else {\n clearTimeout(this.preFetchId);\n }\n this.preFetchId = null;\n }\n\n let promise: Promise<unknown>;\n if (!this.isFetching || eager) {\n this.isFetching = true;\n promise = this.task();\n promise\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(error);\n this.firstFetchPromise = null;\n })\n .finally(() => {\n this.isFetching = false;\n });\n if (!this.firstFetchPromise) {\n this.firstFetchPromise = promise;\n }\n if (eager) {\n return promise;\n }\n }\n return this.firstFetchPromise!;\n }\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\nimport type { showNotification as _showNotification } from \"@next-bricks/basic/data-providers/show-notification/show-notification\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\n// Use `unwrapProvider` to get the original function of a provider\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n\nexport const showNotification = unwrapProvider<typeof _showNotification>(\n \"basic.show-notification\"\n);\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n ALL = \"ALL\",\n QUICK_ACCESS = \"QUICK_ACCESS\",\n PLATFORM_BASE = \"PLATFORM_BASE\",\n SCENARIO_CENTER = \"SCENARIO_CENTER\",\n SOLUTIONS = \"SOLUTIONS\",\n OPEN_PLATFORM = \"OPEN_PLATFORM\",\n SEARCH_PLACEHOLDER = \"SEARCH_PLACEHOLDER\",\n RECENT_VISITS = \"RECENT_VISITS\",\n FAVORITE = \"FAVORITE\",\n UNFAVORITE = \"UNFAVORITE\",\n FAVORITES_LIMIT_REACHED = \"FAVORITES_LIMIT_REACHED\",\n FAVORITES_LIMIT_MESSAGE = \"FAVORITES_LIMIT_MESSAGE\",\n}\n\nconst en: Locale = {\n ALL: \"All\",\n QUICK_ACCESS: \"Quick Access\",\n PLATFORM_BASE: \"Platform Base\",\n SCENARIO_CENTER: \"Scenario Center\",\n SOLUTIONS: \"Solutions\",\n OPEN_PLATFORM: \"Open Platform\",\n SEARCH_PLACEHOLDER: \"Search by keyword\",\n RECENT_VISITS: \"Recent Visits\",\n FAVORITE: \"Favorite\",\n UNFAVORITE: \"Unfavorite\",\n FAVORITES_LIMIT_REACHED: \"Favorites Limit Reached\",\n FAVORITES_LIMIT_MESSAGE:\n \"Current favorites count has reached the limit ({{count}} items). Please remove some favorites before adding new ones.\",\n};\n\nconst zh: Locale = {\n ALL: \"全部\",\n QUICK_ACCESS: \"快捷访问\",\n PLATFORM_BASE: \"平台底座\",\n SCENARIO_CENTER: \"场景中心\",\n SOLUTIONS: \"解决方案\",\n OPEN_PLATFORM: \"开放平台\",\n SEARCH_PLACEHOLDER: \"通过关键字搜索\",\n RECENT_VISITS: \"最近访问\",\n FAVORITE: \"收藏\",\n UNFAVORITE: \"取消收藏\",\n FAVORITES_LIMIT_REACHED: \"收藏数量已达上限\",\n FAVORITES_LIMIT_MESSAGE:\n \"当前收藏链接数量已达上限({{count}}个),请删除部分收藏后再添加。\",\n};\n\nexport const NS = \"bricks/nav/launchpad-button-v2\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import { i18nText } from \"@next-core/i18n\";\nimport type { AppLocales, I18nData } from \"@next-core/types\";\n\nexport function getLocaleName(locales?: AppLocales | undefined, name?: string) {\n if (!locales) {\n return name;\n }\n const i18nData = Object.fromEntries(\n Object.entries(locales)\n .filter(([_lang, resources]) => resources.name)\n .map(([lang, resources]) => [lang, resources.name])\n ) as I18nData;\n return i18nText(i18nData) ?? name;\n}\n","export const FAVORITES_LIMIT = 10;\nexport const RECENT_VISITS_LIMIT = 10;\n","import type { AppLocales, Storyboard } from \"@next-core/types\";\nimport { LaunchpadApi_getLaunchpadInfo } from \"@next-api-sdk/micro-app-standalone-sdk\";\nimport {\n LaunchpadApi_createCollectionV2,\n LaunchpadApi_deleteCollectionV2,\n LaunchpadApi_listCollectionV2,\n UserServiceModels,\n} from \"@next-api-sdk/user-service-sdk\";\nimport { InstanceApi_postSearchV3 } from \"@next-api-sdk/cmdb-sdk\";\nimport { sortBy } from \"lodash\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport type {\n FavMenuItem,\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataDir,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\n PlatformCategoryItem,\n} from \"./interfaces\";\nimport { FAVORITES_LIMIT } from \"./constants\";\nimport { getLocaleName } from \"../shared/getLocaleName\";\nimport { K, NS, t, locales } from \"./i18n\";\n\ninitializeReactI18n(NS, locales);\n\nexport async function fetchLaunchpadInfo() {\n const launchpadInfo = await LaunchpadApi_getLaunchpadInfo(\n {},\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n );\n\n const microAppsById = new Map<string, MicroAppWithInstanceId>();\n for (const storyboard of launchpadInfo.storyboards as Storyboard[]) {\n const app = storyboard.app as unknown as MicroAppWithInstanceId;\n app.localeName = getLocaleName(app.locales, app.name);\n if (!auth.isBlockedPath?.(app.homepage)) {\n microAppsById.set(app.id, app);\n }\n }\n\n const menuGroups: MenuGroupData[] = [];\n const customLinksById = new Map<string, MenuItemDataCustom>();\n\n for (const group of launchpadInfo.desktops as unknown as MenuGroupData[]) {\n const items: MenuItemData[] = [];\n for (const item of group.items) {\n item.localeName = getLocaleName(item.locales, item.name);\n switch (item.type) {\n case \"app\": {\n const app = microAppsById.get(item.id);\n if (app) {\n items.push({\n ...item,\n url: app.homepage,\n } as MenuItemDataApp);\n }\n break;\n }\n case \"custom\":\n if (!auth.isBlockedHref?.(item.url)) {\n items.push(item);\n customLinksById.set(item.id, item);\n }\n break;\n case \"dir\": {\n const subItems: MenuItemDataNormal[] = [];\n for (const subItem of item.items) {\n subItem.localeName = getLocaleName(subItem.locales, subItem.name);\n if (subItem.type === \"app\") {\n const app = microAppsById.get(subItem.id);\n if (app) {\n subItems.push({\n ...subItem,\n url: app.homepage,\n } as MenuItemDataApp);\n }\n } else if (\n subItem.type === \"custom\" &&\n !auth.isBlockedHref?.(subItem.url)\n ) {\n subItems.push(subItem as MenuItemDataCustom);\n customLinksById.set(subItem.id, subItem);\n }\n }\n if (subItems.length > 0) {\n items.push({\n ...item,\n items: subItems,\n } as MenuItemDataDir);\n }\n break;\n }\n }\n }\n if (items.length > 0) {\n group.localeName = getLocaleName(group.locales, group.name);\n menuGroups.push({ ...group, items });\n }\n }\n\n return { menuGroups, microAppsById, customLinksById };\n}\n\nasync function fetchRawFavorites() {\n return (\n await LaunchpadApi_listCollectionV2(\n { page: 1, pageSize: FAVORITES_LIMIT },\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n )\n ).list;\n}\n\nexport async function fetchFavorites() {\n const list = await fetchRawFavorites();\n const stored: FavMenuItem[] = [];\n // 不屏蔽收藏夹中的任何项,否则无法取消收藏\n for (const fav of list) {\n if (fav.type === \"microApp\") {\n const app = fav.relatedApp as Omit<MicroAppWithInstanceId, \"id\"> & {\n appId: string;\n };\n const localeName = getLocaleName(app.locales, app.name);\n stored.push({\n favoriteId: fav.instanceId,\n type: \"app\",\n name: localeName,\n id: app.appId,\n url: app.homepage,\n instanceId: app.instanceId,\n menuIcon: app.menuIcon,\n } as FavMenuItem);\n } else if (fav.type === \"customItem\") {\n const customItem = fav.relatedCustomItem!;\n const localeName = getLocaleName(\n (\n customItem as UserServiceModels.ModelLaunchpadCollectionV2_relatedCustomItem & {\n locales?: AppLocales;\n }\n ).locales,\n customItem.name\n );\n stored.push({\n favoriteId: fav.instanceId,\n type: \"custom\",\n name: localeName,\n id: customItem.id,\n url: customItem.url,\n menuIcon: customItem.menuIcon,\n } as FavMenuItem);\n } else if (fav.type === \"link\") {\n stored.push({\n favoriteId: fav.instanceId,\n type: \"link\",\n name: fav.name,\n // id: fav.id,\n url: fav.link,\n menuIcon: fav.icon,\n } as FavMenuItem);\n }\n }\n return stored;\n}\n\nexport async function favorite(\n item: MenuItemDataNormal\n): Promise<{ instanceId?: string }> {\n return LaunchpadApi_createCollectionV2(\n {\n type: item.type === \"app\" ? \"microApp\" : \"customItem\",\n relatedInstanceId: item.instanceId,\n },\n {\n interceptorParams: { ignoreLoadingBar: true },\n }\n );\n}\n\nexport async function undoFavorite(item: FavMenuItem) {\n if (item.favoriteId) {\n return LaunchpadApi_deleteCollectionV2(item.favoriteId);\n }\n\n return fetchRawFavorites().then((list) => {\n const foundId = list.find((fav) =>\n item.type === \"app\"\n ? fav.type === \"microApp\" && fav.relatedApp?.appId === item.id\n : item.type === \"custom\" && fav.relatedCustomItem?.id === item.id\n )?.instanceId;\n\n if (foundId) {\n return LaunchpadApi_deleteCollectionV2(foundId);\n }\n // eslint-disable-next-line no-console\n console.error(\"Menu item to unstar not found:\", item);\n });\n}\n\nexport async function fetchPlatformCategories(): Promise<\n PlatformCategoryItem[]\n> {\n const categories = (\n await InstanceApi_postSearchV3(\"MICRO_APP_CATEGORY@EASYOPS\", {\n fields: [\n \"id\",\n \"type\",\n \"name\",\n \"locales\",\n \"icon\",\n \"order\",\n \"platformApps.appId\",\n \"platformApps.name\",\n \"platformApps.locales\",\n \"platformApps.homepage\",\n \"platformApps.description\",\n \"platformApps.menuIcon\",\n \"platformApps._object_id\",\n \"platformApps.@.order\",\n \"platformItems.id\",\n \"platformItems.name\",\n \"platformItems.locales\",\n \"platformItems.url\",\n \"platformItems.description\",\n \"platformItems.menuIcon\",\n \"platformItems._object_id\",\n \"platformItems.@.order\",\n ],\n page: 1,\n page_size: 300,\n query: {\n type: \"platform\",\n },\n })\n ).list;\n\n const _categories = categories?.map((category) => {\n const apps = category.platformApps\n .map((app: Record<string, any>) => {\n if (auth.isBlockedPath?.(app.homepage)) {\n return null;\n }\n return {\n type: \"app\",\n name: getLocaleName(app.locales, app.name),\n id: app.appId,\n url: app.homepage,\n menuIcon: app.menuIcon,\n description: app.description,\n instanceId: app.instanceId,\n order: app[\"@\"]?.order,\n };\n })\n .filter(Boolean) as MenuItemDataApp[];\n const customItems = category.platformItems\n .map((item: Record<string, any>) => {\n if (auth.isBlockedHref?.(item.url)) {\n return null;\n }\n return {\n type: \"custom\",\n name: getLocaleName(item.locales, item.name),\n id: item.id,\n url: item.url,\n menuIcon: item.menuIcon,\n description: item.description,\n instanceId: item.instanceId,\n order: item[\"@\"]?.order,\n };\n })\n .filter(Boolean) as MenuItemDataCustom[];\n\n const items = sortBy([...apps, ...customItems], \"order\");\n return {\n instanceId: category.instanceId,\n id: category.id,\n name: getLocaleName(category.locales, category.name),\n icon: category.icon,\n order: category.order,\n items,\n } as PlatformCategoryItem;\n });\n\n return [\n {\n id: \"#all\",\n name: t(K.ALL),\n icon: {\n lib: \"easyops\",\n category: \"second-menu\",\n icon: \"sprint-planning-second-menu\",\n },\n items: [],\n },\n ...sortBy(_categories, \"order\"),\n ];\n}\n","import type {\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataNormal,\n PlatformCategoryItem,\n} from \"./interfaces\";\n\nexport function search(\n allMenuGroups: MenuGroupData[],\n q: string\n): MenuGroupData[] {\n if (!q) {\n return allMenuGroups;\n }\n const lowerQ = q.toLowerCase();\n const groups: MenuGroupData[] = allMenuGroups\n .map((group) => ({\n ...group,\n items: group.items\n .map((item) => {\n switch (item.type) {\n case \"app\":\n return matchMenuItem<MenuItemDataApp>(item, lowerQ);\n case \"custom\":\n return matchMenuItem<MenuItemDataCustom>(item, lowerQ);\n case \"dir\": {\n const filteredSubItems = item.items\n .map((sub) =>\n sub.type === \"app\"\n ? matchMenuItem<MenuItemDataApp>(sub, lowerQ)\n : sub.type === \"custom\"\n ? matchMenuItem<MenuItemDataCustom>(sub, lowerQ)\n : null\n )\n .filter(Boolean) as MenuItemData[];\n return filteredSubItems.length > 0\n ? {\n ...item,\n items: filteredSubItems,\n }\n : null;\n }\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemData[],\n }))\n // ignore empty desktops\n .filter((group) => group.items.length > 0);\n return groups;\n}\n\nexport function searchCategories(\n categories: PlatformCategoryItem[],\n q: string\n): PlatformCategoryItem[] {\n if (!q) {\n return categories;\n }\n\n const lowerQ = q.toLowerCase();\n const _categories = categories.map((category) => ({\n ...category,\n items: category.items\n .map((item) => {\n switch (item.type) {\n case \"app\":\n return matchMenuItem<MenuItemDataApp>(item, lowerQ);\n case \"custom\":\n return matchMenuItem<MenuItemDataCustom>(item, lowerQ);\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemDataNormal[],\n }));\n return _categories;\n}\n\ntype MenuItemBase = {\n id: string;\n name: string;\n localeName?: string;\n description?: string;\n};\n\nfunction matchMenuItem<T extends MenuItemBase>(\n item: T,\n lowerQ: string\n): T | null {\n const { id, name, localeName, description } = item;\n return [id, name, localeName, description].some((field) =>\n field?.toLowerCase().includes(lowerQ)\n )\n ? item\n : null;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getRuntime,\n handleHttpError,\n httpErrorToString,\n} from \"@next-core/runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { initializeReactI18n, useTranslation } from \"@next-core/i18n/react\";\nimport { DeferredService } from \"../shared/DeferredService\";\nimport { showDialog, showNotification } from \"./wrapped-bricks\";\nimport { K, NS, locales } from \"./i18n\";\nimport type {\n FavMenuItem,\n MenuGroupData,\n MenuItemDataCustom,\n MenuItemDataLink,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\n PlatformCategoryItem,\n StoredMenuItem,\n} from \"./interfaces\";\nimport {\n favorite,\n fetchFavorites,\n fetchLaunchpadInfo,\n fetchPlatformCategories,\n undoFavorite,\n} from \"./api\";\nimport { search, searchCategories } from \"./search\";\nimport { FAVORITES_LIMIT, RECENT_VISITS_LIMIT } from \"./constants\";\n\ninitializeReactI18n(NS, locales);\n\nconst storageKey = `launchpad-recent-visits:${\n (auth.getAuth() as Record<string, string>)?.org\n}`;\nconst storage = new JsonStorage(localStorage);\n\nlet candidateDesktops: MenuGroupData[] = [];\nlet candidateMicroAppsById = new Map<string, MicroAppWithInstanceId>();\nlet candidateCustomLinksById = new Map<string, MenuItemDataCustom>();\nlet preLoaded = false;\n\nlet candidateFavorites: FavMenuItem[] = [];\nlet preLoadedFavorites = false;\n\nlet candidatePlatformCategories: PlatformCategoryItem[] = [];\nlet preLoadedPlatformCategories = false;\n\nexport const deferredLaunchpadInfo = new DeferredService(async () => {\n ({\n menuGroups: candidateDesktops,\n microAppsById: candidateMicroAppsById,\n customLinksById: candidateCustomLinksById,\n } = await fetchLaunchpadInfo());\n preLoaded = true;\n});\n\nexport const deferredFavorites = new DeferredService(async () => {\n candidateFavorites = await fetchFavorites();\n preLoadedFavorites = true;\n});\n\nexport const deferredPlatformCategories = new DeferredService(async () => {\n candidatePlatformCategories = await fetchPlatformCategories();\n preLoadedPlatformCategories = true;\n});\n\nconst showErrorAsNotification = (error: unknown) =>\n showNotification({\n type: \"error\",\n message: httpErrorToString(error),\n });\n\n/**\n * - 页面初始化时预加载 launchpad 信息。\n * - 每次打开 launchpad 都发起请求,但该请求的数据只在下次打开 launchpad 时使用。\n * 即每次打开 launchpad 使用的都是上一次获取的数据,以便达到两个效果:\n * - 每次打开 launchpad 都能立即显示菜单列表;\n * - 同时当用户在 launchpad 上操作时,不会出现数据突然更新(新数据请求完成)。\n */\nexport function useLaunchpadInfo(active?: boolean) {\n const { t } = useTranslation(NS);\n const [desktops, setDesktops] = useState(candidateDesktops);\n const [microAppsById, setMicroAppsById] = useState(candidateMicroAppsById);\n const [customLinksById, setCustomLinksById] = useState(\n candidateCustomLinksById\n );\n\n const [q, setQ] = useState(\"\");\n\n const [loading, setLoading] = useState(!preLoaded);\n const [loadingFavorites, setLoadingFavorites] = useState(!preLoadedFavorites);\n const [loadingPlatformCategories, setLoadingPlatformCategories] = useState(\n !preLoadedPlatformCategories\n );\n\n const [storedRecentVisits, setStoredRecentVisits] = useState<\n StoredMenuItem[]\n >([]);\n\n const [recentVisits, setRecentVisits] = useState<MenuItemDataNormal[]>([]);\n\n const [favorites, setFavorites] = useState<FavMenuItem[]>(candidateFavorites);\n const [platformCategories, setPlatformCategories] = useState<\n PlatformCategoryItem[]\n >(candidatePlatformCategories);\n\n useEffect(() => {\n // 仅当首次加载完成或重新打开 launchpad 时更新一次数据。\n if (active && !loading) {\n setDesktops(candidateDesktops);\n setMicroAppsById(candidateMicroAppsById);\n setCustomLinksById(candidateCustomLinksById);\n }\n }, [active, loading]);\n\n useEffect(() => {\n if (active && !loadingFavorites) {\n setFavorites(candidateFavorites);\n }\n }, [active, loadingFavorites]);\n\n useEffect(() => {\n if (active && !loadingPlatformCategories) {\n setPlatformCategories(candidatePlatformCategories);\n }\n }, [active, loadingPlatformCategories]);\n\n useEffect(() => {\n if (active) {\n setStoredRecentVisits(storage.getItem(storageKey) ?? []);\n }\n }, [active]);\n\n useEffect(() => {\n if (active) {\n const startFetchLaunchpadInfo = async (): Promise<void> => {\n try {\n await deferredLaunchpadInfo.fetch();\n setLoading(false);\n } catch (error) {\n handleHttpError(error);\n }\n };\n startFetchLaunchpadInfo();\n }\n }, [active]);\n\n useEffect(() => {\n if (active) {\n const startFetchFavorites = async (): Promise<void> => {\n try {\n await deferredFavorites.fetch();\n setLoadingFavorites(false);\n } catch (error) {\n setLoadingFavorites(false);\n showErrorAsNotification(error);\n }\n };\n startFetchFavorites();\n }\n }, [active]);\n\n useEffect(() => {\n if (\n active &&\n getRuntime()?.getFeatureFlags()[\"launchpad-show-platform-category\"]\n ) {\n const startFetchPlatformCategories = async (): Promise<void> => {\n try {\n await deferredPlatformCategories.fetch();\n setLoadingPlatformCategories(false);\n } catch (error) {\n setLoadingPlatformCategories(false);\n showErrorAsNotification(error);\n }\n };\n startFetchPlatformCategories();\n }\n }, [active]);\n\n useEffect(() => {\n if (loading) {\n return;\n }\n const visits = storedRecentVisits\n .map((item) => {\n // Remembered recent visits maybe no longer existed in launchpad\n if (item.type === \"app\") {\n const app = microAppsById.get(item.id);\n return app\n ? {\n type: \"app\",\n name: app.localeName,\n id: app.id,\n url: app.homepage,\n instanceId: app.instanceId,\n menuIcon: app.menuIcon,\n }\n : null;\n }\n\n const link = customLinksById.get(item.id);\n return link\n ? {\n ...link,\n name: link.localeName,\n }\n : null;\n })\n .filter(Boolean) as MenuItemDataNormal[];\n setRecentVisits(visits);\n }, [customLinksById, loading, microAppsById, storedRecentVisits]);\n\n const pushRecentVisit = useCallback(({ type, id }: StoredMenuItem) => {\n const visits: StoredMenuItem[] = storage.getItem(storageKey) ?? [];\n const index = visits.findIndex(\n (visit) => visit.type === type && visit.id === id\n );\n if (index > -1) {\n visits.splice(index, 1);\n }\n visits.unshift({ type, id });\n if (visits.length > RECENT_VISITS_LIMIT) {\n visits.pop();\n }\n // setStoredRecentVisits(visits);\n storage.setItem(storageKey, visits);\n }, []);\n\n const isStarred = useCallback(\n (item: MenuItemDataNormal) =>\n favorites.some((fav) => matchFavorite(item, fav)),\n [favorites]\n );\n\n const toggleStar = useCallback(\n (item: MenuItemDataNormal | MenuItemDataLink) => {\n const index = favorites.findIndex((fav) =>\n item.type === \"link\"\n ? fav.favoriteId === item.favoriteId\n : matchFavorite(item, fav)\n );\n let newFavorites: FavMenuItem[];\n if (index > -1) {\n const removed = favorites[index];\n newFavorites = favorites\n .slice(0, index)\n .concat(favorites.slice(index + 1));\n undoFavorite(removed).catch(showErrorAsNotification);\n } else {\n if (favorites.length >= FAVORITES_LIMIT) {\n showDialog({\n type: \"warn\",\n title: t(K.FAVORITES_LIMIT_REACHED) as string,\n content: t(K.FAVORITES_LIMIT_MESSAGE, { count: FAVORITES_LIMIT }),\n });\n return;\n }\n // Assert: no link item\n const fav: FavMenuItem = { ...(item as MenuItemDataNormal) };\n newFavorites = favorites.concat(fav);\n favorite(item as MenuItemDataNormal).then((result) => {\n if (result) {\n fav.favoriteId = result.instanceId;\n }\n }, showErrorAsNotification);\n }\n setFavorites(newFavorites);\n candidateFavorites = newFavorites;\n },\n [favorites]\n );\n\n const menuGroups: MenuGroupData[] = useMemo(\n () => search(desktops, q),\n [desktops, q]\n );\n\n const filteredPlatformCategories: PlatformCategoryItem[] = useMemo(\n () => searchCategories(platformCategories, q),\n [platformCategories, q]\n );\n\n return {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n loadingPlatformCategories,\n favorites,\n recentVisits,\n pushRecentVisit,\n isStarred,\n toggleStar,\n platformCategories: filteredPlatformCategories,\n };\n}\n\nexport function matchFavorite(item: MenuItemDataNormal, fav: FavMenuItem) {\n return item.instanceId && fav.instanceId\n ? fav.instanceId === item.instanceId\n : fav.type === item.type && fav.id === item.id;\n}\n"],"names":["DeferredService","constructor","task","_defineProperty","this","schedulePrefetch","preFetchScheduled","preFetchLaunchpadInfo","async","preFetchId","fetch","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","catch","error","console","firstFetchPromise","finally","WrappedIcon","wrapBrick","WrappedLink","showDialog","unwrapProvider","showNotification","K","NS","locales","en","ALL","QUICK_ACCESS","PLATFORM_BASE","SCENARIO_CENTER","SOLUTIONS","OPEN_PLATFORM","SEARCH_PLACEHOLDER","RECENT_VISITS","FAVORITE","UNFAVORITE","FAVORITES_LIMIT_REACHED","FAVORITES_LIMIT_MESSAGE","zh","t","i18n","getFixedT","getLocaleName","name","_i18nText","i18nData","Object","fromEntries","entries","filter","_ref","_lang","resources","map","_ref2","lang","i18nText","FAVORITES_LIMIT","RECENT_VISITS_LIMIT","fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","matchMenuItem","item","lowerQ","id","localeName","description","some","field","toLowerCase","includes","initializeReactI18n","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","Map","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","candidatePlatformCategories","preLoadedPlatformCategories","deferredLaunchpadInfo","menuGroups","microAppsById","customLinksById","_auth$isBlockedHref","launchpadInfo","LaunchpadApi_getLaunchpadInfo","storyboard","storyboards","_auth$isBlockedPath","app","isBlockedPath","call","homepage","set","group","desktops","items","type","get","push","url","isBlockedHref","subItems","subItem","_auth$isBlockedHref2","length","fetchLaunchpadInfo","deferredFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","menuIcon","customItem","relatedCustomItem","link","icon","fetchFavorites","deferredPlatformCategories","categories","InstanceApi_postSearchV3","fields","page_size","query","_categories","category","apps","platformApps","_auth$isBlockedPath2","_app$","order","Boolean","customItems","platformItems","_auth$isBlockedHref3","_item$","sortBy","lib","fetchPlatformCategories","showErrorAsNotification","message","httpErrorToString","useLaunchpadInfo","active","useTranslation","setDesktops","useState","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","loadingFavorites","setLoadingFavorites","loadingPlatformCategories","setLoadingPlatformCategories","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","platformCategories","setPlatformCategories","useEffect","_storage$getItem","getItem","handleHttpError","startFetchLaunchpadInfo","startFetchFavorites","_getRuntime","getRuntime","getFeatureFlags","startFetchPlatformCategories","visits","pushRecentVisit","useCallback","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","isStarred","matchFavorite","toggleStar","newFavorites","removed","slice","concat","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","undoFavorite","title","content","count","LaunchpadApi_createCollectionV2","relatedInstanceId","favorite","result","useMemo","allMenuGroups","filteredSubItems","sub","search","filteredPlatformCategories","searchCategories"],"sourceRoot":""}
1
+ {"version":3,"file":"chunks/6502.ac50fc1b.js","mappings":"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","sources":["webpack:///./src/shared/DeferredService.ts","webpack:///./src/launchpad-button-v2/wrapped-bricks.ts","webpack:///./src/launchpad-button-v2/i18n.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///./src/launchpad-button-v2/constants.ts","webpack:///./src/launchpad-button-v2/api.ts","webpack:///./src/launchpad-button-v2/search.ts","webpack:///./src/launchpad-button-v2/useLaunchpadInfo.ts"],"sourcesContent":["export class DeferredService {\n private preFetchId: number | null = null;\n private preFetchScheduled = false;\n private firstFetchPromise: Promise<unknown> | null = null;\n private isFetching = false;\n private readonly task: () => Promise<unknown>;\n\n constructor(task: () => Promise<unknown>) {\n this.task = task;\n }\n\n schedulePrefetch(): void {\n if (!this.preFetchScheduled) {\n this.preFetchScheduled = true;\n const preFetchLaunchpadInfo = async (): Promise<void> => {\n this.preFetchId = null;\n this.fetch();\n };\n // istanbul ignore if\n if (typeof window.requestIdleCallback === \"function\") {\n this.preFetchId = window.requestIdleCallback(preFetchLaunchpadInfo);\n } else {\n this.preFetchId = setTimeout(\n preFetchLaunchpadInfo\n ) as unknown as number;\n }\n }\n }\n\n fetch(eager?: boolean): Promise<unknown> {\n if (this.preFetchId) {\n // istanbul ignore if\n if (typeof window.cancelIdleCallback === \"function\") {\n cancelIdleCallback(this.preFetchId);\n } else {\n clearTimeout(this.preFetchId);\n }\n this.preFetchId = null;\n }\n\n let promise: Promise<unknown>;\n if (!this.isFetching || eager) {\n this.isFetching = true;\n promise = this.task();\n promise\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(error);\n this.firstFetchPromise = null;\n })\n .finally(() => {\n this.isFetching = false;\n });\n if (!this.firstFetchPromise) {\n this.firstFetchPromise = promise;\n }\n if (eager) {\n return promise;\n }\n }\n return this.firstFetchPromise!;\n }\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\nimport type { showNotification as _showNotification } from \"@next-bricks/basic/data-providers/show-notification/show-notification\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\n// Use `unwrapProvider` to get the original function of a provider\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n\nexport const showNotification = unwrapProvider<typeof _showNotification>(\n \"basic.show-notification\"\n);\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n ALL = \"ALL\",\n QUICK_ACCESS = \"QUICK_ACCESS\",\n PLATFORM_BASE = \"PLATFORM_BASE\",\n SCENARIO_CENTER = \"SCENARIO_CENTER\",\n SOLUTIONS = \"SOLUTIONS\",\n OPEN_PLATFORM = \"OPEN_PLATFORM\",\n SEARCH_PLACEHOLDER = \"SEARCH_PLACEHOLDER\",\n RECENT_VISITS = \"RECENT_VISITS\",\n FAVORITE = \"FAVORITE\",\n UNFAVORITE = \"UNFAVORITE\",\n FAVORITES_LIMIT_REACHED = \"FAVORITES_LIMIT_REACHED\",\n FAVORITES_LIMIT_MESSAGE = \"FAVORITES_LIMIT_MESSAGE\",\n}\n\nconst en: Locale = {\n ALL: \"All\",\n QUICK_ACCESS: \"Quick Access\",\n PLATFORM_BASE: \"Platform Base\",\n SCENARIO_CENTER: \"Scenario Center\",\n SOLUTIONS: \"Solutions\",\n OPEN_PLATFORM: \"Open Platform\",\n SEARCH_PLACEHOLDER: \"Search by keyword\",\n RECENT_VISITS: \"Recent Visits\",\n FAVORITE: \"Favorite\",\n UNFAVORITE: \"Unfavorite\",\n FAVORITES_LIMIT_REACHED: \"Favorites Limit Reached\",\n FAVORITES_LIMIT_MESSAGE:\n \"Current favorites count has reached the limit ({{count}} items). Please remove some favorites before adding new ones.\",\n};\n\nconst zh: Locale = {\n ALL: \"全部\",\n QUICK_ACCESS: \"快捷访问\",\n PLATFORM_BASE: \"平台底座\",\n SCENARIO_CENTER: \"场景中心\",\n SOLUTIONS: \"解决方案\",\n OPEN_PLATFORM: \"开放平台\",\n SEARCH_PLACEHOLDER: \"通过关键字搜索\",\n RECENT_VISITS: \"最近访问\",\n FAVORITE: \"收藏\",\n UNFAVORITE: \"取消收藏\",\n FAVORITES_LIMIT_REACHED: \"收藏数量已达上限\",\n FAVORITES_LIMIT_MESSAGE:\n \"当前收藏链接数量已达上限({{count}}个),请删除部分收藏后再添加。\",\n};\n\nexport const NS = \"bricks/nav/launchpad-button-v2\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import { i18nText } from \"@next-core/i18n\";\nimport type { AppLocales, I18nData } from \"@next-core/types\";\n\nexport function getLocaleName(locales?: AppLocales | undefined, name?: string) {\n if (!locales) {\n return name;\n }\n const i18nData = Object.fromEntries(\n Object.entries(locales)\n .filter(([_lang, resources]) => resources.name)\n .map(([lang, resources]) => [lang, resources.name])\n ) as I18nData;\n return i18nText(i18nData) ?? name;\n}\n","export const FAVORITES_LIMIT = 10;\nexport const RECENT_VISITS_LIMIT = 10;\n","import type { AppLocales, Storyboard } from \"@next-core/types\";\nimport { LaunchpadApi_getLaunchpadInfo } from \"@next-api-sdk/micro-app-standalone-sdk\";\nimport {\n LaunchpadApi_createCollectionV2,\n LaunchpadApi_deleteCollectionV2,\n LaunchpadApi_listCollectionV2,\n UserServiceModels,\n} from \"@next-api-sdk/user-service-sdk\";\nimport { InstanceApi_postSearchV3 } from \"@next-api-sdk/cmdb-sdk\";\nimport { sortBy } from \"lodash\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport type {\n FavMenuItem,\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataDir,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\n PlatformCategoryItem,\n} from \"./interfaces\";\nimport { FAVORITES_LIMIT } from \"./constants\";\nimport { getLocaleName } from \"../shared/getLocaleName\";\nimport { K, NS, t, locales } from \"./i18n\";\n\ninitializeReactI18n(NS, locales);\n\nexport async function fetchLaunchpadInfo() {\n const launchpadInfo = await LaunchpadApi_getLaunchpadInfo(\n {},\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n );\n\n const microAppsById = new Map<string, MicroAppWithInstanceId>();\n for (const storyboard of launchpadInfo.storyboards as Storyboard[]) {\n const app = storyboard.app as unknown as MicroAppWithInstanceId;\n app.localeName = getLocaleName(app.locales, app.name);\n if (!auth.isBlockedPath?.(app.homepage)) {\n microAppsById.set(app.id, app);\n }\n }\n\n const menuGroups: MenuGroupData[] = [];\n const customLinksById = new Map<string, MenuItemDataCustom>();\n\n for (const group of launchpadInfo.desktops as unknown as MenuGroupData[]) {\n const items: MenuItemData[] = [];\n for (const item of group.items) {\n item.localeName = getLocaleName(item.locales, item.name);\n switch (item.type) {\n case \"app\": {\n const app = microAppsById.get(item.id);\n if (app) {\n items.push({\n ...item,\n url: app.homepage,\n } as MenuItemDataApp);\n }\n break;\n }\n case \"custom\":\n if (!auth.isBlockedHref?.(item.url)) {\n items.push(item);\n customLinksById.set(item.id, item);\n }\n break;\n case \"dir\": {\n const subItems: MenuItemDataNormal[] = [];\n for (const subItem of item.items) {\n subItem.localeName = getLocaleName(subItem.locales, subItem.name);\n if (subItem.type === \"app\") {\n const app = microAppsById.get(subItem.id);\n if (app) {\n subItems.push({\n ...subItem,\n url: app.homepage,\n } as MenuItemDataApp);\n }\n } else if (\n subItem.type === \"custom\" &&\n !auth.isBlockedHref?.(subItem.url)\n ) {\n subItems.push(subItem as MenuItemDataCustom);\n customLinksById.set(subItem.id, subItem);\n }\n }\n if (subItems.length > 0) {\n items.push({\n ...item,\n items: subItems,\n } as MenuItemDataDir);\n }\n break;\n }\n }\n }\n if (items.length > 0) {\n group.localeName = getLocaleName(group.locales, group.name);\n menuGroups.push({ ...group, items });\n }\n }\n\n return { menuGroups, microAppsById, customLinksById };\n}\n\nasync function fetchRawFavorites() {\n return (\n await LaunchpadApi_listCollectionV2(\n { page: 1, pageSize: FAVORITES_LIMIT },\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n )\n ).list;\n}\n\nexport async function fetchFavorites() {\n const list = await fetchRawFavorites();\n const stored: FavMenuItem[] = [];\n // 不屏蔽收藏夹中的任何项,否则无法取消收藏\n for (const fav of list) {\n if (fav.type === \"microApp\") {\n const app = fav.relatedApp as Omit<MicroAppWithInstanceId, \"id\"> & {\n appId: string;\n };\n const localeName = getLocaleName(app.locales, app.name);\n stored.push({\n favoriteId: fav.instanceId,\n type: \"app\",\n name: localeName,\n id: app.appId,\n url: app.homepage,\n instanceId: app.instanceId,\n menuIcon: app.menuIcon,\n } as FavMenuItem);\n } else if (fav.type === \"customItem\") {\n const customItem = fav.relatedCustomItem!;\n const localeName = getLocaleName(\n (\n customItem as UserServiceModels.ModelLaunchpadCollectionV2_relatedCustomItem & {\n locales?: AppLocales;\n }\n ).locales,\n customItem.name\n );\n stored.push({\n favoriteId: fav.instanceId,\n type: \"custom\",\n name: localeName,\n id: customItem.id,\n url: customItem.url,\n menuIcon: customItem.menuIcon,\n } as FavMenuItem);\n } else if (fav.type === \"link\") {\n stored.push({\n favoriteId: fav.instanceId,\n type: \"link\",\n name: fav.name,\n // id: fav.id,\n url: fav.link,\n menuIcon: fav.icon,\n } as FavMenuItem);\n }\n }\n return stored;\n}\n\nexport async function favorite(\n item: MenuItemDataNormal\n): Promise<{ instanceId?: string }> {\n return LaunchpadApi_createCollectionV2(\n {\n type: item.type === \"app\" ? \"microApp\" : \"customItem\", //修改备注重新打包\n relatedInstanceId: item.instanceId,\n },\n {\n interceptorParams: { ignoreLoadingBar: true },\n }\n );\n}\n\nexport async function undoFavorite(item: FavMenuItem) {\n if (item.favoriteId) {\n return LaunchpadApi_deleteCollectionV2(item.favoriteId);\n }\n\n return fetchRawFavorites().then((list) => {\n const foundId = list.find((fav) =>\n item.type === \"app\"\n ? fav.type === \"microApp\" && fav.relatedApp?.appId === item.id\n : item.type === \"custom\" && fav.relatedCustomItem?.id === item.id\n )?.instanceId;\n\n if (foundId) {\n return LaunchpadApi_deleteCollectionV2(foundId);\n }\n // eslint-disable-next-line no-console\n console.error(\"Menu item to unstar not found:\", item);\n });\n}\n\nexport async function fetchPlatformCategories(): Promise<\n PlatformCategoryItem[]\n> {\n const categories = (\n await InstanceApi_postSearchV3(\"MICRO_APP_CATEGORY@EASYOPS\", {\n fields: [\n \"id\",\n \"type\",\n \"name\",\n \"locales\",\n \"icon\",\n \"order\",\n \"platformApps.appId\",\n \"platformApps.name\",\n \"platformApps.locales\",\n \"platformApps.homepage\",\n \"platformApps.description\",\n \"platformApps.menuIcon\",\n \"platformApps._object_id\",\n \"platformApps.@.order\",\n \"platformItems.id\",\n \"platformItems.name\",\n \"platformItems.locales\",\n \"platformItems.url\",\n \"platformItems.description\",\n \"platformItems.menuIcon\",\n \"platformItems._object_id\",\n \"platformItems.@.order\",\n ],\n page: 1,\n page_size: 300,\n query: {\n type: \"platform\",\n },\n })\n ).list;\n\n const _categories = categories?.map((category) => {\n const apps = category.platformApps\n .map((app: Record<string, any>) => {\n if (auth.isBlockedPath?.(app.homepage)) {\n return null;\n }\n return {\n type: \"app\",\n name: getLocaleName(app.locales, app.name),\n id: app.appId,\n url: app.homepage,\n menuIcon: app.menuIcon,\n description: app.description,\n instanceId: app.instanceId,\n order: app[\"@\"]?.order,\n };\n })\n .filter(Boolean) as MenuItemDataApp[];\n const customItems = category.platformItems\n .map((item: Record<string, any>) => {\n if (auth.isBlockedHref?.(item.url)) {\n return null;\n }\n return {\n type: \"custom\",\n name: getLocaleName(item.locales, item.name),\n id: item.id,\n url: item.url,\n menuIcon: item.menuIcon,\n description: item.description,\n instanceId: item.instanceId,\n order: item[\"@\"]?.order,\n };\n })\n .filter(Boolean) as MenuItemDataCustom[];\n\n const items = sortBy([...apps, ...customItems], \"order\");\n return {\n instanceId: category.instanceId,\n id: category.id,\n name: getLocaleName(category.locales, category.name),\n icon: category.icon,\n order: category.order,\n items,\n } as PlatformCategoryItem;\n });\n\n return [\n {\n id: \"#all\",\n name: t(K.ALL),\n icon: {\n lib: \"easyops\",\n category: \"second-menu\",\n icon: \"sprint-planning-second-menu\",\n },\n items: [],\n },\n ...sortBy(_categories, \"order\"),\n ];\n}\n","import type {\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataNormal,\n PlatformCategoryItem,\n} from \"./interfaces\";\n\nexport function search(\n allMenuGroups: MenuGroupData[],\n q: string\n): MenuGroupData[] {\n if (!q) {\n return allMenuGroups;\n }\n const lowerQ = q.toLowerCase();\n const groups: MenuGroupData[] = allMenuGroups\n .map((group) => ({\n ...group,\n items: group.items\n .map((item) => {\n switch (item.type) {\n case \"app\":\n return matchMenuItem<MenuItemDataApp>(item, lowerQ);\n case \"custom\":\n return matchMenuItem<MenuItemDataCustom>(item, lowerQ);\n case \"dir\": {\n const filteredSubItems = item.items\n .map((sub) =>\n sub.type === \"app\"\n ? matchMenuItem<MenuItemDataApp>(sub, lowerQ)\n : sub.type === \"custom\"\n ? matchMenuItem<MenuItemDataCustom>(sub, lowerQ)\n : null\n )\n .filter(Boolean) as MenuItemData[];\n return filteredSubItems.length > 0\n ? {\n ...item,\n items: filteredSubItems,\n }\n : null;\n }\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemData[],\n }))\n // ignore empty desktops\n .filter((group) => group.items.length > 0);\n return groups;\n}\n\nexport function searchCategories(\n categories: PlatformCategoryItem[],\n q: string\n): PlatformCategoryItem[] {\n if (!q) {\n return categories;\n }\n\n const lowerQ = q.toLowerCase();\n const _categories = categories.map((category) => ({\n ...category,\n items: category.items\n .map((item) => {\n switch (item.type) {\n case \"app\":\n return matchMenuItem<MenuItemDataApp>(item, lowerQ);\n case \"custom\":\n return matchMenuItem<MenuItemDataCustom>(item, lowerQ);\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemDataNormal[],\n }));\n return _categories;\n}\n\ntype MenuItemBase = {\n id: string;\n name: string;\n localeName?: string;\n description?: string;\n};\n\nfunction matchMenuItem<T extends MenuItemBase>(\n item: T,\n lowerQ: string\n): T | null {\n const { id, name, localeName, description } = item;\n return [id, name, localeName, description].some((field) =>\n field?.toLowerCase().includes(lowerQ)\n )\n ? item\n : null;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getRuntime,\n handleHttpError,\n httpErrorToString,\n} from \"@next-core/runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { initializeReactI18n, useTranslation } from \"@next-core/i18n/react\";\nimport { DeferredService } from \"../shared/DeferredService\";\nimport { showDialog, showNotification } from \"./wrapped-bricks\";\nimport { K, NS, locales } from \"./i18n\";\nimport type {\n FavMenuItem,\n MenuGroupData,\n MenuItemDataCustom,\n MenuItemDataLink,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\n PlatformCategoryItem,\n StoredMenuItem,\n} from \"./interfaces\";\nimport {\n favorite,\n fetchFavorites,\n fetchLaunchpadInfo,\n fetchPlatformCategories,\n undoFavorite,\n} from \"./api\";\nimport { search, searchCategories } from \"./search\";\nimport { FAVORITES_LIMIT, RECENT_VISITS_LIMIT } from \"./constants\";\n\ninitializeReactI18n(NS, locales);\n\nconst storageKey = `launchpad-recent-visits:${\n (auth.getAuth() as Record<string, string>)?.org\n}`;\nconst storage = new JsonStorage(localStorage);\n\nlet candidateDesktops: MenuGroupData[] = [];\nlet candidateMicroAppsById = new Map<string, MicroAppWithInstanceId>();\nlet candidateCustomLinksById = new Map<string, MenuItemDataCustom>();\nlet preLoaded = false;\n\nlet candidateFavorites: FavMenuItem[] = [];\nlet preLoadedFavorites = false;\n\nlet candidatePlatformCategories: PlatformCategoryItem[] = [];\nlet preLoadedPlatformCategories = false;\n\nexport const deferredLaunchpadInfo = new DeferredService(async () => {\n ({\n menuGroups: candidateDesktops,\n microAppsById: candidateMicroAppsById,\n customLinksById: candidateCustomLinksById,\n } = await fetchLaunchpadInfo());\n preLoaded = true;\n});\n\nexport const deferredFavorites = new DeferredService(async () => {\n candidateFavorites = await fetchFavorites();\n preLoadedFavorites = true;\n});\n\nexport const deferredPlatformCategories = new DeferredService(async () => {\n candidatePlatformCategories = await fetchPlatformCategories();\n preLoadedPlatformCategories = true;\n});\n\nconst showErrorAsNotification = (error: unknown) =>\n showNotification({\n type: \"error\",\n message: httpErrorToString(error),\n });\n\n/**\n * - 页面初始化时预加载 launchpad 信息。\n * - 每次打开 launchpad 都发起请求,但该请求的数据只在下次打开 launchpad 时使用。\n * 即每次打开 launchpad 使用的都是上一次获取的数据,以便达到两个效果:\n * - 每次打开 launchpad 都能立即显示菜单列表;\n * - 同时当用户在 launchpad 上操作时,不会出现数据突然更新(新数据请求完成)。\n */\nexport function useLaunchpadInfo(active?: boolean) {\n const { t } = useTranslation(NS);\n const [desktops, setDesktops] = useState(candidateDesktops);\n const [microAppsById, setMicroAppsById] = useState(candidateMicroAppsById);\n const [customLinksById, setCustomLinksById] = useState(\n candidateCustomLinksById\n );\n\n const [q, setQ] = useState(\"\");\n\n const [loading, setLoading] = useState(!preLoaded);\n const [loadingFavorites, setLoadingFavorites] = useState(!preLoadedFavorites);\n const [loadingPlatformCategories, setLoadingPlatformCategories] = useState(\n !preLoadedPlatformCategories\n );\n\n const [storedRecentVisits, setStoredRecentVisits] = useState<\n StoredMenuItem[]\n >([]);\n\n const [recentVisits, setRecentVisits] = useState<MenuItemDataNormal[]>([]);\n\n const [favorites, setFavorites] = useState<FavMenuItem[]>(candidateFavorites);\n const [platformCategories, setPlatformCategories] = useState<\n PlatformCategoryItem[]\n >(candidatePlatformCategories);\n\n useEffect(() => {\n // 仅当首次加载完成或重新打开 launchpad 时更新一次数据。\n if (active && !loading) {\n setDesktops(candidateDesktops);\n setMicroAppsById(candidateMicroAppsById);\n setCustomLinksById(candidateCustomLinksById);\n }\n }, [active, loading]);\n\n useEffect(() => {\n if (active && !loadingFavorites) {\n setFavorites(candidateFavorites);\n }\n }, [active, loadingFavorites]);\n\n useEffect(() => {\n if (active && !loadingPlatformCategories) {\n setPlatformCategories(candidatePlatformCategories);\n }\n }, [active, loadingPlatformCategories]);\n\n useEffect(() => {\n if (active) {\n setStoredRecentVisits(storage.getItem(storageKey) ?? []);\n }\n }, [active]);\n\n useEffect(() => {\n if (active) {\n const startFetchLaunchpadInfo = async (): Promise<void> => {\n try {\n await deferredLaunchpadInfo.fetch();\n setLoading(false);\n } catch (error) {\n handleHttpError(error);\n }\n };\n startFetchLaunchpadInfo();\n }\n }, [active]);\n\n useEffect(() => {\n if (active) {\n const startFetchFavorites = async (): Promise<void> => {\n try {\n await deferredFavorites.fetch();\n setLoadingFavorites(false);\n } catch (error) {\n setLoadingFavorites(false);\n showErrorAsNotification(error);\n }\n };\n startFetchFavorites();\n }\n }, [active]);\n\n useEffect(() => {\n if (\n active &&\n getRuntime()?.getFeatureFlags()[\"launchpad-show-platform-category\"]\n ) {\n const startFetchPlatformCategories = async (): Promise<void> => {\n try {\n await deferredPlatformCategories.fetch();\n setLoadingPlatformCategories(false);\n } catch (error) {\n setLoadingPlatformCategories(false);\n showErrorAsNotification(error);\n }\n };\n startFetchPlatformCategories();\n }\n }, [active]);\n\n useEffect(() => {\n if (loading) {\n return;\n }\n const visits = storedRecentVisits\n .map((item) => {\n // Remembered recent visits maybe no longer existed in launchpad\n if (item.type === \"app\") {\n const app = microAppsById.get(item.id);\n return app\n ? {\n type: \"app\",\n name: app.localeName,\n id: app.id,\n url: app.homepage,\n instanceId: app.instanceId,\n menuIcon: app.menuIcon,\n }\n : null;\n }\n\n const link = customLinksById.get(item.id);\n return link\n ? {\n ...link,\n name: link.localeName,\n }\n : null;\n })\n .filter(Boolean) as MenuItemDataNormal[];\n setRecentVisits(visits);\n }, [customLinksById, loading, microAppsById, storedRecentVisits]);\n\n const pushRecentVisit = useCallback(({ type, id }: StoredMenuItem) => {\n const visits: StoredMenuItem[] = storage.getItem(storageKey) ?? [];\n const index = visits.findIndex(\n (visit) => visit.type === type && visit.id === id\n );\n if (index > -1) {\n visits.splice(index, 1);\n }\n visits.unshift({ type, id });\n if (visits.length > RECENT_VISITS_LIMIT) {\n visits.pop();\n }\n // setStoredRecentVisits(visits);\n storage.setItem(storageKey, visits);\n }, []);\n\n const isStarred = useCallback(\n (item: MenuItemDataNormal) =>\n favorites.some((fav) => matchFavorite(item, fav)),\n [favorites]\n );\n\n const toggleStar = useCallback(\n (item: MenuItemDataNormal | MenuItemDataLink) => {\n const index = favorites.findIndex((fav) =>\n item.type === \"link\"\n ? fav.favoriteId === item.favoriteId\n : matchFavorite(item, fav)\n );\n let newFavorites: FavMenuItem[];\n if (index > -1) {\n const removed = favorites[index];\n newFavorites = favorites\n .slice(0, index)\n .concat(favorites.slice(index + 1));\n undoFavorite(removed).catch(showErrorAsNotification);\n } else {\n if (favorites.length >= FAVORITES_LIMIT) {\n showDialog({\n type: \"warn\",\n title: t(K.FAVORITES_LIMIT_REACHED) as string,\n content: t(K.FAVORITES_LIMIT_MESSAGE, { count: FAVORITES_LIMIT }),\n });\n return;\n }\n // Assert: no link item\n const fav: FavMenuItem = { ...(item as MenuItemDataNormal) };\n newFavorites = favorites.concat(fav);\n favorite(item as MenuItemDataNormal).then((result) => {\n if (result) {\n fav.favoriteId = result.instanceId;\n }\n }, showErrorAsNotification);\n }\n setFavorites(newFavorites);\n candidateFavorites = newFavorites;\n },\n [favorites]\n );\n\n const menuGroups: MenuGroupData[] = useMemo(\n () => search(desktops, q),\n [desktops, q]\n );\n\n const filteredPlatformCategories: PlatformCategoryItem[] = useMemo(\n () => searchCategories(platformCategories, q),\n [platformCategories, q]\n );\n\n return {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n loadingPlatformCategories,\n favorites,\n recentVisits,\n pushRecentVisit,\n isStarred,\n toggleStar,\n platformCategories: filteredPlatformCategories,\n };\n}\n\nexport function matchFavorite(item: MenuItemDataNormal, fav: FavMenuItem) {\n return item.instanceId && fav.instanceId\n ? fav.instanceId === item.instanceId\n : fav.type === item.type && fav.id === item.id;\n}\n"],"names":["DeferredService","constructor","task","_defineProperty","this","schedulePrefetch","preFetchScheduled","preFetchLaunchpadInfo","async","preFetchId","fetch","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","catch","error","console","firstFetchPromise","finally","WrappedIcon","wrapBrick","WrappedLink","showDialog","unwrapProvider","showNotification","K","NS","locales","en","ALL","QUICK_ACCESS","PLATFORM_BASE","SCENARIO_CENTER","SOLUTIONS","OPEN_PLATFORM","SEARCH_PLACEHOLDER","RECENT_VISITS","FAVORITE","UNFAVORITE","FAVORITES_LIMIT_REACHED","FAVORITES_LIMIT_MESSAGE","zh","t","i18n","getFixedT","getLocaleName","name","_i18nText","i18nData","Object","fromEntries","entries","filter","_ref","_lang","resources","map","_ref2","lang","i18nText","FAVORITES_LIMIT","RECENT_VISITS_LIMIT","fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","matchMenuItem","item","lowerQ","id","localeName","description","some","field","toLowerCase","includes","initializeReactI18n","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","Map","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","candidatePlatformCategories","preLoadedPlatformCategories","deferredLaunchpadInfo","menuGroups","microAppsById","customLinksById","_auth$isBlockedHref","launchpadInfo","LaunchpadApi_getLaunchpadInfo","storyboard","storyboards","_auth$isBlockedPath","app","isBlockedPath","call","homepage","set","group","desktops","items","type","get","push","url","isBlockedHref","subItems","subItem","_auth$isBlockedHref2","length","fetchLaunchpadInfo","deferredFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","menuIcon","customItem","relatedCustomItem","link","icon","fetchFavorites","deferredPlatformCategories","categories","InstanceApi_postSearchV3","fields","page_size","query","_categories","category","apps","platformApps","_auth$isBlockedPath2","_app$","order","Boolean","customItems","platformItems","_auth$isBlockedHref3","_item$","sortBy","lib","fetchPlatformCategories","showErrorAsNotification","message","httpErrorToString","useLaunchpadInfo","active","useTranslation","setDesktops","useState","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","loadingFavorites","setLoadingFavorites","loadingPlatformCategories","setLoadingPlatformCategories","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","platformCategories","setPlatformCategories","useEffect","_storage$getItem","getItem","handleHttpError","startFetchLaunchpadInfo","startFetchFavorites","_getRuntime","getRuntime","getFeatureFlags","startFetchPlatformCategories","visits","pushRecentVisit","useCallback","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","isStarred","matchFavorite","toggleStar","newFavorites","removed","slice","concat","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","undoFavorite","title","content","count","LaunchpadApi_createCollectionV2","relatedInstanceId","favorite","result","useMemo","allMenuGroups","filteredSubItems","sub","search","filteredPlatformCategories","searchCategories"],"sourceRoot":""}