pull/4999/head
Joseph Izang 4 months ago
parent a8a51379c8
commit d2d8ff5e48
  1. 56
      libs/remix-ui/workspace/src/lib/components/flat-tree.tsx

@ -69,6 +69,7 @@ export const FlatTree = (props: FlatTreeProps) => {
const [dragSource, setDragSource] = useState<FileType>() const [dragSource, setDragSource] = useState<FileType>()
const [isDragging, setIsDragging] = useState<boolean>(false) const [isDragging, setIsDragging] = useState<boolean>(false)
const ref = useRef(null) const ref = useRef(null)
const rowRef = useRef(null)
const containerRef = useRef<HTMLDivElement>(null) const containerRef = useRef<HTMLDivElement>(null)
const virtuoso = useRef<VirtuosoHandle>(null) const virtuoso = useRef<VirtuosoHandle>(null)
const [selectedItems, setSelectedItems] = useState<DragStructure[]>([]) const [selectedItems, setSelectedItems] = useState<DragStructure[]>([])
@ -96,6 +97,59 @@ export const FlatTree = (props: FlatTreeProps) => {
return selectItems return selectItems
} }
const buildMultiSelectedItemRefactored = (target: {
path: string
type: string
content: string
position: {
top: number
left: number
}
}) => {
const selectItems = []
selectItems.push(target)
containerRef.current?.querySelectorAll('li.remixui_selected').forEach(item => {
const dragTarget = {
position: { top: target?.position.top || 0, left: target?.position.left || 0 },
path: item.getAttribute('data-path') || item.getAttribute('data-label-path') || '',
type: item.getAttribute('data-type') || item.getAttribute('data-label-type') || '',
content: item.textContent || ''
}
if (dragTarget.path !== target.path) selectItems.push(dragTarget)
})
console.log('selectedItems', selectItems)
}
// useEffect(() => {
// if (rowRef.current) {
// const buildMultiSelectedItemProfiles = (target: {
// path: string
// type: string
// content: string
// position: {
// top: number
// left: number
// }
// }) => {
// const selectItems = []
// selectItems.push(target)
// rowRef.current.forEach(item => {
// if (item && item.classList.contains('li.remixui_selected')) {
// const dragTarget = {
// position: { top: target?.position.top || 0, left: target?.position.left || 0 },
// path: item.getAttribute('data-path') || item.getAttribute('data-label-path') || '',
// type: item.getAttribute('data-type') || item.getAttribute('data-label-type') || '',
// content: item.textContent || ''
// }
// if (dragTarget.path !== target.path) selectItems.push(dragTarget)
// }
// })
// console.log('selectedItems', selectItems)
// }
// }
// }, [])
const labelClass = (file: FileType) => const labelClass = (file: FileType) =>
props.focusEdit.element === file.path props.focusEdit.element === file.path
? 'bg-light' ? 'bg-light'
@ -132,6 +186,7 @@ export const FlatTree = (props: FlatTreeProps) => {
setDragSource(flatTree.find((item) => item.path === target.path)) setDragSource(flatTree.find((item) => item.path === target.path))
setIsDragging(true) setIsDragging(true)
const items = buildMultiSelectedItemProfiles(target) const items = buildMultiSelectedItemProfiles(target)
buildMultiSelectedItemRefactored(target)
setSelectedItems(items) setSelectedItems(items)
setFilesSelected(items.map((item) => item.path)) setFilesSelected(items.map((item) => item.path))
} }
@ -260,6 +315,7 @@ export const FlatTree = (props: FlatTreeProps) => {
file={file} /> : file={file} /> :
<><div <><div
data-id={`treeViewDivDraggableItem${file.path}`} data-id={`treeViewDivDraggableItem${file.path}`}
ref={rowRef}
draggable={true} draggable={true}
onDragStart={onDragStart} onDragStart={onDragStart}
onDragEnd={onDragEnd} onDragEnd={onDragEnd}

Loading…
Cancel
Save