Files
portabase/src/components/wrappers/dashboard/projects/database/database-tabs.tsx
T

76 lines
2.7 KiB
TypeScript
Raw Normal View History

2025-05-16 15:54:17 +02:00
"use client";
2024-12-14 17:54:03 +01:00
import {Tabs, TabsContent, TabsList, TabsTrigger} from "@/components/ui/tabs";
import {useEffect, useState} from "react";
import {useRouter, useSearchParams} from "next/navigation";
import {eventUpdate} from "@/types/events";
import {Backup, Database, DatabaseWith, Restoration} from "@/db/schema/07_database";
import {Setting} from "@/db/schema/01_setting";
import {DatabaseBackupList} from "@/components/wrappers/dashboard/projects/database/database-backup-list";
import {DatabaseRestoreList} from "@/components/wrappers/dashboard/projects/database/database-restore-list";
2025-11-01 14:50:08 +01:00
import {MemberWithUser} from "@/db/schema/03_organization";
2024-12-01 20:56:19 +01:00
export type DatabaseTabsProps = {
2025-11-01 14:50:08 +01:00
settings: Setting,
backups: Backup[],
restorations: Restoration[],
isAlreadyRestore: boolean,
database: DatabaseWith,
activeMember: MemberWithUser
2025-05-16 15:54:17 +02:00
};
2024-12-01 20:56:19 +01:00
export const DatabaseTabs = (props: DatabaseTabsProps) => {
const router = useRouter();
const searchParams = useSearchParams();
const [tab, setTab] = useState<string>(() => searchParams.get("tab") ?? "backup");
useEffect(() => {
2025-05-16 15:54:17 +02:00
const eventSource = new EventSource("/api/events");
eventSource.addEventListener("modification", (event) => {
const data: eventUpdate = JSON.parse(event.data);
2024-12-14 17:54:03 +01:00
if (data.update) {
2025-05-16 15:54:17 +02:00
router.refresh();
}
});
return () => {
eventSource.close();
};
}, []);
useEffect(() => {
const newTab = searchParams.get("tab") ?? "backup";
setTab(newTab);
}, [searchParams]);
const handleChangeTab = (value: string) => {
router.push(`?tab=${value}`);
};
2024-12-01 20:56:19 +01:00
return (
<Tabs className="flex flex-col flex-1" value={tab} onValueChange={handleChangeTab}>
2024-12-01 20:56:19 +01:00
<TabsList className="grid w-full grid-cols-2">
<TabsTrigger value="backup">Backup</TabsTrigger>
<TabsTrigger value="restore">Restoration</TabsTrigger>
</TabsList>
<TabsContent className="h-full justify-between" value="backup">
<DatabaseBackupList
isAlreadyRestore={props.isAlreadyRestore}
settings={props.settings}
database={props.database}
backups={props.backups}
2025-11-01 14:50:08 +01:00
activeMember={props.activeMember}
/>
2024-12-01 20:56:19 +01:00
</TabsContent>
<TabsContent className="h-full justify-between" value="restore">
<DatabaseRestoreList
isAlreadyRestore={props.isAlreadyRestore}
restorations={props.restorations}
2025-11-01 14:50:08 +01:00
activeMember={props.activeMember}
/>
</TabsContent>
2024-12-01 20:56:19 +01:00
</Tabs>
2025-05-16 15:54:17 +02:00
);
};