@next-bricks/nav 1.20.4 → 1.20.6

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.
Files changed (77) hide show
  1. package/dist/bricks.json +28 -28
  2. package/dist/chunks/{2133.559b27f4.js → 2133.aef409c7.js} +2 -2
  3. package/dist/chunks/{2133.559b27f4.js.map → 2133.aef409c7.js.map} +1 -1
  4. package/dist/chunks/{2252.41e4ffe1.js → 2252.1f2ddd43.js} +3 -3
  5. package/dist/chunks/{2252.41e4ffe1.js.map → 2252.1f2ddd43.js.map} +1 -1
  6. package/dist/chunks/{3796.d842d92d.js → 3796.a67f6b8b.js} +3 -3
  7. package/dist/chunks/{3796.d842d92d.js.map → 3796.a67f6b8b.js.map} +1 -1
  8. package/dist/chunks/{4185.20553a3b.js → 4185.0c02786e.js} +3 -3
  9. package/dist/chunks/4185.0c02786e.js.map +1 -0
  10. package/dist/chunks/{4727.ad0cf061.js → 4727.f8d5254c.js} +2 -2
  11. package/dist/chunks/{4727.ad0cf061.js.map → 4727.f8d5254c.js.map} +1 -1
  12. package/dist/chunks/{4837.9ff6a495.js → 4837.4c653276.js} +2 -2
  13. package/dist/chunks/{4837.9ff6a495.js.map → 4837.4c653276.js.map} +1 -1
  14. package/dist/chunks/{6595.29578dae.js → 6595.b2dd96b5.js} +2 -2
  15. package/dist/chunks/{6595.29578dae.js.map → 6595.b2dd96b5.js.map} +1 -1
  16. package/dist/chunks/{7218.e7af0875.js → 7218.6c2c7ced.js} +2 -2
  17. package/dist/chunks/{7218.e7af0875.js.map → 7218.6c2c7ced.js.map} +1 -1
  18. package/dist/chunks/7505.cfc7935d.js +2 -0
  19. package/dist/chunks/{7505.23929a28.js.map → 7505.cfc7935d.js.map} +1 -1
  20. package/dist/chunks/{8274.f3eac0a0.js → 8274.d432bcf7.js} +3 -3
  21. package/dist/chunks/{8274.f3eac0a0.js.map → 8274.d432bcf7.js.map} +1 -1
  22. package/dist/chunks/{9149.6d7bbb31.js → 9149.ee32e2cf.js} +2 -2
  23. package/dist/chunks/{9149.6d7bbb31.js.map → 9149.ee32e2cf.js.map} +1 -1
  24. package/dist/chunks/{easyops-navbar-alerts.c422031d.js → easyops-navbar-alerts.5b1581a4.js} +2 -2
  25. package/dist/chunks/{easyops-navbar-alerts.c422031d.js.map → easyops-navbar-alerts.5b1581a4.js.map} +1 -1
  26. package/dist/chunks/{eo-directory-tree.4a6b5daf.js → eo-directory-tree.ee975134.js} +3 -3
  27. package/dist/chunks/{eo-directory-tree.4a6b5daf.js.map → eo-directory-tree.ee975134.js.map} +1 -1
  28. package/dist/chunks/{eo-directory.4fad406c.js → eo-directory.d6fc18cf.js} +3 -3
  29. package/dist/chunks/{eo-directory.4fad406c.js.map → eo-directory.d6fc18cf.js.map} +1 -1
  30. package/dist/chunks/{eo-frame-breadcrumb.ae790b2b.js → eo-frame-breadcrumb.5e0dd891.js} +2 -2
  31. package/dist/chunks/{eo-frame-breadcrumb.ae790b2b.js.map → eo-frame-breadcrumb.5e0dd891.js.map} +1 -1
  32. package/dist/chunks/{eo-launchpad-button-v2.64cf59ce.js → eo-launchpad-button-v2.4f8487f2.js} +3 -3
  33. package/dist/chunks/{eo-launchpad-button-v2.64cf59ce.js.map → eo-launchpad-button-v2.4f8487f2.js.map} +1 -1
  34. package/dist/chunks/{eo-nav-menu.95d97bec.js → eo-nav-menu.9b6796fc.js} +2 -2
  35. package/dist/chunks/{eo-nav-menu.95d97bec.js.map → eo-nav-menu.9b6796fc.js.map} +1 -1
  36. package/dist/chunks/{eo-sidebar-menu-group.5bb5c7c3.js → eo-sidebar-menu-group.ff0786e7.js} +3 -3
  37. package/dist/chunks/{eo-sidebar-menu-group.5bb5c7c3.js.map → eo-sidebar-menu-group.ff0786e7.js.map} +1 -1
  38. package/dist/chunks/{eo-sidebar-menu-submenu.15fad528.js → eo-sidebar-menu-submenu.b0bf87c3.js} +3 -3
  39. package/dist/chunks/{eo-sidebar-menu-submenu.15fad528.js.map → eo-sidebar-menu-submenu.b0bf87c3.js.map} +1 -1
  40. package/dist/chunks/{eo-sidebar-menu.3f7b4dc7.js → eo-sidebar-menu.7471c495.js} +2 -2
  41. package/dist/chunks/{eo-sidebar-menu.3f7b4dc7.js.map → eo-sidebar-menu.7471c495.js.map} +1 -1
  42. package/dist/chunks/{eo-sidebar-sub-menu.a809e015.js → eo-sidebar-sub-menu.b4b34ccd.js} +3 -3
  43. package/dist/chunks/{eo-sidebar-sub-menu.a809e015.js.map → eo-sidebar-sub-menu.b4b34ccd.js.map} +1 -1
  44. package/dist/chunks/{eo-sidebar.9a9a6054.js → eo-sidebar.6eaf5e26.js} +3 -3
  45. package/dist/chunks/{eo-sidebar.9a9a6054.js.map → eo-sidebar.6eaf5e26.js.map} +1 -1
  46. package/dist/chunks/{launchpad-config.479407f6.js → launchpad-config.e983ca1b.js} +3 -3
  47. package/dist/chunks/{launchpad-config.479407f6.js.map → launchpad-config.e983ca1b.js.map} +1 -1
  48. package/dist/chunks/main.c4f2045a.js +2 -0
  49. package/dist/chunks/{main.0231200e.js.map → main.c4f2045a.js.map} +1 -1
  50. package/dist/chunks/{nav-logo.3e0f52b3.js → nav-logo.b899f2ea.js} +2 -2
  51. package/dist/chunks/{nav-logo.3e0f52b3.js.map → nav-logo.b899f2ea.js.map} +1 -1
  52. package/dist/chunks/{poll-announce.66dcddef.js → poll-announce.2d383f61.js} +3 -3
  53. package/dist/chunks/{poll-announce.66dcddef.js.map → poll-announce.2d383f61.js.map} +1 -1
  54. package/dist/examples.json +3 -3
  55. package/dist/index.bba767fb.js +2 -0
  56. package/dist/index.bba767fb.js.map +1 -0
  57. package/dist/manifest.json +106 -106
  58. package/dist/types.json +25 -24
  59. package/package.json +3 -3
  60. package/dist/chunks/4185.20553a3b.js.map +0 -1
  61. package/dist/chunks/7505.23929a28.js +0 -2
  62. package/dist/chunks/main.0231200e.js +0 -2
  63. package/dist/index.0a520103.js +0 -2
  64. package/dist/index.0a520103.js.map +0 -1
  65. /package/dist/chunks/{2252.41e4ffe1.js.LICENSE.txt → 2252.1f2ddd43.js.LICENSE.txt} +0 -0
  66. /package/dist/chunks/{3796.d842d92d.js.LICENSE.txt → 3796.a67f6b8b.js.LICENSE.txt} +0 -0
  67. /package/dist/chunks/{4185.20553a3b.js.LICENSE.txt → 4185.0c02786e.js.LICENSE.txt} +0 -0
  68. /package/dist/chunks/{8274.f3eac0a0.js.LICENSE.txt → 8274.d432bcf7.js.LICENSE.txt} +0 -0
  69. /package/dist/chunks/{eo-directory-tree.4a6b5daf.js.LICENSE.txt → eo-directory-tree.ee975134.js.LICENSE.txt} +0 -0
  70. /package/dist/chunks/{eo-directory.4fad406c.js.LICENSE.txt → eo-directory.d6fc18cf.js.LICENSE.txt} +0 -0
  71. /package/dist/chunks/{eo-launchpad-button-v2.64cf59ce.js.LICENSE.txt → eo-launchpad-button-v2.4f8487f2.js.LICENSE.txt} +0 -0
  72. /package/dist/chunks/{eo-sidebar-menu-group.5bb5c7c3.js.LICENSE.txt → eo-sidebar-menu-group.ff0786e7.js.LICENSE.txt} +0 -0
  73. /package/dist/chunks/{eo-sidebar-menu-submenu.15fad528.js.LICENSE.txt → eo-sidebar-menu-submenu.b0bf87c3.js.LICENSE.txt} +0 -0
  74. /package/dist/chunks/{eo-sidebar-sub-menu.a809e015.js.LICENSE.txt → eo-sidebar-sub-menu.b4b34ccd.js.LICENSE.txt} +0 -0
  75. /package/dist/chunks/{eo-sidebar.9a9a6054.js.LICENSE.txt → eo-sidebar.6eaf5e26.js.LICENSE.txt} +0 -0
  76. /package/dist/chunks/{launchpad-config.479407f6.js.LICENSE.txt → launchpad-config.e983ca1b.js.LICENSE.txt} +0 -0
  77. /package/dist/chunks/{poll-announce.66dcddef.js.LICENSE.txt → poll-announce.2d383f61.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -2,24 +2,22 @@
2
2
  "id": "bricks/nav",
3
3
  "bricks": [
4
4
  "nav.easyops-navbar-alerts",
5
- "nav.launchpad-config",
6
5
  "nav.app-bar-wrapper",
7
6
  "nav.nav-logo",
8
7
  "nav.poll-announce",
9
8
  "nav.get-menu-config-options",
10
- "nav.get-menu-config-tree"
9
+ "nav.get-menu-config-tree",
10
+ "nav.launchpad-config"
11
11
  ],
12
12
  "elements": [
13
- "eo-launchpad-button",
14
13
  "eo-nav-menu",
15
- "eo-launchpad-button-v2",
16
14
  "eo-launchpad-quick-access",
17
15
  "eo-search-launchpad",
18
16
  "eo-launchpad-recent-visits",
19
17
  "eo-app-bar-wrapper",
20
18
  "eo-frame-breadcrumb",
21
- "eo-sidebar-menu-item",
22
19
  "eo-sidebar-menu-group",
20
+ "eo-sidebar-menu-item",
23
21
  "eo-sidebar-menu-submenu",
24
22
  "eo-sidebar-menu",
25
23
  "eo-sidebar",
@@ -27,15 +25,13 @@
27
25
  "eo-directory",
28
26
  "eo-directory-tree",
29
27
  "eo-directory-tree-leaf",
30
- "eo-directory-tree-internal-node"
28
+ "eo-directory-tree-internal-node",
29
+ "eo-launchpad-button",
30
+ "eo-launchpad-button-v2"
31
31
  ],
32
32
  "processors": [],
33
33
  "editors": [],
34
34
  "dependencies": {
35
- "eo-launchpad-button": [
36
- "eo-icon",
37
- "eo-link"
38
- ],
39
35
  "eo-nav-menu": [
40
36
  "eo-menu-item",
41
37
  "eo-popover",
@@ -45,13 +41,6 @@
45
41
  "eo-input",
46
42
  "eo-tooltip"
47
43
  ],
48
- "eo-launchpad-button-v2": [
49
- "basic.lock-body-scroll",
50
- "eo-icon",
51
- "eo-link",
52
- "basic.show-dialog",
53
- "basic.show-notification"
54
- ],
55
44
  "nav.easyops-navbar-alerts": [
56
45
  "eo-icon",
57
46
  "eo-link"
@@ -62,12 +51,6 @@
62
51
  "basic.show-dialog",
63
52
  "basic.show-notification"
64
53
  ],
65
- "nav.launchpad-config": [
66
- "eo-icon",
67
- "eo-link",
68
- "eo-dropdown-actions",
69
- "basic.show-dialog"
70
- ],
71
54
  "eo-search-launchpad": [
72
55
  "eo-icon",
73
56
  "eo-link",
@@ -85,15 +68,15 @@
85
68
  "eo-breadcrumb-item",
86
69
  "eo-icon"
87
70
  ],
88
- "eo-sidebar-menu-item": [
89
- "eo-link",
90
- "eo-icon"
91
- ],
92
71
  "eo-sidebar-menu-group": [
93
72
  "eo-sidebar-menu",
94
73
  "eo-sidebar-menu-item",
95
74
  "eo-sidebar-menu-submenu"
96
75
  ],
76
+ "eo-sidebar-menu-item": [
77
+ "eo-link",
78
+ "eo-icon"
79
+ ],
97
80
  "eo-sidebar-menu-submenu": [
98
81
  "eo-icon",
99
82
  "eo-sidebar-menu",
@@ -143,7 +126,24 @@
143
126
  ],
144
127
  "nav.poll-announce": [
145
128
  "basic.show-notification"
129
+ ],
130
+ "nav.launchpad-config": [
131
+ "eo-icon",
132
+ "eo-link",
133
+ "eo-dropdown-actions",
134
+ "basic.show-dialog"
135
+ ],
136
+ "eo-launchpad-button": [
137
+ "eo-icon",
138
+ "eo-link"
139
+ ],
140
+ "eo-launchpad-button-v2": [
141
+ "basic.lock-body-scroll",
142
+ "eo-icon",
143
+ "eo-link",
144
+ "basic.show-dialog",
145
+ "basic.show-notification"
146
146
  ]
147
147
  },
148
- "filePath": "bricks/nav/dist/index.0a520103.js"
148
+ "filePath": "bricks/nav/dist/index.bba767fb.js"
149
149
  }
@@ -1,2 +1,2 @@
1
- "use strict";(globalThis.webpackChunk_next_bricks_nav=globalThis.webpackChunk_next_bricks_nav||[]).push([[2133],{2133:(e,t,n)=>{n.d(t,{fm:()=>M,ir:()=>x,pU:()=>O,sZ:()=>N});var a=n(8769),o=n(6911),s=n(2861),i=n(7137),r=n(4864),c=n(9393),l=n(3346),u=n(7296),p=n(2824),d=n(2887),m=n(8406),f=n(1030);const h=10,I=10;var y,g=n(6659);async function v(){return(await(0,u.K)({page:1,pageSize:h},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0})).list}function w(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)?e:null}function k(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)?e:null}const A=`launchpad-recent-visits:${null===(y=s.auth.getAuth())||void 0===y?void 0:y.org}`,F=new i.G(localStorage);let b=[],C=new Map,B=new Map,S=!1,P=[],E=!1,L=[],_=!1;const x=new r.x((async()=>{({menuGroups:b,microAppsById:C,customLinksById:B}=await async function(){var e;const t=await(0,l.i)({},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0}),n=new Map;for(const e of t.storyboards){var a;const t=e.app;t.localeName=(0,g.F)(t.locales,t.name),null!==(a=s.auth.isBlockedPath)&&void 0!==a&&a.call(s.auth,t.homepage)||n.set(t.id,t)}const o=[],i=new Map;for(const a of t.desktops){const t=[];for(const o of a.items)switch(o.type){case"app":{const e=n.get(o.id);e&&t.push({...o,name:e.localeName,url:e.homepage,menuIcon:e.menuIcon});break}case"custom":null!==(e=s.auth.isBlockedHref)&&void 0!==e&&e.call(s.auth,o.url)||(t.push(o),i.set(o.id,o));break;case"dir":{const e=[];for(const t of o.items){var r;if("app"===t.type){const a=n.get(t.id);a&&e.push({...t,name:a.localeName,url:a.homepage,menuIcon:a.menuIcon})}else"custom"!==t.type||null!==(r=s.auth.isBlockedHref)&&void 0!==r&&r.call(s.auth,t.url)||(e.push(t),i.set(t.id,t))}e.length>0&&t.push({...o,items:e});break}}t.length>0&&o.push({...a,items:t})}return{menuGroups:o,microAppsById:n,customLinksById:i}}()),S=!0})),M=new r.x((async()=>{P=await async function(){const e=await v(),t=[];for(const n of e)if("microApp"===n.type){const e=n.relatedApp;e.localeName=(0,g.F)(e.locales,e.name),t.push({favoriteId:n.instanceId,type:"app",name:e.localeName,id:e.appId,url:e.homepage,instanceId:e.instanceId,menuIcon:e.menuIcon})}else if("customItem"===n.type){const e=n.relatedCustomItem;t.push({favoriteId:n.instanceId,type:"custom",name:e.name,id:e.id,url:e.url,menuIcon:e.menuIcon})}else"link"===n.type&&t.push({favoriteId:n.instanceId,type:"link",name:n.name,url:n.link,menuIcon:n.icon});return t}(),E=!0})),O=new r.x((async()=>{L=await async function(){const e=(await(0,m.y)("MICRO_APP_CATEGORY@EASYOPS",{fields:["id","type","name","icon","order","platformApps.appId","platformApps.name","platformApps.homepage","platformApps.description","platformApps.menuIcon","platformApps.locales","platformApps._object_id","platformApps.@.order","platformItems.id","platformItems.name","platformItems.url","platformItems.description","platformItems.menuIcon","platformItems._object_id","platformItems.@.order"],page:1,page_size:300,query:{type:"platform"}})).list,t=null==e?void 0:e.map((e=>{const t=e.platformApps.map((e=>{var t,n;return null!==(t=s.auth.isBlockedPath)&&void 0!==t&&t.call(s.auth,e.homepage)?null:{type:"app",name:(0,g.F)(e.locales,e.name),id:e.appId,url:e.homepage,menuIcon:e.menuIcon,description:e.description,instanceId:e.instanceId,order:null===(n=e["@"])||void 0===n?void 0:n.order}})).filter(Boolean),n=e.platformItems.map((e=>{var t,n;return null!==(t=s.auth.isBlockedHref)&&void 0!==t&&t.call(s.auth,e.url)?null:{type:"custom",name:e.name,id:e.id,url:e.url,menuIcon:e.menuIcon,description:e.description,instanceId:e.instanceId,order:null===(n=e["@"])||void 0===n?void 0:n.order}})).filter(Boolean),a=(0,f.sortBy)([...t,...n],"order");return{instanceId:e.instanceId,id:e.id,name:e.name,icon:e.icon,order:e.order,items:a}}));return[{id:"#all",name:"全部",icon:{lib:"easyops",category:"second-menu",icon:"sprint-planning-second-menu"},items:[]},...(0,f.sortBy)(t,"order")]}(),_=!0})),T=e=>(0,c.Ds)({type:"error",message:(0,o.httpErrorToString)(e)});function N(e){const[t,n]=(0,a.useState)(b),[s,i]=(0,a.useState)(C),[r,l]=(0,a.useState)(B),[u,m]=(0,a.useState)(""),[f,y]=(0,a.useState)(!S),[g,N]=(0,a.useState)(!E),[j,G]=(0,a.useState)(!_),[q,H]=(0,a.useState)([]),[z,D]=(0,a.useState)([]),[V,Y]=(0,a.useState)(P),[$,K]=(0,a.useState)(L);(0,a.useEffect)((()=>{e&&!f&&(n(b),i(C),l(B))}),[e,f]),(0,a.useEffect)((()=>{e&&!g&&Y(P)}),[e,g]),(0,a.useEffect)((()=>{e&&!j&&K(L)}),[e,j]),(0,a.useEffect)((()=>{var t;e&&H(null!==(t=F.getItem(A))&&void 0!==t?t:[])}),[e]),(0,a.useEffect)((()=>{e&&(async()=>{try{await x.fetch(),y(!1)}catch(e){(0,o.handleHttpError)(e)}})()}),[e]),(0,a.useEffect)((()=>{e&&(async()=>{try{await M.fetch(),N(!1)}catch(e){N(!1),T(e)}})()}),[e]),(0,a.useEffect)((()=>{var t;e&&null!==(t=(0,o.getRuntime)())&&void 0!==t&&t.getFeatureFlags()["launchpad-show-platform-category"]&&(async()=>{try{await O.fetch(),G(!1)}catch(e){G(!1),T(e)}})()}),[e]),(0,a.useEffect)((()=>{if(f)return;const e=q.map((e=>{if("app"===e.type){const t=s.get(e.id);return t?{type:"app",name:t.localeName,id:t.id,url:t.homepage,instanceId:t.instanceId,menuIcon:t.menuIcon}:null}return r.get(e.id)})).filter(Boolean);D(e)}),[r,f,s,q]);const Q=(0,a.useCallback)((e=>{var t;let{type:n,id:a}=e;const o=null!==(t=F.getItem(A))&&void 0!==t?t:[],s=o.findIndex((e=>e.type===n&&e.id===a));s>-1&&o.splice(s,1),o.unshift({type:n,id:a}),o.length>I&&o.pop(),F.setItem(A,o)}),[]),U=(0,a.useCallback)((e=>V.some((t=>R(e,t)))),[V]),Z=(0,a.useCallback)((e=>{const t=V.findIndex((t=>"link"===e.type?t.favoriteId===e.favoriteId:R(e,t)));let n;if(t>-1){const e=V[t];n=V.slice(0,t).concat(V.slice(t+1)),async function(e){return e.favoriteId?(0,d.r)(e.favoriteId):v().then((t=>{var n;const a=null===(n=t.find((t=>{var n,a;return"app"===e.type?"microApp"===t.type&&(null===(n=t.relatedApp)||void 0===n?void 0:n.appId)===e.id:"custom"===e.type&&(null===(a=t.relatedCustomItem)||void 0===a?void 0:a.id)===e.id})))||void 0===n?void 0:n.instanceId;if(a)return(0,d.r)(a);console.error("Menu item to unstar not found:",e)}))}(e).catch(T)}else{if(V.length>=h)return void(0,c.ui)({type:"warn",title:"收藏数量已达上限",content:`当前收藏链接数量已达上限(${h}个),请删除部分收藏后再添加。`});const t={...e};n=V.concat(t),async function(e){return(0,p.k)({type:"app"===e.type?"microApp":"customItem",relatedInstanceId:e.instanceId},{interceptorParams:{ignoreLoadingBar:!0}})}(e).then((e=>{e&&(t.favoriteId=e.instanceId)}),T)}Y(n),P=n}),[V]),J=(0,a.useMemo)((()=>function(e,t){if(!t)return e;const n=t.toLowerCase();return e.map((e=>({...e,items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return k(e,n);case"dir":{const t=e.items.map((e=>"app"===e.type?w(e,n):"custom"===e.type?k(e,n):null)).filter(Boolean);return t.length>0?{...e,items:t}:null}}})).filter(Boolean)}))).filter((e=>e.items.length>0))}(t,u)),[t,u]),W=(0,a.useMemo)((()=>function(e,t){if(!t)return e;const n=t.toLowerCase();return e.map((e=>({...e,items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return k(e,n)}})).filter(Boolean)})))}($,u)),[$,u]);return{loading:f,q:u,setQ:m,menuGroups:J,loadingFavorites:g,loadingPlatformCategories:j,favorites:V,recentVisits:z,pushRecentVisit:Q,isStarred:U,toggleStar:Z,platformCategories:W}}function R(e,t){return e.instanceId&&t.instanceId?t.instanceId===e.instanceId:t.type===e.type&&t.id===e.id}},4864:(e,t,n)=>{n.d(t,{x:()=>o});var a=n(4586);class o{constructor(e){(0,a.A)(this,"preFetchId",null),(0,a.A)(this,"preFetchScheduled",!1),(0,a.A)(this,"firstFetchPromise",null),(0,a.A)(this,"isFetching",!1),(0,a.A)(this,"task",void 0),this.task=e}schedulePrefetch(){if(!this.preFetchScheduled){this.preFetchScheduled=!0;const e=async()=>{this.preFetchId=null,this.fetch()};"function"==typeof window.requestIdleCallback?this.preFetchId=window.requestIdleCallback(e):this.preFetchId=setTimeout(e)}}fetch(e){let t;return this.preFetchId&&("function"==typeof window.cancelIdleCallback?cancelIdleCallback(this.preFetchId):clearTimeout(this.preFetchId),this.preFetchId=null),this.isFetching&&!e||(this.isFetching=!0,t=this.task(),t.catch((e=>{console.error(e),this.firstFetchPromise=null})).finally((()=>{this.isFetching=!1})),this.firstFetchPromise||(this.firstFetchPromise=t),!e)?this.firstFetchPromise:t}}},6659:(e,t,n)=>{n.d(t,{F:()=>o});var a=n(1147);function o(e,t){var n;if(!e)return t;const o=Object.fromEntries(Object.entries(e).filter((e=>{let[t,n]=e;return n.name})).map((e=>{let[t,n]=e;return[t,n.name]})));return null!==(n=(0,a.i18nText)(o))&&void 0!==n?n:t}},9393:(e,t,n)=>{n.d(t,{Bj:()=>s,Ds:()=>c,EM:()=>i,ui:()=>r});var a=n(9859),o=n(2304);const s=(0,a.wrapBrick)("eo-icon"),i=(0,a.wrapBrick)("eo-link"),r=(0,o.unwrapProvider)("basic.show-dialog"),c=(0,o.unwrapProvider)("basic.show-notification")}}]);
2
- //# sourceMappingURL=2133.559b27f4.js.map
1
+ "use strict";(globalThis.webpackChunk_next_bricks_nav=globalThis.webpackChunk_next_bricks_nav||[]).push([[2133],{2133:(e,t,n)=>{n.d(t,{fm:()=>M,ir:()=>x,pU:()=>O,sZ:()=>N});var a=n(8769),o=n(8626),s=n(8918),i=n(7137),r=n(4864),c=n(9393),l=n(3346),u=n(7296),p=n(2824),d=n(2887),m=n(8406),f=n(1030);const h=10,I=10;var y,g=n(6659);async function v(){return(await(0,u.K)({page:1,pageSize:h},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0})).list}function w(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)?e:null}function k(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)?e:null}const A=`launchpad-recent-visits:${null===(y=s.auth.getAuth())||void 0===y?void 0:y.org}`,F=new i.G(localStorage);let b=[],C=new Map,B=new Map,S=!1,P=[],E=!1,L=[],_=!1;const x=new r.x((async()=>{({menuGroups:b,microAppsById:C,customLinksById:B}=await async function(){var e;const t=await(0,l.i)({},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0}),n=new Map;for(const e of t.storyboards){var a;const t=e.app;t.localeName=(0,g.F)(t.locales,t.name),null!==(a=s.auth.isBlockedPath)&&void 0!==a&&a.call(s.auth,t.homepage)||n.set(t.id,t)}const o=[],i=new Map;for(const a of t.desktops){const t=[];for(const o of a.items)switch(o.type){case"app":{const e=n.get(o.id);e&&t.push({...o,name:e.localeName,url:e.homepage,menuIcon:e.menuIcon});break}case"custom":null!==(e=s.auth.isBlockedHref)&&void 0!==e&&e.call(s.auth,o.url)||(t.push(o),i.set(o.id,o));break;case"dir":{const e=[];for(const t of o.items){var r;if("app"===t.type){const a=n.get(t.id);a&&e.push({...t,name:a.localeName,url:a.homepage,menuIcon:a.menuIcon})}else"custom"!==t.type||null!==(r=s.auth.isBlockedHref)&&void 0!==r&&r.call(s.auth,t.url)||(e.push(t),i.set(t.id,t))}e.length>0&&t.push({...o,items:e});break}}t.length>0&&o.push({...a,items:t})}return{menuGroups:o,microAppsById:n,customLinksById:i}}()),S=!0})),M=new r.x((async()=>{P=await async function(){const e=await v(),t=[];for(const n of e)if("microApp"===n.type){const e=n.relatedApp;e.localeName=(0,g.F)(e.locales,e.name),t.push({favoriteId:n.instanceId,type:"app",name:e.localeName,id:e.appId,url:e.homepage,instanceId:e.instanceId,menuIcon:e.menuIcon})}else if("customItem"===n.type){const e=n.relatedCustomItem;t.push({favoriteId:n.instanceId,type:"custom",name:e.name,id:e.id,url:e.url,menuIcon:e.menuIcon})}else"link"===n.type&&t.push({favoriteId:n.instanceId,type:"link",name:n.name,url:n.link,menuIcon:n.icon});return t}(),E=!0})),O=new r.x((async()=>{L=await async function(){const e=(await(0,m.y)("MICRO_APP_CATEGORY@EASYOPS",{fields:["id","type","name","icon","order","platformApps.appId","platformApps.name","platformApps.homepage","platformApps.description","platformApps.menuIcon","platformApps.locales","platformApps._object_id","platformApps.@.order","platformItems.id","platformItems.name","platformItems.url","platformItems.description","platformItems.menuIcon","platformItems._object_id","platformItems.@.order"],page:1,page_size:300,query:{type:"platform"}})).list,t=null==e?void 0:e.map((e=>{const t=e.platformApps.map((e=>{var t,n;return null!==(t=s.auth.isBlockedPath)&&void 0!==t&&t.call(s.auth,e.homepage)?null:{type:"app",name:(0,g.F)(e.locales,e.name),id:e.appId,url:e.homepage,menuIcon:e.menuIcon,description:e.description,instanceId:e.instanceId,order:null===(n=e["@"])||void 0===n?void 0:n.order}})).filter(Boolean),n=e.platformItems.map((e=>{var t,n;return null!==(t=s.auth.isBlockedHref)&&void 0!==t&&t.call(s.auth,e.url)?null:{type:"custom",name:e.name,id:e.id,url:e.url,menuIcon:e.menuIcon,description:e.description,instanceId:e.instanceId,order:null===(n=e["@"])||void 0===n?void 0:n.order}})).filter(Boolean),a=(0,f.sortBy)([...t,...n],"order");return{instanceId:e.instanceId,id:e.id,name:e.name,icon:e.icon,order:e.order,items:a}}));return[{id:"#all",name:"全部",icon:{lib:"easyops",category:"second-menu",icon:"sprint-planning-second-menu"},items:[]},...(0,f.sortBy)(t,"order")]}(),_=!0})),T=e=>(0,c.Ds)({type:"error",message:(0,o.httpErrorToString)(e)});function N(e){const[t,n]=(0,a.useState)(b),[s,i]=(0,a.useState)(C),[r,l]=(0,a.useState)(B),[u,m]=(0,a.useState)(""),[f,y]=(0,a.useState)(!S),[g,N]=(0,a.useState)(!E),[j,G]=(0,a.useState)(!_),[q,H]=(0,a.useState)([]),[z,D]=(0,a.useState)([]),[V,Y]=(0,a.useState)(P),[$,K]=(0,a.useState)(L);(0,a.useEffect)((()=>{e&&!f&&(n(b),i(C),l(B))}),[e,f]),(0,a.useEffect)((()=>{e&&!g&&Y(P)}),[e,g]),(0,a.useEffect)((()=>{e&&!j&&K(L)}),[e,j]),(0,a.useEffect)((()=>{var t;e&&H(null!==(t=F.getItem(A))&&void 0!==t?t:[])}),[e]),(0,a.useEffect)((()=>{e&&(async()=>{try{await x.fetch(),y(!1)}catch(e){(0,o.handleHttpError)(e)}})()}),[e]),(0,a.useEffect)((()=>{e&&(async()=>{try{await M.fetch(),N(!1)}catch(e){N(!1),T(e)}})()}),[e]),(0,a.useEffect)((()=>{var t;e&&null!==(t=(0,o.getRuntime)())&&void 0!==t&&t.getFeatureFlags()["launchpad-show-platform-category"]&&(async()=>{try{await O.fetch(),G(!1)}catch(e){G(!1),T(e)}})()}),[e]),(0,a.useEffect)((()=>{if(f)return;const e=q.map((e=>{if("app"===e.type){const t=s.get(e.id);return t?{type:"app",name:t.localeName,id:t.id,url:t.homepage,instanceId:t.instanceId,menuIcon:t.menuIcon}:null}return r.get(e.id)})).filter(Boolean);D(e)}),[r,f,s,q]);const Q=(0,a.useCallback)((e=>{var t;let{type:n,id:a}=e;const o=null!==(t=F.getItem(A))&&void 0!==t?t:[],s=o.findIndex((e=>e.type===n&&e.id===a));s>-1&&o.splice(s,1),o.unshift({type:n,id:a}),o.length>I&&o.pop(),F.setItem(A,o)}),[]),U=(0,a.useCallback)((e=>V.some((t=>R(e,t)))),[V]),Z=(0,a.useCallback)((e=>{const t=V.findIndex((t=>"link"===e.type?t.favoriteId===e.favoriteId:R(e,t)));let n;if(t>-1){const e=V[t];n=V.slice(0,t).concat(V.slice(t+1)),async function(e){return e.favoriteId?(0,d.r)(e.favoriteId):v().then((t=>{var n;const a=null===(n=t.find((t=>{var n,a;return"app"===e.type?"microApp"===t.type&&(null===(n=t.relatedApp)||void 0===n?void 0:n.appId)===e.id:"custom"===e.type&&(null===(a=t.relatedCustomItem)||void 0===a?void 0:a.id)===e.id})))||void 0===n?void 0:n.instanceId;if(a)return(0,d.r)(a);console.error("Menu item to unstar not found:",e)}))}(e).catch(T)}else{if(V.length>=h)return void(0,c.ui)({type:"warn",title:"收藏数量已达上限",content:`当前收藏链接数量已达上限(${h}个),请删除部分收藏后再添加。`});const t={...e};n=V.concat(t),async function(e){return(0,p.k)({type:"app"===e.type?"microApp":"customItem",relatedInstanceId:e.instanceId},{interceptorParams:{ignoreLoadingBar:!0}})}(e).then((e=>{e&&(t.favoriteId=e.instanceId)}),T)}Y(n),P=n}),[V]),J=(0,a.useMemo)((()=>function(e,t){if(!t)return e;const n=t.toLowerCase();return e.map((e=>({...e,items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return k(e,n);case"dir":{const t=e.items.map((e=>"app"===e.type?w(e,n):"custom"===e.type?k(e,n):null)).filter(Boolean);return t.length>0?{...e,items:t}:null}}})).filter(Boolean)}))).filter((e=>e.items.length>0))}(t,u)),[t,u]),W=(0,a.useMemo)((()=>function(e,t){if(!t)return e;const n=t.toLowerCase();return e.map((e=>({...e,items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return k(e,n)}})).filter(Boolean)})))}($,u)),[$,u]);return{loading:f,q:u,setQ:m,menuGroups:J,loadingFavorites:g,loadingPlatformCategories:j,favorites:V,recentVisits:z,pushRecentVisit:Q,isStarred:U,toggleStar:Z,platformCategories:W}}function R(e,t){return e.instanceId&&t.instanceId?t.instanceId===e.instanceId:t.type===e.type&&t.id===e.id}},4864:(e,t,n)=>{n.d(t,{x:()=>o});var a=n(4586);class o{constructor(e){(0,a.A)(this,"preFetchId",null),(0,a.A)(this,"preFetchScheduled",!1),(0,a.A)(this,"firstFetchPromise",null),(0,a.A)(this,"isFetching",!1),(0,a.A)(this,"task",void 0),this.task=e}schedulePrefetch(){if(!this.preFetchScheduled){this.preFetchScheduled=!0;const e=async()=>{this.preFetchId=null,this.fetch()};"function"==typeof window.requestIdleCallback?this.preFetchId=window.requestIdleCallback(e):this.preFetchId=setTimeout(e)}}fetch(e){let t;return this.preFetchId&&("function"==typeof window.cancelIdleCallback?cancelIdleCallback(this.preFetchId):clearTimeout(this.preFetchId),this.preFetchId=null),this.isFetching&&!e||(this.isFetching=!0,t=this.task(),t.catch((e=>{console.error(e),this.firstFetchPromise=null})).finally((()=>{this.isFetching=!1})),this.firstFetchPromise||(this.firstFetchPromise=t),!e)?this.firstFetchPromise:t}}},6659:(e,t,n)=>{n.d(t,{F:()=>o});var a=n(1147);function o(e,t){var n;if(!e)return t;const o=Object.fromEntries(Object.entries(e).filter((e=>{let[t,n]=e;return n.name})).map((e=>{let[t,n]=e;return[t,n.name]})));return null!==(n=(0,a.i18nText)(o))&&void 0!==n?n:t}},9393:(e,t,n)=>{n.d(t,{Bj:()=>s,Ds:()=>c,EM:()=>i,ui:()=>r});var a=n(9859),o=n(2304);const s=(0,a.wrapBrick)("eo-icon"),i=(0,a.wrapBrick)("eo-link"),r=(0,o.unwrapProvider)("basic.show-dialog"),c=(0,o.unwrapProvider)("basic.show-notification")}}]);
2
+ //# sourceMappingURL=2133.aef409c7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunks/2133.559b27f4.js","mappings":"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","sources":["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","webpack:///./src/shared/DeferredService.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///./src/launchpad-button-v2/wrapped-bricks.ts"],"sourcesContent":["export const FAVORITES_LIMIT = 10;\nexport const RECENT_VISITS_LIMIT = 10;\n","import type { 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} 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 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 { getAppLocaleName } from \"../shared/getLocaleName\";\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 = getAppLocaleName(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 switch (item.type) {\n case \"app\": {\n const app = microAppsById.get(item.id);\n if (app) {\n items.push({\n ...item,\n name: app.localeName,\n url: app.homepage,\n menuIcon: app.menuIcon,\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 if (subItem.type === \"app\") {\n const app = microAppsById.get(subItem.id);\n if (app) {\n subItems.push({\n ...subItem,\n name: app.localeName,\n url: app.homepage,\n menuIcon: app.menuIcon,\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 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 app.localeName = getAppLocaleName(app.locales, app.name);\n stored.push({\n favoriteId: fav.instanceId,\n type: \"app\",\n name: app.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 stored.push({\n favoriteId: fav.instanceId,\n type: \"custom\",\n name: customItem.name,\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 \"icon\",\n \"order\",\n \"platformApps.appId\",\n \"platformApps.name\",\n \"platformApps.homepage\",\n \"platformApps.description\",\n \"platformApps.menuIcon\",\n \"platformApps.locales\",\n \"platformApps._object_id\",\n \"platformApps.@.order\",\n \"platformItems.id\",\n \"platformItems.name\",\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: getAppLocaleName(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: 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: 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: \"全部\",\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 matchMenuItemApp(item, lowerQ);\n case \"custom\":\n return matchMenuItemCustom(item, lowerQ);\n case \"dir\": {\n const filteredSubItems = item.items\n .map((sub) =>\n sub.type === \"app\"\n ? matchMenuItemApp(sub, lowerQ)\n : sub.type === \"custom\"\n ? matchMenuItemCustom(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 matchMenuItemApp(item, lowerQ);\n case \"custom\":\n return matchMenuItemCustom(item, lowerQ);\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemDataNormal[],\n }));\n return _categories;\n}\n\nfunction matchMenuItemApp(item: MenuItemDataApp, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.toLowerCase().includes(lowerQ) ||\n (item.description && item.description.toLowerCase().includes(lowerQ))\n ? item\n : null;\n}\n\nfunction matchMenuItemCustom(item: MenuItemDataCustom, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.toLowerCase().includes(lowerQ) ||\n (item.description && item.description.toLowerCase().includes(lowerQ))\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 { DeferredService } from \"../shared/DeferredService\";\nimport { showDialog, showNotification } from \"./wrapped-bricks\";\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\nconst storageKey = `launchpad-recent-visits:${(\n auth.getAuth() as Record<string, string>\n)?.org}`;\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 [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 return customLinksById.get(item.id);\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: \"收藏数量已达上限\",\n content: `当前收藏链接数量已达上限(${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","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 { i18nText } from \"@next-core/i18n\";\nimport type { AppLocales, I18nData } from \"@next-core/types\";\n\nexport function getAppLocaleName(\n locales: AppLocales | undefined,\n name: string\n) {\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","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"],"names":["FAVORITES_LIMIT","RECENT_VISITS_LIMIT","async","fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","matchMenuItemApp","item","lowerQ","id","toLowerCase","includes","name","description","matchMenuItemCustom","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","Map","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","candidatePlatformCategories","preLoadedPlatformCategories","deferredLaunchpadInfo","DeferredService","menuGroups","microAppsById","customLinksById","_auth$isBlockedHref","launchpadInfo","LaunchpadApi_getLaunchpadInfo","storyboard","storyboards","_auth$isBlockedPath","app","localeName","getAppLocaleName","locales","isBlockedPath","call","homepage","set","group","desktops","items","type","get","push","url","menuIcon","isBlockedHref","subItems","subItem","_auth$isBlockedHref2","length","fetchLaunchpadInfo","deferredFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","customItem","relatedCustomItem","link","icon","fetchFavorites","deferredPlatformCategories","categories","InstanceApi_postSearchV3","fields","page_size","query","_categories","map","category","apps","platformApps","_auth$isBlockedPath2","_app$","order","filter","Boolean","customItems","platformItems","_auth$isBlockedHref3","_item$","sortBy","lib","fetchPlatformCategories","showErrorAsNotification","error","showNotification","message","httpErrorToString","useLaunchpadInfo","active","setDesktops","useState","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","loadingFavorites","setLoadingFavorites","loadingPlatformCategories","setLoadingPlatformCategories","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","platformCategories","setPlatformCategories","useEffect","_storage$getItem","getItem","fetch","handleHttpError","startFetchLaunchpadInfo","startFetchFavorites","_getRuntime","getRuntime","getFeatureFlags","startFetchPlatformCategories","visits","pushRecentVisit","useCallback","_ref","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","isStarred","some","matchFavorite","toggleStar","newFavorites","removed","slice","concat","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","console","undoFavorite","catch","showDialog","title","content","LaunchpadApi_createCollectionV2","relatedInstanceId","favorite","result","useMemo","allMenuGroups","filteredSubItems","sub","search","filteredPlatformCategories","searchCategories","constructor","task","_defineProperty","this","schedulePrefetch","preFetchScheduled","preFetchLaunchpadInfo","preFetchId","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","firstFetchPromise","finally","_i18nText","i18nData","Object","fromEntries","entries","_lang","resources","_ref2","lang","i18nText","WrappedIcon","wrapBrick","WrappedLink","unwrapProvider"],"sourceRoot":""}
1
+ {"version":3,"file":"chunks/2133.aef409c7.js","mappings":"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","sources":["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","webpack:///./src/shared/DeferredService.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///./src/launchpad-button-v2/wrapped-bricks.ts"],"sourcesContent":["export const FAVORITES_LIMIT = 10;\nexport const RECENT_VISITS_LIMIT = 10;\n","import type { 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} 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 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 { getAppLocaleName } from \"../shared/getLocaleName\";\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 = getAppLocaleName(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 switch (item.type) {\n case \"app\": {\n const app = microAppsById.get(item.id);\n if (app) {\n items.push({\n ...item,\n name: app.localeName,\n url: app.homepage,\n menuIcon: app.menuIcon,\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 if (subItem.type === \"app\") {\n const app = microAppsById.get(subItem.id);\n if (app) {\n subItems.push({\n ...subItem,\n name: app.localeName,\n url: app.homepage,\n menuIcon: app.menuIcon,\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 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 app.localeName = getAppLocaleName(app.locales, app.name);\n stored.push({\n favoriteId: fav.instanceId,\n type: \"app\",\n name: app.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 stored.push({\n favoriteId: fav.instanceId,\n type: \"custom\",\n name: customItem.name,\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 \"icon\",\n \"order\",\n \"platformApps.appId\",\n \"platformApps.name\",\n \"platformApps.homepage\",\n \"platformApps.description\",\n \"platformApps.menuIcon\",\n \"platformApps.locales\",\n \"platformApps._object_id\",\n \"platformApps.@.order\",\n \"platformItems.id\",\n \"platformItems.name\",\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: getAppLocaleName(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: 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: 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: \"全部\",\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 matchMenuItemApp(item, lowerQ);\n case \"custom\":\n return matchMenuItemCustom(item, lowerQ);\n case \"dir\": {\n const filteredSubItems = item.items\n .map((sub) =>\n sub.type === \"app\"\n ? matchMenuItemApp(sub, lowerQ)\n : sub.type === \"custom\"\n ? matchMenuItemCustom(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 matchMenuItemApp(item, lowerQ);\n case \"custom\":\n return matchMenuItemCustom(item, lowerQ);\n }\n })\n // Ignore not matched items\n .filter(Boolean) as MenuItemDataNormal[],\n }));\n return _categories;\n}\n\nfunction matchMenuItemApp(item: MenuItemDataApp, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.toLowerCase().includes(lowerQ) ||\n (item.description && item.description.toLowerCase().includes(lowerQ))\n ? item\n : null;\n}\n\nfunction matchMenuItemCustom(item: MenuItemDataCustom, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.toLowerCase().includes(lowerQ) ||\n (item.description && item.description.toLowerCase().includes(lowerQ))\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 { DeferredService } from \"../shared/DeferredService\";\nimport { showDialog, showNotification } from \"./wrapped-bricks\";\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\nconst storageKey = `launchpad-recent-visits:${(\n auth.getAuth() as Record<string, string>\n)?.org}`;\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 [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 return customLinksById.get(item.id);\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: \"收藏数量已达上限\",\n content: `当前收藏链接数量已达上限(${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","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 { i18nText } from \"@next-core/i18n\";\nimport type { AppLocales, I18nData } from \"@next-core/types\";\n\nexport function getAppLocaleName(\n locales: AppLocales | undefined,\n name: string\n) {\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","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"],"names":["FAVORITES_LIMIT","RECENT_VISITS_LIMIT","async","fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","matchMenuItemApp","item","lowerQ","id","toLowerCase","includes","name","description","matchMenuItemCustom","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","Map","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","candidatePlatformCategories","preLoadedPlatformCategories","deferredLaunchpadInfo","DeferredService","menuGroups","microAppsById","customLinksById","_auth$isBlockedHref","launchpadInfo","LaunchpadApi_getLaunchpadInfo","storyboard","storyboards","_auth$isBlockedPath","app","localeName","getAppLocaleName","locales","isBlockedPath","call","homepage","set","group","desktops","items","type","get","push","url","menuIcon","isBlockedHref","subItems","subItem","_auth$isBlockedHref2","length","fetchLaunchpadInfo","deferredFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","customItem","relatedCustomItem","link","icon","fetchFavorites","deferredPlatformCategories","categories","InstanceApi_postSearchV3","fields","page_size","query","_categories","map","category","apps","platformApps","_auth$isBlockedPath2","_app$","order","filter","Boolean","customItems","platformItems","_auth$isBlockedHref3","_item$","sortBy","lib","fetchPlatformCategories","showErrorAsNotification","error","showNotification","message","httpErrorToString","useLaunchpadInfo","active","setDesktops","useState","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","loadingFavorites","setLoadingFavorites","loadingPlatformCategories","setLoadingPlatformCategories","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","platformCategories","setPlatformCategories","useEffect","_storage$getItem","getItem","fetch","handleHttpError","startFetchLaunchpadInfo","startFetchFavorites","_getRuntime","getRuntime","getFeatureFlags","startFetchPlatformCategories","visits","pushRecentVisit","useCallback","_ref","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","isStarred","some","matchFavorite","toggleStar","newFavorites","removed","slice","concat","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","console","undoFavorite","catch","showDialog","title","content","LaunchpadApi_createCollectionV2","relatedInstanceId","favorite","result","useMemo","allMenuGroups","filteredSubItems","sub","search","filteredPlatformCategories","searchCategories","constructor","task","_defineProperty","this","schedulePrefetch","preFetchScheduled","preFetchLaunchpadInfo","preFetchId","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","firstFetchPromise","finally","_i18nText","i18nData","Object","fromEntries","entries","_lang","resources","_ref2","lang","i18nText","WrappedIcon","wrapBrick","WrappedLink","unwrapProvider"],"sourceRoot":""}
@@ -1,3 +1,3 @@
1
- /*! For license information please see 2252.41e4ffe1.js.LICENSE.txt */
2
- "use strict";(globalThis.webpackChunk_next_bricks_nav=globalThis.webpackChunk_next_bricks_nav||[]).push([[2252],{829:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t){return e.get((0,r.A)(e,t))}},918:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2016);function o(e,t,n){(0,r.A)(e,t),t.set(e,n)}},2016:(e,t,n)=>{function r(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}n.d(t,{A:()=>r})},2252:(e,t,n)=>{n.r(t),n.d(t,{analytics:()=>u,auth:()=>mt,checkInstalledApps:()=>o,checkPermissions:()=>ft,flowApi:()=>i,menu:()=>s,messageDispatcher:()=>ht});var r={};n.r(r),n.d(r,{authenticate:()=>v,getAuth:()=>A,isBlockedHref:()=>I,isBlockedPath:()=>b,isBlockedUrl:()=>S,isLoggedIn:()=>y,logout:()=>w});var o={};n.r(o),n.d(o,{getCheckedApp:()=>ie,preCheckInstalledApps:()=>re,waitForCheckingApps:()=>oe});var i={};n.r(i),n.d(i,{FLOW_API_PROVIDER:()=>ae,clearCollectWidgetContract:()=>we,clearDebugContract:()=>be,collectContract:()=>ve,collectDebugContract:()=>ye,collectWidgetContract:()=>Ae,getArgsOfFlowApi:()=>Oe,isFlowApiProvider:()=>Ie,registerFlowApiProvider:()=>le});var s={};n.r(s),n.d(s,{fetchMenuById:()=>Ve,getMenuById:()=>Je});var a={};n.r(a),n.d(a,{onRequest:()=>ct,onResponse:()=>ut,onResponseError:()=>lt});var c={};n.r(c),n.d(c,{create:()=>dt});var u={};n.r(u),n.d(u,{http:()=>a,initialize:()=>st,pageView:()=>c});var l=n(2692),p=n(6330),d=n(1361),f=function(){var e=(0,p.A)((function*(e,t){return(yield d.http.post("api/gateway/micro_app.permission.ValidatePermissions/api/micro_app/v1/permission/validate",e,t)).data}));return function(t,n){return e.apply(this,arguments)}}(),h=n(6911),m=n(1732);const g={};function v(e){Object.assign(g,{org:e.org,username:e.username,userInstanceId:e.userInstanceId,loginFrom:e.loginFrom,accessRule:e.accessRule,isAdmin:e.isAdmin,csrfToken:e.csrfToken,license:e.license,accessToken:e.accessToken,userShowValue:e.userShowValue})}function A(){return{...g}}function w(){for(const e of Object.keys(g))g[e]=void 0;O.clear(),P.length=0,k.clear()}function y(){return void 0!==g.username}function b(e){var t;return!(null===(t=g.license)||void 0===t||null===(t=t.blackList)||void 0===t||!t.some((t=>(0,h.matchPath)(e,{path:t}))))}function S(e){const t=("string"==typeof e?(0,m.createLocation)(e):e).pathname;return"string"==typeof t&&b(t)}function I(e){const t=(0,h.getBasePath)(),n=new URL(e,`${location.origin}${t}`);return!(n.origin!==location.origin||!n.pathname.startsWith(t))&&b(n.pathname.substring(t.length-1))}const O=new Map,P=[],k=new Map;function E(e){if(y()&&!A().isAdmin)return M((0,l.scanPermissionActionsInAny)(e))}async function M(e){const t=e.filter((e=>!P.includes(e)));if(0===t.length)return;const n=[],r=[];for(const e of t){const t=O.get(e);t?n.push(t):r.push(e)}if(r.length>0){const e=(async()=>{try{const e=await f({actions:r},{noAbortOnRouteChange:!0});for(const t of e.actions)k.set(t.action,t.authorizationStatus),"undefined"===t.authorizationStatus&&console.error(`Undefined permission action: "${t.action}"`)}catch(e){console.error("Pre-check permissions failed",e)}finally{P.push(...r)}})();for(const t of r)O.set(t,e);n.push(e)}await Promise.all(n)}var C=n(4635),T=n(918),_=n(5536),j=n(2559),N=n(6121),$=n(829),D=n(1030),R=new WeakMap,W=new WeakMap,L=new WeakMap,B=new WeakMap,x=new WeakMap,U=new WeakMap,F=new WeakMap,q=new WeakSet;class z{constructor(e){(0,C.A)(this,q),(0,T.A)(this,R,void 0),(0,T.A)(this,W,void 0),(0,T.A)(this,L,[]),(0,T.A)(this,B,new Set),(0,T.A)(this,x,new Set),(0,T.A)(this,U,0),(0,T.A)(this,F,!1),(0,N.A)(R,this,e)}send(e){(0,$.A)(W,this)||(0,N.A)(W,this,(0,j.A)(q,this,H).call(this));const t=JSON.stringify(e);(0,$.A)(W,this).readyState===WebSocket.OPEN?(0,$.A)(W,this).send(t):(0,$.A)(L,this).push(t)}onMessage(e){return(0,$.A)(B,this).add(e),()=>{(0,$.A)(B,this).delete(e)}}onClose(e){return(0,$.A)(x,this).add(e),()=>{(0,$.A)(x,this).delete(e)}}reset(){(0,$.A)(L,this).length=0,(0,$.A)(B,this).clear(),(0,$.A)(x,this).clear()}close(){var e;(0,N.A)(F,this,!0),(null===(e=(0,$.A)(W,this))||void 0===e?void 0:e.readyState)===WebSocket.OPEN&&(0,$.A)(W,this).close()}}function H(){console.log("WebSocket connecting ...");const e=new WebSocket((0,$.A)(R,this));let t;return e.addEventListener("open",(n=>{console.log("WebSocket open:",n),t=setTimeout((()=>{t=void 0,(0,N.A)(U,this,0)}),1e3);for(const t of(0,$.A)(L,this))e.send(t);(0,$.A)(L,this).length=0})),e.addEventListener("close",(e=>{(0,$.A)(F,this)||(void 0!==t&&clearTimeout(t),console.log("WebSocket close:",e),1e3!==e.code&&(0,j.A)(q,this,G).call(this))})),e.addEventListener("error",(e=>{console.error("WebSocket error:",e)})),e.addEventListener("message",(e=>{const t=JSON.parse(e.data);for(const e of(0,$.A)(B,this))e(t)})),e}function G(){if((0,$.A)(U,this)>=5){console.error("WebSocket connect retry limit exceeded");for(const e of(0,$.A)(x,this))e();return}const e=1e3*Math.pow(2,(0,$.A)(U,this));console.log("WebSocket will reconnect after %d seconds",e/1e3),setTimeout((()=>{var e;(0,N.A)(U,this,(e=(0,$.A)(U,this),++e)),(0,N.A)(W,this,(0,j.A)(q,this,H).call(this))}),e)}var J=new WeakMap,V=new WeakMap,Y=new WeakMap,K=new WeakSet;function Q(e){if(!(0,$.A)(J,e)){const t=`${"https:"===location.protocol?"wss:":"ws:"}//${window.location.host}${(0,h.getBasePath)()}api/websocket_service/v1/ws`;(0,N.A)(J,e,new z(t))}return(0,$.A)(J,e)}function X(e,t,n,r){const o=(0,$.A)(V,this)[e].get(r);if(o)return o;const i={event:"sub"===e?"TOPIC.SUB":"TOPIC.UNSUB",payload:n},s=new Promise(((t,r)=>{const o=Z(n),s=(0,_.A)(K,this,Q).onMessage((n=>{const i=n.event===("sub"===e?"TOPIC.SUB_SUCCESS":"TOPIC.UNSUB_SUCCESS"),c=n.event===("sub"===e?"TOPIC.SUB_FAILED":"TOPIC.UNSUB_FAILED");(i||c)&&o===Z(n.payload)&&((i?t:r)(n),s(),a())})),a=(0,_.A)(K,this,Q).onClose((()=>{r({retryCount:5}),s(),a()}));(0,_.A)(K,this,Q).send(i)}));return"sub"===e&&(0,$.A)(Y,this).set(t,r),(0,$.A)(V,this)[e].set(r,s),s}function Z(e){const{system:t,topic:n}=e;return JSON.stringify({system:t,topic:n})}var ee=function(){var e=(0,p.A)((function*(e,t){return(yield d.http.post("api/gateway/micro_app_standalone.runtime.SearchMicroAppStandalone/api/v1/micro_app_standalone/search",e,t)).data}));return function(t,n){return e.apply(this,arguments)}}();const te=new Map,ne=new Map;function re(e,t){if(window.STANDALONE_MICRO_APPS&&!window.NO_AUTH_GUARD){const n=function(e){var t;const n={usedArgs:new Set},{customTemplates:r,menus:o}=null!==(t=e.meta)&&void 0!==t?t:{};return(0,l.traverseStoryboardExpressions)([e.routes,r,o],((e,t)=>{(0,l.collectInstalledAppsHasUsage)(n,e,t)}),"INSTALLED_APPS"),[...n.usedArgs]}(e),r=[];for(const e of n)te.has(e)||t(e)||r.push(e);if(0===r.length)return;const o=ee({query:{appId:{$in:r}},fields:["appId","currentVersion","installStatus"]},{noAbortOnRouteChange:!0}).catch((e=>{console.error("Get off site standalone micro-apps failed",e)}));for(const e of r)te.set(e,o.then((t=>{var n;const r=null==t||null===(n=t.list)||void 0===n?void 0:n.find((t=>t.appId===e)),o=r?{...r,id:e}:void 0;return ne.set(e,o),o})))}}async function oe(e){await Promise.all(e.map((e=>te.get(e))))}function ie(e){if(window.STANDALONE_MICRO_APPS)return ne.get(e)}var se=n(2304);const ae="core.provider-flow-api";function ce(e,t){return e.some((e=>e.source===t))}async function ue(e){let{url:t,originalUri:n,method:r="GET",responseWrapper:o=!0,ext_fields:i=[],request:s,isFileType:a,stream:c}=e;const u=["get","delete","head"].includes(r.toLowerCase()),l=a?{responseType:"blob"}:{};let p;for(var f=arguments.length,h=new Array(f>1?f-1:0),m=1;m<f;m++)h[m-1]=arguments[m];if(u){var g,v,A,w;let e,o;var y,b;if(n&&"object"===(null==s?void 0:s.type)&&(null!==(g=null===(v=n.match(/:([^/]+)/g))||void 0===v?void 0:v.length)&&void 0!==g?g:0)===(null!==(A=null===(w=s.fields)||void 0===w?void 0:w.length)&&void 0!==A?A:0)?[o]=h:[e,o]=h,c)return await(0,se.createSSEStream)(d.http.getUrlWithParams(t,e),{...l,...o,method:r,headers:Object.fromEntries([...new Headers(null!==(y=null===(b=o)||void 0===b?void 0:b.headers)&&void 0!==y?y:{}).entries()])});p=await d.http.simpleRequest(r,t,{params:e,...l,...o})}else{const e=function(e){if("object"!==(null==e?void 0:e.type))return!1;const t=e=>!(0,D.isEmpty)(e)&&e.some((e=>["file","file[]"].includes(e.type)||t(e.fields)));return t(e.fields)}(s),n=function(e){const t=ce(e,"query"),n=ce(e,"body");for(var r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];if(t){if(n){const[e,t,n]=o;return{data:e,options:{params:t,...n}}}const[e,t]=o;return{data:{},options:{params:e,...t}}}const[s,a]=o;return{data:s,options:a}}(i,...h),o=e?function(e){if(e instanceof FormData)return e;const t=new FormData;for(const[n,r]of Object.entries(e))Array.isArray(r)?r.forEach((e=>{t.append(n,e)})):!(0,D.isObject)(r)||r instanceof Blob||r instanceof Date?t.append(n,r):Object.entries(r).forEach((e=>{let[r,o]=e;t.append(`${n}[${r}]`,o)}));return t}(n.data):n.data;if(c){var S;const{body:e,headers:i}=d.http.getBodyAndHeaders(o,null===(S=n.options)||void 0===S?void 0:S.headers);return await(0,se.createSSEStream)(t,{...l,...n.options,method:r,headers:Object.fromEntries([...new Headers(null!=i?i:{}).entries()]),body:e})}p=await d.http.requestWithBody(r,t,o,{...l,...n.options})}return!a&&o?p.data:p}function le(){customElements.define(ae,(0,se.createProviderClass)(ue))}var pe=n(5310);const de=async(e,t)=>(await d.http.post("api/contract/single_search",e,t)).data,fe=new Map,he=new Map,me=new Map,ge=(e,t)=>{null==e||e.forEach((e=>{t.set(`${e.namespaceId}.${e.name}`,e)}))};function ve(e){ge(e,fe)}function Ae(e){ge(e,he)}function we(){he.clear()}function ye(e){ge(e,me)}function be(){me.clear()}const Se=new Map;function Ie(e){return e.includes("@")}async function Oe(e,t,n,r){if(!e.includes(":"))throw new Error(`You're using legacy Custom API "${e}" which is dropped in v3, please use Flow API instead`);const o=await async function(e){const[t,n]=e.split("@"),[r,o]=n.split(":"),i=function(e){return fe.get(e)||he.get(e)||me.get(e)}(`${t}.${r}`);if(i)return{name:i.name,namespace:i.namespaceId,serviceName:i.serviceName,version:i.version,contract:{endpoint:i.endpoint,response:i.response,request:i.request}};let s=Se.get(e);return s||(s=async function(e,t,n){var r;const{contractData:o}=await de({contractName:`${e}.${t}`,version:n});return o?{name:o.name,namespace:null===(r=o.namespace)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.name,serviceName:o.serviceName,version:o.version,contract:{endpoint:o.endpoint,response:o.response,request:o.request}}:null}(t,r,o),Se.set(e,s)),s}(e);if(!o)throw new Pe(`Flow API not found: "${e}"`);const i=function(e,t){var n,r;const o="string"==typeof t.contract?pe.safeLoad(t.contract,{schema:pe.JSON_SCHEMA,json:!0}):t.contract,{uri:i,method:s="GET",ext_fields:a}=null!==(n=null==o?void 0:o.endpoint)&&void 0!==n?n:{},c=!(null==o||!o.response)&&!1!==o.response.wrapper;if(!i)throw new Error(`Missing endpoint.uri in contract of provider "${e}"`);return{uri:i,method:"list"===s.toLowerCase()?"get":s,ext_fields:a,name:t.name,namespace:t.namespace,serviceName:t.serviceName,version:t.version,isFileType:"file"===(null==o||null===(r=o.response)||void 0===r?void 0:r.type),responseWrapper:c,request:null==o?void 0:o.request}}(e,o);return function(e,t,n,r){let{uri:o,method:i,ext_fields:s,name:a,namespace:c,serviceName:u,responseWrapper:l,version:p,isFileType:d,request:f}=e;const h="saveAs"===n;let m;h&&(m=t.shift());const{url:g,args:v}=function(e,t,n,r,o,i){const s=i?"logic.api.gateway"===o||null!=o&&o.startsWith("logic.api.gateway.")?"":o?`api/gateway/${o}`:`api/gateway/${r}.${n}@${i}`:`api/gateway/api_service.${r}.${n}`,a=t.slice(),c=e.replace(/:([^/]+)/g,(()=>a.shift()));return{url:s?s+c:c.replace(/^\//,""),args:a}}(o,t,a,c,u,p);return[...h?[m]:[],{url:g,originalUri:o,method:i,ext_fields:s,responseWrapper:l,request:f,isFileType:d,stream:r},...v]}(i,t,n,r)}class Pe extends Error{constructor(e){super(e),this.name="FlowApiNotFoundError",Error.captureStackTrace&&Error.captureStackTrace(this,Pe)}}var ke=function(){var e=(0,p.A)((function*(e,t,n){return(yield d.http.post("api/gateway/cmdb.instance.PostSearch/object/".concat(e,"/instance/_search"),t,n)).data}));return function(t,n,r){return e.apply(this,arguments)}}(),Ee=n(9740),Me=function(){var e=(0,p.A)((function*(e,t,n){return(yield d.http.get("api/gateway/micro_app.installed_micro_app.GetMenusInfo/api/v1/micro-app/menus/".concat(e),(0,Ee.A)((0,Ee.A)({},n),{},{params:t}))).data}));return function(t,n,r){return e.apply(this,arguments)}}(),Ce=n(1147);const Te=Symbol("appId"),_e=Symbol("menuI18nNamespace"),je=Symbol("overrideApp");async function Ne(e,t,n){const r=e.find((e=>"inject"!==e.type));if(!r)return;const o=[],i=new Map,s=new WeakMap;for(const t of e)if(t.i18n){const e=`menu/${t.menuId}~${t.app[0].appId}+${t.instanceId}`;Object.entries(t.i18n).forEach((t=>{let[n,r]=t;Ce.i18n.addResourceBundle(n,e,r)})),s.set(t,e)}await Promise.all(e.map((e=>async function(e,t,n,r){if(e.dynamicItems&&e.itemsResolve){const i=e.app[0].appId,s={...t,pendingPermissionsPreCheck:[...t.pendingPermissionsPreCheck,E(e.itemsResolve)]};var o;i!==t.app.id&&(s.overrideApp=window.STANDALONE_MICRO_APPS?e.overrideApp:null===(o=r.getStoryboardByAppId(i))||void 0===o?void 0:o.app,s.appendI18nNamespace=n.get(e));const a=await r.resolveData({transform:"items",...e.itemsResolve},s);e.items=a.items}}(e,t,s,n))));for(const t of e){var a;if(null!==(a=t.items)&&void 0!==a&&a.length)if("inject"===t.type&&t.injectMenuGroupId){let e=i.get(t.injectMenuGroupId);e||(e=[],i.set(t.injectMenuGroupId,e)),e.push(t)}else o.push(t)}return{...r,items:o.flatMap((e=>$e(e.items,e,i,s))),[_e]:s.get(r),[je]:r.overrideApp}}function $e(e,t,n,r){return null==e?void 0:e.map((e=>{var o;const i=e.groupId&&n.get(e.groupId);return i&&n.delete(e.groupId),{...e,children:(null!==(o=$e(e.children,t,n,r))&&void 0!==o?o:[]).concat(i?i.flatMap((e=>$e(e.items,e,n,r))):[]),[Te]:t.app[0].appId,[_e]:r.get(t),[je]:t.overrideApp}}))}function De(e){e.items=Re(e.items)}function Re(e){return function(e){return(0,D.sortBy)(e,(e=>{var t;return null!==(t=e.sort)&&void 0!==t?t:-1/0}))}(e).map((e=>({...e,children:Re(e.children)})))}var We=n(9933),Le=n(1321);function Be(e,t,n,r){if("titleDataSource"in e&&(0,se.isObject)(e.titleDataSource)&&Object.entries(e.titleDataSource).every((e=>{let[,t]=e;return null===t||""===t}))&&delete e.titleDataSource,"if"in e&&null===e.if&&delete e.if,"to"in e&&e.to&&!(0,Le.isEvaluable)(e.to)){const t=We.pipes.yaml(e.to);(0,se.isObject)(t)&&["pathname","search","hash"].some((e=>(0,se.hasOwnProperty)(t,e)))&&(e.to=t)}let o=n;if(t!==n.app.id){var i;const s=window.STANDALONE_MICRO_APPS?e[je]:null===(i=r.getStoryboardByAppId(t))||void 0===i?void 0:i.app;o={...n,overrideApp:s,appendI18nNamespace:e[_e]}}return r.asyncComputeRealValue(e,o,{ignoreSymbols:!0})}function xe(e,t,n){return Promise.all(e.map((async e=>{let{children:r,...o}=e;const[i,s]=await Promise.all([Be(o,o[Te],t,n),r&&await xe(r,t,n)]);return{...i,children:s}})))}var Ue=function(){var e=(0,p.A)((function*(e,t,n,r){return(yield d.http.get("api/gateway/cmdb.instance.GetDetail/object/".concat(e,"/instance/").concat(t),(0,Ee.A)((0,Ee.A)({},r),{},{params:n}))).data}));return function(t,n,r,o){return e.apply(this,arguments)}}();const Fe=new Map;async function qe(e){if(e.title||(0,D.isEmpty)(e.titleDataSource))return e.title;const t=JSON.stringify(e.titleDataSource),n=Fe.get(t);if(void 0!==n)return n;const{objectId:r,instanceId:o,attributeId:i}=e.titleDataSource,s=null!=i?i:"name",a=await Ue(r,o,{fields:s});let c;if("#showKey"===i&&Array.isArray(a[s])){const[e,...t]=a[s];c=t.length>0?`${e}(${t.join(",")})`:String(e)}else c=String(a[s]);return Fe.set(t,c),c}const ze=new Map,He=new Map;function Ge(e){return null==e?void 0:e.filter(h.checkIfOfComputed).map((e=>{const t=Ge(e.children);return"group"===e.type?{type:"group",title:e.text,childLayout:e.childLayout,items:t,groupId:e.groupId,groupFrom:e.groupFrom}:null!=t&&t.length?{type:"subMenu",childLayout:e.childLayout,title:e.text,icon:e.icon,items:t,defaultExpanded:e.defaultExpanded}:function(e){return e.href?I(e.href):!!e.to&&S(e.to)}(e)?null:(0,D.omit)(e,["type","items","children"])})).filter(Boolean)}function Je(e){return He.get(e)}function Ve(e,t,n){let r=ze.get(e);return r||(r=async function(e,t,n){const r=window.STANDALONE_MICRO_APPS?function(e,t,n){var r,o,i,s;const a=n.getStoryboardByAppId(t);return(null!==(r=null!==(o=null===(i=a.meta)||void 0===i?void 0:i.injectMenus)&&void 0!==o?o:null===(s=a.meta)||void 0===s?void 0:s.menus)&&void 0!==r?r:[]).filter((t=>t.menuId===e)).map((e=>{var n;return{...e,...null!==(n=e.app)&&void 0!==n&&null!==(n=n[0])&&void 0!==n&&n.appId?{}:{app:[{appId:t}]}}}))}(e,t.app.id,n):t.flags["three-level-menu-layout"]?(await Me(e,{menuObjectId:"EASYOPS_STORYBOARD_MENU"})).menus:(await ke("EASYOPS_STORYBOARD_MENU",{page:1,page_size:200,fields:{menuId:!0,title:!0,icon:!0,link:!0,titleDataSource:!0,defaultCollapsed:!0,defaultCollapsedBreakpoint:!0,type:!0,injectMenuGroupId:!0,dynamicItems:!0,itemsResolve:!0,items:!0,i18n:!0,"items.children":!0,"app.appId":!0},query:{menuId:{$eq:e},app:{$size:{$gt:0}}}})).list,o=await Ne(r,t,n);if(!o)throw new Error(`Menu not found: ${e}`);De(o);const{items:i,app:s,...a}=o,c={...t,pendingPermissionsPreCheck:[...t.pendingPermissionsPreCheck,E([i,a])]};delete c.tplStateStoreId,delete c.forEachItem,delete c.forEachIndex,delete c.forEachSize;const u=s[0].appId,[l,p]=await Promise.all([Be(a,u,c,n),xe(i,c,n)]),d={title:await qe(l),...(0,D.pick)(l,["icon","link","defaultCollapsed","defaultCollapsedBreakpoint"]),menuItems:Ge(p)};He.set(e,d)}(e,t,n)),r}const Ye=[];let Ke=null;const Qe={maxWaitingTime:5e3,maxLoggedEvents:10};function Xe(){clearTimeout(Ke),Ye.length>Qe.maxLoggedEvents?Ze():Ke=setTimeout(Ze,Qe.maxWaitingTime)}function Ze(){if(0===Ye.length)return;const e={model:"easyops.FRONTEND_STAT",columns:["_ver","st","et","lt","size","time","traceId","code","duration","page","uid","username","api","type","msg","status","pageId","route","apiCount","maxApiTimeCost","apiSizeCost","pageTitle"],data:Ye.splice(0,Qe.maxLoggedEvents)};var t;!function(e,t){const n=new Blob([JSON.stringify(t)],{type:"application/json"});window.navigator.sendBeacon(e,n)}(Qe.api,e),Ye.length&&(t=Ze,(window.requestIdleCallback||window.requestAnimationFrame||(e=>setTimeout(e,17)))(t))}function et(){window.addEventListener("beforeunload",Ze,!1)}let tt,nt=!1,rt=null,ot=!0;const it=[];function st(e){nt||(nt=!0,tt||(tt=function(e,t){return Object.assign(Qe,{...t,api:e}),{sendOnExit:et,emit:Xe}}(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),tt.sendOnExit()))}const at=Symbol("HttpAnalytics");function ct(e){const t=Math.round(performance.now()),n=Date.now();return e[at]={st:n,time:Math.round(n/1e3),perfStartTime:t},e}function ut(e,t){return pt(!1,e,t)}function lt(e,t){return pt(!0,e,t)}function pt(e,t,n){const r=Math.round(performance.now()),o=Date.now(),{[at]:i,url:s}=n;if(i&&!(e&&t instanceof d.HttpAbortError)){delete n[at];const{st:c,time:u,perfStartTime:l}=i,{userInstanceId:p,username:f}=A();let h,m,g,v,w,y,b;if(e){const e=t instanceof d.HttpResponseError;(e||t instanceof d.HttpParseError)&&(({status:w,headers:y}=t.response),e&&(b=t.responseJson))}else({status:w,data:b,headers:y}=t);(0,se.isObject)(b)&&({code:h,message:m}=b),y instanceof Headers&&(g=y.get("x-b3-traceid"),v=y.get("content-length")),a={st:c,_ver:c,uid:p,username:f,time:u,et:o,page:location.href,duration:r-l,api:s,type:"api",code:null!=h?h:-1,msg:null!=m?m:"",status:w,traceId:null!=g?g:"",size:v?Number(v):-1},rt?Ye.push({...a,type:"apiRequest",...rt}):it.push(a)}var a;return e?Promise.reject(t):t}function dt(){const e=Math.round(performance.now()),t=Date.now();return it.length=0,rt=null,function(n){let{status:r,path:o,pageTitle:i}=n;if("ok"!==r)return Ye.push(...it),void(it.length=0);const s=Math.round(performance.now())-e,a=Date.now(),{username:c}=A();(function(e){const t=function(){const e=URL.createObjectURL(new Blob([]));let t=e.substring(e.lastIndexOf("/")+1);return URL.revokeObjectURL(e),ot&&(t="88-"+t,ot=!1),t}(),{lt:n,route:r}=e;rt={lt:n,route:r,pageId:t},Ye.push({...e,pageId:t,apiCount:it.length,maxApiTimeCost:Math.max(0,...it.map((e=>e.duration))),size:it.map((e=>e.size)).filter((e=>e>0)).reduce(((e,t)=>e+t),0)});for(const e of it)Ye.push({...e,...rt});it.length=0,tt.emit()})({type:"page",page:location.href,_ver:t,time:Math.round(t/1e3),st:t,et:a,lt:s,pageTitle:i,username:c,route:o}),window.dispatchEvent(new CustomEvent("route.render",{detail:{renderTime:s}}))}}const ft=Object.freeze({checkPermissions:function(){if(!y())return!1;if(A().isAdmin)return!0;for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(const e of t)switch(k.get(e)){case"unauthorized":case"undefined":return!1;case void 0:return console.error(`Un-checked permission action: "${e}", please make sure the permission to check is defined in permissionsPreCheck.`),!1}return!0},preCheckPermissions:function(e){if(y()&&!A().isAdmin)return M((0,l.scanPermissionActionsInStoryboard)(e))},preCheckPermissionsForBrickOrRoute:async function(e,t){if(y()&&!A().isAdmin&&Array.isArray(e.permissionsPreCheck))return M(await t(e.permissionsPreCheck))}}),ht=new class{constructor(){(0,C.A)(this,K),(0,T.A)(this,J,void 0),(0,T.A)(this,V,{sub:new Map,unsub:new Map}),(0,T.A)(this,Y,new Map)}subscribe(e,t){const n=JSON.stringify(t);return(0,j.A)(K,this,X).call(this,"sub",e,t,n)}unsubscribe(e){const t=(0,$.A)(Y,this).get(e);if(!t){const t=`The message channel to unsubscribe "${e}" is not found`;return console.error(t),Promise.reject(new Error(t))}const n=JSON.parse(t),r=(0,j.A)(K,this,X).call(this,"unsub",e,n,t);return(0,$.A)(V,this).sub.delete(t),r.then((()=>{(0,$.A)(Y,this).delete(e)})),r}onMessage(e,t){let n=(0,$.A)(Y,this).get(e),r=!1;return(0,_.A)(K,this,Q).onMessage((o=>{n||(n=(0,$.A)(Y,this).get(e)),n?"MESSAGE.PUSH"===o.event&&function(e,t){const n=JSON.parse(e);return n.system===t.system&&(n.topic===t.topic||"string"==typeof n.topic&&n.topic.includes("*")&&new RegExp(`^${n.topic.replace(/([^*]*)\*([^*]*)/g,((e,t,n)=>`${(0,D.escapeRegExp)(t)}[^/]*${(0,D.escapeRegExp)(n)}`))}$`).test(t.topic))}(n,o.payload)&&t(o.payload.message):r||(console.error(`Message channel: "${e}" not found`),r=!0)}))}onClose(e){return(0,_.A)(K,this,Q).onClose(e)}reset(){var e;(0,$.A)(V,this).sub.clear(),(0,$.A)(V,this).unsub.clear(),(0,$.A)(Y,this).clear(),null===(e=(0,$.A)(J,this))||void 0===e||e.reset()}},mt=function(){const e=(0,h.getV2RuntimeFromDll)();if(e)return Object.freeze((0,D.pick)(e,["authenticate","getAuth","isLoggedIn","logout","isBlockedPath","isBlockedUrl","isBlockedHref"]))}()||r},2559:(e,t,n)=>{function r(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}n.d(t,{A:()=>r})},4586:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(1369);function o(e,t,n){return(t=(0,r.A)(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},4635:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2016);function o(e,t){(0,r.A)(e,t),t.add(e)}},5536:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t,n){return n((0,r.A)(e,t))}},6121:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t,n){return e.set((0,r.A)(e,t),n),n}},6330:(e,t,n)=>{function r(e,t,n,r,o,i,s){try{var a=e[i](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var s=e.apply(t,n);function a(e){r(s,o,i,a,c,"next",e)}function c(e){r(s,o,i,a,c,"throw",e)}a(void 0)}))}}n.d(t,{A:()=>o})},9740:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(4586);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){(0,r.A)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}}}]);
3
- //# sourceMappingURL=2252.41e4ffe1.js.map
1
+ /*! For license information please see 2252.1f2ddd43.js.LICENSE.txt */
2
+ "use strict";(globalThis.webpackChunk_next_bricks_nav=globalThis.webpackChunk_next_bricks_nav||[]).push([[2252],{829:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t){return e.get((0,r.A)(e,t))}},918:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2016);function o(e,t,n){(0,r.A)(e,t),t.set(e,n)}},2016:(e,t,n)=>{function r(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}n.d(t,{A:()=>r})},2252:(e,t,n)=>{n.r(t),n.d(t,{analytics:()=>u,auth:()=>mt,checkInstalledApps:()=>o,checkPermissions:()=>ft,flowApi:()=>i,menu:()=>s,messageDispatcher:()=>ht});var r={};n.r(r),n.d(r,{authenticate:()=>v,getAuth:()=>A,isBlockedHref:()=>I,isBlockedPath:()=>b,isBlockedUrl:()=>S,isLoggedIn:()=>y,logout:()=>w});var o={};n.r(o),n.d(o,{getCheckedApp:()=>ie,preCheckInstalledApps:()=>re,waitForCheckingApps:()=>oe});var i={};n.r(i),n.d(i,{FLOW_API_PROVIDER:()=>ae,clearCollectWidgetContract:()=>we,clearDebugContract:()=>be,collectContract:()=>ve,collectDebugContract:()=>ye,collectWidgetContract:()=>Ae,getArgsOfFlowApi:()=>Oe,isFlowApiProvider:()=>Ie,registerFlowApiProvider:()=>le});var s={};n.r(s),n.d(s,{fetchMenuById:()=>Ve,getMenuById:()=>Je});var a={};n.r(a),n.d(a,{onRequest:()=>ct,onResponse:()=>ut,onResponseError:()=>lt});var c={};n.r(c),n.d(c,{create:()=>dt});var u={};n.r(u),n.d(u,{http:()=>a,initialize:()=>st,pageView:()=>c});var l=n(2692),p=n(6330),d=n(1361),f=function(){var e=(0,p.A)((function*(e,t){return(yield d.http.post("api/gateway/micro_app.permission.ValidatePermissions/api/micro_app/v1/permission/validate",e,t)).data}));return function(t,n){return e.apply(this,arguments)}}(),h=n(8626),m=n(1732);const g={};function v(e){Object.assign(g,{org:e.org,username:e.username,userInstanceId:e.userInstanceId,loginFrom:e.loginFrom,accessRule:e.accessRule,isAdmin:e.isAdmin,csrfToken:e.csrfToken,license:e.license,accessToken:e.accessToken,userShowValue:e.userShowValue})}function A(){return{...g}}function w(){for(const e of Object.keys(g))g[e]=void 0;O.clear(),P.length=0,k.clear()}function y(){return void 0!==g.username}function b(e){var t;return!(null===(t=g.license)||void 0===t||null===(t=t.blackList)||void 0===t||!t.some((t=>(0,h.matchPath)(e,{path:t}))))}function S(e){const t=("string"==typeof e?(0,m.createLocation)(e):e).pathname;return"string"==typeof t&&b(t)}function I(e){const t=(0,h.getBasePath)(),n=new URL(e,`${location.origin}${t}`);return!(n.origin!==location.origin||!n.pathname.startsWith(t))&&b(n.pathname.substring(t.length-1))}const O=new Map,P=[],k=new Map;function E(e){if(y()&&!A().isAdmin)return M((0,l.scanPermissionActionsInAny)(e))}async function M(e){const t=e.filter((e=>!P.includes(e)));if(0===t.length)return;const n=[],r=[];for(const e of t){const t=O.get(e);t?n.push(t):r.push(e)}if(r.length>0){const e=(async()=>{try{const e=await f({actions:r},{noAbortOnRouteChange:!0});for(const t of e.actions)k.set(t.action,t.authorizationStatus),"undefined"===t.authorizationStatus&&console.error(`Undefined permission action: "${t.action}"`)}catch(e){console.error("Pre-check permissions failed",e)}finally{P.push(...r)}})();for(const t of r)O.set(t,e);n.push(e)}await Promise.all(n)}var C=n(4635),T=n(918),_=n(5536),j=n(2559),N=n(6121),$=n(829),D=n(1030),R=new WeakMap,W=new WeakMap,L=new WeakMap,B=new WeakMap,x=new WeakMap,U=new WeakMap,F=new WeakMap,q=new WeakSet;class z{constructor(e){(0,C.A)(this,q),(0,T.A)(this,R,void 0),(0,T.A)(this,W,void 0),(0,T.A)(this,L,[]),(0,T.A)(this,B,new Set),(0,T.A)(this,x,new Set),(0,T.A)(this,U,0),(0,T.A)(this,F,!1),(0,N.A)(R,this,e)}send(e){(0,$.A)(W,this)||(0,N.A)(W,this,(0,j.A)(q,this,H).call(this));const t=JSON.stringify(e);(0,$.A)(W,this).readyState===WebSocket.OPEN?(0,$.A)(W,this).send(t):(0,$.A)(L,this).push(t)}onMessage(e){return(0,$.A)(B,this).add(e),()=>{(0,$.A)(B,this).delete(e)}}onClose(e){return(0,$.A)(x,this).add(e),()=>{(0,$.A)(x,this).delete(e)}}reset(){(0,$.A)(L,this).length=0,(0,$.A)(B,this).clear(),(0,$.A)(x,this).clear()}close(){var e;(0,N.A)(F,this,!0),(null===(e=(0,$.A)(W,this))||void 0===e?void 0:e.readyState)===WebSocket.OPEN&&(0,$.A)(W,this).close()}}function H(){console.log("WebSocket connecting ...");const e=new WebSocket((0,$.A)(R,this));let t;return e.addEventListener("open",(n=>{console.log("WebSocket open:",n),t=setTimeout((()=>{t=void 0,(0,N.A)(U,this,0)}),1e3);for(const t of(0,$.A)(L,this))e.send(t);(0,$.A)(L,this).length=0})),e.addEventListener("close",(e=>{(0,$.A)(F,this)||(void 0!==t&&clearTimeout(t),console.log("WebSocket close:",e),1e3!==e.code&&(0,j.A)(q,this,G).call(this))})),e.addEventListener("error",(e=>{console.error("WebSocket error:",e)})),e.addEventListener("message",(e=>{const t=JSON.parse(e.data);for(const e of(0,$.A)(B,this))e(t)})),e}function G(){if((0,$.A)(U,this)>=5){console.error("WebSocket connect retry limit exceeded");for(const e of(0,$.A)(x,this))e();return}const e=1e3*Math.pow(2,(0,$.A)(U,this));console.log("WebSocket will reconnect after %d seconds",e/1e3),setTimeout((()=>{var e;(0,N.A)(U,this,(e=(0,$.A)(U,this),++e)),(0,N.A)(W,this,(0,j.A)(q,this,H).call(this))}),e)}var J=new WeakMap,V=new WeakMap,Y=new WeakMap,K=new WeakSet;function Q(e){if(!(0,$.A)(J,e)){const t=`${"https:"===location.protocol?"wss:":"ws:"}//${window.location.host}${(0,h.getBasePath)()}api/websocket_service/v1/ws`;(0,N.A)(J,e,new z(t))}return(0,$.A)(J,e)}function X(e,t,n,r){const o=(0,$.A)(V,this)[e].get(r);if(o)return o;const i={event:"sub"===e?"TOPIC.SUB":"TOPIC.UNSUB",payload:n},s=new Promise(((t,r)=>{const o=Z(n),s=(0,_.A)(K,this,Q).onMessage((n=>{const i=n.event===("sub"===e?"TOPIC.SUB_SUCCESS":"TOPIC.UNSUB_SUCCESS"),c=n.event===("sub"===e?"TOPIC.SUB_FAILED":"TOPIC.UNSUB_FAILED");(i||c)&&o===Z(n.payload)&&((i?t:r)(n),s(),a())})),a=(0,_.A)(K,this,Q).onClose((()=>{r({retryCount:5}),s(),a()}));(0,_.A)(K,this,Q).send(i)}));return"sub"===e&&(0,$.A)(Y,this).set(t,r),(0,$.A)(V,this)[e].set(r,s),s}function Z(e){const{system:t,topic:n}=e;return JSON.stringify({system:t,topic:n})}var ee=function(){var e=(0,p.A)((function*(e,t){return(yield d.http.post("api/gateway/micro_app_standalone.runtime.SearchMicroAppStandalone/api/v1/micro_app_standalone/search",e,t)).data}));return function(t,n){return e.apply(this,arguments)}}();const te=new Map,ne=new Map;function re(e,t){if(window.STANDALONE_MICRO_APPS&&!window.NO_AUTH_GUARD){const n=function(e){var t;const n={usedArgs:new Set},{customTemplates:r,menus:o}=null!==(t=e.meta)&&void 0!==t?t:{};return(0,l.traverseStoryboardExpressions)([e.routes,r,o],((e,t)=>{(0,l.collectInstalledAppsHasUsage)(n,e,t)}),"INSTALLED_APPS"),[...n.usedArgs]}(e),r=[];for(const e of n)te.has(e)||t(e)||r.push(e);if(0===r.length)return;const o=ee({query:{appId:{$in:r}},fields:["appId","currentVersion","installStatus"]},{noAbortOnRouteChange:!0}).catch((e=>{console.error("Get off site standalone micro-apps failed",e)}));for(const e of r)te.set(e,o.then((t=>{var n;const r=null==t||null===(n=t.list)||void 0===n?void 0:n.find((t=>t.appId===e)),o=r?{...r,id:e}:void 0;return ne.set(e,o),o})))}}async function oe(e){await Promise.all(e.map((e=>te.get(e))))}function ie(e){if(window.STANDALONE_MICRO_APPS)return ne.get(e)}var se=n(2304);const ae="core.provider-flow-api";function ce(e,t){return e.some((e=>e.source===t))}async function ue(e){let{url:t,originalUri:n,method:r="GET",responseWrapper:o=!0,ext_fields:i=[],request:s,isFileType:a,stream:c}=e;const u=["get","delete","head"].includes(r.toLowerCase()),l=a?{responseType:"blob"}:{};let p;for(var f=arguments.length,h=new Array(f>1?f-1:0),m=1;m<f;m++)h[m-1]=arguments[m];if(u){var g,v,A,w;let e,o;var y,b;if(n&&"object"===(null==s?void 0:s.type)&&(null!==(g=null===(v=n.match(/:([^/]+)/g))||void 0===v?void 0:v.length)&&void 0!==g?g:0)===(null!==(A=null===(w=s.fields)||void 0===w?void 0:w.length)&&void 0!==A?A:0)?[o]=h:[e,o]=h,c)return await(0,se.createSSEStream)(d.http.getUrlWithParams(t,e),{...l,...o,method:r,headers:Object.fromEntries([...new Headers(null!==(y=null===(b=o)||void 0===b?void 0:b.headers)&&void 0!==y?y:{}).entries()])});p=await d.http.simpleRequest(r,t,{params:e,...l,...o})}else{const e=function(e){if("object"!==(null==e?void 0:e.type))return!1;const t=e=>!(0,D.isEmpty)(e)&&e.some((e=>["file","file[]"].includes(e.type)||t(e.fields)));return t(e.fields)}(s),n=function(e){const t=ce(e,"query"),n=ce(e,"body");for(var r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];if(t){if(n){const[e,t,n]=o;return{data:e,options:{params:t,...n}}}const[e,t]=o;return{data:{},options:{params:e,...t}}}const[s,a]=o;return{data:s,options:a}}(i,...h),o=e?function(e){if(e instanceof FormData)return e;const t=new FormData;for(const[n,r]of Object.entries(e))Array.isArray(r)?r.forEach((e=>{t.append(n,e)})):!(0,D.isObject)(r)||r instanceof Blob||r instanceof Date?t.append(n,r):Object.entries(r).forEach((e=>{let[r,o]=e;t.append(`${n}[${r}]`,o)}));return t}(n.data):n.data;if(c){var S;const{body:e,headers:i}=d.http.getBodyAndHeaders(o,null===(S=n.options)||void 0===S?void 0:S.headers);return await(0,se.createSSEStream)(t,{...l,...n.options,method:r,headers:Object.fromEntries([...new Headers(null!=i?i:{}).entries()]),body:e})}p=await d.http.requestWithBody(r,t,o,{...l,...n.options})}return!a&&o?p.data:p}function le(){customElements.define(ae,(0,se.createProviderClass)(ue))}var pe=n(5310);const de=async(e,t)=>(await d.http.post("api/contract/single_search",e,t)).data,fe=new Map,he=new Map,me=new Map,ge=(e,t)=>{null==e||e.forEach((e=>{t.set(`${e.namespaceId}.${e.name}`,e)}))};function ve(e){ge(e,fe)}function Ae(e){ge(e,he)}function we(){he.clear()}function ye(e){ge(e,me)}function be(){me.clear()}const Se=new Map;function Ie(e){return e.includes("@")}async function Oe(e,t,n,r){if(!e.includes(":"))throw new Error(`You're using legacy Custom API "${e}" which is dropped in v3, please use Flow API instead`);const o=await async function(e){const[t,n]=e.split("@"),[r,o]=n.split(":"),i=function(e){return fe.get(e)||he.get(e)||me.get(e)}(`${t}.${r}`);if(i)return{name:i.name,namespace:i.namespaceId,serviceName:i.serviceName,version:i.version,contract:{endpoint:i.endpoint,response:i.response,request:i.request}};let s=Se.get(e);return s||(s=async function(e,t,n){var r;const{contractData:o}=await de({contractName:`${e}.${t}`,version:n});return o?{name:o.name,namespace:null===(r=o.namespace)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.name,serviceName:o.serviceName,version:o.version,contract:{endpoint:o.endpoint,response:o.response,request:o.request}}:null}(t,r,o),Se.set(e,s)),s}(e);if(!o)throw new Pe(`Flow API not found: "${e}"`);const i=function(e,t){var n,r;const o="string"==typeof t.contract?pe.safeLoad(t.contract,{schema:pe.JSON_SCHEMA,json:!0}):t.contract,{uri:i,method:s="GET",ext_fields:a}=null!==(n=null==o?void 0:o.endpoint)&&void 0!==n?n:{},c=!(null==o||!o.response)&&!1!==o.response.wrapper;if(!i)throw new Error(`Missing endpoint.uri in contract of provider "${e}"`);return{uri:i,method:"list"===s.toLowerCase()?"get":s,ext_fields:a,name:t.name,namespace:t.namespace,serviceName:t.serviceName,version:t.version,isFileType:"file"===(null==o||null===(r=o.response)||void 0===r?void 0:r.type),responseWrapper:c,request:null==o?void 0:o.request}}(e,o);return function(e,t,n,r){let{uri:o,method:i,ext_fields:s,name:a,namespace:c,serviceName:u,responseWrapper:l,version:p,isFileType:d,request:f}=e;const h="saveAs"===n;let m;h&&(m=t.shift());const{url:g,args:v}=function(e,t,n,r,o,i){const s=i?"logic.api.gateway"===o||null!=o&&o.startsWith("logic.api.gateway.")?"":o?`api/gateway/${o}`:`api/gateway/${r}.${n}@${i}`:`api/gateway/api_service.${r}.${n}`,a=t.slice(),c=e.replace(/:([^/]+)/g,(()=>a.shift()));return{url:s?s+c:c.replace(/^\//,""),args:a}}(o,t,a,c,u,p);return[...h?[m]:[],{url:g,originalUri:o,method:i,ext_fields:s,responseWrapper:l,request:f,isFileType:d,stream:r},...v]}(i,t,n,r)}class Pe extends Error{constructor(e){super(e),this.name="FlowApiNotFoundError",Error.captureStackTrace&&Error.captureStackTrace(this,Pe)}}var ke=function(){var e=(0,p.A)((function*(e,t,n){return(yield d.http.post("api/gateway/cmdb.instance.PostSearch/object/".concat(e,"/instance/_search"),t,n)).data}));return function(t,n,r){return e.apply(this,arguments)}}(),Ee=n(9740),Me=function(){var e=(0,p.A)((function*(e,t,n){return(yield d.http.get("api/gateway/micro_app.installed_micro_app.GetMenusInfo/api/v1/micro-app/menus/".concat(e),(0,Ee.A)((0,Ee.A)({},n),{},{params:t}))).data}));return function(t,n,r){return e.apply(this,arguments)}}(),Ce=n(1147);const Te=Symbol("appId"),_e=Symbol("menuI18nNamespace"),je=Symbol("overrideApp");async function Ne(e,t,n){const r=e.find((e=>"inject"!==e.type));if(!r)return;const o=[],i=new Map,s=new WeakMap;for(const t of e)if(t.i18n){const e=`menu/${t.menuId}~${t.app[0].appId}+${t.instanceId}`;Object.entries(t.i18n).forEach((t=>{let[n,r]=t;Ce.i18n.addResourceBundle(n,e,r)})),s.set(t,e)}await Promise.all(e.map((e=>async function(e,t,n,r){if(e.dynamicItems&&e.itemsResolve){const i=e.app[0].appId,s={...t,pendingPermissionsPreCheck:[...t.pendingPermissionsPreCheck,E(e.itemsResolve)]};var o;i!==t.app.id&&(s.overrideApp=window.STANDALONE_MICRO_APPS?e.overrideApp:null===(o=r.getStoryboardByAppId(i))||void 0===o?void 0:o.app,s.appendI18nNamespace=n.get(e));const a=await r.resolveData({transform:"items",...e.itemsResolve},s);e.items=a.items}}(e,t,s,n))));for(const t of e){var a;if(null!==(a=t.items)&&void 0!==a&&a.length)if("inject"===t.type&&t.injectMenuGroupId){let e=i.get(t.injectMenuGroupId);e||(e=[],i.set(t.injectMenuGroupId,e)),e.push(t)}else o.push(t)}return{...r,items:o.flatMap((e=>$e(e.items,e,i,s))),[_e]:s.get(r),[je]:r.overrideApp}}function $e(e,t,n,r){return null==e?void 0:e.map((e=>{var o;const i=e.groupId&&n.get(e.groupId);return i&&n.delete(e.groupId),{...e,children:(null!==(o=$e(e.children,t,n,r))&&void 0!==o?o:[]).concat(i?i.flatMap((e=>$e(e.items,e,n,r))):[]),[Te]:t.app[0].appId,[_e]:r.get(t),[je]:t.overrideApp}}))}function De(e){e.items=Re(e.items)}function Re(e){return function(e){return(0,D.sortBy)(e,(e=>{var t;return null!==(t=e.sort)&&void 0!==t?t:-1/0}))}(e).map((e=>({...e,children:Re(e.children)})))}var We=n(9933),Le=n(1321);function Be(e,t,n,r){if("titleDataSource"in e&&(0,se.isObject)(e.titleDataSource)&&Object.entries(e.titleDataSource).every((e=>{let[,t]=e;return null===t||""===t}))&&delete e.titleDataSource,"if"in e&&null===e.if&&delete e.if,"to"in e&&e.to&&!(0,Le.isEvaluable)(e.to)){const t=We.pipes.yaml(e.to);(0,se.isObject)(t)&&["pathname","search","hash"].some((e=>(0,se.hasOwnProperty)(t,e)))&&(e.to=t)}let o=n;if(t!==n.app.id){var i;const s=window.STANDALONE_MICRO_APPS?e[je]:null===(i=r.getStoryboardByAppId(t))||void 0===i?void 0:i.app;o={...n,overrideApp:s,appendI18nNamespace:e[_e]}}return r.asyncComputeRealValue(e,o,{ignoreSymbols:!0})}function xe(e,t,n){return Promise.all(e.map((async e=>{let{children:r,...o}=e;const[i,s]=await Promise.all([Be(o,o[Te],t,n),r&&await xe(r,t,n)]);return{...i,children:s}})))}var Ue=function(){var e=(0,p.A)((function*(e,t,n,r){return(yield d.http.get("api/gateway/cmdb.instance.GetDetail/object/".concat(e,"/instance/").concat(t),(0,Ee.A)((0,Ee.A)({},r),{},{params:n}))).data}));return function(t,n,r,o){return e.apply(this,arguments)}}();const Fe=new Map;async function qe(e){if(e.title||(0,D.isEmpty)(e.titleDataSource))return e.title;const t=JSON.stringify(e.titleDataSource),n=Fe.get(t);if(void 0!==n)return n;const{objectId:r,instanceId:o,attributeId:i}=e.titleDataSource,s=null!=i?i:"name",a=await Ue(r,o,{fields:s});let c;if("#showKey"===i&&Array.isArray(a[s])){const[e,...t]=a[s];c=t.length>0?`${e}(${t.join(",")})`:String(e)}else c=String(a[s]);return Fe.set(t,c),c}const ze=new Map,He=new Map;function Ge(e){return null==e?void 0:e.filter(h.checkIfOfComputed).map((e=>{const t=Ge(e.children);return"group"===e.type?{type:"group",title:e.text,childLayout:e.childLayout,items:t,groupId:e.groupId,groupFrom:e.groupFrom}:null!=t&&t.length?{type:"subMenu",childLayout:e.childLayout,title:e.text,icon:e.icon,items:t,defaultExpanded:e.defaultExpanded}:function(e){return e.href?I(e.href):!!e.to&&S(e.to)}(e)?null:(0,D.omit)(e,["type","items","children"])})).filter(Boolean)}function Je(e){return He.get(e)}function Ve(e,t,n){let r=ze.get(e);return r||(r=async function(e,t,n){const r=window.STANDALONE_MICRO_APPS?function(e,t,n){var r,o,i,s;const a=n.getStoryboardByAppId(t);return(null!==(r=null!==(o=null===(i=a.meta)||void 0===i?void 0:i.injectMenus)&&void 0!==o?o:null===(s=a.meta)||void 0===s?void 0:s.menus)&&void 0!==r?r:[]).filter((t=>t.menuId===e)).map((e=>{var n;return{...e,...null!==(n=e.app)&&void 0!==n&&null!==(n=n[0])&&void 0!==n&&n.appId?{}:{app:[{appId:t}]}}}))}(e,t.app.id,n):t.flags["three-level-menu-layout"]?(await Me(e,{menuObjectId:"EASYOPS_STORYBOARD_MENU"})).menus:(await ke("EASYOPS_STORYBOARD_MENU",{page:1,page_size:200,fields:{menuId:!0,title:!0,icon:!0,link:!0,titleDataSource:!0,defaultCollapsed:!0,defaultCollapsedBreakpoint:!0,type:!0,injectMenuGroupId:!0,dynamicItems:!0,itemsResolve:!0,items:!0,i18n:!0,"items.children":!0,"app.appId":!0},query:{menuId:{$eq:e},app:{$size:{$gt:0}}}})).list,o=await Ne(r,t,n);if(!o)throw new Error(`Menu not found: ${e}`);De(o);const{items:i,app:s,...a}=o,c={...t,pendingPermissionsPreCheck:[...t.pendingPermissionsPreCheck,E([i,a])]};delete c.tplStateStoreId,delete c.forEachItem,delete c.forEachIndex,delete c.forEachSize;const u=s[0].appId,[l,p]=await Promise.all([Be(a,u,c,n),xe(i,c,n)]),d={title:await qe(l),...(0,D.pick)(l,["icon","link","defaultCollapsed","defaultCollapsedBreakpoint"]),menuItems:Ge(p)};He.set(e,d)}(e,t,n)),r}const Ye=[];let Ke=null;const Qe={maxWaitingTime:5e3,maxLoggedEvents:10};function Xe(){clearTimeout(Ke),Ye.length>Qe.maxLoggedEvents?Ze():Ke=setTimeout(Ze,Qe.maxWaitingTime)}function Ze(){if(0===Ye.length)return;const e={model:"easyops.FRONTEND_STAT",columns:["_ver","st","et","lt","size","time","traceId","code","duration","page","uid","username","api","type","msg","status","pageId","route","apiCount","maxApiTimeCost","apiSizeCost","pageTitle"],data:Ye.splice(0,Qe.maxLoggedEvents)};var t;!function(e,t){const n=new Blob([JSON.stringify(t)],{type:"application/json"});window.navigator.sendBeacon(e,n)}(Qe.api,e),Ye.length&&(t=Ze,(window.requestIdleCallback||window.requestAnimationFrame||(e=>setTimeout(e,17)))(t))}function et(){window.addEventListener("beforeunload",Ze,!1)}let tt,nt=!1,rt=null,ot=!0;const it=[];function st(e){nt||(nt=!0,tt||(tt=function(e,t){return Object.assign(Qe,{...t,api:e}),{sendOnExit:et,emit:Xe}}(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),tt.sendOnExit()))}const at=Symbol("HttpAnalytics");function ct(e){const t=Math.round(performance.now()),n=Date.now();return e[at]={st:n,time:Math.round(n/1e3),perfStartTime:t},e}function ut(e,t){return pt(!1,e,t)}function lt(e,t){return pt(!0,e,t)}function pt(e,t,n){const r=Math.round(performance.now()),o=Date.now(),{[at]:i,url:s}=n;if(i&&!(e&&t instanceof d.HttpAbortError)){delete n[at];const{st:c,time:u,perfStartTime:l}=i,{userInstanceId:p,username:f}=A();let h,m,g,v,w,y,b;if(e){const e=t instanceof d.HttpResponseError;(e||t instanceof d.HttpParseError)&&(({status:w,headers:y}=t.response),e&&(b=t.responseJson))}else({status:w,data:b,headers:y}=t);(0,se.isObject)(b)&&({code:h,message:m}=b),y instanceof Headers&&(g=y.get("x-b3-traceid"),v=y.get("content-length")),a={st:c,_ver:c,uid:p,username:f,time:u,et:o,page:location.href,duration:r-l,api:s,type:"api",code:null!=h?h:-1,msg:null!=m?m:"",status:w,traceId:null!=g?g:"",size:v?Number(v):-1},rt?Ye.push({...a,type:"apiRequest",...rt}):it.push(a)}var a;return e?Promise.reject(t):t}function dt(){const e=Math.round(performance.now()),t=Date.now();return it.length=0,rt=null,function(n){let{status:r,path:o,pageTitle:i}=n;if("ok"!==r)return Ye.push(...it),void(it.length=0);const s=Math.round(performance.now())-e,a=Date.now(),{username:c}=A();(function(e){const t=function(){const e=URL.createObjectURL(new Blob([]));let t=e.substring(e.lastIndexOf("/")+1);return URL.revokeObjectURL(e),ot&&(t="88-"+t,ot=!1),t}(),{lt:n,route:r}=e;rt={lt:n,route:r,pageId:t},Ye.push({...e,pageId:t,apiCount:it.length,maxApiTimeCost:Math.max(0,...it.map((e=>e.duration))),size:it.map((e=>e.size)).filter((e=>e>0)).reduce(((e,t)=>e+t),0)});for(const e of it)Ye.push({...e,...rt});it.length=0,tt.emit()})({type:"page",page:location.href,_ver:t,time:Math.round(t/1e3),st:t,et:a,lt:s,pageTitle:i,username:c,route:o}),window.dispatchEvent(new CustomEvent("route.render",{detail:{renderTime:s}}))}}const ft=Object.freeze({checkPermissions:function(){if(!y())return!1;if(A().isAdmin)return!0;for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(const e of t)switch(k.get(e)){case"unauthorized":case"undefined":return!1;case void 0:return console.error(`Un-checked permission action: "${e}", please make sure the permission to check is defined in permissionsPreCheck.`),!1}return!0},preCheckPermissions:function(e){if(y()&&!A().isAdmin)return M((0,l.scanPermissionActionsInStoryboard)(e))},preCheckPermissionsForBrickOrRoute:async function(e,t){if(y()&&!A().isAdmin&&Array.isArray(e.permissionsPreCheck))return M(await t(e.permissionsPreCheck))}}),ht=new class{constructor(){(0,C.A)(this,K),(0,T.A)(this,J,void 0),(0,T.A)(this,V,{sub:new Map,unsub:new Map}),(0,T.A)(this,Y,new Map)}subscribe(e,t){const n=JSON.stringify(t);return(0,j.A)(K,this,X).call(this,"sub",e,t,n)}unsubscribe(e){const t=(0,$.A)(Y,this).get(e);if(!t){const t=`The message channel to unsubscribe "${e}" is not found`;return console.error(t),Promise.reject(new Error(t))}const n=JSON.parse(t),r=(0,j.A)(K,this,X).call(this,"unsub",e,n,t);return(0,$.A)(V,this).sub.delete(t),r.then((()=>{(0,$.A)(Y,this).delete(e)})),r}onMessage(e,t){let n=(0,$.A)(Y,this).get(e),r=!1;return(0,_.A)(K,this,Q).onMessage((o=>{n||(n=(0,$.A)(Y,this).get(e)),n?"MESSAGE.PUSH"===o.event&&function(e,t){const n=JSON.parse(e);return n.system===t.system&&(n.topic===t.topic||"string"==typeof n.topic&&n.topic.includes("*")&&new RegExp(`^${n.topic.replace(/([^*]*)\*([^*]*)/g,((e,t,n)=>`${(0,D.escapeRegExp)(t)}[^/]*${(0,D.escapeRegExp)(n)}`))}$`).test(t.topic))}(n,o.payload)&&t(o.payload.message):r||(console.error(`Message channel: "${e}" not found`),r=!0)}))}onClose(e){return(0,_.A)(K,this,Q).onClose(e)}reset(){var e;(0,$.A)(V,this).sub.clear(),(0,$.A)(V,this).unsub.clear(),(0,$.A)(Y,this).clear(),null===(e=(0,$.A)(J,this))||void 0===e||e.reset()}},mt=function(){const e=(0,h.getV2RuntimeFromDll)();if(e)return Object.freeze((0,D.pick)(e,["authenticate","getAuth","isLoggedIn","logout","isBlockedPath","isBlockedUrl","isBlockedHref"]))}()||r},2559:(e,t,n)=>{function r(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}n.d(t,{A:()=>r})},4586:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(1369);function o(e,t,n){return(t=(0,r.A)(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},4635:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2016);function o(e,t){(0,r.A)(e,t),t.add(e)}},5536:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t,n){return n((0,r.A)(e,t))}},6121:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(2559);function o(e,t,n){return e.set((0,r.A)(e,t),n),n}},6330:(e,t,n)=>{function r(e,t,n,r,o,i,s){try{var a=e[i](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var s=e.apply(t,n);function a(e){r(s,o,i,a,c,"next",e)}function c(e){r(s,o,i,a,c,"throw",e)}a(void 0)}))}}n.d(t,{A:()=>o})},9740:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(4586);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){(0,r.A)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}}}]);
3
+ //# sourceMappingURL=2252.1f2ddd43.js.map