@next-bricks/nav 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/bricks.json +7 -7
  2. package/dist/chunks/{3556.63900714.js → 3556.f69f4b51.js} +2 -2
  3. package/dist/chunks/{3556.63900714.js.map → 3556.f69f4b51.js.map} +1 -1
  4. package/dist/chunks/4417.69a8b9a4.js +2 -0
  5. package/dist/chunks/4417.69a8b9a4.js.map +1 -0
  6. package/dist/chunks/{5381.8af87646.js → 5381.df614e15.js} +2 -2
  7. package/dist/chunks/{6660.3f8c442f.js.map → 5381.df614e15.js.map} +1 -1
  8. package/dist/chunks/{6482.c5d88285.js → 6482.80f934a5.js} +2 -2
  9. package/dist/chunks/{6482.c5d88285.js.map → 6482.80f934a5.js.map} +1 -1
  10. package/dist/chunks/{6660.3f8c442f.js → 6660.962c2851.js} +2 -2
  11. package/dist/chunks/{5381.8af87646.js.map → 6660.962c2851.js.map} +1 -1
  12. package/dist/chunks/{7394.6ad7f583.js → 7394.5869099a.js} +3 -3
  13. package/dist/chunks/{7394.6ad7f583.js.map → 7394.5869099a.js.map} +1 -1
  14. package/dist/chunks/{7632.e16d0bce.js → 7632.151c5a64.js} +2 -2
  15. package/dist/chunks/{7632.e16d0bce.js.map → 7632.151c5a64.js.map} +1 -1
  16. package/dist/chunks/{9102.a5c7a7bb.js → 9102.43fc3111.js} +3 -3
  17. package/dist/chunks/{9102.a5c7a7bb.js.map → 9102.43fc3111.js.map} +1 -1
  18. package/dist/chunks/{easyops-navbar-alerts.43c332df.js → easyops-navbar-alerts.3bc41a39.js} +2 -2
  19. package/dist/chunks/{easyops-navbar-alerts.43c332df.js.map → easyops-navbar-alerts.3bc41a39.js.map} +1 -1
  20. package/dist/chunks/{eo-launchpad-button-v2.a612b2ce.js → eo-launchpad-button-v2.e881ca9e.js} +3 -3
  21. package/dist/chunks/{eo-launchpad-button-v2.a612b2ce.js.map → eo-launchpad-button-v2.e881ca9e.js.map} +1 -1
  22. package/dist/chunks/{eo-launchpad-recent-visits.db8365bb.js → eo-launchpad-recent-visits.487f236d.js} +3 -3
  23. package/dist/chunks/{eo-launchpad-recent-visits.db8365bb.js.map → eo-launchpad-recent-visits.487f236d.js.map} +1 -1
  24. package/dist/chunks/{eo-nav-menu.f06d9b26.js → eo-nav-menu.b49050d8.js} +2 -2
  25. package/dist/chunks/{eo-nav-menu.f06d9b26.js.map → eo-nav-menu.b49050d8.js.map} +1 -1
  26. package/dist/chunks/{launchpad-config.801aa0fa.js → launchpad-config.8c71fa8d.js} +3 -3
  27. package/dist/chunks/{launchpad-config.801aa0fa.js.map → launchpad-config.8c71fa8d.js.map} +1 -1
  28. package/dist/chunks/{main.45985f99.js → main.419cf4d6.js} +2 -2
  29. package/dist/chunks/{main.45985f99.js.map → main.419cf4d6.js.map} +1 -1
  30. package/dist/{index.ebf38392.js → index.c18ad686.js} +2 -2
  31. package/dist/{index.ebf38392.js.map → index.c18ad686.js.map} +1 -1
  32. package/dist/manifest.json +9 -9
  33. package/package.json +2 -2
  34. package/dist/chunks/6051.203bd482.js +0 -2
  35. package/dist/chunks/6051.203bd482.js.map +0 -1
  36. /package/dist/chunks/{7394.6ad7f583.js.LICENSE.txt → 7394.5869099a.js.LICENSE.txt} +0 -0
  37. /package/dist/chunks/{9102.a5c7a7bb.js.LICENSE.txt → 9102.43fc3111.js.LICENSE.txt} +0 -0
  38. /package/dist/chunks/{eo-launchpad-button-v2.a612b2ce.js.LICENSE.txt → eo-launchpad-button-v2.e881ca9e.js.LICENSE.txt} +0 -0
  39. /package/dist/chunks/{eo-launchpad-recent-visits.db8365bb.js.LICENSE.txt → eo-launchpad-recent-visits.487f236d.js.LICENSE.txt} +0 -0
  40. /package/dist/chunks/{launchpad-config.801aa0fa.js.LICENSE.txt → launchpad-config.8c71fa8d.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "id": "bricks/nav",
3
3
  "bricks": [
4
- "nav.easyops-navbar-alerts",
5
- "nav.launchpad-config"
4
+ "nav.launchpad-config",
5
+ "nav.easyops-navbar-alerts"
6
6
  ],
7
7
  "elements": [
8
8
  "eo-nav-menu",
@@ -34,16 +34,16 @@
34
34
  "basic.show-dialog",
35
35
  "basic.show-notification"
36
36
  ],
37
- "nav.easyops-navbar-alerts": [
38
- "eo-icon",
39
- "eo-link"
40
- ],
41
37
  "nav.launchpad-config": [
42
38
  "eo-icon",
43
39
  "eo-link",
44
40
  "eo-dropdown-actions",
45
41
  "basic.show-dialog"
46
42
  ],
43
+ "nav.easyops-navbar-alerts": [
44
+ "eo-icon",
45
+ "eo-link"
46
+ ],
47
47
  "eo-launchpad-quick-access": [
48
48
  "eo-icon",
49
49
  "eo-link",
@@ -63,5 +63,5 @@
63
63
  "basic.show-notification"
64
64
  ]
65
65
  },
66
- "filePath": "bricks/nav/dist/index.ebf38392.js"
66
+ "filePath": "bricks/nav/dist/index.c18ad686.js"
67
67
  }
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_next_bricks_nav=self.webpackChunk_next_bricks_nav||[]).push([[3556],{3132:(e,t,n)=>{n.d(t,{L:()=>c,Z:()=>i});var a=n(8657),r=n.n(a),i=r().createContext({}),c=()=>r().useContext(i)},3697:(e,t,n)=>{n.d(t,{L:()=>d,k:()=>m});var a=n(7896),r=n(8657),i=n.n(r),c=n(5178),s=n(2779),o=n.n(s),l=n(2892),u=n(3132);function m(e){var{name:t,items:n}=e;return i().createElement("li",{className:"menu-group"},i().createElement("div",{className:"menu-group-label"},t),i().createElement("ul",{className:"menu"},n.map((e=>"dir"===e.type?i().createElement(f,{key:"".concat(e.type,"-").concat(e.id),name:e.name,items:e.items}):i().createElement(p,{key:"".concat(e.type,"-").concat(e.id),item:e})))))}function p(e){var t,{item:n}=e,{loadingFavorites:s,pushRecentVisit:m,toggleStar:p,isStarred:d}=(0,u.L)(),f=(0,r.useMemo)((()=>d(n)),[d,n]),h=(0,r.useCallback)((()=>{p(n)}),[n,p]),v=(0,r.useCallback)((()=>{m(n)}),[n,m]);return i().createElement("li",{className:o()("menu-item",{starred:f,"can-star":!s})},i().createElement(l.kk,(0,a.Z)({onClick:v},"app"===n.type?{url:n.url}:{href:n.url,target:"_blank"}),i().createElement(l.V3,(0,a.Z)({className:"menu-icon",lib:"easyops",icon:"micro-app-center"},null!==(t=n.menuIcon)&&void 0!==t&&t.lib&&n.menuIcon.icon?(0,c.pick)(n.menuIcon,["lib","icon","theme","category","prefix"]):null)),i().createElement("span",{className:"menu-item-label"},n.name)),i().createElement(l.V3,{lib:"fa",prefix:f?"fas":"far",icon:"star",className:"menu-item-star",title:f?"取消收藏":"收藏",onClick:h}))}function d(e){var t,{item:n}=e,{pushRecentVisit:s,toggleStar:o}=(0,u.L)(),m=(0,r.useCallback)((()=>{"link"!==n.type&&s(n)}),[n,s]),p=(0,r.useCallback)((()=>{o(n)}),[n,o]);return i().createElement("li",{className:"sidebar-menu-item"},i().createElement(l.kk,(0,a.Z)({onClick:m},"app"===n.type?{url:n.url}:{href:n.url,target:"_blank"}),i().createElement(l.V3,(0,a.Z)({className:"sidebar-menu-icon",lib:"easyops",icon:"micro-app-center"},null!==(t=n.menuIcon)&&void 0!==t&&t.lib&&n.menuIcon.icon?(0,c.pick)(n.menuIcon,["lib","icon","theme","category","prefix"]):null)),i().createElement("span",{className:"menu-item-label"},n.name)),i().createElement(l.V3,{lib:"fa",icon:"xmark",className:"menu-item-remove",onClick:p}))}function f(e){var{name:t,items:n}=e,{searching:a}=(0,u.L)(),[c,s]=(0,r.useState)(!1),[m,d]=(0,r.useState)(!1),f=(0,r.useCallback)((()=>{a?d((e=>!e)):s((e=>!e))}),[a]);(0,r.useEffect)((()=>{d(!0)}),[a]);var h=a?m:c;return i().createElement("li",{className:"menu-item folder"},i().createElement(l.kk,{onClick:f},i().createElement(l.V3,{lib:"fa",prefix:"far",icon:"folder-open",className:"menu-icon"}),i().createElement("span",{className:"menu-item-label"},t),i().createElement(l.V3,{lib:"antd",icon:h?"up":"down",className:"menu-item-toggle"})),i().createElement("ul",{className:o()("sub-menu",{expanded:h})},n.map((e=>i().createElement(p,{key:"".concat(e.type,"-").concat(e.id),item:e})))))}},6176:(e,t,n)=>{n.d(t,{sK:()=>M,yp:()=>_,m1:()=>R});var a,r=n(3028),i=n(4795),c=n(8657),s=n(9181),o=n(3449),l=n(2890),u=n(2301),m=n(2892),p=n(2106),d=n(4008),f=n(8685),h=n(5003),v=10,I=10,y=n(107);function g(){return(g=(0,i.Z)((function*(){var e=yield(0,p.u)({},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0}),t=new Map;for(var n of e.storyboards){var a=n.app;a.localeName=(0,y.d)(a.locales,a.name),t.set(a.id,a)}var i=[],c=new Map;for(var s of e.desktops){var o=[];for(var l of s.items)switch(l.type){case"app":var u=t.get(l.id);u&&o.push((0,r.Z)((0,r.Z)({},l),{},{name:u.localeName,url:u.homepage,menuIcon:u.menuIcon}));break;case"custom":o.push(l),c.set(l.id,l);break;case"dir":var m=[];for(var d of l.items)if("app"===d.type){var f=t.get(d.id);f&&m.push((0,r.Z)((0,r.Z)({},d),{},{name:f.localeName,url:f.homepage,menuIcon:f.menuIcon}))}else"custom"===d.type&&(m.push(d),c.set(d.id,d));m.length>0&&o.push((0,r.Z)((0,r.Z)({},l),{},{items:m}))}o.length>0&&i.push((0,r.Z)((0,r.Z)({},s),{},{items:o}))}return{menuGroups:i,microAppsById:t,customLinksById:c}}))).apply(this,arguments)}function k(){return b.apply(this,arguments)}function b(){return(b=(0,i.Z)((function*(){return(yield(0,d.$)({page:1,pageSize:v},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0})).list}))).apply(this,arguments)}function Z(){return(Z=(0,i.Z)((function*(){var e=yield k(),t=[];for(var n of e)if("microApp"===n.type){var a=n.relatedApp;a.localeName=(0,y.d)(a.locales,a.name),t.push({favoriteId:n.instanceId,type:"app",name:a.localeName,id:a.appId,url:a.homepage,instanceId:a.instanceId,menuIcon:a.menuIcon})}else if("customItem"===n.type){var r=n.relatedCustomItem;t.push({favoriteId:n.instanceId,type:"custom",name:r.name,id:r.id,url:r.url,menuIcon:r.menuIcon})}else"link"===n.type&&t.push({favoriteId:n.instanceId,type:"link",name:n.name,url:n.link,menuIcon:n.icon});return t}))).apply(this,arguments)}function C(){return(C=(0,i.Z)((function*(e){return(0,f.i)({type:"app"===e.type?"microApp":"customItem",relatedInstanceId:e.instanceId},{interceptorParams:{ignoreLoadingBar:!0}})}))).apply(this,arguments)}function E(){return(E=(0,i.Z)((function*(e){return e.favoriteId?(0,h.I)(e.favoriteId):k().then((t=>{var n,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,h.I)(a);console.error("Menu item to unstar not found:",e)}))}))).apply(this,arguments)}function w(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)?e:null}function N(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)?e:null}var S="launchpad-recent-visits:".concat(null===(a=o.auth.getAuth())||void 0===a?void 0:a.org),F=new l.o(localStorage),x=[],L=new Map,B=new Map,P=!1,V=[],A=!1,_=new u.i((0,i.Z)((function*(){({menuGroups:x,microAppsById:L,customLinksById:B}=yield function(){return g.apply(this,arguments)}()),P=!0}))),M=new u.i((0,i.Z)((function*(){V=yield function(){return Z.apply(this,arguments)}(),A=!0}))),O=e=>(0,m.c0)({type:"error",message:(0,s.httpErrorToString)(e)});function R(e){var[t,n]=(0,c.useState)(x),[a,o]=(0,c.useState)(L),[l,u]=(0,c.useState)(B),[p,d]=(0,c.useState)(""),[f,h]=(0,c.useState)(!P),[y,g]=(0,c.useState)(!A),[k,b]=(0,c.useState)([]),[Z,R]=(0,c.useState)([]),[q,G]=(0,c.useState)(V);(0,c.useEffect)((()=>{e&&!f&&(n(x),o(L),u(B))}),[e,f]),(0,c.useEffect)((()=>{e&&!y&&G(V)}),[e,y]),(0,c.useEffect)((()=>{var t;e&&b(null!==(t=F.getItem(S))&&void 0!==t?t:[])}),[e]),(0,c.useEffect)((()=>{if(e){var t=function(){var e=(0,i.Z)((function*(){try{yield _.fetch(),h(!1)}catch(e){(0,s.handleHttpError)(e)}}));return function(){return e.apply(this,arguments)}}();t()}}),[e]),(0,c.useEffect)((()=>{if(e){var t=function(){var e=(0,i.Z)((function*(){try{yield M.fetch(),g(!1)}catch(e){g(!1),O(e)}}));return function(){return e.apply(this,arguments)}}();t()}}),[e]),(0,c.useEffect)((()=>{if(!f){var e=k.map((e=>{if("app"===e.type){var t=a.get(e.id);return t?{type:"app",name:t.localeName,id:t.id,url:t.homepage,instanceId:t.instanceId,menuIcon:t.menuIcon}:null}return l.get(e.id)})).filter(Boolean);R(e)}}),[l,f,a,k]);var j=(0,c.useCallback)((e=>{var t,{type:n,id:a}=e,r=null!==(t=F.getItem(S))&&void 0!==t?t:[],i=r.findIndex((e=>e.type===n&&e.id===a));i>-1&&r.splice(i,1),r.unshift({type:n,id:a}),r.length>I&&r.pop(),F.setItem(S,r)}),[]),J=(0,c.useCallback)((e=>q.some((t=>T(e,t)))),[q]),z=(0,c.useCallback)((e=>{var t,n=q.findIndex((t=>"link"===e.type?t.favoriteId===e.favoriteId:T(e,t)));if(n>-1){var a=q[n];t=q.slice(0,n).concat(q.slice(n+1)),function(e){return E.apply(this,arguments)}(a).catch(O)}else{if(q.length>=v)return void(0,m.vC)({type:"warn",title:"收藏数量已达上限",content:"当前收藏链接数量已达上限(".concat(v,"个),请删除部分收藏后再添加。")});var i=(0,r.Z)({},e);t=q.concat(i),function(e){return C.apply(this,arguments)}(e).then((e=>{e&&(i.favoriteId=e.instanceId)}),O)}G(t),V=t}),[q]),H=(0,c.useMemo)((()=>function(e,t){if(!t)return e;var n=t.toLowerCase();return e.map((e=>(0,r.Z)((0,r.Z)({},e),{},{items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return N(e,n);case"dir":var t=e.items.map((e=>"app"===e.type?w(e,n):"custom"===e.type?N(e,n):null)).filter(Boolean);return t.length>0?(0,r.Z)((0,r.Z)({},e),{},{items:t}):null}})).filter(Boolean)}))).filter((e=>e.items.length>0))}(t,p)),[t,p]);return{loading:f,q:p,setQ:d,menuGroups:H,loadingFavorites:y,favorites:q,recentVisits:Z,pushRecentVisit:j,isStarred:J,toggleStar:z}}function T(e,t){return e.instanceId&&t.instanceId?t.instanceId===e.instanceId:t.type===e.type&&t.id===e.id}},2892:(e,t,n)=>{n.d(t,{V3:()=>i,c0:()=>o,kk:()=>c,vC:()=>s});var a=n(2354),r=n(9171),i=(0,a.wrapBrick)("eo-icon"),c=(0,a.wrapBrick)("eo-link"),s=(0,r.unwrapProvider)("basic.show-dialog"),o=(0,r.unwrapProvider)("basic.show-notification")},2301:(e,t,n)=>{n.d(t,{i:()=>i});var a=n(4795),r=n(6666);class i{constructor(e){(0,r.Z)(this,"preFetchId",null),(0,r.Z)(this,"preFetchScheduled",!1),(0,r.Z)(this,"firstFetchPromise",null),(0,r.Z)(this,"isFetching",!1),(0,r.Z)(this,"task",void 0),this.task=e}schedulePrefetch(){var e=this;if(!this.preFetchScheduled){this.preFetchScheduled=!0;var t=function(){var t=(0,a.Z)((function*(){e.preFetchId=null,e.fetch()}));return function(){return t.apply(this,arguments)}}();"function"==typeof window.requestIdleCallback?this.preFetchId=window.requestIdleCallback(t):this.preFetchId=setTimeout(t)}}fetch(e){var 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()).catch((e=>{console.error(e),this.firstFetchPromise=null})).finally((()=>{this.isFetching=!1})),this.firstFetchPromise||(this.firstFetchPromise=t),!e)?this.firstFetchPromise:t}}},107:(e,t,n)=>{n.d(t,{d:()=>r});var a=n(199);function r(e,t){var n;if(!e)return t;var r=Object.fromEntries(Object.entries(e).filter((e=>{var[t,n]=e;return n.name})).map((e=>{var[t,n]=e;return[t,n.name]})));return null!==(n=(0,a.i18nText)(r))&&void 0!==n?n:t}},2890:(e,t,n)=>{n.d(t,{o:()=>a});class a{constructor(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"brick-next-";this.storage=e,this.prefix=t}setItem(e,t){this.storage.setItem(this.prefix+e,JSON.stringify(t))}getItem(e){return JSON.parse(this.storage.getItem(this.prefix+e))}removeItem(e){return this.storage.removeItem(this.prefix+e)}clear(){return this.storage.clear()}}}}]);
2
- //# sourceMappingURL=3556.63900714.js.map
1
+ "use strict";(self.webpackChunk_next_bricks_nav=self.webpackChunk_next_bricks_nav||[]).push([[3556],{3132:(e,t,n)=>{n.d(t,{L:()=>c,Z:()=>i});var a=n(8657),r=n.n(a),i=r().createContext({}),c=()=>r().useContext(i)},3697:(e,t,n)=>{n.d(t,{L:()=>d,k:()=>m});var a=n(7896),r=n(8657),i=n.n(r),c=n(5178),s=n(2779),o=n.n(s),l=n(2892),u=n(3132);function m(e){var{name:t,items:n}=e;return i().createElement("li",{className:"menu-group"},i().createElement("div",{className:"menu-group-label"},t),i().createElement("ul",{className:"menu"},n.map((e=>"dir"===e.type?i().createElement(f,{key:"".concat(e.type,"-").concat(e.id),name:e.name,items:e.items}):i().createElement(p,{key:"".concat(e.type,"-").concat(e.id),item:e})))))}function p(e){var t,{item:n}=e,{loadingFavorites:s,pushRecentVisit:m,toggleStar:p,isStarred:d}=(0,u.L)(),f=(0,r.useMemo)((()=>d(n)),[d,n]),h=(0,r.useCallback)((()=>{p(n)}),[n,p]),v=(0,r.useCallback)((()=>{m(n)}),[n,m]);return i().createElement("li",{className:o()("menu-item",{starred:f,"can-star":!s})},i().createElement(l.kk,(0,a.Z)({onClick:v},"app"===n.type?{url:n.url}:{href:n.url,target:"_blank"}),i().createElement(l.V3,(0,a.Z)({className:"menu-icon",lib:"easyops",icon:"micro-app-center"},null!==(t=n.menuIcon)&&void 0!==t&&t.lib&&n.menuIcon.icon?(0,c.pick)(n.menuIcon,["lib","icon","theme","category","prefix"]):null)),i().createElement("span",{className:"menu-item-label"},n.name)),i().createElement(l.V3,{lib:"fa",prefix:f?"fas":"far",icon:"star",className:"menu-item-star",title:f?"取消收藏":"收藏",onClick:h}))}function d(e){var t,{item:n}=e,{pushRecentVisit:s,toggleStar:o}=(0,u.L)(),m=(0,r.useCallback)((()=>{"link"!==n.type&&s(n)}),[n,s]),p=(0,r.useCallback)((()=>{o(n)}),[n,o]);return i().createElement("li",{className:"sidebar-menu-item"},i().createElement(l.kk,(0,a.Z)({onClick:m},"app"===n.type?{url:n.url}:{href:n.url,target:"_blank"}),i().createElement(l.V3,(0,a.Z)({className:"sidebar-menu-icon",lib:"easyops",icon:"micro-app-center"},null!==(t=n.menuIcon)&&void 0!==t&&t.lib&&n.menuIcon.icon?(0,c.pick)(n.menuIcon,["lib","icon","theme","category","prefix"]):null)),i().createElement("span",{className:"menu-item-label"},n.name)),i().createElement(l.V3,{lib:"fa",icon:"xmark",className:"menu-item-remove",onClick:p}))}function f(e){var{name:t,items:n}=e,{searching:a}=(0,u.L)(),[c,s]=(0,r.useState)(!1),[m,d]=(0,r.useState)(!1),f=(0,r.useCallback)((()=>{a?d((e=>!e)):s((e=>!e))}),[a]);(0,r.useEffect)((()=>{d(!0)}),[a]);var h=a?m:c;return i().createElement("li",{className:"menu-item folder"},i().createElement(l.kk,{onClick:f},i().createElement(l.V3,{lib:"fa",prefix:"far",icon:"folder-open",className:"menu-icon"}),i().createElement("span",{className:"menu-item-label"},t),i().createElement(l.V3,{lib:"antd",icon:h?"up":"down",className:"menu-item-toggle"})),i().createElement("ul",{className:o()("sub-menu",{expanded:h})},n.map((e=>i().createElement(p,{key:"".concat(e.type,"-").concat(e.id),item:e})))))}},6176:(e,t,n)=>{n.d(t,{sK:()=>M,yp:()=>_,m1:()=>R});var a,r=n(3028),i=n(4795),c=n(8657),s=n(7267),o=n(6446),l=n(2890),u=n(2301),m=n(2892),p=n(2106),d=n(4008),f=n(8685),h=n(5003),v=10,I=10,y=n(107);function g(){return(g=(0,i.Z)((function*(){var e=yield(0,p.u)({},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0}),t=new Map;for(var n of e.storyboards){var a=n.app;a.localeName=(0,y.d)(a.locales,a.name),t.set(a.id,a)}var i=[],c=new Map;for(var s of e.desktops){var o=[];for(var l of s.items)switch(l.type){case"app":var u=t.get(l.id);u&&o.push((0,r.Z)((0,r.Z)({},l),{},{name:u.localeName,url:u.homepage,menuIcon:u.menuIcon}));break;case"custom":o.push(l),c.set(l.id,l);break;case"dir":var m=[];for(var d of l.items)if("app"===d.type){var f=t.get(d.id);f&&m.push((0,r.Z)((0,r.Z)({},d),{},{name:f.localeName,url:f.homepage,menuIcon:f.menuIcon}))}else"custom"===d.type&&(m.push(d),c.set(d.id,d));m.length>0&&o.push((0,r.Z)((0,r.Z)({},l),{},{items:m}))}o.length>0&&i.push((0,r.Z)((0,r.Z)({},s),{},{items:o}))}return{menuGroups:i,microAppsById:t,customLinksById:c}}))).apply(this,arguments)}function k(){return b.apply(this,arguments)}function b(){return(b=(0,i.Z)((function*(){return(yield(0,d.$)({page:1,pageSize:v},{interceptorParams:{ignoreLoadingBar:!0},noAbortOnRouteChange:!0})).list}))).apply(this,arguments)}function Z(){return(Z=(0,i.Z)((function*(){var e=yield k(),t=[];for(var n of e)if("microApp"===n.type){var a=n.relatedApp;a.localeName=(0,y.d)(a.locales,a.name),t.push({favoriteId:n.instanceId,type:"app",name:a.localeName,id:a.appId,url:a.homepage,instanceId:a.instanceId,menuIcon:a.menuIcon})}else if("customItem"===n.type){var r=n.relatedCustomItem;t.push({favoriteId:n.instanceId,type:"custom",name:r.name,id:r.id,url:r.url,menuIcon:r.menuIcon})}else"link"===n.type&&t.push({favoriteId:n.instanceId,type:"link",name:n.name,url:n.link,menuIcon:n.icon});return t}))).apply(this,arguments)}function C(){return(C=(0,i.Z)((function*(e){return(0,f.i)({type:"app"===e.type?"microApp":"customItem",relatedInstanceId:e.instanceId},{interceptorParams:{ignoreLoadingBar:!0}})}))).apply(this,arguments)}function E(){return(E=(0,i.Z)((function*(e){return e.favoriteId?(0,h.I)(e.favoriteId):k().then((t=>{var n,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,h.I)(a);console.error("Menu item to unstar not found:",e)}))}))).apply(this,arguments)}function w(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)?e:null}function N(e,t){return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)?e:null}var S="launchpad-recent-visits:".concat(null===(a=o.auth.getAuth())||void 0===a?void 0:a.org),F=new l.o(localStorage),x=[],L=new Map,B=new Map,P=!1,V=[],A=!1,_=new u.i((0,i.Z)((function*(){({menuGroups:x,microAppsById:L,customLinksById:B}=yield function(){return g.apply(this,arguments)}()),P=!0}))),M=new u.i((0,i.Z)((function*(){V=yield function(){return Z.apply(this,arguments)}(),A=!0}))),O=e=>(0,m.c0)({type:"error",message:(0,s.httpErrorToString)(e)});function R(e){var[t,n]=(0,c.useState)(x),[a,o]=(0,c.useState)(L),[l,u]=(0,c.useState)(B),[p,d]=(0,c.useState)(""),[f,h]=(0,c.useState)(!P),[y,g]=(0,c.useState)(!A),[k,b]=(0,c.useState)([]),[Z,R]=(0,c.useState)([]),[q,G]=(0,c.useState)(V);(0,c.useEffect)((()=>{e&&!f&&(n(x),o(L),u(B))}),[e,f]),(0,c.useEffect)((()=>{e&&!y&&G(V)}),[e,y]),(0,c.useEffect)((()=>{var t;e&&b(null!==(t=F.getItem(S))&&void 0!==t?t:[])}),[e]),(0,c.useEffect)((()=>{if(e){var t=function(){var e=(0,i.Z)((function*(){try{yield _.fetch(),h(!1)}catch(e){(0,s.handleHttpError)(e)}}));return function(){return e.apply(this,arguments)}}();t()}}),[e]),(0,c.useEffect)((()=>{if(e){var t=function(){var e=(0,i.Z)((function*(){try{yield M.fetch(),g(!1)}catch(e){g(!1),O(e)}}));return function(){return e.apply(this,arguments)}}();t()}}),[e]),(0,c.useEffect)((()=>{if(!f){var e=k.map((e=>{if("app"===e.type){var t=a.get(e.id);return t?{type:"app",name:t.localeName,id:t.id,url:t.homepage,instanceId:t.instanceId,menuIcon:t.menuIcon}:null}return l.get(e.id)})).filter(Boolean);R(e)}}),[l,f,a,k]);var j=(0,c.useCallback)((e=>{var t,{type:n,id:a}=e,r=null!==(t=F.getItem(S))&&void 0!==t?t:[],i=r.findIndex((e=>e.type===n&&e.id===a));i>-1&&r.splice(i,1),r.unshift({type:n,id:a}),r.length>I&&r.pop(),F.setItem(S,r)}),[]),J=(0,c.useCallback)((e=>q.some((t=>T(e,t)))),[q]),z=(0,c.useCallback)((e=>{var t,n=q.findIndex((t=>"link"===e.type?t.favoriteId===e.favoriteId:T(e,t)));if(n>-1){var a=q[n];t=q.slice(0,n).concat(q.slice(n+1)),function(e){return E.apply(this,arguments)}(a).catch(O)}else{if(q.length>=v)return void(0,m.vC)({type:"warn",title:"收藏数量已达上限",content:"当前收藏链接数量已达上限(".concat(v,"个),请删除部分收藏后再添加。")});var i=(0,r.Z)({},e);t=q.concat(i),function(e){return C.apply(this,arguments)}(e).then((e=>{e&&(i.favoriteId=e.instanceId)}),O)}G(t),V=t}),[q]),H=(0,c.useMemo)((()=>function(e,t){if(!t)return e;var n=t.toLowerCase();return e.map((e=>(0,r.Z)((0,r.Z)({},e),{},{items:e.items.map((e=>{switch(e.type){case"app":return w(e,n);case"custom":return N(e,n);case"dir":var t=e.items.map((e=>"app"===e.type?w(e,n):"custom"===e.type?N(e,n):null)).filter(Boolean);return t.length>0?(0,r.Z)((0,r.Z)({},e),{},{items:t}):null}})).filter(Boolean)}))).filter((e=>e.items.length>0))}(t,p)),[t,p]);return{loading:f,q:p,setQ:d,menuGroups:H,loadingFavorites:y,favorites:q,recentVisits:Z,pushRecentVisit:j,isStarred:J,toggleStar:z}}function T(e,t){return e.instanceId&&t.instanceId?t.instanceId===e.instanceId:t.type===e.type&&t.id===e.id}},2892:(e,t,n)=>{n.d(t,{V3:()=>i,c0:()=>o,kk:()=>c,vC:()=>s});var a=n(2354),r=n(9171),i=(0,a.wrapBrick)("eo-icon"),c=(0,a.wrapBrick)("eo-link"),s=(0,r.unwrapProvider)("basic.show-dialog"),o=(0,r.unwrapProvider)("basic.show-notification")},2301:(e,t,n)=>{n.d(t,{i:()=>i});var a=n(4795),r=n(6666);class i{constructor(e){(0,r.Z)(this,"preFetchId",null),(0,r.Z)(this,"preFetchScheduled",!1),(0,r.Z)(this,"firstFetchPromise",null),(0,r.Z)(this,"isFetching",!1),(0,r.Z)(this,"task",void 0),this.task=e}schedulePrefetch(){var e=this;if(!this.preFetchScheduled){this.preFetchScheduled=!0;var t=function(){var t=(0,a.Z)((function*(){e.preFetchId=null,e.fetch()}));return function(){return t.apply(this,arguments)}}();"function"==typeof window.requestIdleCallback?this.preFetchId=window.requestIdleCallback(t):this.preFetchId=setTimeout(t)}}fetch(e){var 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()).catch((e=>{console.error(e),this.firstFetchPromise=null})).finally((()=>{this.isFetching=!1})),this.firstFetchPromise||(this.firstFetchPromise=t),!e)?this.firstFetchPromise:t}}},107:(e,t,n)=>{n.d(t,{d:()=>r});var a=n(199);function r(e,t){var n;if(!e)return t;var r=Object.fromEntries(Object.entries(e).filter((e=>{var[t,n]=e;return n.name})).map((e=>{var[t,n]=e;return[t,n.name]})));return null!==(n=(0,a.i18nText)(r))&&void 0!==n?n:t}},2890:(e,t,n)=>{n.d(t,{o:()=>a});class a{constructor(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"brick-next-";this.storage=e,this.prefix=t}setItem(e,t){this.storage.setItem(this.prefix+e,JSON.stringify(t))}getItem(e){return JSON.parse(this.storage.getItem(this.prefix+e))}removeItem(e){return this.storage.removeItem(this.prefix+e)}clear(){return this.storage.clear()}}}}]);
2
+ //# sourceMappingURL=3556.f69f4b51.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunks/3556.63900714.js","mappings":"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","sources":["webpack:///./src/launchpad-button-v2/LaunchpadContext.ts","webpack:///./src/launchpad-button-v2/MenuGroup.tsx","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/launchpad-button-v2/wrapped-bricks.ts","webpack:///./src/shared/DeferredService.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///../../src/JsonStorage.ts"],"sourcesContent":["import React from \"react\";\nimport type { MenuItemDataLink, MenuItemDataNormal } from \"./interfaces\";\n\nexport interface LaunchpadContextData {\n searching: boolean;\n loadingFavorites: boolean;\n pushRecentVisit(item: MenuItemDataNormal): void;\n toggleStar(item: MenuItemDataNormal | MenuItemDataLink): void;\n isStarred(item: MenuItemDataNormal): boolean;\n}\n\nexport const LaunchpadsContext = React.createContext<LaunchpadContextData>(\n {} as LaunchpadContextData\n);\n\nexport const useLaunchpadContext = (): LaunchpadContextData =>\n React.useContext(LaunchpadsContext);\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { pick } from \"lodash\";\nimport classNames from \"classnames\";\nimport { WrappedIcon, WrappedLink } from \"./wrapped-bricks\";\nimport { useLaunchpadContext } from \"./LaunchpadContext\";\nimport type {\n MenuItemData,\n MenuItemDataNormal,\n SidebarMenuItemData,\n} from \"./interfaces\";\n\nexport interface MenuGroupProps {\n name: string;\n items: MenuItemData[];\n}\n\nexport function MenuGroup({ name, items }: MenuGroupProps) {\n return (\n <li className=\"menu-group\">\n <div className=\"menu-group-label\">{name}</div>\n <ul className=\"menu\">\n {items.map((item) =>\n item.type === \"dir\" ? (\n <MenuItemFolder\n key={`${item.type}-${item.id}`}\n name={item.name}\n items={item.items}\n />\n ) : (\n <MenuItem key={`${item.type}-${item.id}`} item={item} />\n )\n )}\n </ul>\n </li>\n );\n}\n\nexport interface MenuItemProps {\n item: MenuItemDataNormal;\n}\n\nfunction MenuItem({ item }: MenuItemProps) {\n const { loadingFavorites, pushRecentVisit, toggleStar, isStarred } =\n useLaunchpadContext();\n\n const starred = useMemo(() => isStarred(item), [isStarred, item]);\n\n const handleStarClick = useCallback(() => {\n toggleStar(item);\n }, [item, toggleStar]);\n\n const handleClick = useCallback(() => {\n pushRecentVisit(item);\n }, [item, pushRecentVisit]);\n\n return (\n <li\n className={classNames(\"menu-item\", {\n starred,\n \"can-star\": !loadingFavorites,\n })}\n >\n <WrappedLink\n onClick={handleClick}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <WrappedIcon\n className=\"menu-icon\"\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(item.menuIcon?.lib && item.menuIcon.icon\n ? (pick(item.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{item.name}</span>\n </WrappedLink>\n <WrappedIcon\n lib=\"fa\"\n prefix={starred ? \"fas\" : \"far\"}\n icon=\"star\"\n className=\"menu-item-star\"\n title={starred ? \"取消收藏\" : \"收藏\"}\n onClick={handleStarClick}\n />\n </li>\n );\n}\n\nexport interface SidebarMenuItemProps {\n item: SidebarMenuItemData;\n}\n\nexport function SidebarMenuItem({ item }: SidebarMenuItemProps) {\n const { pushRecentVisit, toggleStar } = useLaunchpadContext();\n\n const handleClick = useCallback(() => {\n if (item.type !== \"link\") {\n pushRecentVisit(item);\n }\n }, [item, pushRecentVisit]);\n\n const handleRemoveStar = useCallback(() => {\n toggleStar(item);\n }, [item, toggleStar]);\n\n return (\n <li className=\"sidebar-menu-item\">\n <WrappedLink\n onClick={handleClick}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <WrappedIcon\n className={`sidebar-menu-icon`}\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(item.menuIcon?.lib && item.menuIcon.icon\n ? (pick(item.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{item.name}</span>\n </WrappedLink>\n <WrappedIcon\n lib=\"fa\"\n icon=\"xmark\"\n className=\"menu-item-remove\"\n onClick={handleRemoveStar}\n />\n </li>\n );\n}\n\nexport interface MenuItemFolderProps {\n name: string;\n items: MenuItemDataNormal[];\n}\n\nfunction MenuItemFolder({ name, items }: MenuItemFolderProps) {\n const { searching } = useLaunchpadContext();\n const [expanded, setExpanded] = useState(false);\n const [searchingExpanded, setSearchingExpanded] = useState(false);\n\n const toggle = useCallback(() => {\n // Use separated expanded states for searching and non-searching.\n if (searching) {\n setSearchingExpanded((previous) => !previous);\n } else {\n setExpanded((previous) => !previous);\n }\n }, [searching]);\n\n useEffect(() => {\n // Each time when start searching, set it as expanded.\n setSearchingExpanded(true);\n }, [searching]);\n\n const actualExpanded = searching ? searchingExpanded : expanded;\n\n return (\n <li className=\"menu-item folder\">\n <WrappedLink onClick={toggle}>\n <WrappedIcon\n lib=\"fa\"\n prefix=\"far\"\n icon=\"folder-open\"\n className=\"menu-icon\"\n />\n <span className=\"menu-item-label\">{name}</span>\n <WrappedIcon\n lib=\"antd\"\n icon={actualExpanded ? \"up\" : \"down\"}\n className=\"menu-item-toggle\"\n />\n </WrappedLink>\n <ul className={classNames(\"sub-menu\", { expanded: actualExpanded })}>\n {items.map((item) => (\n <MenuItem key={`${item.type}-${item.id}`} item={item} />\n ))}\n </ul>\n </li>\n );\n}\n","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 type {\n FavMenuItem,\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataDir,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\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 microAppsById.set(app.id, app);\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 items.push(item);\n customLinksById.set(item.id, item);\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 (subItem.type === \"custom\") {\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 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","import type {\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\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\nfunction matchMenuItemApp(item: MenuItemDataApp, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.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\n : null;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { handleHttpError, httpErrorToString } 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 StoredMenuItem,\n} from \"./interfaces\";\nimport {\n favorite,\n fetchFavorites,\n fetchLaunchpadInfo,\n undoFavorite,\n} from \"./api\";\nimport { search } 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\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\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\n const [storedRecentVisits, setStoredRecentVisits] = useState<\n StoredMenuItem[]\n >([]);\n\n const [recentVisits, setRecentVisits] = useState<MenuItemDataNormal[]>([]);\n\n const [favorites, setFavorites] = useState<FavMenuItem[]>(candidateFavorites);\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) {\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 (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 return {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n favorites,\n recentVisits,\n pushRecentVisit,\n isStarred,\n toggleStar,\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","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","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","export class JsonStorage {\n constructor(\n private storage: Storage,\n private prefix: string = \"brick-next-\"\n ) {}\n\n setItem<T = any>(name: string, value: T): void {\n this.storage.setItem(this.prefix + name, JSON.stringify(value));\n }\n\n getItem<T = any>(name: string): T {\n return JSON.parse(this.storage.getItem(this.prefix + name) as string) as T;\n }\n\n removeItem(name: string): void {\n return this.storage.removeItem(this.prefix + name);\n }\n\n clear(): void {\n return this.storage.clear();\n }\n}\n"],"names":["LaunchpadsContext","React","useLaunchpadContext","MenuGroup","_ref","name","items","className","map","item","type","MenuItemFolder","key","concat","id","MenuItem","_ref2","_item$menuIcon","loadingFavorites","pushRecentVisit","toggleStar","isStarred","starred","useMemo","handleStarClick","useCallback","handleClick","classNames","WrappedLink","_extends","onClick","url","href","target","WrappedIcon","lib","icon","menuIcon","pick","prefix","title","SidebarMenuItem","_ref3","_item$menuIcon2","handleRemoveStar","_ref4","searching","expanded","setExpanded","useState","searchingExpanded","setSearchingExpanded","toggle","previous","useEffect","actualExpanded","FAVORITES_LIMIT","RECENT_VISITS_LIMIT","_fetchLaunchpadInfo","_asyncToGenerator","launchpadInfo","LaunchpadApi_getLaunchpadInfo","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","microAppsById","Map","storyboard","storyboards","app","localeName","getAppLocaleName","locales","set","menuGroups","customLinksById","group","desktops","get","push","_objectSpread","homepage","subItems","subItem","length","apply","arguments","fetchRawFavorites","_fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","list","_fetchFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","customItem","relatedCustomItem","link","_favorite","LaunchpadApi_createCollectionV2","relatedInstanceId","_undoFavorite","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","console","error","matchMenuItemApp","lowerQ","toLowerCase","includes","matchMenuItemCustom","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","deferredLaunchpadInfo","DeferredService","fetchLaunchpadInfo","deferredFavorites","fetchFavorites","showErrorAsNotification","showNotification","message","httpErrorToString","useLaunchpadInfo","active","setDesktops","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","setLoadingFavorites","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","_storage$getItem","getItem","startFetchLaunchpadInfo","fetch","handleHttpError","startFetchFavorites","visits","filter","Boolean","_ref5","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","some","matchFavorite","newFavorites","removed","slice","_x2","undoFavorite","catch","showDialog","content","_x","favorite","result","allMenuGroups","filteredSubItems","sub","search","wrapBrick","unwrapProvider","constructor","task","_defineProperty","this","schedulePrefetch","_this","preFetchScheduled","preFetchLaunchpadInfo","preFetchId","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","firstFetchPromise","finally","_i18nText","i18nData","Object","fromEntries","entries","lang","resources","i18nText","undefined","value","JSON","stringify","parse","removeItem","clear"],"sourceRoot":""}
1
+ {"version":3,"file":"chunks/3556.f69f4b51.js","mappings":"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","sources":["webpack:///./src/launchpad-button-v2/LaunchpadContext.ts","webpack:///./src/launchpad-button-v2/MenuGroup.tsx","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/launchpad-button-v2/wrapped-bricks.ts","webpack:///./src/shared/DeferredService.ts","webpack:///./src/shared/getLocaleName.ts","webpack:///../../src/JsonStorage.ts"],"sourcesContent":["import React from \"react\";\nimport type { MenuItemDataLink, MenuItemDataNormal } from \"./interfaces\";\n\nexport interface LaunchpadContextData {\n searching: boolean;\n loadingFavorites: boolean;\n pushRecentVisit(item: MenuItemDataNormal): void;\n toggleStar(item: MenuItemDataNormal | MenuItemDataLink): void;\n isStarred(item: MenuItemDataNormal): boolean;\n}\n\nexport const LaunchpadsContext = React.createContext<LaunchpadContextData>(\n {} as LaunchpadContextData\n);\n\nexport const useLaunchpadContext = (): LaunchpadContextData =>\n React.useContext(LaunchpadsContext);\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { pick } from \"lodash\";\nimport classNames from \"classnames\";\nimport { WrappedIcon, WrappedLink } from \"./wrapped-bricks\";\nimport { useLaunchpadContext } from \"./LaunchpadContext\";\nimport type {\n MenuItemData,\n MenuItemDataNormal,\n SidebarMenuItemData,\n} from \"./interfaces\";\n\nexport interface MenuGroupProps {\n name: string;\n items: MenuItemData[];\n}\n\nexport function MenuGroup({ name, items }: MenuGroupProps) {\n return (\n <li className=\"menu-group\">\n <div className=\"menu-group-label\">{name}</div>\n <ul className=\"menu\">\n {items.map((item) =>\n item.type === \"dir\" ? (\n <MenuItemFolder\n key={`${item.type}-${item.id}`}\n name={item.name}\n items={item.items}\n />\n ) : (\n <MenuItem key={`${item.type}-${item.id}`} item={item} />\n )\n )}\n </ul>\n </li>\n );\n}\n\nexport interface MenuItemProps {\n item: MenuItemDataNormal;\n}\n\nfunction MenuItem({ item }: MenuItemProps) {\n const { loadingFavorites, pushRecentVisit, toggleStar, isStarred } =\n useLaunchpadContext();\n\n const starred = useMemo(() => isStarred(item), [isStarred, item]);\n\n const handleStarClick = useCallback(() => {\n toggleStar(item);\n }, [item, toggleStar]);\n\n const handleClick = useCallback(() => {\n pushRecentVisit(item);\n }, [item, pushRecentVisit]);\n\n return (\n <li\n className={classNames(\"menu-item\", {\n starred,\n \"can-star\": !loadingFavorites,\n })}\n >\n <WrappedLink\n onClick={handleClick}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <WrappedIcon\n className=\"menu-icon\"\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(item.menuIcon?.lib && item.menuIcon.icon\n ? (pick(item.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{item.name}</span>\n </WrappedLink>\n <WrappedIcon\n lib=\"fa\"\n prefix={starred ? \"fas\" : \"far\"}\n icon=\"star\"\n className=\"menu-item-star\"\n title={starred ? \"取消收藏\" : \"收藏\"}\n onClick={handleStarClick}\n />\n </li>\n );\n}\n\nexport interface SidebarMenuItemProps {\n item: SidebarMenuItemData;\n}\n\nexport function SidebarMenuItem({ item }: SidebarMenuItemProps) {\n const { pushRecentVisit, toggleStar } = useLaunchpadContext();\n\n const handleClick = useCallback(() => {\n if (item.type !== \"link\") {\n pushRecentVisit(item);\n }\n }, [item, pushRecentVisit]);\n\n const handleRemoveStar = useCallback(() => {\n toggleStar(item);\n }, [item, toggleStar]);\n\n return (\n <li className=\"sidebar-menu-item\">\n <WrappedLink\n onClick={handleClick}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <WrappedIcon\n className={`sidebar-menu-icon`}\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(item.menuIcon?.lib && item.menuIcon.icon\n ? (pick(item.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{item.name}</span>\n </WrappedLink>\n <WrappedIcon\n lib=\"fa\"\n icon=\"xmark\"\n className=\"menu-item-remove\"\n onClick={handleRemoveStar}\n />\n </li>\n );\n}\n\nexport interface MenuItemFolderProps {\n name: string;\n items: MenuItemDataNormal[];\n}\n\nfunction MenuItemFolder({ name, items }: MenuItemFolderProps) {\n const { searching } = useLaunchpadContext();\n const [expanded, setExpanded] = useState(false);\n const [searchingExpanded, setSearchingExpanded] = useState(false);\n\n const toggle = useCallback(() => {\n // Use separated expanded states for searching and non-searching.\n if (searching) {\n setSearchingExpanded((previous) => !previous);\n } else {\n setExpanded((previous) => !previous);\n }\n }, [searching]);\n\n useEffect(() => {\n // Each time when start searching, set it as expanded.\n setSearchingExpanded(true);\n }, [searching]);\n\n const actualExpanded = searching ? searchingExpanded : expanded;\n\n return (\n <li className=\"menu-item folder\">\n <WrappedLink onClick={toggle}>\n <WrappedIcon\n lib=\"fa\"\n prefix=\"far\"\n icon=\"folder-open\"\n className=\"menu-icon\"\n />\n <span className=\"menu-item-label\">{name}</span>\n <WrappedIcon\n lib=\"antd\"\n icon={actualExpanded ? \"up\" : \"down\"}\n className=\"menu-item-toggle\"\n />\n </WrappedLink>\n <ul className={classNames(\"sub-menu\", { expanded: actualExpanded })}>\n {items.map((item) => (\n <MenuItem key={`${item.type}-${item.id}`} item={item} />\n ))}\n </ul>\n </li>\n );\n}\n","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 type {\n FavMenuItem,\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\n MenuItemDataDir,\n MenuItemDataNormal,\n MicroAppWithInstanceId,\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 microAppsById.set(app.id, app);\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 items.push(item);\n customLinksById.set(item.id, item);\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 (subItem.type === \"custom\") {\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 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","import type {\n MenuGroupData,\n MenuItemData,\n MenuItemDataApp,\n MenuItemDataCustom,\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\nfunction matchMenuItemApp(item: MenuItemDataApp, lowerQ: string) {\n return item.id.toLowerCase().includes(lowerQ) ||\n item.name.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\n : null;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { handleHttpError, httpErrorToString } 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 StoredMenuItem,\n} from \"./interfaces\";\nimport {\n favorite,\n fetchFavorites,\n fetchLaunchpadInfo,\n undoFavorite,\n} from \"./api\";\nimport { search } 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\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\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\n const [storedRecentVisits, setStoredRecentVisits] = useState<\n StoredMenuItem[]\n >([]);\n\n const [recentVisits, setRecentVisits] = useState<MenuItemDataNormal[]>([]);\n\n const [favorites, setFavorites] = useState<FavMenuItem[]>(candidateFavorites);\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) {\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 (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 return {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n favorites,\n recentVisits,\n pushRecentVisit,\n isStarred,\n toggleStar,\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","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","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","export class JsonStorage {\n constructor(\n private storage: Storage,\n private prefix: string = \"brick-next-\"\n ) {}\n\n setItem<T = any>(name: string, value: T): void {\n this.storage.setItem(this.prefix + name, JSON.stringify(value));\n }\n\n getItem<T = any>(name: string): T {\n return JSON.parse(this.storage.getItem(this.prefix + name) as string) as T;\n }\n\n removeItem(name: string): void {\n return this.storage.removeItem(this.prefix + name);\n }\n\n clear(): void {\n return this.storage.clear();\n }\n}\n"],"names":["LaunchpadsContext","React","useLaunchpadContext","MenuGroup","_ref","name","items","className","map","item","type","MenuItemFolder","key","concat","id","MenuItem","_ref2","_item$menuIcon","loadingFavorites","pushRecentVisit","toggleStar","isStarred","starred","useMemo","handleStarClick","useCallback","handleClick","classNames","WrappedLink","_extends","onClick","url","href","target","WrappedIcon","lib","icon","menuIcon","pick","prefix","title","SidebarMenuItem","_ref3","_item$menuIcon2","handleRemoveStar","_ref4","searching","expanded","setExpanded","useState","searchingExpanded","setSearchingExpanded","toggle","previous","useEffect","actualExpanded","FAVORITES_LIMIT","RECENT_VISITS_LIMIT","_fetchLaunchpadInfo","_asyncToGenerator","launchpadInfo","LaunchpadApi_getLaunchpadInfo","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","microAppsById","Map","storyboard","storyboards","app","localeName","getAppLocaleName","locales","set","menuGroups","customLinksById","group","desktops","get","push","_objectSpread","homepage","subItems","subItem","length","apply","arguments","fetchRawFavorites","_fetchRawFavorites","LaunchpadApi_listCollectionV2","page","pageSize","list","_fetchFavorites","stored","fav","relatedApp","favoriteId","instanceId","appId","customItem","relatedCustomItem","link","_favorite","LaunchpadApi_createCollectionV2","relatedInstanceId","_undoFavorite","LaunchpadApi_deleteCollectionV2","then","_list$find","foundId","find","_fav$relatedApp","_fav$relatedCustomIte","console","error","matchMenuItemApp","lowerQ","toLowerCase","includes","matchMenuItemCustom","storageKey","_auth$getAuth","auth","getAuth","org","storage","JsonStorage","localStorage","candidateDesktops","candidateMicroAppsById","candidateCustomLinksById","preLoaded","candidateFavorites","preLoadedFavorites","deferredLaunchpadInfo","DeferredService","fetchLaunchpadInfo","deferredFavorites","fetchFavorites","showErrorAsNotification","showNotification","message","httpErrorToString","useLaunchpadInfo","active","setDesktops","setMicroAppsById","setCustomLinksById","q","setQ","loading","setLoading","setLoadingFavorites","storedRecentVisits","setStoredRecentVisits","recentVisits","setRecentVisits","favorites","setFavorites","_storage$getItem","getItem","startFetchLaunchpadInfo","fetch","handleHttpError","startFetchFavorites","visits","filter","Boolean","_ref5","_storage$getItem2","index","findIndex","visit","splice","unshift","pop","setItem","some","matchFavorite","newFavorites","removed","slice","_x2","undoFavorite","catch","showDialog","content","_x","favorite","result","allMenuGroups","filteredSubItems","sub","search","wrapBrick","unwrapProvider","constructor","task","_defineProperty","this","schedulePrefetch","_this","preFetchScheduled","preFetchLaunchpadInfo","preFetchId","window","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","firstFetchPromise","finally","_i18nText","i18nData","Object","fromEntries","entries","lang","resources","i18nText","undefined","value","JSON","stringify","parse","removeItem","clear"],"sourceRoot":""}