diff --git a/frontend/src/board/item-duplicate.ts b/frontend/src/board/item-duplicate.ts index b3f0753b7..5fb211895 100644 --- a/frontend/src/board/item-duplicate.ts +++ b/frontend/src/board/item-duplicate.ts @@ -8,10 +8,13 @@ import { controlKey, installKeyboardShortcut } from "./keyboard-shortcuts" export function itemDuplicateHandler(board: L.Property, dispatch: Dispatch, focus: L.Atom) { installKeyboardShortcut(controlKey("d"), () => { - const currentBoard = board.get() - const itemsAndConnections = findSelectedItemsAndConnections(focus.get(), currentBoard) - const { toCreate, toSelect, connections } = makeCopies(itemsAndConnections, 1, 1) - dispatch({ action: "item.add", boardId: currentBoard.id, items: toCreate, connections }) - focus.set({ status: "selected", itemIds: new Set(toSelect.map((it) => it.id)), connectionIds: emptySet() }) + dispatchDuplication(focus, board.get(), dispatch) }) } + +export function dispatchDuplication(focus: L.Atom, currentBoard: Board, dispatch: Dispatch) { + const itemsAndConnections = findSelectedItemsAndConnections(focus.get(), currentBoard) + const { toCreate, toSelect, connections } = makeCopies(itemsAndConnections, 1, 1) + dispatch({ action: "item.add", boardId: currentBoard.id, items: toCreate, connections }) + focus.set({ status: "selected", itemIds: new Set(toSelect.map((it) => it.id)), connectionIds: emptySet() }) +} diff --git a/frontend/src/board/toolbars/MainToolBar.tsx b/frontend/src/board/toolbars/MainToolBar.tsx index 1cddb994a..5e1dc84a8 100644 --- a/frontend/src/board/toolbars/MainToolBar.tsx +++ b/frontend/src/board/toolbars/MainToolBar.tsx @@ -14,6 +14,7 @@ import { ToolController } from "../tool-selection" import { IS_TOUCHSCREEN } from "../touchScreen" import { PaletteView } from "./PaletteView" import { ToolSelector } from "./ToolSelector" +import { dispatchDuplication } from "../item-duplicate" export const MainToolBar = ({ coordinateHelper, @@ -111,9 +112,10 @@ export const MainToolBar = ({ > - {} - {} - {} + + + + ) } @@ -169,3 +171,40 @@ const DeleteIcon = ({ focus, board, dispatch }: DeleteProps) => { ) } + +const DuplicateIcon = ({ focus, board, dispatch }: DeleteProps) => { + const enabled = L.view(focus, (f) => getSelectedConnectionIds(f).size > 0 || getSelectedItemIds(f).size > 0) + const duplicateItems = () => dispatchDuplication(focus, board.get(), dispatch) + return ( + + (e ? "icon" : "icon disabled"))}> + + Make a copy + + + + + Clone + + ) +} diff --git a/frontend/src/board/toolbars/ToolSelector.tsx b/frontend/src/board/toolbars/ToolSelector.tsx index 96f0d288e..6aa66753d 100644 --- a/frontend/src/board/toolbars/ToolSelector.tsx +++ b/frontend/src/board/toolbars/ToolSelector.tsx @@ -24,25 +24,27 @@ export const ToolSelector = ({ toolController }: { toolController: ToolControlle }} /> )} - ( - - - - - ), - }} - /> + {!IS_TOUCHSCREEN && ( + ( + + + + + ), + }} + /> + )}