import { TransformableImage } from "@/components/transformable-image"; import type { KonvaEventObject } from "konva/lib/Node"; import { Layer, Rect, Stage } from "react-konva"; import { useAppDispatch, useAppSelector } from "@/hooks"; import { appSlice, deselectItem, StageItemType, updateImage, updateText, } from "@/store/app.slice"; import { useEffect, useState } from "react"; import { Toolbar } from "@/components/toolbar"; import TransformableText from "@/components/transformable-text"; import LayerBorder from "@/components/layer-border"; import { CANVAS_PADDING_X, CANVAS_PADDING_Y } from "@/consts/canvas-params"; import Legacy from "@/components/layout/sidebar/legacy"; const Canvas = () => { const dispatch = useAppDispatch(); const stage = useAppSelector((state) => state.app.stage); const selectedItemId = useAppSelector((state) => state.app.selectedItemId); const selectItem = (id: string) => dispatch(appSlice.actions.selectItem(id)); const items = useAppSelector((state) => state.app.items); const backgroundRect = useAppSelector((state) => state.app.background); const backgroundId = "background"; const deselectHandler = ( e: KonvaEventObject | KonvaEventObject, ) => { const target = e.target; const clickedOnEmpty = target === target.getStage() || (typeof target === "object" && target.attrs.id === backgroundId); if (!clickedOnEmpty) { return; } dispatch(deselectItem()); }; const [isEditing, setIsEditing] = useState(false); const [isTransforming, setIsTransforming] = useState(false); const [selected, setSelected] = useState(false); useEffect(() => { if (!selected && isEditing) { setIsEditing(false); } else if (!selected && isTransforming) { setIsTransforming(false); } }, [selected, isEditing, isTransforming]); function toggleEdit() { setIsEditing(!isEditing); setSelected(!isEditing); } return (
{ if (e.target !== e.currentTarget) { return; } dispatch(deselectItem()); }} > {!!backgroundRect && ( )} {items.toReversed().map((item) => { if (item.type === StageItemType.Image) { return ( selectItem(item.id)} isSelected={item.id === selectedItemId} onChange={(newAttrs) => { dispatch(updateImage({ id: item.id, ...newAttrs })); }} imageProps={item.params} key={item.id} isBlocked={item.isBlocked} /> ); } if (item.type === StageItemType.Text) { return ( selectItem(item.id)} isSelected={item.id === selectedItemId} onChange={(newAttrs) => { dispatch(updateText({ id: item.id, ...newAttrs })); }} textProps={item.params} key={item.id} id={item.id} /> ); } })}
); }; export default Canvas;