From ca8248b2a0627db7eb23f22adba677dc8f933fa8 Mon Sep 17 00:00:00 2001 From: Nico <47644445+nicotsx@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:13:09 +0100 Subject: [PATCH] ui: scroll to error (#541) * refactor: scroll to first error when submitting a form * refactor: split file browsers into dedicated components with base * chore: pr feedbacks --- app/client/components/directory-browser.tsx | 74 --------- .../file-browsers/directory-browser.tsx | 24 +++ .../components/file-browsers/file-browser.tsx | 154 ++++++++++++++++++ .../file-browsers/local-file-browser.tsx | 63 +++++++ .../file-browsers/snapshot-tree-browser.tsx | 147 +++++++++++++++++ .../file-browsers/volume-file-browser.tsx | 65 ++++++++ app/client/components/path-selector.tsx | 4 +- app/client/components/restore-form.tsx | 118 +++----------- app/client/components/volume-file-browser.tsx | 102 ------------ app/client/hooks/use-file-browser.ts | 2 +- app/client/hooks/use-scroll-to-form-error.ts | 10 ++ .../components/create-schedule-form/index.tsx | 5 +- .../create-schedule-form/paths-section.tsx | 6 +- .../components/snapshot-file-browser.tsx | 108 ++---------- .../components/create-notification-form.tsx | 8 +- .../components/create-repository-form.tsx | 8 +- .../local-repository-form.tsx | 6 +- .../repositories/routes/snapshot-details.tsx | 6 +- .../volumes/components/create-volume-form.tsx | 8 +- .../volume-forms/directory-form.tsx | 4 +- app/client/modules/volumes/tabs/files.tsx | 2 +- app/utils/common-ancestor.ts | 19 +++ 22 files changed, 557 insertions(+), 386 deletions(-) delete mode 100644 app/client/components/directory-browser.tsx create mode 100644 app/client/components/file-browsers/directory-browser.tsx create mode 100644 app/client/components/file-browsers/file-browser.tsx create mode 100644 app/client/components/file-browsers/local-file-browser.tsx create mode 100644 app/client/components/file-browsers/snapshot-tree-browser.tsx create mode 100644 app/client/components/file-browsers/volume-file-browser.tsx delete mode 100644 app/client/components/volume-file-browser.tsx create mode 100644 app/client/hooks/use-scroll-to-form-error.ts create mode 100644 app/utils/common-ancestor.ts diff --git a/app/client/components/directory-browser.tsx b/app/client/components/directory-browser.tsx deleted file mode 100644 index bfea00b3..00000000 --- a/app/client/components/directory-browser.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { FileTree } from "./file-tree"; -import { ScrollArea } from "./ui/scroll-area"; -import { browseFilesystemOptions } from "../api-client/@tanstack/react-query.gen"; -import { useFileBrowser } from "../hooks/use-file-browser"; - -type Props = { - onSelectPath: (path: string) => void; - selectedPath?: string; -}; - -export const DirectoryBrowser = ({ onSelectPath, selectedPath }: Props) => { - const queryClient = useQueryClient(); - - const { data, isLoading } = useQuery({ - ...browseFilesystemOptions({ query: { path: "/" } }), - }); - - const fileBrowser = useFileBrowser({ - initialData: data, - isLoading, - fetchFolder: async (path) => { - return await queryClient.ensureQueryData(browseFilesystemOptions({ query: { path } })); - }, - prefetchFolder: (path) => { - void queryClient.prefetchQuery(browseFilesystemOptions({ query: { path } })); - }, - }); - - if (fileBrowser.isLoading) { - return ( -
{loadingMessage}
+{errorMessage}
+{emptyMessage}
+ {emptyDescription &&{emptyDescription}
} +Loading files...
-Failed to load files: {parseError(error)?.message}
-{emptyMessage}
- {emptyDescription &&{emptyDescription}
} -