Skip to content

Commit e53538d

Browse files
fix(drag): read perms prevent drag (#2834)
1 parent d4c171c commit e53538d

File tree

5 files changed

+43
-4
lines changed

5 files changed

+43
-4
lines changed

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/folder-item/folder-item.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const logger = createLogger('FolderItem')
3232
interface FolderItemProps {
3333
folder: FolderTreeNode
3434
level: number
35+
dragDisabled?: boolean
3536
hoverHandlers?: {
3637
onDragEnter?: (e: React.DragEvent<HTMLElement>) => void
3738
onDragLeave?: (e: React.DragEvent<HTMLElement>) => void
@@ -51,6 +52,7 @@ interface FolderItemProps {
5152
export function FolderItem({
5253
folder,
5354
level,
55+
dragDisabled = false,
5456
hoverHandlers,
5557
onDragStart: onDragStartProp,
5658
onDragEnd: onDragEndProp,
@@ -294,7 +296,7 @@ export function FolderItem({
294296
onClick={handleClick}
295297
onKeyDown={handleKeyDown}
296298
onContextMenu={handleContextMenu}
297-
draggable={!isEditing}
299+
draggable={!isEditing && !dragDisabled}
298300
onDragStart={handleDragStart}
299301
onDragEnd={handleDragEnd}
300302
{...hoverHandlers}

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/workflow-item/workflow-item.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ interface WorkflowItemProps {
2828
workflow: WorkflowMetadata
2929
active: boolean
3030
level: number
31+
dragDisabled?: boolean
3132
onWorkflowClick: (workflowId: string, shiftKey: boolean, metaKey: boolean) => void
3233
onDragStart?: () => void
3334
onDragEnd?: () => void
@@ -44,6 +45,7 @@ export function WorkflowItem({
4445
workflow,
4546
active,
4647
level,
48+
dragDisabled = false,
4749
onWorkflowClick,
4850
onDragStart: onDragStartProp,
4951
onDragEnd: onDragEndProp,
@@ -307,7 +309,7 @@ export function WorkflowItem({
307309
: '',
308310
isDragging ? 'opacity-50' : ''
309311
)}
310-
draggable={!isEditing}
312+
draggable={!isEditing && !dragDisabled}
311313
onDragStart={handleDragStart}
312314
onDragEnd={handleDragEnd}
313315
onClick={handleClick}

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/workflow-list.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ function compareByOrder<T extends { sortOrder: number; createdAt?: Date; id: str
3232
interface WorkflowListProps {
3333
regularWorkflows: WorkflowMetadata[]
3434
isLoading?: boolean
35+
canReorder?: boolean
3536
handleFileChange: (event: React.ChangeEvent<HTMLInputElement>) => void
3637
fileInputRef: React.RefObject<HTMLInputElement | null>
3738
scrollContainerRef: React.RefObject<HTMLDivElement | null>
@@ -58,6 +59,7 @@ const DropIndicatorLine = memo(function DropIndicatorLine({
5859
export function WorkflowList({
5960
regularWorkflows,
6061
isLoading = false,
62+
canReorder = true,
6163
handleFileChange,
6264
fileInputRef,
6365
scrollContainerRef,
@@ -73,6 +75,7 @@ export function WorkflowList({
7375
const {
7476
dropIndicator,
7577
isDragging,
78+
disabled: dragDisabled,
7679
setScrollContainer,
7780
createWorkflowDragHandlers,
7881
createFolderDragHandlers,
@@ -81,7 +84,7 @@ export function WorkflowList({
8184
createRootDropZone,
8285
handleDragStart,
8386
handleDragEnd,
84-
} = useDragDrop()
87+
} = useDragDrop({ disabled: !canReorder })
8588

8689
useEffect(() => {
8790
if (scrollContainerRef.current) {
@@ -180,6 +183,7 @@ export function WorkflowList({
180183
workflow={workflow}
181184
active={isWorkflowActive(workflow.id)}
182185
level={level}
186+
dragDisabled={dragDisabled}
183187
onWorkflowClick={handleWorkflowClick}
184188
onDragStart={() => handleDragStart('workflow', folderId)}
185189
onDragEnd={handleDragEnd}
@@ -192,6 +196,7 @@ export function WorkflowList({
192196
[
193197
dropIndicator,
194198
isWorkflowActive,
199+
dragDisabled,
195200
createWorkflowDragHandlers,
196201
handleWorkflowClick,
197202
handleDragStart,
@@ -259,6 +264,7 @@ export function WorkflowList({
259264
<FolderItem
260265
folder={folder}
261266
level={level}
267+
dragDisabled={dragDisabled}
262268
onDragStart={() => handleDragStart('folder', parentFolderId)}
263269
onDragEnd={handleDragEnd}
264270
/>
@@ -291,6 +297,7 @@ export function WorkflowList({
291297
expandedFolders,
292298
dropIndicator,
293299
isDragging,
300+
dragDisabled,
294301
createFolderDragHandlers,
295302
createEmptyFolderDropZone,
296303
createFolderContentDropZone,

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/hooks/use-drag-drop.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ export interface DropIndicator {
1818
folderId: string | null
1919
}
2020

21-
export function useDragDrop() {
21+
interface UseDragDropOptions {
22+
disabled?: boolean
23+
}
24+
25+
export function useDragDrop(options: UseDragDropOptions = {}) {
26+
const { disabled = false } = options
2227
const [dropIndicator, setDropIndicator] = useState<DropIndicator | null>(null)
2328
const [isDragging, setIsDragging] = useState(false)
2429
const [hoverFolderId, setHoverFolderId] = useState<string | null>(null)
@@ -587,9 +592,31 @@ export function useDragDrop() {
587592
scrollContainerRef.current = element
588593
}, [])
589594

595+
const noopDragHandlers = {
596+
onDragOver: (e: React.DragEvent<HTMLElement>) => e.preventDefault(),
597+
onDrop: (e: React.DragEvent<HTMLElement>) => e.preventDefault(),
598+
}
599+
600+
if (disabled) {
601+
return {
602+
dropIndicator: null,
603+
isDragging: false,
604+
disabled: true,
605+
setScrollContainer,
606+
createWorkflowDragHandlers: () => noopDragHandlers,
607+
createFolderDragHandlers: () => ({ ...noopDragHandlers, onDragLeave: () => {} }),
608+
createEmptyFolderDropZone: () => noopDragHandlers,
609+
createFolderContentDropZone: () => noopDragHandlers,
610+
createRootDropZone: () => ({ ...noopDragHandlers, onDragLeave: () => {} }),
611+
handleDragStart: () => {},
612+
handleDragEnd: () => {},
613+
}
614+
}
615+
590616
return {
591617
dropIndicator,
592618
isDragging,
619+
disabled: false,
593620
setScrollContainer,
594621
createWorkflowDragHandlers,
595622
createFolderDragHandlers,

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@ export function Sidebar() {
635635
<WorkflowList
636636
regularWorkflows={regularWorkflows}
637637
isLoading={isLoading}
638+
canReorder={canEdit}
638639
handleFileChange={handleImportFileChange}
639640
fileInputRef={fileInputRef}
640641
scrollContainerRef={scrollContainerRef}

0 commit comments

Comments
 (0)