refactor: system-info hook

This commit is contained in:
Nicolas Meienberger
2025-11-11 21:48:42 +01:00
parent 52e38a6242
commit 8d7e50508d
3 changed files with 26 additions and 11 deletions

View File

@@ -9,11 +9,12 @@ import { Button } from "./ui/button";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "./ui/form"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "./ui/form";
import { Input } from "./ui/input"; import { Input } from "./ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select";
import { getSystemInfoOptions, listRcloneRemotesOptions } from "~/api-client/@tanstack/react-query.gen"; import { listRcloneRemotesOptions } from "~/api-client/@tanstack/react-query.gen";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { Alert, AlertDescription } from "./ui/alert"; import { Alert, AlertDescription } from "./ui/alert";
import { ExternalLink } from "lucide-react"; import { ExternalLink } from "lucide-react";
import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip"; import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip";
import { useSystemInfo } from "~/hooks/use-system-info";
export const formSchema = type({ export const formSchema = type({
name: "2<=string<=32", name: "2<=string<=32",
@@ -72,9 +73,7 @@ export const CreateRepositoryForm = ({
} }
}, [watchedBackend, watchedName, form]); }, [watchedBackend, watchedName, form]);
const { data: systemInfo } = useQuery({ const { capabilities } = useSystemInfo();
...getSystemInfoOptions(),
});
return ( return (
<Form {...form}> <Form {...form}>
@@ -120,11 +119,11 @@ export const CreateRepositoryForm = ({
<SelectItem value="azure">Azure Blob Storage</SelectItem> <SelectItem value="azure">Azure Blob Storage</SelectItem>
<Tooltip> <Tooltip>
<TooltipTrigger> <TooltipTrigger>
<SelectItem disabled={!systemInfo?.capabilities.rclone} value="rclone"> <SelectItem disabled={!capabilities.rclone} value="rclone">
rclone (40+ cloud providers) rclone (40+ cloud providers)
</SelectItem> </SelectItem>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent className={cn({ hidden: systemInfo?.capabilities.rclone })}> <TooltipContent className={cn({ hidden: capabilities.rclone })}>
<p>Setup rclone to use this backend</p> <p>Setup rclone to use this backend</p>
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>

View File

@@ -0,0 +1,18 @@
import { useQuery } from "@tanstack/react-query";
import { getSystemInfoOptions } from "~/api-client/@tanstack/react-query.gen";
export function useSystemInfo() {
const { data, isLoading, error } = useQuery({
...getSystemInfoOptions(),
staleTime: 5 * 60 * 1000,
gcTime: 10 * 60 * 1000,
refetchOnWindowFocus: false,
});
return {
capabilities: data?.capabilities ?? { docker: false, rclone: false },
isLoading,
error,
systemInfo: data,
};
}

View File

@@ -5,7 +5,6 @@ import { useState } from "react";
import { import {
deleteVolumeMutation, deleteVolumeMutation,
getVolumeOptions, getVolumeOptions,
getSystemInfoOptions,
mountVolumeMutation, mountVolumeMutation,
unmountVolumeMutation, unmountVolumeMutation,
} from "~/api-client/@tanstack/react-query.gen"; } from "~/api-client/@tanstack/react-query.gen";
@@ -30,6 +29,7 @@ import { VolumeInfoTabContent } from "../tabs/info";
import { FilesTabContent } from "../tabs/files"; import { FilesTabContent } from "../tabs/files";
import { DockerTabContent } from "../tabs/docker"; import { DockerTabContent } from "../tabs/docker";
import { Tooltip, TooltipContent, TooltipTrigger } from "~/components/ui/tooltip"; import { Tooltip, TooltipContent, TooltipTrigger } from "~/components/ui/tooltip";
import { useSystemInfo } from "~/hooks/use-system-info";
export function meta({ params }: Route.MetaArgs) { export function meta({ params }: Route.MetaArgs) {
return [ return [
@@ -60,9 +60,7 @@ export default function VolumeDetails({ loaderData }: Route.ComponentProps) {
refetchOnWindowFocus: true, refetchOnWindowFocus: true,
}); });
const { data: systemInfo } = useQuery({ const { capabilities } = useSystemInfo();
...getSystemInfoOptions(),
});
const deleteVol = useMutation({ const deleteVol = useMutation({
...deleteVolumeMutation(), ...deleteVolumeMutation(),
@@ -115,7 +113,7 @@ export default function VolumeDetails({ loaderData }: Route.ComponentProps) {
} }
const { volume, statfs } = data; const { volume, statfs } = data;
const dockerAvailable = systemInfo?.capabilities?.docker ?? false; const dockerAvailable = capabilities.docker;
return ( return (
<> <>