Changes
3 changed files (+92/-3)
-
-
@@ -50,3 +50,22 @@ workspaceService.Get({ failureRate: 1, error: { case: "notFound", value: {} } }),]), ], }; export const LoadError: Story = { decorators: [ withRoute(), withInmemoryRouter({ initialURL: "/ws-foo/workers" }), withMockedBackend([ workspaceService.Get({ failureRate: 1, error: { case: "systemError", value: { code: "SAMPLE_ERR", message: "This is sample error", }, }, }), ]), ], };
-
-
-
@@ -3,11 +3,16 @@ // SPDX-License-Identifier: AGPL-3.0-onlyimport "../../polyfill.ts"; import { isMessage } from "@bufbuild/protobuf"; import { Button, Code, Container } from "@radix-ui/themes"; import { NotFoundSchema } from "@yamori/proto/yamori/error/v1/not_found_pb.js"; import { GetRequestSchema } from "@yamori/proto/yamori/workspace/v1/get_request_pb.js"; import { GetResponseSchema } from "@yamori/proto/yamori/workspace/v1/get_response_pb.js"; import { WorkspaceSchema } from "@yamori/proto/yamori/workspace/v1/workspace_pb.js"; import { type FC } from "react"; import * as Empty from "../../components/Empty.ts"; import { ManagedErrorCallout } from "../../components/ErrorCallout.ts"; import { Select, useURLPatternResult } from "../../contexts/Router.tsx"; import { useMethodQuery } from "../../contexts/Service.tsx"; import { IllegalMessageError } from "../../errors/IllegalMessageError.ts";
-
@@ -18,6 +23,7 @@ import { Layout } from "./Layout.tsx";export const Page: FC = () => { const { pathname } = useURLPatternResult(); const workspaceIdRaw = pathname.groups.workspace!; const query = useMethodQuery({ service: "yamori.workspace.v1.WorkspaceService",
-
@@ -25,7 +31,7 @@ method: "Get",request: { schema: GetRequestSchema, data: { workspaceId: { value: pathname.groups.workspace! }, workspaceId: { value: workspaceIdRaw }, readMask: { fields: [ WorkspaceSchema.field.id.number,
-
@@ -50,6 +56,48 @@ }}, }); if (query.isError) { if (isMessage(query.error, NotFoundSchema)) { return ( <Container p="3" size="2"> <Empty.Root> <Empty.Title>ワークスペースが見つかりません</Empty.Title> <Empty.Description> ID が <Code>{workspaceIdRaw}</Code> のワークスペースが見つかりませんでした。 対象のワークスペースが既に削除されたか、打ち間違いや削除などにより ID が不完全の可能性があります。 </Empty.Description> <Empty.Actions> <Button asChild size="3"> <a href="/">選択画面へ</a> </Button> </Empty.Actions> </Empty.Root> </Container> ); } return ( <Container p="3" size="2"> <Empty.Root> <Empty.Title>ワークスペースの取得に失敗</Empty.Title> <Empty.Description> ワークスペースを読み込もうとしましたが、データ取得に失敗しました。 </Empty.Description> <ManagedErrorCallout title="取得失敗" error={query.error} /> <Empty.Actions> <Button size="3" onClick={() => void query.refetch()}> 再取得 </Button> <Button asChild size="3" variant="outline"> <a href="/">選択画面へ戻る</a> </Button> </Empty.Actions> </Empty.Root> </Container> ); } if (!query.data) { return "読込中"; }
-
@@ -70,7 +118,15 @@ },]} fallback={ <Layout title="404" workspace={workspace}> Not found <Empty.Root> <Empty.Title>ページが見つかりません</Empty.Title> <Empty.Description>指定された URL にページはありません。</Empty.Description> <Empty.Actions> <Button asChild size="3"> <a href={`/${workspace.id?.value}/workers`}>労働者一覧へ</a> </Button> </Empty.Actions> </Empty.Root> </Layout> } />
-
-
-
@@ -3,8 +3,10 @@ // SPDX-License-Identifier: AGPL-3.0-onlyimport "../polyfill.ts"; import { Button, Container } from "@radix-ui/themes"; import { type FC } from "react"; import * as Empty from "../components/Empty.ts"; import { Select } from "../contexts/Router.tsx"; import * as root from "./root/page.tsx";
-
@@ -23,7 +25,19 @@ pattern: workspace.pattern,children: <workspace.Page />, }, ]} fallback="Not Found" fallback={ <Container p="3" size="2"> <Empty.Root> <Empty.Title>ページが見つかりません</Empty.Title> <Empty.Description>指定された URL にページはありません。</Empty.Description> <Empty.Actions> <Button asChild size="3"> <a href="/">トップへ</a> </Button> </Empty.Actions> </Empty.Root> </Container> } /> ); };
-