import * as React from "react"; import * as d from "../../localData"; import { Image, ImageSkeleton } from "./Image"; import { Link } from "./Link"; import type { UseDefinyAppResult } from "../hook/useDefinyApp"; import { css } from "@emotion/css"; const imageWidth = 256; const imageHeight = 158; const textHeight = 48; const cardWidth = imageWidth; const cardHeight = imageHeight + textHeight; export type Props = Pick & { readonly projectId: d.ProjectId; readonly onJump: UseDefinyAppResult["jump"]; }; export const ProjectCard: React.VFC = React.memo((props) => { React.useEffect(() => { props.projectResource.requestToServerIfEmpty(props.projectId); }, [props.projectId, props.projectResource]); const projectState = props.projectResource.getFromMemoryCache( props.projectId ); if (projectState === undefined) { return
プロジェクトリクエスト準備前
; } if (projectState._ === "Deleted") { return
存在しないプロジェクト
; } if (projectState._ === "Unknown") { return
取得に失敗しました
; } if (projectState._ === "Requesting") { return
取得中
; } const project = projectState.dataWithTime.data; return ( {`${project.name}の画像`}
{`${project.name}のアイコン`}
{project.name}
); }); ProjectCard.displayName = "ProjectCard"; export const ProjectCardSkeleton: React.VFC = React.memo(() => { return (
); }); ProjectCardSkeleton.displayName = "ProjectCardSkeleton";