@next-bricks/nav 1.22.6 → 1.22.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/bricks.json +6 -6
  2. package/dist/chunks/2133.ea2a4372.js +2 -0
  3. package/dist/chunks/{2133.da6853e0.js.map → 2133.ea2a4372.js.map} +1 -1
  4. package/dist/chunks/2252.b5b0eabf.js +3 -0
  5. package/dist/chunks/2252.b5b0eabf.js.map +1 -0
  6. package/dist/chunks/3171.ea91e438.js +2 -0
  7. package/dist/chunks/{3171.0b1166be.js.map → 3171.ea91e438.js.map} +1 -1
  8. package/dist/chunks/{3796.09aff817.js → 3796.f0bb487b.js} +3 -3
  9. package/dist/chunks/{3796.09aff817.js.map → 3796.f0bb487b.js.map} +1 -1
  10. package/dist/chunks/4433.49049133.js +2 -0
  11. package/dist/chunks/{4433.f60c1608.js.map → 4433.49049133.js.map} +1 -1
  12. package/dist/chunks/{4727.be7a4093.js → 4727.3c547231.js} +2 -2
  13. package/dist/chunks/{4727.be7a4093.js.map → 4727.3c547231.js.map} +1 -1
  14. package/dist/chunks/4765.585e43e8.js +2 -0
  15. package/dist/chunks/4765.585e43e8.js.map +1 -0
  16. package/dist/chunks/{7218.3827fb8c.js → 4837.b86d7cca.js} +2 -2
  17. package/dist/chunks/4837.b86d7cca.js.map +1 -0
  18. package/dist/chunks/5552.4e93ba05.js +2 -0
  19. package/dist/chunks/{5552.b1be0ff5.js.map → 5552.4e93ba05.js.map} +1 -1
  20. package/dist/chunks/6595.6fe138dd.js +2 -0
  21. package/dist/chunks/{6595.10280bfe.js.map → 6595.6fe138dd.js.map} +1 -1
  22. package/dist/chunks/7146.57a33476.js +2 -0
  23. package/dist/chunks/7146.57a33476.js.map +1 -0
  24. package/dist/chunks/{4837.ecd3625e.js → 7218.1769ed60.js} +2 -2
  25. package/dist/chunks/7218.1769ed60.js.map +1 -0
  26. package/dist/chunks/{8097.49954029.js → 8097.9168e009.js} +2 -2
  27. package/dist/chunks/{8097.49954029.js.map → 8097.9168e009.js.map} +1 -1
  28. package/dist/chunks/9140.356aebfa.js +3 -0
  29. package/dist/chunks/9140.356aebfa.js.map +1 -0
  30. package/dist/chunks/{9149.60608585.js → 9149.38b0a717.js} +2 -2
  31. package/dist/chunks/{9149.60608585.js.map → 9149.38b0a717.js.map} +1 -1
  32. package/dist/chunks/{9363.5c4e2e77.js → 9363.20c782a3.js} +3 -3
  33. package/dist/chunks/{9363.5c4e2e77.js.map → 9363.20c782a3.js.map} +1 -1
  34. package/dist/chunks/{easyops-navbar-alerts.c3bbc03c.js → easyops-navbar-alerts.4d6aa96d.js} +2 -2
  35. package/dist/chunks/{easyops-navbar-alerts.c3bbc03c.js.map → easyops-navbar-alerts.4d6aa96d.js.map} +1 -1
  36. package/dist/chunks/{eo-directory-tree.95ce49bf.js → eo-directory-tree.4ec90a72.js} +3 -3
  37. package/dist/chunks/{eo-directory-tree.95ce49bf.js.map → eo-directory-tree.4ec90a72.js.map} +1 -1
  38. package/dist/chunks/{eo-directory.2569d62c.js → eo-directory.d83a1d5a.js} +3 -3
  39. package/dist/chunks/{eo-directory.2569d62c.js.map → eo-directory.d83a1d5a.js.map} +1 -1
  40. package/dist/chunks/{eo-frame-breadcrumb.fe8c36fe.js → eo-frame-breadcrumb.fee1eecc.js} +2 -2
  41. package/dist/chunks/{eo-frame-breadcrumb.fe8c36fe.js.map → eo-frame-breadcrumb.fee1eecc.js.map} +1 -1
  42. package/dist/chunks/{eo-launchpad-button-v2.3827f340.js → eo-launchpad-button-v2.2c5ab853.js} +3 -3
  43. package/dist/chunks/{eo-launchpad-button-v2.3827f340.js.map → eo-launchpad-button-v2.2c5ab853.js.map} +1 -1
  44. package/dist/chunks/{eo-launchpad-button.cfad15be.js → eo-launchpad-button.2b3bccce.js} +3 -3
  45. package/dist/chunks/{eo-launchpad-button.cfad15be.js.map → eo-launchpad-button.2b3bccce.js.map} +1 -1
  46. package/dist/chunks/{eo-nav-menu.0ba0d462.js → eo-nav-menu.66c879ff.js} +2 -2
  47. package/dist/chunks/{eo-nav-menu.0ba0d462.js.map → eo-nav-menu.66c879ff.js.map} +1 -1
  48. package/dist/chunks/{eo-sidebar-menu-group.53ab032a.js → eo-sidebar-menu-group.9f248d04.js} +3 -3
  49. package/dist/chunks/{eo-sidebar-menu-group.53ab032a.js.map → eo-sidebar-menu-group.9f248d04.js.map} +1 -1
  50. package/dist/chunks/{eo-sidebar-menu-submenu.f38ee113.js → eo-sidebar-menu-submenu.bcaa6663.js} +3 -3
  51. package/dist/chunks/{eo-sidebar-menu-submenu.f38ee113.js.map → eo-sidebar-menu-submenu.bcaa6663.js.map} +1 -1
  52. package/dist/chunks/{eo-sidebar-menu.29136e0e.js → eo-sidebar-menu.15ef8268.js} +2 -2
  53. package/dist/chunks/{eo-sidebar-menu.29136e0e.js.map → eo-sidebar-menu.15ef8268.js.map} +1 -1
  54. package/dist/chunks/{eo-sidebar-sub-menu.76e8dd99.js → eo-sidebar-sub-menu.12877a1d.js} +3 -3
  55. package/dist/chunks/{eo-sidebar-sub-menu.76e8dd99.js.map → eo-sidebar-sub-menu.12877a1d.js.map} +1 -1
  56. package/dist/chunks/{eo-sidebar.acd28162.js → eo-sidebar.f56a5176.js} +3 -3
  57. package/dist/chunks/{eo-sidebar.acd28162.js.map → eo-sidebar.f56a5176.js.map} +1 -1
  58. package/dist/chunks/get-menu-config-options.d5c02f8d.js +2 -0
  59. package/dist/chunks/{get-menu-config-options.59beed7f.js.map → get-menu-config-options.d5c02f8d.js.map} +1 -1
  60. package/dist/chunks/get-menu-config-tree.3c208a90.js +2 -0
  61. package/dist/chunks/{get-menu-config-tree.9f5f9801.js.map → get-menu-config-tree.3c208a90.js.map} +1 -1
  62. package/dist/chunks/launchpad-config.654bf9d4.js +3 -0
  63. package/dist/chunks/{launchpad-config.aee9332d.js.map → launchpad-config.654bf9d4.js.map} +1 -1
  64. package/dist/chunks/main.45f885cf.js +2 -0
  65. package/dist/chunks/main.45f885cf.js.map +1 -0
  66. package/dist/chunks/{nav-logo.50235ee1.js → nav-logo.fff63779.js} +2 -2
  67. package/dist/chunks/{nav-logo.50235ee1.js.map → nav-logo.fff63779.js.map} +1 -1
  68. package/dist/chunks/{poll-announce.9de5096f.js → poll-announce.b1be9cf9.js} +3 -3
  69. package/dist/chunks/{poll-announce.9de5096f.js.map → poll-announce.b1be9cf9.js.map} +1 -1
  70. package/dist/chunks/query-search.7b7e3415.js +3 -0
  71. package/dist/chunks/{query-search.4458a0d7.js.map → query-search.7b7e3415.js.map} +1 -1
  72. package/dist/index.59a98ae7.js +2 -0
  73. package/dist/index.59a98ae7.js.map +1 -0
  74. package/dist/manifest.json +10 -10
  75. package/package.json +2 -2
  76. package/dist/chunks/2133.da6853e0.js +0 -2
  77. package/dist/chunks/2252.5f1f929b.js +0 -3
  78. package/dist/chunks/2252.5f1f929b.js.map +0 -1
  79. package/dist/chunks/3171.0b1166be.js +0 -2
  80. package/dist/chunks/3933.807693fc.js +0 -2
  81. package/dist/chunks/3933.807693fc.js.map +0 -1
  82. package/dist/chunks/4433.f60c1608.js +0 -2
  83. package/dist/chunks/4837.ecd3625e.js.map +0 -1
  84. package/dist/chunks/5552.b1be0ff5.js +0 -2
  85. package/dist/chunks/6314.94b59f96.js +0 -2
  86. package/dist/chunks/6314.94b59f96.js.map +0 -1
  87. package/dist/chunks/6595.10280bfe.js +0 -2
  88. package/dist/chunks/7218.3827fb8c.js.map +0 -1
  89. package/dist/chunks/9140.c39af7ec.js +0 -3
  90. package/dist/chunks/9140.c39af7ec.js.map +0 -1
  91. package/dist/chunks/get-menu-config-options.59beed7f.js +0 -2
  92. package/dist/chunks/get-menu-config-tree.9f5f9801.js +0 -2
  93. package/dist/chunks/launchpad-config.aee9332d.js +0 -3
  94. package/dist/chunks/main.7d7b906b.js +0 -2
  95. package/dist/chunks/main.7d7b906b.js.map +0 -1
  96. package/dist/chunks/query-search.4458a0d7.js +0 -3
  97. package/dist/index.fe708486.js +0 -2
  98. package/dist/index.fe708486.js.map +0 -1
  99. /package/dist/chunks/{2252.5f1f929b.js.LICENSE.txt → 2252.b5b0eabf.js.LICENSE.txt} +0 -0
  100. /package/dist/chunks/{3796.09aff817.js.LICENSE.txt → 3796.f0bb487b.js.LICENSE.txt} +0 -0
  101. /package/dist/chunks/{9140.c39af7ec.js.LICENSE.txt → 9140.356aebfa.js.LICENSE.txt} +0 -0
  102. /package/dist/chunks/{9363.5c4e2e77.js.LICENSE.txt → 9363.20c782a3.js.LICENSE.txt} +0 -0
  103. /package/dist/chunks/{eo-directory-tree.95ce49bf.js.LICENSE.txt → eo-directory-tree.4ec90a72.js.LICENSE.txt} +0 -0
  104. /package/dist/chunks/{eo-directory.2569d62c.js.LICENSE.txt → eo-directory.d83a1d5a.js.LICENSE.txt} +0 -0
  105. /package/dist/chunks/{eo-launchpad-button-v2.3827f340.js.LICENSE.txt → eo-launchpad-button-v2.2c5ab853.js.LICENSE.txt} +0 -0
  106. /package/dist/chunks/{eo-launchpad-button.cfad15be.js.LICENSE.txt → eo-launchpad-button.2b3bccce.js.LICENSE.txt} +0 -0
  107. /package/dist/chunks/{eo-sidebar-menu-group.53ab032a.js.LICENSE.txt → eo-sidebar-menu-group.9f248d04.js.LICENSE.txt} +0 -0
  108. /package/dist/chunks/{eo-sidebar-menu-submenu.f38ee113.js.LICENSE.txt → eo-sidebar-menu-submenu.bcaa6663.js.LICENSE.txt} +0 -0
  109. /package/dist/chunks/{eo-sidebar-sub-menu.76e8dd99.js.LICENSE.txt → eo-sidebar-sub-menu.12877a1d.js.LICENSE.txt} +0 -0
  110. /package/dist/chunks/{eo-sidebar.acd28162.js.LICENSE.txt → eo-sidebar.f56a5176.js.LICENSE.txt} +0 -0
  111. /package/dist/chunks/{launchpad-config.aee9332d.js.LICENSE.txt → launchpad-config.654bf9d4.js.LICENSE.txt} +0 -0
  112. /package/dist/chunks/{poll-announce.9de5096f.js.LICENSE.txt → poll-announce.b1be9cf9.js.LICENSE.txt} +0 -0
  113. /package/dist/chunks/{query-search.4458a0d7.js.LICENSE.txt → query-search.7b7e3415.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -12,8 +12,8 @@
12
12
  ],
13
13
  "elements": [
14
14
  "eo-nav-menu",
15
- "eo-launchpad-button",
16
15
  "eo-launchpad-button-v2",
16
+ "eo-launchpad-button",
17
17
  "eo-launchpad-quick-access",
18
18
  "eo-search-launchpad",
19
19
  "eo-launchpad-recent-visits",
@@ -42,10 +42,6 @@
42
42
  "eo-input",
43
43
  "eo-tooltip"
44
44
  ],
45
- "eo-launchpad-button": [
46
- "eo-icon",
47
- "eo-link"
48
- ],
49
45
  "eo-launchpad-button-v2": [
50
46
  "basic.lock-body-scroll",
51
47
  "eo-icon",
@@ -63,6 +59,10 @@
63
59
  "eo-icon",
64
60
  "eo-link"
65
61
  ],
62
+ "eo-launchpad-button": [
63
+ "eo-icon",
64
+ "eo-link"
65
+ ],
66
66
  "eo-launchpad-quick-access": [
67
67
  "eo-icon",
68
68
  "eo-link",
@@ -152,5 +152,5 @@
152
152
  "eo-tooltip"
153
153
  ]
154
154
  },
155
- "filePath": "bricks/nav/dist/index.fe708486.js"
155
+ "filePath": "bricks/nav/dist/index.59a98ae7.js"
156
156
  }
@@ -0,0 +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(2202),s=n(815),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(4726);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(1280),o=n(4493);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.ea2a4372.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunks/2133.da6853e0.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.ea2a4372.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":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 2252.b5b0eabf.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:()=>vt,checkInstalledApps:()=>o,checkPermissions:()=>mt,flowApi:()=>i,menu:()=>s,messageDispatcher:()=>gt});var r={};n.r(r),n.d(r,{addPathToBlackList:()=>S,authenticate:()=>A,getAuth:()=>w,isBlockedHref:()=>P,isBlockedPath:()=>I,isBlockedUrl:()=>O,isLoggedIn:()=>b,logout:()=>y});var o={};n.r(o),n.d(o,{getCheckedApp:()=>ae,preCheckInstalledApps:()=>ie,waitForCheckingApps:()=>se});var i={};n.r(i),n.d(i,{FLOW_API_PROVIDER:()=>ue,clearCollectWidgetContract:()=>be,clearDebugContract:()=>Ie,collectContract:()=>we,collectDebugContract:()=>Se,collectWidgetContract:()=>ye,getArgsOfFlowApi:()=>ke,isFlowApiProvider:()=>Pe,registerFlowApiProvider:()=>de});var s={};n.r(s),n.d(s,{fetchMenuById:()=>Ke,getMenuById:()=>Ye});var a={};n.r(a),n.d(a,{onRequest:()=>lt,onResponse:()=>pt,onResponseError:()=>dt});var c={};n.r(c),n.d(c,{create:()=>ht});var u={};n.r(u),n.d(u,{http:()=>a,initialize:()=>ct,pageView:()=>c});var l=n(2065),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(2202),m=n(1732);const g={};let v=new Set;function A(e){var t;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}),v=new Set(null===(t=e.license)||void 0===t?void 0:t.blackList)}function w(){return{...g}}function y(){for(const e of Object.keys(g))g[e]=void 0;k.clear(),E.length=0,M.clear()}function b(){return void 0!==g.username}function S(e){v.add(e)}function I(e){return[...v].some((t=>(0,h.matchPath)(e,{path:t})))}function O(e){const t=("string"==typeof e?(0,m.createLocation)(e):e).pathname;return"string"==typeof t&&I(t)}function P(e){const t=(0,h.getBasePath)(),n=new URL(e,`${location.origin}${t}`);return!(n.origin!==location.origin||!n.pathname.startsWith(t))&&I(n.pathname.substring(t.length-1))}const k=new Map,E=[],M=new Map;function C(e){if(b()&&!w().isAdmin)return T((0,l.scanPermissionActionsInAny)(e))}async function T(e){const t=e.filter((e=>!E.includes(e)));if(0===t.length)return;const n=[],r=[];for(const e of t){const t=k.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)M.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{E.push(...r)}})();for(const t of r)k.set(t,e);n.push(e)}await Promise.all(n)}var _=n(4635),j=n(918),N=n(5536),$=n(2559),D=n(6121),R=n(829),L=n(1030),B=new WeakMap,W=new WeakMap,x=new WeakMap,U=new WeakMap,F=new WeakMap,q=new WeakMap,z=new WeakMap,H=new WeakSet;class G{constructor(e){(0,_.A)(this,H),(0,j.A)(this,B,void 0),(0,j.A)(this,W,void 0),(0,j.A)(this,x,[]),(0,j.A)(this,U,new Set),(0,j.A)(this,F,new Set),(0,j.A)(this,q,0),(0,j.A)(this,z,!1),(0,D.A)(B,this,e)}send(e){(0,R.A)(W,this)||(0,D.A)(W,this,(0,$.A)(H,this,J).call(this));const t=JSON.stringify(e);(0,R.A)(W,this).readyState===WebSocket.OPEN?(0,R.A)(W,this).send(t):(0,R.A)(x,this).push(t)}onMessage(e){return(0,R.A)(U,this).add(e),()=>{(0,R.A)(U,this).delete(e)}}onClose(e){return(0,R.A)(F,this).add(e),()=>{(0,R.A)(F,this).delete(e)}}reset(){(0,R.A)(x,this).length=0,(0,R.A)(U,this).clear(),(0,R.A)(F,this).clear()}close(){var e;(0,D.A)(z,this,!0),(null===(e=(0,R.A)(W,this))||void 0===e?void 0:e.readyState)===WebSocket.OPEN&&(0,R.A)(W,this).close()}}function J(){console.log("WebSocket connecting ...");const e=new WebSocket((0,R.A)(B,this));let t;return e.addEventListener("open",(n=>{console.log("WebSocket open:",n),t=setTimeout((()=>{t=void 0,(0,D.A)(q,this,0)}),1e3);for(const t of(0,R.A)(x,this))e.send(t);(0,R.A)(x,this).length=0})),e.addEventListener("close",(e=>{(0,R.A)(z,this)||(void 0!==t&&clearTimeout(t),console.log("WebSocket close:",e),1e3!==e.code&&(0,$.A)(H,this,V).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,R.A)(U,this))e(t)})),e}function V(){if((0,R.A)(q,this)>=5){console.error("WebSocket connect retry limit exceeded");for(const e of(0,R.A)(F,this))e();return}const e=1e3*Math.pow(2,(0,R.A)(q,this));console.log("WebSocket will reconnect after %d seconds",e/1e3),setTimeout((()=>{var e;(0,D.A)(q,this,(e=(0,R.A)(q,this),++e)),(0,D.A)(W,this,(0,$.A)(H,this,J).call(this))}),e)}var Y=new WeakMap,K=new WeakMap,Q=new WeakMap,X=new WeakSet;function Z(e){if(!(0,R.A)(Y,e)){const t=`${"https:"===location.protocol?"wss:":"ws:"}//${window.location.host}${(0,h.getBasePath)()}api/websocket_service/v1/ws`;(0,D.A)(Y,e,new G(t))}return(0,R.A)(Y,e)}function ee(e,t,n,r){const o=(0,R.A)(K,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=te(n),s=(0,N.A)(X,this,Z).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===te(n.payload)&&((i?t:r)(n),s(),a())})),a=(0,N.A)(X,this,Z).onClose((()=>{r({retryCount:5}),s(),a()}));(0,N.A)(X,this,Z).send(i)}));return"sub"===e&&(0,R.A)(Q,this).set(t,r),(0,R.A)(K,this)[e].set(r,s),s}function te(e){const{system:t,topic:n}=e;return JSON.stringify({system:t,topic:n})}var ne=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 re=new Map,oe=new Map;function ie(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)re.has(e)||t(e)||r.push(e);if(0===r.length)return;const o=ne({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)re.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 oe.set(e,o),o})))}}async function se(e){await Promise.all(e.map((e=>re.get(e))))}function ae(e){if(window.STANDALONE_MICRO_APPS)return oe.get(e)}var ce=n(4493);const ue="core.provider-flow-api";function le(e,t){return null==e?void 0:e.some((e=>e.source===t))}async function pe(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,ce.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,L.isEmpty)(e)&&e.some((e=>["file","file[]"].includes(e.type)||t(e.fields)));return t(e.fields)}(s),n=function(e){const t=le(e,"query");for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];if(t){if(le(e,"body")){const[e,t,n]=r;return{data:e,options:{params:t,...n}}}const[t,n]=r;return{data:{},options:{params:t,...n}}}const[i,s]=r;return{data:i,options:s}}(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,L.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,ce.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 de(){customElements.define(ue,(0,ce.createProviderClass)(pe))}var fe=n(5310);const he=async(e,t)=>(await d.http.post("api/contract/single_search",e,t)).data,me=new Map,ge=new Map,ve=new Map,Ae=(e,t)=>{null==e||e.forEach((e=>{t.set(`${e.namespaceId}.${e.name}`,e)}))};function we(e){Ae(e,me)}function ye(e){Ae(e,ge)}function be(){ge.clear()}function Se(e){Ae(e,ve)}function Ie(){ve.clear()}const Oe=new Map;function Pe(e){return e.includes("@")}async function ke(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 me.get(e)||ge.get(e)||ve.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=Oe.get(e);return s||(s=async function(e,t,n){var r;const{contractData:o}=await he({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),Oe.set(e,s)),s}(e);if(!o)throw new Ee(`Flow API not found: "${e}"`);const i=function(e,t){var n,r;const o="string"==typeof t.contract?fe.safeLoad(t.contract,{schema:fe.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){const{uri:o,method:i,ext_fields:s,responseWrapper:a,isFileType:c,request:u}=e,l="saveAs"===n;let p,d=t;l&&(Array.isArray(t)?(d=t.slice(),p=d.shift()):p=t.filename);const{url:f,args:h}=function(e,t){const{uri:n,name:r,namespace:o,serviceName:i,version:s,method:a="GET",request:c,ext_fields:u}=e,l=s?"logic.api.gateway"===i||null!=i&&i.startsWith("logic.api.gateway.")?"":i?`api/gateway/${i}`:`api/gateway/${o}.${r}@${s}`:`api/gateway/api_service.${o}.${r}`;let p,d=[];if(Array.isArray(t))d=t.slice(),p=n.replace(/:([^/]+)/g,(()=>d.shift()));else{const e={...t.params};if(p=n.replace(/:([^/]+)/g,((t,n)=>{if((0,ce.hasOwnProperty)(e,n)){const t=e[n];return delete e[n],t}throw new Error(`Missing required param: "${n}"`)})),["get","delete","head"].includes(a.toLowerCase())){var f,h,m,g;"object"===(null==c?void 0:c.type)&&(null!==(f=null===(h=n.match(/:([^/]+)/g))||void 0===h?void 0:h.length)&&void 0!==f?f:0)===(null!==(m=null===(g=c.fields)||void 0===g?void 0:g.length)&&void 0!==m?m:0)||d.push(e)}else{const t=null==u?void 0:u.find((e=>"body"===e.source));if(t){let n;t.name&&(0,ce.hasOwnProperty)(e,t.name)&&(n=e[t.name],delete e[t.name]),d.push(n)}const n=null==u?void 0:u.find((e=>"query"===e.source));if(n){let t;n.name&&(0,ce.hasOwnProperty)(e,n.name)&&(t=e[n.name],delete e[n.name]),d.push(t)}t||n||d.push(e)}t.options&&d.push(t.options)}return{url:l?l+p:p.replace(/^\//,""),args:d}}(e,d);return[...l?[p]:[],{url:f,originalUri:o,method:i,ext_fields:s,responseWrapper:a,request:u,isFileType:c,stream:r},...h]}(i,t,n,r)}class Ee extends Error{constructor(e){super(e),this.name="FlowApiNotFoundError",Error.captureStackTrace&&Error.captureStackTrace(this,Ee)}}var Me=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)}}(),Ce=n(9740),Te=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,Ce.A)((0,Ce.A)({},n),{},{params:t}))).data}));return function(t,n,r){return e.apply(this,arguments)}}(),_e=n(4726);const je=Symbol("appId"),Ne=Symbol("menuI18nNamespace"),$e=Symbol("overrideApp");async function De(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;_e.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,C(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=>Re(e.items,e,i,s))),[Ne]:s.get(r),[$e]:r.overrideApp}}function Re(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=Re(e.children,t,n,r))&&void 0!==o?o:[]).concat(i?i.flatMap((e=>Re(e.items,e,n,r))):[]),[je]:t.app[0].appId,[Ne]:r.get(t),[$e]:t.overrideApp}}))}function Le(e){e.items=Be(e.items)}function Be(e){return function(e){return(0,L.sortBy)(e,(e=>{var t;return null!==(t=e.sort)&&void 0!==t?t:-1/0}))}(e).map((e=>({...e,children:Be(e.children)})))}var We=n(9933),xe=n(1321);function Ue(e,t,n,r){if("titleDataSource"in e&&(0,ce.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,xe.isEvaluable)(e.to)){const t=We.pipes.yaml(e.to);(0,ce.isObject)(t)&&["pathname","search","hash"].some((e=>(0,ce.hasOwnProperty)(t,e)))&&(e.to=t)}let o=n;if(t!==n.app.id){var i;const s=window.STANDALONE_MICRO_APPS?e[$e]:null===(i=r.getStoryboardByAppId(t))||void 0===i?void 0:i.app;o={...n,overrideApp:s,appendI18nNamespace:e[Ne]}}return r.asyncComputeRealValue(e,o,{ignoreSymbols:!0})}function Fe(e,t,n){return Promise.all(e.map((async e=>{let{children:r,...o}=e;const[i,s]=await Promise.all([Ue(o,o[je],t,n),r&&await Fe(r,t,n)]);return{...i,children:s}})))}var qe=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,Ce.A)((0,Ce.A)({},r),{},{params:n}))).data}));return function(t,n,r,o){return e.apply(this,arguments)}}();const ze=new Map;async function He(e){if(e.title||(0,L.isEmpty)(e.titleDataSource))return e.title;const t=JSON.stringify(e.titleDataSource),n=ze.get(t);if(void 0!==n)return n;const{objectId:r,instanceId:o,attributeId:i}=e.titleDataSource,s=null!=i?i:"name",a=await qe(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 ze.set(t,c),c}const Ge=new Map,Je=new Map;function Ve(e){return null==e?void 0:e.filter(h.checkIfOfComputed).map((e=>{const t=Ve(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?P(e.href):!!e.to&&O(e.to)}(e)?null:(0,L.omit)(e,["type","items","children"])})).filter(Boolean)}function Ye(e){return Je.get(e)}function Ke(e,t,n){let r=Ge.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 Te(e,{menuObjectId:"EASYOPS_STORYBOARD_MENU"})).menus:(await Me("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 De(r,t,n);if(!o)throw new Error(`Menu not found: ${e}`);Le(o);const{items:i,app:s,...a}=o,c={...t,pendingPermissionsPreCheck:[...t.pendingPermissionsPreCheck,C([i,a])]};delete c.tplStateStoreId,delete c.forEachItem,delete c.forEachIndex,delete c.forEachSize;const u=s[0].appId,[l,p]=await Promise.all([Ue(a,u,c,n),Fe(i,c,n)]),d={title:await He(l),...(0,L.pick)(l,["icon","link","defaultCollapsed","defaultCollapsedBreakpoint"]),menuItems:Ve(p)};Je.set(e,d)}(e,t,n)),r}const Qe=[];let Xe=null;const Ze={maxWaitingTime:5e3,maxLoggedEvents:10};function et(){clearTimeout(Xe),Qe.length>Ze.maxLoggedEvents?tt():Xe=setTimeout(tt,Ze.maxWaitingTime)}function tt(){if(0===Qe.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:Qe.splice(0,Ze.maxLoggedEvents)};var t;!function(e,t){const n=new Blob([JSON.stringify(t)],{type:"application/json"});window.navigator.sendBeacon(e,n)}(Ze.api,e),Qe.length&&(t=tt,(window.requestIdleCallback||window.requestAnimationFrame||(e=>setTimeout(e,17)))(t))}function nt(){window.addEventListener("beforeunload",tt,!1)}let rt,ot=!1,it=null,st=!0;const at=[];function ct(e){ot||(ot=!0,rt||(rt=function(e,t){return Object.assign(Ze,{...t,api:e}),{sendOnExit:nt,emit:et}}(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),rt.sendOnExit()))}const ut=Symbol("HttpAnalytics");function lt(e){const t=Math.round(performance.now()),n=Date.now();return e[ut]={st:n,time:Math.round(n/1e3),perfStartTime:t},e}function pt(e,t){return ft(!1,e,t)}function dt(e,t){return ft(!0,e,t)}function ft(e,t,n){const r=Math.round(performance.now()),o=Date.now(),{[ut]:i,url:s}=n;if(i&&!(e&&t instanceof d.HttpAbortError)){delete n[ut];const{st:c,time:u,perfStartTime:l}=i,{userInstanceId:p,username:f}=w();let h,m,g,v,A,y,b;if(e){const e=t instanceof d.HttpResponseError;(e||t instanceof d.HttpParseError)&&(({status:A,headers:y}=t.response),e&&(b=t.responseJson))}else({status:A,data:b,headers:y}=t);(0,ce.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:A,traceId:null!=g?g:"",size:v?Number(v):-1},it?Qe.push({...a,type:"apiRequest",...it}):at.push(a)}var a;return e?Promise.reject(t):t}function ht(){const e=Math.round(performance.now()),t=Date.now();return at.length=0,it=null,function(n){let{status:r,path:o,pageTitle:i}=n;if("ok"!==r)return Qe.push(...at),void(at.length=0);const s=Math.round(performance.now())-e,a=Date.now(),{username:c}=w();(function(e){const t=function(){const e=URL.createObjectURL(new Blob([]));let t=e.substring(e.lastIndexOf("/")+1);return URL.revokeObjectURL(e),st&&(t="88-"+t,st=!1),t}(),{lt:n,route:r}=e;it={lt:n,route:r,pageId:t},Qe.push({...e,pageId:t,apiCount:at.length,maxApiTimeCost:Math.max(0,...at.map((e=>e.duration))),size:at.map((e=>e.size)).filter((e=>e>0)).reduce(((e,t)=>e+t),0)});for(const e of at)Qe.push({...e,...it});at.length=0,rt.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 mt=Object.freeze({checkPermissions:function(){if(!b())return!1;if(w().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(M.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(b()&&!w().isAdmin)return T((0,l.scanPermissionActionsInStoryboard)(e))},preCheckPermissionsForBrickOrRoute:async function(e,t){if(b()&&!w().isAdmin&&Array.isArray(e.permissionsPreCheck))return T(await t(e.permissionsPreCheck))}}),gt=new class{constructor(){(0,_.A)(this,X),(0,j.A)(this,Y,void 0),(0,j.A)(this,K,{sub:new Map,unsub:new Map}),(0,j.A)(this,Q,new Map)}subscribe(e,t){const n=JSON.stringify(t);return(0,$.A)(X,this,ee).call(this,"sub",e,t,n)}unsubscribe(e){const t=(0,R.A)(Q,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,$.A)(X,this,ee).call(this,"unsub",e,n,t);return(0,R.A)(K,this).sub.delete(t),r.then((()=>{(0,R.A)(Q,this).delete(e)})),r}onMessage(e,t){let n=(0,R.A)(Q,this).get(e),r=!1;return(0,N.A)(X,this,Z).onMessage((o=>{n||(n=(0,R.A)(Q,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,L.escapeRegExp)(t)}[^/]*${(0,L.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,N.A)(X,this,Z).onClose(e)}reset(){var e;(0,R.A)(K,this).sub.clear(),(0,R.A)(K,this).unsub.clear(),(0,R.A)(Q,this).clear(),null===(e=(0,R.A)(Y,this))||void 0===e||e.reset()}},vt=function(){const e=(0,h.getV2RuntimeFromDll)();if(e)return Object.freeze((0,L.pick)(e,["authenticate","getAuth","isLoggedIn","logout","addPathToBlackList","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.b5b0eabf.js.map