Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const logger = createLogger('FolderItem')
interface FolderItemProps {
folder: FolderTreeNode
level: number
dragDisabled?: boolean
hoverHandlers?: {
onDragEnter?: (e: React.DragEvent<HTMLElement>) => void
onDragLeave?: (e: React.DragEvent<HTMLElement>) => void
Expand All @@ -51,6 +52,7 @@ interface FolderItemProps {
export function FolderItem({
folder,
level,
dragDisabled = false,
hoverHandlers,
onDragStart: onDragStartProp,
onDragEnd: onDragEndProp,
Expand Down Expand Up @@ -294,7 +296,7 @@ export function FolderItem({
onClick={handleClick}
onKeyDown={handleKeyDown}
onContextMenu={handleContextMenu}
draggable={!isEditing}
draggable={!isEditing && !dragDisabled}
onDragStart={handleDragStart}
onDragEnd={handleDragEnd}
{...hoverHandlers}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ interface WorkflowItemProps {
workflow: WorkflowMetadata
active: boolean
level: number
dragDisabled?: boolean
onWorkflowClick: (workflowId: string, shiftKey: boolean, metaKey: boolean) => void
onDragStart?: () => void
onDragEnd?: () => void
Expand All @@ -44,6 +45,7 @@ export function WorkflowItem({
workflow,
active,
level,
dragDisabled = false,
onWorkflowClick,
onDragStart: onDragStartProp,
onDragEnd: onDragEndProp,
Expand Down Expand Up @@ -307,7 +309,7 @@ export function WorkflowItem({
: '',
isDragging ? 'opacity-50' : ''
)}
draggable={!isEditing}
draggable={!isEditing && !dragDisabled}
onDragStart={handleDragStart}
onDragEnd={handleDragEnd}
onClick={handleClick}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ function compareByOrder<T extends { sortOrder: number; createdAt?: Date; id: str
interface WorkflowListProps {
regularWorkflows: WorkflowMetadata[]
isLoading?: boolean
canReorder?: boolean
handleFileChange: (event: React.ChangeEvent<HTMLInputElement>) => void
fileInputRef: React.RefObject<HTMLInputElement | null>
scrollContainerRef: React.RefObject<HTMLDivElement | null>
Expand All @@ -58,6 +59,7 @@ const DropIndicatorLine = memo(function DropIndicatorLine({
export function WorkflowList({
regularWorkflows,
isLoading = false,
canReorder = true,
handleFileChange,
fileInputRef,
scrollContainerRef,
Expand All @@ -73,6 +75,7 @@ export function WorkflowList({
const {
dropIndicator,
isDragging,
disabled: dragDisabled,
setScrollContainer,
createWorkflowDragHandlers,
createFolderDragHandlers,
Expand All @@ -81,7 +84,7 @@ export function WorkflowList({
createRootDropZone,
handleDragStart,
handleDragEnd,
} = useDragDrop()
} = useDragDrop({ disabled: !canReorder })

useEffect(() => {
if (scrollContainerRef.current) {
Expand Down Expand Up @@ -180,6 +183,7 @@ export function WorkflowList({
workflow={workflow}
active={isWorkflowActive(workflow.id)}
level={level}
dragDisabled={dragDisabled}
onWorkflowClick={handleWorkflowClick}
onDragStart={() => handleDragStart('workflow', folderId)}
onDragEnd={handleDragEnd}
Expand All @@ -192,6 +196,7 @@ export function WorkflowList({
[
dropIndicator,
isWorkflowActive,
dragDisabled,
createWorkflowDragHandlers,
handleWorkflowClick,
handleDragStart,
Expand Down Expand Up @@ -259,6 +264,7 @@ export function WorkflowList({
<FolderItem
folder={folder}
level={level}
dragDisabled={dragDisabled}
onDragStart={() => handleDragStart('folder', parentFolderId)}
onDragEnd={handleDragEnd}
/>
Expand Down Expand Up @@ -291,6 +297,7 @@ export function WorkflowList({
expandedFolders,
dropIndicator,
isDragging,
dragDisabled,
createFolderDragHandlers,
createEmptyFolderDropZone,
createFolderContentDropZone,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ export interface DropIndicator {
folderId: string | null
}

export function useDragDrop() {
interface UseDragDropOptions {
disabled?: boolean
}

export function useDragDrop(options: UseDragDropOptions = {}) {
const { disabled = false } = options
const [dropIndicator, setDropIndicator] = useState<DropIndicator | null>(null)
const [isDragging, setIsDragging] = useState(false)
const [hoverFolderId, setHoverFolderId] = useState<string | null>(null)
Expand Down Expand Up @@ -587,9 +592,31 @@ export function useDragDrop() {
scrollContainerRef.current = element
}, [])

const noopDragHandlers = {
onDragOver: (e: React.DragEvent<HTMLElement>) => e.preventDefault(),
onDrop: (e: React.DragEvent<HTMLElement>) => e.preventDefault(),
}

if (disabled) {
return {
dropIndicator: null,
isDragging: false,
disabled: true,
setScrollContainer,
createWorkflowDragHandlers: () => noopDragHandlers,
createFolderDragHandlers: () => ({ ...noopDragHandlers, onDragLeave: () => {} }),
createEmptyFolderDropZone: () => noopDragHandlers,
createFolderContentDropZone: () => noopDragHandlers,
createRootDropZone: () => ({ ...noopDragHandlers, onDragLeave: () => {} }),
handleDragStart: () => {},
handleDragEnd: () => {},
}
}

return {
dropIndicator,
isDragging,
disabled: false,
setScrollContainer,
createWorkflowDragHandlers,
createFolderDragHandlers,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,7 @@ export function Sidebar() {
<WorkflowList
regularWorkflows={regularWorkflows}
isLoading={isLoading}
canReorder={canEdit}
handleFileChange={handleImportFileChange}
fileInputRef={fileInputRef}
scrollContainerRef={scrollContainerRef}
Expand Down