Skip to content

Commit 9910584

Browse files
icecrasher321Vikhyath Mondreti
andauthored
fix(workspaces init): fix switch workspace fully + first workflow should be selected when you enter app (#561)
* add target workspace id for switch workspace" * fix lint * workspace initialization bug fixes * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net>
1 parent 0fb2f7c commit 9910584

4 files changed

Lines changed: 60 additions & 11 deletions

File tree

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ const IS_DEV = process.env.NODE_ENV === 'development'
3232
export function Sidebar() {
3333
useGlobalShortcuts()
3434

35-
const { workflows, createWorkflow, isLoading: workflowsLoading } = useWorkflowRegistry()
35+
const {
36+
workflows,
37+
createWorkflow,
38+
isLoading: workflowsLoading,
39+
targetWorkspaceId,
40+
} = useWorkflowRegistry()
3641
const { isPending: sessionLoading } = useSession()
3742
const userPermissions = useUserPermissionsContext()
3843
const isLoading = workflowsLoading || sessionLoading
@@ -62,9 +67,12 @@ export function Sidebar() {
6267
const regular: WorkflowMetadata[] = []
6368
const temp: WorkflowMetadata[] = []
6469

70+
// Use targetWorkspaceId during transitions to prevent empty sidebar
71+
const effectiveWorkspaceId = targetWorkspaceId || workspaceId
72+
6573
if (!isLoading) {
6674
Object.values(workflows).forEach((workflow) => {
67-
if (workflow.workspaceId === workspaceId || !workflow.workspaceId) {
75+
if (workflow.workspaceId === effectiveWorkspaceId || !workflow.workspaceId) {
6876
if (workflow.marketplaceData?.status === 'temp') {
6977
temp.push(workflow)
7078
} else {
@@ -91,7 +99,7 @@ export function Sidebar() {
9199
}
92100

93101
return { regularWorkflows: regular, tempWorkflows: temp }
94-
}, [workflows, isLoading, workspaceId])
102+
}, [workflows, isLoading, workspaceId, targetWorkspaceId])
95103

96104
// Create workflow handler
97105
const handleCreateWorkflow = async (folderId?: string) => {

apps/sim/app/workspace/[workspaceId]/w/page.tsx

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,44 @@ import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
77

88
export default function WorkflowsPage() {
99
const router = useRouter()
10-
const { workflows, isLoading } = useWorkflowRegistry()
10+
const { workflows, isLoading, loadWorkflows } = useWorkflowRegistry()
1111

1212
const params = useParams()
13-
const workspaceId = params.workspaceId
13+
const workspaceId = params.workspaceId as string
14+
15+
// Always load workflows for the current workspace to ensure we have the correct ones
16+
useEffect(() => {
17+
if (!isLoading) {
18+
loadWorkflows(workspaceId)
19+
}
20+
}, [workspaceId, loadWorkflows, isLoading])
1421

1522
useEffect(() => {
1623
// Wait for workflows to load
1724
if (isLoading) return
1825

19-
const workflowIds = Object.keys(workflows)
26+
// Filter workflows for this workspace only
27+
const workspaceWorkflows = Object.values(workflows).filter(
28+
(workflow) => workflow.workspaceId === workspaceId
29+
)
30+
31+
// If we have workflows for this workspace, redirect to the first one
32+
if (workspaceWorkflows.length > 0) {
33+
// Sort by last modified date (newest first) - same logic as sidebar
34+
const sortedWorkflows = workspaceWorkflows.sort((a, b) => {
35+
const dateA =
36+
a.lastModified instanceof Date
37+
? a.lastModified.getTime()
38+
: new Date(a.lastModified).getTime()
39+
const dateB =
40+
b.lastModified instanceof Date
41+
? b.lastModified.getTime()
42+
: new Date(b.lastModified).getTime()
43+
return dateB - dateA
44+
})
2045

21-
// If we have workflows, redirect to the first one
22-
if (workflowIds.length > 0) {
23-
router.replace(`/workspace/${workspaceId}/w/${workflowIds[0]}`)
46+
const firstWorkflowId = sortedWorkflows[0].id
47+
router.replace(`/workspace/${workspaceId}/w/${firstWorkflowId}`)
2448
return
2549
}
2650

apps/sim/stores/workflows/registry/store.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,17 @@ async function fetchWorkflowsFromDB(workspaceId?: string): Promise<void> {
155155
if (!currentState.activeWorkflowId && Object.keys(registryWorkflows).length > 0) {
156156
const firstWorkflowId = Object.keys(registryWorkflows)[0]
157157
useWorkflowRegistry.setState({ activeWorkflowId: firstWorkflowId })
158-
logger.info(`Set first workflow as active: ${firstWorkflowId}`)
158+
logger.info(`Set first workflow as active: ${firstWorkflowId}`, {
159+
workspaceId,
160+
totalWorkflows: Object.keys(registryWorkflows).length,
161+
workflowIds: Object.keys(registryWorkflows),
162+
})
163+
} else {
164+
logger.info(`Not setting active workflow`, {
165+
currentActiveWorkflowId: currentState.activeWorkflowId,
166+
workflowCount: Object.keys(registryWorkflows).length,
167+
workspaceId,
168+
})
159169
}
160170

161171
logger.info(
@@ -254,6 +264,8 @@ export const useWorkflowRegistry = create<WorkflowRegistry>()(
254264
error: null,
255265
// Initialize deployment statuses
256266
deploymentStatuses: {},
267+
// Track target workspace during transitions to prevent empty sidebar
268+
targetWorkspaceId: null,
257269

258270
// Set loading state
259271
setLoading: (loading: boolean) => {
@@ -321,12 +333,13 @@ export const useWorkflowRegistry = create<WorkflowRegistry>()(
321333
// Clear current workspace state
322334
resetWorkflowStores()
323335

324-
// Update state
336+
// Update state with target workspace ID for sidebar filtering
325337
set({
326338
activeWorkflowId: null,
327339
workflows: {},
328340
isLoading: true,
329341
error: null,
342+
targetWorkspaceId: workspaceId,
330343
})
331344

332345
// Fetch workflows for the new workspace
@@ -338,9 +351,12 @@ export const useWorkflowRegistry = create<WorkflowRegistry>()(
338351
set({
339352
error: `Failed to switch workspace: ${error instanceof Error ? error.message : 'Unknown error'}`,
340353
isLoading: false,
354+
targetWorkspaceId: null,
341355
})
342356
} finally {
343357
setWorkspaceTransitioning(false)
358+
// Clear target workspace ID after transition completes
359+
set({ targetWorkspaceId: null })
344360
}
345361
},
346362

apps/sim/stores/workflows/registry/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export interface WorkflowRegistryState {
2727
isLoading: boolean
2828
error: string | null
2929
deploymentStatuses: Record<string, DeploymentStatus>
30+
targetWorkspaceId: string | null
3031
}
3132

3233
export interface WorkflowRegistryActions {

0 commit comments

Comments
 (0)