From a0b41e428de5b9a0b132e1def264726557cd3409 Mon Sep 17 00:00:00 2001 From: dnviti Date: Sat, 29 Nov 2025 01:44:39 +0100 Subject: [PATCH] - --- .../components/reportEditor/EditorToolbar.tsx | 499 +----------------- frontend/src/pages/ReportEditorPage.tsx | 3 - src/Apollinare.API/apollinare.db-shm | Bin 32768 -> 32768 bytes src/Apollinare.API/apollinare.db-wal | Bin 3959352 -> 1001192 bytes 4 files changed, 1 insertion(+), 501 deletions(-) diff --git a/frontend/src/components/reportEditor/EditorToolbar.tsx b/frontend/src/components/reportEditor/EditorToolbar.tsx index 7e70118..71b4150 100644 --- a/frontend/src/components/reportEditor/EditorToolbar.tsx +++ b/frontend/src/components/reportEditor/EditorToolbar.tsx @@ -21,11 +21,8 @@ import { Menu, MenuItem, Collapse, - TextField, Badge, Avatar, - ToggleButton, - ToggleButtonGroup, Stack, alpha, CircularProgress, @@ -63,25 +60,13 @@ import { ExpandMore as ExpandMoreIcon, ExpandLess as ExpandLessIcon, Search as SearchIcon, - FormatBold as BoldIcon, - FormatItalic as ItalicIcon, - FormatUnderlined as UnderlineIcon, - FormatAlignLeft as AlignLeftIcon, - FormatAlignCenter as AlignCenterIcon, - FormatAlignRight as AlignRightIcon, - FormatColorFill as FillColorIcon, - FormatColorText as TextColorIcon, - BorderColor as StrokeColorIcon, CloudDone as SavedIcon, CloudOff as UnsavedIcon, - AspectRatio as AspectRatioIcon, - Check as CheckIcon, ArrowDropDown as DropdownIcon, History as HistoryIcon, - DataObject as DataBindIcon, AutoMode as AutoSaveIcon, } from "@mui/icons-material"; -import type { ElementType, AprtElement } from "../../types/report"; +import type { ElementType } from "../../types/report"; // Snap options type export interface SnapOptions { @@ -118,10 +103,6 @@ interface EditorToolbarProps { currentPageName: string; onPrevPage: () => void; onNextPage: () => void; - // Optional: selected element for contextual toolbar - selectedElement?: AprtElement | null; - // Optional: callback for element updates from toolbar - onUpdateSelectedElement?: (updates: Partial) => void; // Optional: save status hasUnsavedChanges?: boolean; lastSavedAt?: Date | null; @@ -222,30 +203,6 @@ const SNAP_OPTIONS_CONFIG = [ }, ]; -// Color presets for quick selection -const COLOR_PRESETS = [ - "#000000", - "#424242", - "#757575", - "#ffffff", - "#f44336", - "#e91e63", - "#9c27b0", - "#673ab7", - "#3f51b5", - "#2196f3", - "#03a9f4", - "#00bcd4", - "#009688", - "#4caf50", - "#8bc34a", - "#cddc39", - "#ffeb3b", - "#ffc107", - "#ff9800", - "#ff5722", -]; - // Format time ago function formatTimeAgo(date: Date | null | undefined): string { if (!date) return ""; @@ -364,109 +321,6 @@ function StyledIconButton({ ); } -// Compact color picker button -function ColorPickerButton({ - color, - onChange, - label, - icon: Icon, -}: { - color: string; - onChange: (color: string) => void; - label: string; - icon: React.ElementType; -}) { - const [anchorEl, setAnchorEl] = useState(null); - - return ( - <> - - setAnchorEl(e.currentTarget)} - sx={{ - borderRadius: 1.5, - position: "relative", - "&:hover": { bgcolor: "action.hover" }, - }} - > - - - - - setAnchorEl(null)} - anchorOrigin={{ vertical: "bottom", horizontal: "center" }} - > - - - {label} - - - {COLOR_PRESETS.map((presetColor) => ( - { - onChange(presetColor); - setAnchorEl(null); - }} - sx={{ - width: 28, - height: 28, - p: 0, - bgcolor: presetColor, - border: "2px solid", - borderColor: - color === presetColor ? "primary.main" : "divider", - "&:hover": { - transform: "scale(1.15)", - borderColor: "primary.main", - }, - }} - > - {color === presetColor && ( - - )} - - ))} - - - - - ); -} - export default function EditorToolbar({ onAddElement, onDeleteElement, @@ -492,8 +346,6 @@ export default function EditorToolbar({ currentPageName, onPrevPage, onNextPage, - selectedElement, - onUpdateSelectedElement, hasUnsavedChanges = false, lastSavedAt, onOpenCommandPalette, @@ -551,275 +403,6 @@ export default function EditorToolbar({ setAddMenuAnchor(null); }; - // Handle text formatting - const handleTextFormat = (format: "bold" | "italic" | "underline") => { - if ( - !selectedElement || - selectedElement.type !== "text" || - !onUpdateSelectedElement - ) - return; - const currentStyle = selectedElement.style || {}; - let updates: Partial = {}; - - switch (format) { - case "bold": - updates = { - style: { - ...currentStyle, - fontWeight: currentStyle.fontWeight === "bold" ? "normal" : "bold", - }, - }; - break; - case "italic": - updates = { - style: { - ...currentStyle, - fontStyle: - currentStyle.fontStyle === "italic" ? "normal" : "italic", - }, - }; - break; - case "underline": - updates = { - style: { - ...currentStyle, - textDecoration: - currentStyle.textDecoration === "underline" - ? "none" - : "underline", - }, - }; - break; - } - onUpdateSelectedElement(updates); - }; - - // Handle text alignment - const handleTextAlign = (align: "left" | "center" | "right") => { - if ( - !selectedElement || - selectedElement.type !== "text" || - !onUpdateSelectedElement - ) - return; - onUpdateSelectedElement({ - style: { - ...selectedElement.style, - textAlign: align, - }, - }); - }; - - // Contextual toolbar based on selection - const renderContextualToolbar = () => { - if (!selectedElement || !onUpdateSelectedElement) return null; - - const currentStyle = selectedElement.style || {}; - - // Text-specific toolbar - if (selectedElement.type === "text") { - return ( - - {/* Text formatting */} - - handleTextFormat("bold")} - > - - - handleTextFormat("italic")} - > - - - handleTextFormat("underline")} - > - - - - - - - {/* Text alignment */} - value && handleTextAlign(value)} - sx={{ "& .MuiToggleButton-root": { border: 0, borderRadius: 1 } }} - > - - - - - - - - - - - - - - {/* Colors */} - - onUpdateSelectedElement({ style: { ...currentStyle, color } }) - } - label="Colore testo" - icon={TextColorIcon} - /> - - onUpdateSelectedElement({ - style: { ...currentStyle, backgroundColor: color }, - }) - } - label="Sfondo" - icon={FillColorIcon} - /> - - - - {/* Data binding indicator */} - {selectedElement.content?.type === "binding" && ( - } - label="Data Bound" - size="small" - color="info" - variant="outlined" - sx={{ height: 24 }} - /> - )} - - ); - } - - // Shape/Line toolbar - if (selectedElement.type === "shape" || selectedElement.type === "line") { - return ( - - - onUpdateSelectedElement({ - style: { ...currentStyle, backgroundColor: color }, - }) - } - label="Riempimento" - icon={FillColorIcon} - /> - - onUpdateSelectedElement({ - style: { ...currentStyle, borderColor: color }, - }) - } - label="Bordo" - icon={StrokeColorIcon} - /> - - - - {/* Border width */} - - - - Bordo: - - - onUpdateSelectedElement({ - style: { - ...currentStyle, - borderWidth: Number(e.target.value), - }, - }) - } - inputProps={{ min: 0, max: 20, step: 0.5 }} - sx={{ width: 60, "& input": { py: 0.5, fontSize: "0.75rem" } }} - /> - - - - ); - } - - // Image toolbar - if (selectedElement.type === "image") { - return ( - - } - label={selectedElement.name || "Immagine"} - size="small" - variant="outlined" - sx={{ height: 24, maxWidth: 150 }} - /> - - - - - - - - ); - } - - return null; - }; - // Save status indicator const renderSaveStatus = () => { return ( @@ -1490,13 +1073,6 @@ export default function EditorToolbar({ )} - {/* Contextual toolbar for text/shape */} - {selectedElement && onUpdateSelectedElement && ( - - {renderContextualToolbar()} - - )} - {/* Shared Popovers */} )} - - {/* Contextual Toolbar Row - appears when element is selected */} - {selectedElement && onUpdateSelectedElement && ( - - {/* Element type indicator */} - e.type === selectedElement.type)?.icon - ? (() => { - const Icon = ELEMENT_TYPES.find( - (e) => e.type === selectedElement.type, - )!.icon; - return ; - })() - : undefined - } - label={ - ELEMENT_TYPES.find((e) => e.type === selectedElement.type) - ?.label || selectedElement.type - } - size="small" - variant="outlined" - sx={{ - borderColor: ELEMENT_TYPES.find( - (e) => e.type === selectedElement.type, - )?.color, - color: ELEMENT_TYPES.find((e) => e.type === selectedElement.type) - ?.color, - }} - /> - - - - {/* Contextual formatting options */} - {renderContextualToolbar()} - - - - {/* Element name */} - {selectedElement.name && ( - - {selectedElement.name} - - )} - - {/* Position info */} - - {Math.round(selectedElement.position.x)}× - {Math.round(selectedElement.position.y)} |{" "} - {Math.round(selectedElement.position.width)}× - {Math.round(selectedElement.position.height)}mm - - - )} ); } diff --git a/frontend/src/pages/ReportEditorPage.tsx b/frontend/src/pages/ReportEditorPage.tsx index 7da180f..5569fe5 100644 --- a/frontend/src/pages/ReportEditorPage.tsx +++ b/frontend/src/pages/ReportEditorPage.tsx @@ -1713,9 +1713,6 @@ export default function ReportEditorPage() { setSelectedElementIds([]); } }} - // New props for enhanced toolbar - selectedElement={selectedElement} - onUpdateSelectedElement={handleUpdateSelectedElement} hasUnsavedChanges={hasUnsavedChanges} // Auto-save props autoSaveEnabled={autoSaveEnabled} diff --git a/src/Apollinare.API/apollinare.db-shm b/src/Apollinare.API/apollinare.db-shm index 3584c8cca55b40a9efb1f214cbb2fb3abd3624ab..999dc80327d179b962621299f286fb17b1dc9eed 100644 GIT binary patch delta 1060 zcmb8sRa6y00LJnEg6n$4>qW5@6)uPcg56?aVPj%pAvQLma_x@mT9_zeVPki9V|RC9 zJo%u*jK`yo&N;jD?Ki)f-E-FAaB(v4n~&UX8^J()`SgS;Mk9#8di5$X3k3 zW}0i9u1vHwR+sB$gw@0R<~rg}Z#M_JWH9Gh+y1jY>i2q(X4j%jr#0LncZ*Y_Qk=H< zz?1}Au$y6}ISaTi8oQ>KW;h2-r!C2_6Uj!th#X^NpbuNQmY%IH_z*%brm=}DqVY7c z(t?FNNRbDWVFU+7ysQ~ETC#|TsxM0nhg9!Q81Xz(eK|&QSVUjV(5cT1Qcb5V(a1(C z7V}t{^2BmPnT#}GCfB9OPHUF%M41YV;;1qP4VlFaX*_7dQl2VPkGGQIIfI^Q08z;nw+#_InR};OdKba$xLIM+!iLr>WVM*h+;aMxhfh@BNy#i z!3(vk3Jy-HU2ZgCE_Z}UG;$M80xy-RD*pW`Y232lM^pM@vQ4-ZMjkq_l2^)AV;rZY zGc=0QkL|)F8hPo+Dqbs7o$;KJMlVKxQiMn{^3jPz-Y8Ln37l1;I0M)rMSeQ7nzu>> zGm&#jlwcq`r6@obl6a>?O(t<(iIPOKOA1dSSi^fIYB8A$O87H~-BJ{!D{J|nL~W*U zQHcNsvqy?TbYmSKm8ip1E-6upA?%f+Fx^?tCn+p-na5@B@>M)~X?h?-*(a43J=nl! hsq|*d=bnhZnjXY3_DkVSPm)O!IYuu+Z?=dO`wNyKBR2p5 literal 32768 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 WTt(5^%WU<~Y&lGLWg%dRc>e?b16El8 delta 80408 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 Op!}T