@@ -3,7 +3,7 @@ import classNames from 'classnames';
33import { createIcon } from '@alilc/lowcode-utils' ;
44import { IPublicApiEvent } from '@alilc/lowcode-types' ;
55import TreeNode from '../controllers/tree-node' ;
6- import { IconLock , IconUnlock , IconArrowRight , IconEyeClose , IconEye , IconCond , IconLoop , IconRadioActive , IconRadio , IconSetting } from '../icons' ;
6+ import { IconLock , IconUnlock , IconArrowRight , IconEyeClose , IconEye , IconCond , IconLoop , IconRadioActive , IconRadio , IconSetting , IconDelete } from '../icons' ;
77
88function emitOutlineEvent ( event : IPublicApiEvent , type : string , treeNode : TreeNode , rest ?: Record < string , unknown > ) {
99 const node = treeNode ?. node ;
@@ -100,7 +100,11 @@ export default class TreeTitle extends PureComponent<{
100100 } ) ;
101101 } ) ;
102102 }
103-
103+ deleteClick = ( ) => {
104+ const { treeNode } = this . props ;
105+ const { node } = treeNode ;
106+ treeNode . deleteNode ( node ) ;
107+ } ;
104108 render ( ) {
105109 const { treeNode, isModal } = this . props ;
106110 const { pluginContext } = treeNode ;
@@ -131,6 +135,7 @@ export default class TreeTitle extends PureComponent<{
131135 const shouldShowHideBtn = isCNode && isNodeParent && ! isModal && couldHide ;
132136 const shouldShowLockBtn = config . get ( 'enableCanvasLock' , false ) && isContainer && isCNode && isNodeParent && ( ( couldLock && ! node . isLocked ) || ( couldUnlock && node . isLocked ) ) ;
133137 const shouldEditBtn = isCNode && isNodeParent ;
138+ const shouldDeleteBtn = isCNode && isNodeParent && node ?. canPerformAction ( 'remove' ) ;
134139 return (
135140 < div
136141 className = { classNames ( 'tree-node-title' , { editing } ) }
@@ -214,8 +219,28 @@ export default class TreeTitle extends PureComponent<{
214219 </ div >
215220 { shouldShowHideBtn && < HideBtn hidden = { this . props . hidden } treeNode = { treeNode } /> }
216221 { shouldShowLockBtn && < LockBtn locked = { this . props . locked } treeNode = { treeNode } /> }
217- { shouldEditBtn && < RenameBtn treeNode = { treeNode } onClick = { this . enableEdit } /> }
222+ { shouldEditBtn && < RenameBtn treeNode = { treeNode } onClick = { this . enableEdit } /> }
223+ { shouldDeleteBtn && < DeleteBtn treeNode = { treeNode } onClick = { this . deleteClick } /> }
224+ </ div >
225+ ) ;
226+ }
227+ }
218228
229+ class DeleteBtn extends PureComponent < {
230+ treeNode : TreeNode ;
231+ onClick : ( ) => void ;
232+ } > {
233+ render ( ) {
234+ const { intl, common } = this . props . treeNode . pluginContext ;
235+ const { Tip } = common . editorCabin ;
236+ return (
237+ < div
238+ className = "tree-node-delete-btn"
239+ onClick = { this . props . onClick }
240+ >
241+ < IconDelete />
242+ { /* @ts -ignore */ }
243+ < Tip > { intl ( 'Delete' ) } </ Tip >
219244 </ div >
220245 ) ;
221246 }
@@ -297,7 +322,6 @@ class ExpandBtn extends PureComponent<{
297322 expanded : boolean ;
298323 expandable : boolean ;
299324} > {
300-
301325 render ( ) {
302326 const { treeNode, expanded, expandable } = this . props ;
303327 if ( ! expandable ) {
0 commit comments