mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
refactor: system-info hook
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
18
apps/client/app/hooks/use-system-info.ts
Normal file
18
apps/client/app/hooks/use-system-info.ts
Normal 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,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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 (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Reference in New Issue
Block a user