Skip to content

Commit

Permalink
feat: Add "cut" event handler
Browse files Browse the repository at this point in the history
  • Loading branch information
surajshetty3416 committed Jan 26, 2025
1 parent e6c0e24 commit da2c5d0
Showing 1 changed file with 38 additions and 23 deletions.
61 changes: 38 additions & 23 deletions frontend/src/utils/useBuilderEvents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,32 +51,16 @@ export function useBuilderEvents(
);

useEventListener(document, "copy", (e) => {
if (isTargetEditable(e)) return;
copySelectedBlocksToClipboard(e);
});

useEventListener(document, "cut", (e) => {
copySelectedBlocksToClipboard(e);
if (store.activeCanvas?.selectedBlocks.length) {
e.preventDefault();
const componentDocuments: BuilderComponent[] = [];
for (const block of store.activeCanvas?.selectedBlocks) {
const components = block.getUsedComponentNames();
for (const componentName of components) {
const component = componentStore.getComponent(componentName);
if (component) {
componentDocuments.push(component);
}
}
store.activeCanvas?.removeBlock(block, true);
}

const blocksToCopy = store.activeCanvas?.selectedBlocks.map((block) => {
if (!Boolean(block.extendedFromComponent) && block.isChildOfComponent) {
return detachBlockFromComponent(block);
}
return getCopyWithoutParent(block);
});
// just copy non components
const dataToCopy = {
blocks: blocksToCopy,
components: componentDocuments,
};
copyToClipboard(dataToCopy, e, "builder-copied-blocks");
clearSelection();
}
});

Expand Down Expand Up @@ -463,3 +447,34 @@ const clearSelection = () => {
document.activeElement.blur();
}
};

const copySelectedBlocksToClipboard = (e: ClipboardEvent) => {
if (isTargetEditable(e)) return;
if (store.activeCanvas?.selectedBlocks.length) {
e.preventDefault();
const componentDocuments: BuilderComponent[] = [];
for (const block of store.activeCanvas?.selectedBlocks) {
const components = block.getUsedComponentNames();
for (const componentName of components) {
const component = componentStore.getComponent(componentName);
if (component) {
componentDocuments.push(component);
}
}
}

const blocksToCopy = store.activeCanvas?.selectedBlocks.map((block) => {
if (!Boolean(block.extendedFromComponent) && block.isChildOfComponent) {
return detachBlockFromComponent(block, null);
}
return getCopyWithoutParent(block);
});

// just copy non components
const dataToCopy = {
blocks: blocksToCopy,
components: componentDocuments,
};
copyToClipboard(dataToCopy, e, "builder-copied-blocks");
}
};

0 comments on commit da2c5d0

Please sign in to comment.