Skip to content

Commit 0f2b59d

Browse files
committed
ack comments
1 parent dec2b61 commit 0f2b59d

File tree

3 files changed

+46
-65
lines changed

3 files changed

+46
-65
lines changed

apps/sim/hooks/queries/folders.ts

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import {
55
createOptimisticMutationHandlers,
66
generateTempId,
77
} from '@/hooks/queries/utils/optimistic-mutation'
8+
import { getTopInsertionSortOrder } from '@/hooks/queries/utils/top-insertion-sort-order'
89
import { workflowKeys } from '@/hooks/queries/workflows'
910
import { useFolderStore } from '@/stores/folders/store'
1011
import type { WorkflowFolder } from '@/stores/folders/types'
1112
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
12-
import type { WorkflowMetadata } from '@/stores/workflows/registry/types'
1313

1414
const logger = createLogger('FolderQueries')
1515

@@ -135,37 +135,6 @@ function createFolderMutationHandlers<TVariables extends { workspaceId: string }
135135
})
136136
}
137137

138-
/**
139-
* Calculates the insertion sort order for a folder at the top of mixed siblings.
140-
* Siblings include both folders and workflows because they are rendered together.
141-
*/
142-
function getTopInsertionSortOrder(
143-
folders: Record<string, WorkflowFolder>,
144-
workflows: Record<string, WorkflowMetadata>,
145-
workspaceId: string,
146-
parentId: string | null | undefined
147-
): number {
148-
const normalizedParentId = parentId ?? null
149-
150-
const siblingFolders = Object.values(folders).filter(
151-
(f) => f.workspaceId === workspaceId && f.parentId === normalizedParentId
152-
)
153-
const siblingWorkflows = Object.values(workflows).filter(
154-
(w) => w.workspaceId === workspaceId && (w.folderId ?? null) === normalizedParentId
155-
)
156-
157-
const siblingOrders = [
158-
...siblingFolders.map((folder) => folder.sortOrder),
159-
...siblingWorkflows.map((workflow) => workflow.sortOrder ?? 0),
160-
]
161-
162-
if (siblingOrders.length === 0) {
163-
return 0
164-
}
165-
166-
return Math.min(...siblingOrders) - 1
167-
}
168-
169138
export function useCreateFolder() {
170139
const queryClient = useQueryClient()
171140

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
interface SortableWorkflow {
2+
workspaceId: string
3+
folderId?: string | null
4+
sortOrder?: number
5+
}
6+
7+
interface SortableFolder {
8+
workspaceId: string
9+
parentId?: string | null
10+
sortOrder: number
11+
}
12+
13+
/**
14+
* Calculates the insertion sort order that places a new item at the top of a
15+
* mixed list of folders and workflows within the same parent scope.
16+
*/
17+
export function getTopInsertionSortOrder(
18+
workflows: Record<string, SortableWorkflow>,
19+
folders: Record<string, SortableFolder>,
20+
workspaceId: string,
21+
parentId: string | null | undefined
22+
): number {
23+
const normalizedParentId = parentId ?? null
24+
25+
const siblingWorkflows = Object.values(workflows).filter(
26+
(workflow) =>
27+
workflow.workspaceId === workspaceId && (workflow.folderId ?? null) === normalizedParentId
28+
)
29+
const siblingFolders = Object.values(folders).filter(
30+
(folder) =>
31+
folder.workspaceId === workspaceId && (folder.parentId ?? null) === normalizedParentId
32+
)
33+
34+
const siblingOrders = [
35+
...siblingWorkflows.map((workflow) => workflow.sortOrder ?? 0),
36+
...siblingFolders.map((folder) => folder.sortOrder),
37+
]
38+
39+
if (siblingOrders.length === 0) {
40+
return 0
41+
}
42+
43+
return Math.min(...siblingOrders) - 1
44+
}

apps/sim/hooks/queries/workflows.ts

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
createOptimisticMutationHandlers,
99
generateTempId,
1010
} from '@/hooks/queries/utils/optimistic-mutation'
11+
import { getTopInsertionSortOrder } from '@/hooks/queries/utils/top-insertion-sort-order'
1112
import { useFolderStore } from '@/stores/folders/store'
1213
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
1314
import type { WorkflowMetadata } from '@/stores/workflows/registry/types'
@@ -161,39 +162,6 @@ interface DuplicateWorkflowResult {
161162
subflowsCount: number
162163
}
163164

164-
/**
165-
* Calculates the insertion sort order for a workflow at the top of mixed siblings.
166-
* Siblings include both workflows and folders because they share one rendered list.
167-
*/
168-
function getTopInsertionSortOrder(
169-
workflows: Record<string, WorkflowMetadata>,
170-
folders: ReturnType<typeof useFolderStore.getState>['folders'],
171-
workspaceId: string,
172-
folderId: string | null | undefined
173-
): number {
174-
const normalizedFolderId = folderId ?? null
175-
176-
const siblingWorkflows = Object.values(workflows).filter(
177-
(workflow) =>
178-
workflow.workspaceId === workspaceId && (workflow.folderId ?? null) === normalizedFolderId
179-
)
180-
const siblingFolders = Object.values(folders).filter(
181-
(folder) =>
182-
folder.workspaceId === workspaceId && (folder.parentId ?? null) === normalizedFolderId
183-
)
184-
185-
const siblingOrders = [
186-
...siblingWorkflows.map((workflow) => workflow.sortOrder ?? 0),
187-
...siblingFolders.map((folder) => folder.sortOrder),
188-
]
189-
190-
if (siblingOrders.length === 0) {
191-
return 0
192-
}
193-
194-
return Math.min(...siblingOrders) - 1
195-
}
196-
197165
/**
198166
* Creates optimistic mutation handlers for workflow operations
199167
*/

0 commit comments

Comments
 (0)