"use client"; import { DatabaseBackupActionsModal } from "@/components/wrappers/dashboard/database/backup/actions/backup-actions-modal"; import { DatabaseTabs } from "@/components/wrappers/dashboard/projects/database/database-tabs"; import { Setting } from "@/db/schema/01_setting"; import { BackupWith, DatabaseWith, Restoration } from "@/db/schema/07_database"; import { MemberWithUser } from "@/db/schema/03_organization"; import { useBackupModal } from "@/components/wrappers/dashboard/database/backup/backup-modal-context"; import { DatabaseKpi } from "@/components/wrappers/dashboard/projects/database/database-kpi"; import { useQuery } from "@tanstack/react-query"; import { getDatabaseDataAction } from "@/components/wrappers/dashboard/database/backup/actions/get-data.action"; import { PageContent, PageDescription, PageTitle, } from "@/features/layout/page"; import { capitalizeFirstLetter } from "@/utils/text"; import { RetentionPolicySheet } from "@/components/wrappers/dashboard/database/retention-policy/retention-policy-sheet"; import { CronButton } from "@/components/wrappers/dashboard/database/cron-button/cron-button"; import { ChannelPoliciesModal } from "@/components/wrappers/dashboard/database/channels-policy/policy-modal"; import { HardDrive, Megaphone } from "lucide-react"; import { ImportModal } from "@/components/wrappers/dashboard/database/import/import-modal"; import { BackupButton } from "@/components/wrappers/dashboard/backup/backup-button/backup-button"; export type DatabaseContentProps = { settings: Setting; backups: BackupWith[]; restorations: Restoration[]; isAlreadyRestore: boolean; database: DatabaseWith; activeMember: MemberWithUser; totalBackups: number; availableBackups: number; successRate: number | null; organizationId: string; activeOrganizationChannels: any[]; activeOrganizationStorageChannels: any[]; }; export const DatabaseContent = (props: DatabaseContentProps) => { const {} = useBackupModal(); const { data } = useQuery({ queryKey: ["database-data", props.database.id], queryFn: async () => { const result = await getDatabaseDataAction({ databaseId: props.database.id, }); return result?.data; }, initialData: { // TODO : to be patched // @ts-ignore database: { ...props.database, project: props.database.project ?? null, }, backups: props.backups, restorations: props.restorations, activeOrganizationChannels: props.activeOrganizationChannels, activeOrganizationStorageChannels: props.activeOrganizationStorageChannels, stats: { totalBackups: props.totalBackups, availableBackups: props.availableBackups, successRate: props.successRate, }, }, staleTime: 0, gcTime: 0, refetchInterval: 1000, }); const database = data?.database ?? props.database; const backups = data?.backups ?? props.backups; const restorations = data?.restorations ?? props.restorations; const activeOrganizationChannels = data?.activeOrganizationChannels ?? props.activeOrganizationChannels; const activeOrganizationStorageChannels = data?.activeOrganizationStorageChannels ?? props.activeOrganizationStorageChannels; const stats = data?.stats ?? { totalBackups: props.totalBackups, availableBackups: props.availableBackups, successRate: props.successRate, }; const isAlreadyRestore = restorations.some((r) => r.status === "waiting"); const isAlreadyBackup = backups.some( (b) => b.status === "waiting" || b.status === "ongoing", ); const isMember = props.activeMember.role === "member"; return ( <>
{capitalizeFirstLetter(database.name)}
{!isMember && (
} channels={activeOrganizationChannels} organizationId={props.organizationId} /> } kind={"storage"} channels={activeOrganizationStorageChannels} organizationId={props.organizationId} />
)}
{database.description && ( {database.description} )} ); };