Changes
4 changed files (+30/-9)
-
-
-
@@ -1,6 +1,7 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only import { type Workspace } from "@yamori/proto/yamori/workspace/v1/workspace_pb.js"; import { type FC, useCallback, useState } from "react"; import { useViewTransition } from "../hooks/useViewTransition.ts";
-
@@ -10,10 +11,12 @@ import { Selector } from "./WorkspaceSelectionPage/Selector.tsx";import { CreationForm } from "./WorkspaceSelectionPage/CreationForm.tsx"; export interface WorkspaceSelectionPageProps { className?: string | undefined; onOpenWorkspace?(workspace: Workspace): void; } export const WorkspaceSelectionPage: FC<WorkspaceSelectionPageProps> = () => { export const WorkspaceSelectionPage: FC<WorkspaceSelectionPageProps> = ({ onOpenWorkspace, }) => { const viewTransition = useViewTransition(); const [isOpeningCreationForm, setIsOpeningCreationForm] = useState(false);
-
@@ -40,7 +43,10 @@ }return ( <Layout title="ワークスペース選択"> <Selector onOpenCreationForm={openCreationForm} /> <Selector onOpenCreationForm={openCreationForm} onOpenWorkspace={onOpenWorkspace ?? (() => void 0)} /> </Layout> ); };
-
-
-
@@ -9,6 +9,7 @@ import {ListResponseSchema, type ListResponse_Result, } from "@yamori/proto/yamori/workspace/v1/list_response_pb.js"; import { type Workspace } from "@yamori/proto/yamori/workspace/v1/workspace_pb.js"; import { type FC, useEffect } from "react"; import { useMethodQuery } from "../../contexts/Service.tsx";
-
@@ -20,9 +21,11 @@ import { WorkspaceList } from "./WorkspaceList.tsx";export interface SelectorProps { onOpenCreationForm?(): void; onOpenWorkspace(workspace: Workspace): void; } export const Selector: FC<SelectorProps> = ({ onOpenCreationForm }) => { export const Selector: FC<SelectorProps> = ({ onOpenCreationForm, onOpenWorkspace }) => { const list = useMethodQuery({ service: "yamori.workspace.v1.WorkspaceService", method: "List",
-
@@ -70,16 +73,18 @@ <PlusIcon />作成 </Button> </Flex> <Contents list={list} /> <Contents list={list} onOpenWorkspace={onOpenWorkspace} /> </Flex> ); }; interface ContentsProps { list: UseQueryResult<ListResponse_Result, unknown>; onOpenWorkspace(workspace: Workspace): void; } const Contents: FC<ContentsProps> = ({ list }) => { const Contents: FC<ContentsProps> = ({ list, onOpenWorkspace }) => { if (list.status === "pending") { return ( <Flex align="center" justify="center" pt="7" gap="2">
-
@@ -123,7 +128,10 @@ </Button>} /> )} <WorkspaceList workspaces={list.data.workspaces} /> <WorkspaceList workspaces={list.data.workspaces} onOpenWorkspace={onOpenWorkspace} /> </Flex> ); };
-
-
-
@@ -7,9 +7,14 @@ import { type FC } from "react";export interface WorkspaceListProps { workspaces: readonly Workspace[]; onOpenWorkspace(workspace: Workspace): void; } export const WorkspaceList: FC<WorkspaceListProps> = ({ workspaces }) => { export const WorkspaceList: FC<WorkspaceListProps> = ({ workspaces, onOpenWorkspace, }) => { return ( <Flex role="list" direction="column" gap="3"> {workspaces.map((workspace) => (
-
@@ -19,7 +24,9 @@ <Box><Text weight="bold">{workspace.displayName}</Text> </Box> <Flex justify="end"> <Button variant="soft">開く</Button> <Button variant="soft" onClick={() => void onOpenWorkspace?.(workspace)}> 開く </Button> </Flex> </Flex> </Card>
-