import React from "react"; import { Skeleton, useColorModeValue, useTheme, useToken, } from "@chakra-ui/react"; import { ClassNames } from "@emotion/react"; import { Link } from "react-router-dom"; import { safeImageUrl, useCommonStyles } from "../util"; import { CheckIcon, StarIcon } from "@chakra-ui/icons"; function SquareItemCard({ item, hideOwnsBadge = false, hideWantsBadge = false, ...props }) { const outlineShadowValue = useToken("shadows", "outline"); return ( {({ css }) => ( // SquareItemCard renders in large lists of 1k+ items, so we get a big // perf win by using Emotion directly instead of Chakra's styled-system // Box. } /> )} ); } function SquareItemCardLayout({ name, thumbnailImage, minHeightNumLines = 2 }) { const { brightBackground } = useCommonStyles(); const brightBackgroundValue = useToken("colors", brightBackground); const theme = useTheme(); return ( // SquareItemCard renders in large lists of 1k+ items, so we get a big perf // win by using Emotion directly instead of Chakra's styled-system Box. {({ css }) => (
{thumbnailImage}
{name}
)}
); } function ItemThumbnail({ item, hideOwnsBadge, hideWantsBadge }) { const kindColorScheme = item.isNc ? "purple" : item.isPb ? "orange" : "gray"; const thumbnailShadowColor = useColorModeValue( `${kindColorScheme}.200`, `${kindColorScheme}.600` ); const thumbnailShadowColorValue = useToken("colors", thumbnailShadowColor); const mdRadiusValue = useToken("radii", "md"); return ( {({ css }) => (
{`Thumbnail
{!hideOwnsBadge && item.currentUserOwnsThis && ( )} {!hideWantsBadge && item.currentUserWantsThis && ( )}
{item.isNc != null && (
{item.isNc ? "NC" : item.isPb ? "PB" : "NP"}
)}
)}
); } function ItemOwnsWantsBadge({ colorScheme, children, label }) { const badgeBackground = useColorModeValue( `${colorScheme}.100`, `${colorScheme}.500` ); const badgeColor = useColorModeValue( `${colorScheme}.500`, `${colorScheme}.100` ); const [badgeBackgroundValue, badgeColorValue] = useToken("colors", [ badgeBackground, badgeColor, ]); return ( {({ css }) => (
*/ white-space: nowrap; vertical-align: middle; padding-left: 0.25rem; padding-right: 0.25rem; text-transform: uppercase; font-size: 0.65rem; font-weight: 700; background: ${badgeBackgroundValue}; color: ${badgeColorValue}; `} > {children}
)}
); } function ItemThumbnailKindBadge({ colorScheme, children }) { const badgeBackground = useColorModeValue( `${colorScheme}.100`, `${colorScheme}.500` ); const badgeColor = useColorModeValue( `${colorScheme}.500`, `${colorScheme}.100` ); const [badgeBackgroundValue, badgeColorValue] = useToken("colors", [ badgeBackground, badgeColor, ]); return ( {({ css }) => (
*/ white-space: nowrap; vertical-align: middle; padding-left: 0.25rem; padding-right: 0.25rem; text-transform: uppercase; font-size: 0.65rem; border-radius: 0.125rem; font-weight: 700; background: ${badgeBackgroundValue}; color: ${badgeColorValue}; `} > {children}
)}
); } export function SquareItemCardSkeleton({ minHeightNumLines }) { return ( {minHeightNumLines >= 3 && ( )} } thumbnailImage={} minHeightNumLines={minHeightNumLines} /> ); } export default SquareItemCard;