diff --git a/src/Components/ElementsSidebar/ElementsSidebar.tsx b/src/Components/ElementsSidebar/ElementsSidebar.tsx index 369d6b0..76a22ac 100644 --- a/src/Components/ElementsSidebar/ElementsSidebar.tsx +++ b/src/Components/ElementsSidebar/ElementsSidebar.tsx @@ -27,13 +27,17 @@ interface IElementsSidebarProps { onExpandChange: (value: ExtendedSidebar) => void } -function RemoveBorderClasses(target: HTMLButtonElement, exception: string = ''): void { +function RemoveBorderClasses(target: HTMLElement, exception: string = ''): void { const bordersClasses = ['border-t-8', 'border-8', 'border-b-8'].filter(className => className !== exception); target.classList.remove(...bordersClasses); } function HandleDragLeave(event: React.DragEvent): void { - const target: HTMLButtonElement = event.target as HTMLButtonElement; + let target: HTMLButtonElement = event.target as HTMLButtonElement; + + if (target.classList.contains('list-vertical-bar')) { + target = target.parentElement as HTMLButtonElement; + } RemoveBorderClasses(target); } @@ -43,7 +47,11 @@ function HandleDragOver( mainContainer: IContainerModel ): void { event.preventDefault(); - const target: HTMLButtonElement = event.target as HTMLButtonElement; + let target = event.target as HTMLElement; + + if (target.classList.contains('list-vertical-bar')) { + target = target.parentElement as HTMLButtonElement; + } const rect = target.getBoundingClientRect(); const y = event.clientY - rect.top; // y position within the element. @@ -73,7 +81,12 @@ function HandleOnDrop( ): void { event.preventDefault(); const type = event.dataTransfer.getData('type'); - const target: HTMLButtonElement = event.target as HTMLButtonElement; + let target: HTMLButtonElement = event.target as HTMLButtonElement; + + if (target.classList.contains('list-vertical-bar')) { + target = target.parentElement as HTMLButtonElement; + } + RemoveBorderClasses(target); const targetContainer: IContainerModel | undefined = FindContainerById( @@ -132,6 +145,7 @@ export function ElementsSidebar(props: IElementsSidebarProps): JSX.Element { // States const divRef = React.useRef(null); const [,height] = useSize(divRef); + console.log(height); // Render const it = MakeRecursionDFSIterator(props.mainContainer, props.containers, 0, [0, 0], true); @@ -155,6 +169,7 @@ export function ElementsSidebar(props: IElementsSidebarProps): JSX.Element { return ( ElementsListRow( key, + index, container, depth, isSelected, @@ -208,6 +223,7 @@ export function ElementsSidebar(props: IElementsSidebarProps): JSX.Element { function ElementsListRow( key: string, + index: number, container: IContainerModel, depth: number, isSelected: boolean, @@ -219,39 +235,50 @@ function ElementsListRow( selectContainer: (containerId: string) => void ): JSX.Element { const verticalBars: JSX.Element[] = []; - const verticalBarSelectedClass = isSelected - ? 'border-l-blue-400 group-hover:border-l-blue-300' - : 'border-l-slate-400 group-hover:border-l-slate-300'; + + let buttonClass = 'bg-blue-500 shadow-lg shadow-blue-500/60' + + ' hover:bg-blue-600 hover:shadow-blue-500 text-slate-50 border-blue-600'; + let verticalBarClass = 'border-l-blue-400 group-hover:border-l-blue-300'; + if (!isSelected) { + const isPair = (index & 1) === 0; + if (isPair) { + buttonClass = 'bg-slate-300/20 border-slate-500/50'; + } else { + buttonClass = 'bg-slate-400/30 border-slate-500/80'; + } + + verticalBarClass = 'border-l-slate-400 group-hover:border-l-slate-300'; + buttonClass += ' hover:bg-slate-400 hover:shadow-slate-400'; + } + for (let i = 0; i < depth; i++) { verticalBars.push(); } - const buttonSelectedClass: string = isSelected - ? 'bg-blue-500 shadow-lg shadow-blue-500/60 hover:bg-blue-600 border-blue-600 hover:shadow-blue-500 text-slate-50' - : 'bg-slate-300/60 hover:bg-slate-400 hover:shadow-slate-400'; - - return ; + +
+ ; }