feat: persist active tab in URL (?tab=chat survives reload)
This commit is contained in:
parent
f4f09bfeee
commit
9b2026c5fa
@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams, useSearchParams } from "react-router-dom";
|
||||||
import { getProjects, type Project } from "@/lib/api";
|
import { getProjects, type Project } from "@/lib/api";
|
||||||
import Sidebar from "@/components/Sidebar";
|
import Sidebar from "@/components/Sidebar";
|
||||||
import KanbanBoard from "@/components/KanbanBoard";
|
import KanbanBoard from "@/components/KanbanBoard";
|
||||||
@ -16,9 +16,17 @@ const TABS = [
|
|||||||
|
|
||||||
export default function ProjectPage() {
|
export default function ProjectPage() {
|
||||||
const { slug } = useParams<{ slug: string }>();
|
const { slug } = useParams<{ slug: string }>();
|
||||||
|
const [searchParams, setSearchParams] = useSearchParams();
|
||||||
const [projects, setProjects] = useState<Project[]>([]);
|
const [projects, setProjects] = useState<Project[]>([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [activeTab, setActiveTab] = useState("board");
|
|
||||||
|
const validTabs = ["board", "chat", "files", "settings"];
|
||||||
|
const tabFromUrl = searchParams.get("tab") || "board";
|
||||||
|
const activeTab = validTabs.includes(tabFromUrl) ? tabFromUrl : "board";
|
||||||
|
|
||||||
|
const setActiveTab = (tab: string) => {
|
||||||
|
setSearchParams(tab === "board" ? {} : { tab }, { replace: true });
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getProjects()
|
getProjects()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user