Skip to content

Commit 672e7fe

Browse files
committed
fix: moved tab behavior to separated hook
1 parent 0bc4d0e commit 672e7fe

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

components/safe/view-tx-list.tsx

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
66
import { SafeTx } from "@/core/safe-tx";
77
import { useCurrentTransactions } from "@/hooks/use-current-transactions";
88
import { useSafeParams } from "@/hooks/use-safe-params";
9-
import { useRouter, useSearchParams } from "next/navigation";
10-
import { useEffect, useMemo, useState } from "react";
9+
import { useMemo } from "react";
1110
import { Address } from "viem";
11+
import useTabs, { TabType } from "../../hooks/use-tabs";
1212
import { getReportRef } from "../../utils/get-report";
1313
import { TimelockTxStatus } from "../../utils/tx-status";
1414
import { Button } from "../ui/button";
@@ -19,21 +19,8 @@ interface SafeViewProps {
1919
executedProposals: SafeTx[];
2020
}
2121

22-
export type TabType = "queue" | "execute" | "history";
23-
2422
export function SafeView({ safeAddress }: SafeViewProps) {
25-
const router = useRouter();
26-
const searchParams = useSearchParams();
27-
const [activeTab, setActiveTab] = useState<TabType>();
28-
29-
useEffect(() => {
30-
if (activeTab === undefined) {
31-
const tab = searchParams.get("tab") as TabType;
32-
setActiveTab(
33-
tab && ["queue", "execute", "history"].includes(tab) ? tab : "queue"
34-
);
35-
}
36-
}, [searchParams, activeTab]);
23+
const { activeTab, handleTabChange } = useTabs();
3724

3825
const { txs, governor, isLoading, error } =
3926
useCurrentTransactions(safeAddress);
@@ -97,10 +84,7 @@ export function SafeView({ safeAddress }: SafeViewProps) {
9784
<div className="p-4">
9885
<Tabs
9986
value={activeTab}
100-
onValueChange={(value) => {
101-
setActiveTab(value as TabType);
102-
router.replace(`?tab=${value}`);
103-
}}
87+
onValueChange={(value) => handleTabChange(value as TabType)}
10488
className="w-full"
10589
>
10690
<TabsList>

hooks/use-tabs.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"use client";
2+
3+
import { useSearchParams } from "next/navigation";
4+
import { useRouter } from "next/router";
5+
import { useEffect, useState } from "react";
6+
7+
export type TabType = "queue" | "execute" | "history";
8+
9+
function useTabs() {
10+
const router = useRouter();
11+
const searchParams = useSearchParams();
12+
const [activeTab, setActiveTab] = useState<TabType>();
13+
14+
useEffect(() => {
15+
if (activeTab === undefined) {
16+
const tab = searchParams.get("tab") as TabType;
17+
setActiveTab(
18+
tab && ["queue", "execute", "history"].includes(tab) ? tab : "queue"
19+
);
20+
}
21+
}, [searchParams, activeTab]);
22+
23+
return {
24+
activeTab,
25+
handleTabChange: (value: TabType) => {
26+
setActiveTab(value);
27+
router.replace(`?tab=${value}`);
28+
},
29+
};
30+
}
31+
32+
export default useTabs;

0 commit comments

Comments
 (0)