1- import { computed } from "vue" ;
1+ import { computed , MaybeRef , unref } from "vue" ;
22import { useComponentActions } from "../useComponentActions" ;
33import { Core , BuilderManager } from "@/writerTypes" ;
44import { getModifierKeyName , isPlatformMac } from "@/core/detectPlatform" ;
@@ -17,11 +17,26 @@ export enum BuilderSettingsDropdownActions {
1717 Delete = "delete" ,
1818}
1919
20+ export function isBuilderSettingsDropdownAction (
21+ value : unknown ,
22+ ) : value is BuilderSettingsDropdownActions {
23+ return (
24+ typeof value === "string" &&
25+ Object . values ( BuilderSettingsDropdownActions ) . includes (
26+ value as BuilderSettingsDropdownActions ,
27+ )
28+ ) ;
29+ }
30+
31+ /**
32+ * @param targetComponent specific the component that will be used for actions
33+ */
2034export function useBuilderSettingsActions (
2135 wf : Core ,
22- ssbm : BuilderManager ,
36+ wfbm : BuilderManager ,
2337 tracking ?: ReturnType < typeof useWriterTracking > ,
2438 callbacks : Partial < Record < BuilderSettingsDropdownActions , ( ) => void > > = { } ,
39+ targetComponent ?: MaybeRef < { instancePath : string ; componentId : string } > ,
2540) {
2641 const {
2742 moveComponentUp,
@@ -38,49 +53,59 @@ export function useBuilderSettingsActions(
3853 getEnabledMoves,
3954 removeComponentsSubtree,
4055 goToParent,
41- } = useComponentActions ( wf , ssbm , tracking ) ;
56+ } = useComponentActions ( wf , wfbm , tracking ) ;
4257
4358 const toasts = useToasts ( ) ;
4459
45- const selectedId = ssbm . firstSelectedId ;
46- const selectedInstancePath = computed (
47- ( ) => ssbm . firstSelectedItem . value ?. instancePath ,
48- ) ;
60+ const componentId = computed ( ( ) => {
61+ return targetComponent
62+ ? unref ( targetComponent ) . componentId
63+ : wfbm . firstSelectedId . value ;
64+ } ) ;
65+ const instancePath = computed ( ( ) => {
66+ return targetComponent
67+ ? unref ( targetComponent ) . instancePath
68+ : wfbm . firstSelectedItem . value . instancePath ;
69+ } ) ;
4970
5071 const shortcutsInfo = computed ( ( ) => {
51- const component = wf . getComponentById ( selectedId . value ) ;
72+ const component = wf . getComponentById ( componentId . value ) ;
5273 if ( ! component ) return { } ;
5374 const { up : isMoveUpEnabled , down : isMoveDownEnabled } =
54- getEnabledMoves ( selectedId . value ) ;
75+ getEnabledMoves ( componentId . value ) ;
5576 return {
56- isAddEnabled : isAddAllowed ( selectedId . value ) ,
77+ isAddEnabled : isAddAllowed ( componentId . value ) ,
5778 componentTypeName : wf . getComponentDefinition ( component . type ) ?. name ,
5879 toolkit : wf . getComponentDefinition ( component . type ) ?. toolkit ,
5980 isMoveUpEnabled,
6081 isMoveDownEnabled,
61- isCopyEnabled : isCopyAllowed ( selectedId . value ) ,
62- isCutEnabled : isCutAllowed ( selectedId . value ) ,
63- isGoToParentEnabled : isGoToParentAllowed ( selectedId . value ) ,
64- isDeleteEnabled : isDeleteAllowed ( selectedId . value ) ,
82+ isCopyEnabled : isCopyAllowed ( componentId . value ) ,
83+ isCutEnabled : isCutAllowed ( componentId . value ) ,
84+ isGoToParentEnabled : isGoToParentAllowed ( componentId . value ) ,
85+ isDeleteEnabled : isDeleteAllowed ( componentId . value ) ,
6586 } ;
6687 } ) ;
6788
6889 const isPasteEnabled = computed ( ( ) => {
69- if ( ! ssbm . firstSelectedId . value ) return false ;
70- return isPasteAllowed ( ssbm . firstSelectedId . value ) ;
90+ if ( ! wfbm . firstSelectedId . value ) return false ;
91+ return isPasteAllowed ( wfbm . firstSelectedId . value ) ;
7192 } ) ;
7293
7394 async function handlePasteComponent ( ) {
7495 try {
75- await pasteComponent ( selectedId . value ) ;
96+ await pasteComponent ( componentId . value ) ;
7697 } catch ( error ) {
7798 toasts . pushToast ( { type : "error" , message : String ( error ) } ) ;
7899 }
79100 }
80101
81- function deleteSelectedComponents ( ) {
102+ function deleteComponent ( ) {
82103 if ( ! shortcutsInfo . value . isDeleteEnabled ) return ;
83- const componentIds = ssbm . selection . value . map ( ( c ) => c . componentId ) ;
104+ if ( targetComponent ) {
105+ removeComponentsSubtree ( unref ( targetComponent ) . componentId ) ;
106+ return ;
107+ }
108+ const componentIds = wfbm . selection . value . map ( ( c ) => c . componentId ) ;
84109 if ( componentIds . length === 0 ) return ;
85110 removeComponentsSubtree ( ...componentIds ) ;
86111 }
@@ -154,25 +179,25 @@ export function useBuilderSettingsActions(
154179 // Handled by callback
155180 break ;
156181 case BuilderSettingsDropdownActions . MoveUp :
157- moveComponentUp ( selectedId . value ) ;
182+ moveComponentUp ( componentId . value ) ;
158183 break ;
159184 case BuilderSettingsDropdownActions . MoveDown :
160- moveComponentDown ( selectedId . value ) ;
185+ moveComponentDown ( componentId . value ) ;
161186 break ;
162187 case BuilderSettingsDropdownActions . Cut :
163- cutComponent ( selectedId . value ) ;
188+ cutComponent ( componentId . value ) ;
164189 break ;
165190 case BuilderSettingsDropdownActions . Copy :
166- copyComponent ( selectedId . value ) ;
191+ copyComponent ( componentId . value ) ;
167192 break ;
168193 case BuilderSettingsDropdownActions . Paste :
169194 handlePasteComponent ( ) ;
170195 break ;
171196 case BuilderSettingsDropdownActions . GoToParent :
172- goToParent ( selectedId . value , selectedInstancePath . value ) ;
197+ goToParent ( componentId . value , instancePath . value ) ;
173198 break ;
174199 case BuilderSettingsDropdownActions . Delete :
175- deleteSelectedComponents ( ) ;
200+ deleteComponent ( ) ;
176201 break ;
177202 }
178203
0 commit comments