From e1f87a8db9aecbb611ce293d83bea0a982b20a4a Mon Sep 17 00:00:00 2001 From: akhisud3195 Date: Tue, 19 Aug 2025 19:39:42 +0530 Subject: [PATCH] Add query params in URLs for tabs in triggers to route correctly --- .../composio-trigger-deployment-view.tsx | 4 ++-- .../create-recurring-job-rule-form.tsx | 4 ++-- .../job-rules/components/job-rules-tabs.tsx | 23 ++++++++++++++++--- .../components/recurring-job-rule-view.tsx | 4 ++-- .../job-rules/components/triggers-tab.tsx | 6 ++++- .../create-scheduled-job-rule-form.tsx | 4 ++-- .../components/scheduled-job-rule-view.tsx | 4 ++-- 7 files changed, 35 insertions(+), 14 deletions(-) diff --git a/apps/rowboat/app/projects/[projectId]/job-rules/components/composio-trigger-deployment-view.tsx b/apps/rowboat/app/projects/[projectId]/job-rules/components/composio-trigger-deployment-view.tsx index 19d54c0c..e6ecfd69 100644 --- a/apps/rowboat/app/projects/[projectId]/job-rules/components/composio-trigger-deployment-view.tsx +++ b/apps/rowboat/app/projects/[projectId]/job-rules/components/composio-trigger-deployment-view.tsx @@ -47,7 +47,7 @@ export function ComposioTriggerDeploymentView({ projectId, deploymentId }: { pro setDeleting(true); try { await deleteComposioTriggerDeployment({ projectId, deploymentId: deployment.id }); - window.location.href = `/projects/${projectId}/job-rules`; + window.location.href = `/projects/${projectId}/job-rules?tab=triggers`; } catch (e) { console.error(e); alert('Failed to delete trigger'); @@ -62,7 +62,7 @@ export function ComposioTriggerDeploymentView({ projectId, deploymentId }: { pro - + diff --git a/apps/rowboat/app/projects/[projectId]/job-rules/components/job-rules-tabs.tsx b/apps/rowboat/app/projects/[projectId]/job-rules/components/job-rules-tabs.tsx index 7afb463a..d1e99622 100644 --- a/apps/rowboat/app/projects/[projectId]/job-rules/components/job-rules-tabs.tsx +++ b/apps/rowboat/app/projects/[projectId]/job-rules/components/job-rules-tabs.tsx @@ -1,18 +1,35 @@ 'use client'; -import { useState } from "react"; +import { useEffect, useState } from "react"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { Tabs, Tab } from "@/components/ui/tabs"; import { ScheduledJobRulesList } from "../scheduled/components/scheduled-job-rules-list"; import { RecurringJobRulesList } from "./recurring-job-rules-list"; import { TriggersTab } from "./triggers-tab"; export function JobRulesTabs({ projectId }: { projectId: string }) { - const [activeTab, setActiveTab] = useState("triggers"); + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const initialTab = (searchParams.get('tab') ?? 'triggers'); + const [activeTab, setActiveTab] = useState(initialTab); const handleTabChange = (key: React.Key) => { - setActiveTab(key.toString()); + const nextTab = key.toString(); + setActiveTab(nextTab); + const params = new URLSearchParams(searchParams.toString()); + params.set('tab', nextTab); + router.replace(`${pathname}?${params.toString()}`); }; + useEffect(() => { + const current = searchParams.get('tab') ?? 'triggers'; + if (current !== activeTab) { + setActiveTab(current); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchParams]); + return (
- + diff --git a/apps/rowboat/app/projects/[projectId]/job-rules/components/triggers-tab.tsx b/apps/rowboat/app/projects/[projectId]/job-rules/components/triggers-tab.tsx index 3fab04b3..3a6d0111 100644 --- a/apps/rowboat/app/projects/[projectId]/job-rules/components/triggers-tab.tsx +++ b/apps/rowboat/app/projects/[projectId]/job-rules/components/triggers-tab.tsx @@ -180,7 +180,11 @@ export function TriggersTab({ projectId }: { projectId: string }) { triggerConfig, }); - // Success! Go back to triggers list and reload + // Success! Go back to triggers list tab and reload + if (typeof window !== 'undefined') { + window.location.href = `/projects/${projectId}/job-rules?tab=triggers`; + return; + } handleBackToList(); } catch (err: any) { console.error('Error creating trigger:', err); diff --git a/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/create-scheduled-job-rule-form.tsx b/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/create-scheduled-job-rule-form.tsx index f41aeb3c..3d315424 100644 --- a/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/create-scheduled-job-rule-form.tsx +++ b/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/create-scheduled-job-rule-form.tsx @@ -90,7 +90,7 @@ export function CreateScheduledJobRuleForm({ projectId }: { projectId: string }) input: { messages: convertedMessages }, scheduledTime: scheduledTimeString, }); - router.push(`/projects/${projectId}/job-rules`); + router.push(`/projects/${projectId}/job-rules?tab=scheduled`); } catch (error) { console.error("Failed to create scheduled job rule:", error); alert("Failed to create scheduled job rule"); @@ -105,7 +105,7 @@ export function CreateScheduledJobRuleForm({ projectId }: { projectId: string }) - + diff --git a/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/scheduled-job-rule-view.tsx b/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/scheduled-job-rule-view.tsx index 445a39de..de873a5d 100644 --- a/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/scheduled-job-rule-view.tsx +++ b/apps/rowboat/app/projects/[projectId]/job-rules/scheduled/components/scheduled-job-rule-view.tsx @@ -46,7 +46,7 @@ export function ScheduledJobRuleView({ projectId, ruleId }: { projectId: string; ruleId: rule.id, }); // Redirect back to job rules list - router.push(`/projects/${projectId}/job-rules`); + router.push(`/projects/${projectId}/job-rules?tab=scheduled`); } catch (error) { console.error("Failed to delete rule:", error); alert("Failed to delete rule"); @@ -80,7 +80,7 @@ export function ScheduledJobRuleView({ projectId, ruleId }: { projectId: string; - +