import * as React from "react"; import * as d from "../../localData"; import { ListItem, listItem } from "../editor/list"; import { listValue, projectIdValue } from "../editor/common"; import { Editor } from "./Editor"; import { Link } from "./Link"; import { ProjectCardSkeleton } from "./ProjectCard"; import type { UseDefinyAppResult } from "../hook/useDefinyApp"; import { css } from "@emotion/css"; export type Props = Pick< UseDefinyAppResult, | "topProjectsLoadingState" | "projectResource" | "accountResource" | "language" | "logInState" | "requestTop50Project" | "typePartResource" > & { onJump: UseDefinyAppResult["jump"]; }; export const HomePage: React.VFC = (props) => { React.useEffect(() => { props.requestTop50Project(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return (
{props.logInState._ === "LoggedIn" ? ( ) : ( <> )}
); }; const HomeLinkList: React.VFC<{ language: d.Language; jumpHandler: (urlData: d.LocationAndLanguage) => void; }> = (props) => { return (
definyについて ファイルから開く ツール
); }; const TopProjectList: React.VFC< Pick< UseDefinyAppResult, | "topProjectsLoadingState" | "projectResource" | "accountResource" | "language" > & { onJump: UseDefinyAppResult["jump"]; } > = (props) => { switch (props.topProjectsLoadingState._) { case "none": return (
読み込み準備中
); case "loading": return (
{Array.from({ length: 10 }, (_, index) => ( ))}
); case "loaded": if (props.topProjectsLoadingState.projectIdList.length === 0) { return (
プロジェクトが1つも存在しない
); } return (
); } }; const projectIdToListItem = (option: Pick) => (projectId: d.ProjectId): ListItem => { const project = option.projectResource.getFromMemoryCache(projectId); return listItem( projectIdValue({ canEdit: false, projectId, projectResource: option.projectResource, jump: option.jump, language: option.language, }), project?._ === "Loaded" ? project.dataWithTime.data.name : "" ); }; const CreateProjectButton: React.VFC<{ language: d.Language; onJump: (urlData: d.LocationAndLanguage) => void; }> = (props) => (
{createProjectMessage(props.language)}
); const createProjectMessage = (language: d.Language): string => { switch (language) { case "English": return "Create a new project"; case "Esperanto": return "Krei novan projekton"; case "Japanese": return "+ プロジェクトを新規作成"; } };