1+ /* eslint-disable no-nested-ternary */
12import React , { useEffect , useState } from "react" ;
23import MessageInternal from "@App/app/message/internal" ;
34import { MessageSender } from "@App/app/message/message" ;
@@ -12,6 +13,8 @@ import {
1213 Switch ,
1314} from "@arco-design/web-react" ;
1415import {
16+ IconCaretDown ,
17+ IconCaretUp ,
1518 IconDelete ,
1619 IconEdit ,
1720 IconMenu ,
@@ -24,6 +27,7 @@ import { SCRIPT_RUN_STATUS_RUNNING } from "@App/app/repo/scripts";
2427import { RiPlayFill , RiStopFill } from "react-icons/ri" ;
2528import RuntimeController from "@App/runtime/content/runtime" ;
2629import { useTranslation } from "react-i18next" ;
30+ import { SystemConfig } from "@App/pkg/config/config" ;
2731
2832const CollapseItem = Collapse . Item ;
2933
@@ -49,6 +53,10 @@ const ScriptMenuList: React.FC<{
4953 const message = IoC . instance ( MessageInternal ) as MessageInternal ;
5054 const scriptCtrl = IoC . instance ( ScriptController ) as ScriptController ;
5155 const runtimeCtrl = IoC . instance ( RuntimeController ) as RuntimeController ;
56+ const systemConfig = IoC . instance ( SystemConfig ) as SystemConfig ;
57+ const [ expandMenuIndex , setExpandMenuIndex ] = useState < {
58+ [ key : string ] : boolean ;
59+ } > ( { } ) ;
5260 const { t } = useTranslation ( ) ;
5361
5462 let url : URL ;
@@ -95,10 +103,13 @@ const ScriptMenuList: React.FC<{
95103 window . close ( ) ;
96104 } ;
97105 // 监听菜单按键
106+
107+ // 菜单展开
108+
98109 return (
99110 < >
100111 { list . length === 0 && < Empty /> }
101- { list . map ( ( item ) => (
112+ { list . map ( ( item , index ) => (
102113 < Collapse bordered = { false } expandIconPosition = "right" key = { item . id } >
103114 < CollapseItem
104115 header = {
@@ -246,7 +257,13 @@ const ScriptMenuList: React.FC<{
246257 className = "arco-collapse-item-content-box flex flex-col"
247258 style = { { padding : "0 0 0 40px" } }
248259 >
249- { item . menus ?. map ( ( menu ) => {
260+ { /* 判断菜单数量,再判断是否展开 */ }
261+ { ( item . menus && item . menus ?. length > systemConfig . menuExpandNum
262+ ? expandMenuIndex [ index ]
263+ ? item . menus
264+ : item . menus ?. slice ( 0 , systemConfig . menuExpandNum )
265+ : item . menus
266+ ) ?. map ( ( menu ) => {
250267 if ( menu . accessKey ) {
251268 document . addEventListener ( "keypress" , ( e ) => {
252269 if ( e . key . toUpperCase ( ) === menu . accessKey ! . toUpperCase ( ) ) {
@@ -269,6 +286,24 @@ const ScriptMenuList: React.FC<{
269286 </ Button >
270287 ) ;
271288 } ) }
289+ { item . menus && item . menus ?. length > systemConfig . menuExpandNum && (
290+ < Button
291+ className = "text-left"
292+ key = "expand"
293+ type = "secondary"
294+ icon = {
295+ expandMenuIndex [ index ] ? < IconCaretUp /> : < IconCaretDown />
296+ }
297+ onClick = { ( ) => {
298+ setExpandMenuIndex ( {
299+ ...expandMenuIndex ,
300+ [ index ] : ! expandMenuIndex [ index ] ,
301+ } ) ;
302+ } }
303+ >
304+ { expandMenuIndex [ index ] ? t ( "collapse" ) : t ( "expand" ) }
305+ </ Button >
306+ ) }
272307 { item . hasUserConfig && (
273308 < Button
274309 className = "text-left"
0 commit comments