refactor(sideBarDraggableComponent): improve code readability and add support for edit mode with select options
feat(sideBarDraggableComponent): add functionality to edit the sidebar component with select options
This commit is contained in:
parent
d950b6e252
commit
5d4b971252
1 changed files with 80 additions and 2 deletions
|
|
@ -1,5 +1,11 @@
|
||||||
import { DragEventHandler } from "react";
|
import { DragEventHandler, useRef, useState } from "react";
|
||||||
import IconComponent from "../../../../../components/genericIconComponent";
|
import IconComponent from "../../../../../components/genericIconComponent";
|
||||||
|
import {
|
||||||
|
Select,
|
||||||
|
SelectContent,
|
||||||
|
SelectItem,
|
||||||
|
SelectTrigger,
|
||||||
|
} from "../../../../../components/ui/select-custom";
|
||||||
|
|
||||||
export default function SidebarDraggableComponent({
|
export default function SidebarDraggableComponent({
|
||||||
display_name,
|
display_name,
|
||||||
|
|
@ -14,6 +20,10 @@ export default function SidebarDraggableComponent({
|
||||||
color: string;
|
color: string;
|
||||||
onDragStart: DragEventHandler<HTMLDivElement>;
|
onDragStart: DragEventHandler<HTMLDivElement>;
|
||||||
}) {
|
}) {
|
||||||
|
const isOpen = useRef(false);
|
||||||
|
const [editMode, setEditMode] = useState(false);
|
||||||
|
const inside = useRef(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={itemName} data-tooltip-id={itemName}>
|
<div key={itemName} data-tooltip-id={itemName}>
|
||||||
<div
|
<div
|
||||||
|
|
@ -34,7 +44,75 @@ export default function SidebarDraggableComponent({
|
||||||
>
|
>
|
||||||
<div className="side-bar-components-div-form">
|
<div className="side-bar-components-div-form">
|
||||||
<span className="side-bar-components-text">{display_name}</span>
|
<span className="side-bar-components-text">{display_name}</span>
|
||||||
<IconComponent name="Menu" className="side-bar-components-icon " />
|
<div
|
||||||
|
onMouseLeave={() => {
|
||||||
|
if (!isOpen.current) {
|
||||||
|
inside.current = false;
|
||||||
|
setEditMode(false);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
onMouseOver={() => {
|
||||||
|
inside.current = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
if (inside.current) setEditMode(true);
|
||||||
|
}, 800);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{editMode ? (
|
||||||
|
<Select
|
||||||
|
onOpenChange={(open) => {
|
||||||
|
if (!open) {
|
||||||
|
isOpen.current = false;
|
||||||
|
inside.current = false;
|
||||||
|
setEditMode(false);
|
||||||
|
} else {
|
||||||
|
isOpen.current = true;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SelectTrigger>
|
||||||
|
<IconComponent
|
||||||
|
name="MoreHorizontal"
|
||||||
|
className="side-bar-components-icon "
|
||||||
|
/>
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value={"share"}>
|
||||||
|
<div className="flex">
|
||||||
|
<IconComponent
|
||||||
|
name="Settings2"
|
||||||
|
className="relative top-0.5 mr-2 h-4 w-4"
|
||||||
|
/>{" "}
|
||||||
|
Edit{" "}
|
||||||
|
</div>{" "}
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value={"download"}>
|
||||||
|
<div className="flex">
|
||||||
|
<IconComponent
|
||||||
|
name="Settings2"
|
||||||
|
className="relative top-0.5 mr-2 h-4 w-4"
|
||||||
|
/>{" "}
|
||||||
|
Edit{" "}
|
||||||
|
</div>{" "}
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value={"delete"}>
|
||||||
|
<div className="flex">
|
||||||
|
<IconComponent
|
||||||
|
name="Settings2"
|
||||||
|
className="relative top-0.5 mr-2 h-4 w-4"
|
||||||
|
/>{" "}
|
||||||
|
Edit{" "}
|
||||||
|
</div>{" "}
|
||||||
|
</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
) : (
|
||||||
|
<IconComponent
|
||||||
|
name="Menu"
|
||||||
|
className="side-bar-components-icon "
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue