/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { useRef, useState, type JSX } from 'react'; import { Card, CardActionArea, CardActions, CardContent, ClickAwayListener, } from '@mui/material'; import { clsx, CubesLoadingIndicator, CubesLoadingIndicatorIcon, deserializeIcon, } from '@finos/legend-art'; import { type V1_DataProductIcon, V1_DataProductEmbeddedImageIcon, V1_DataProductLibraryIcon, } from '@finos/legend-graph'; export const LegendMarketplaceCard = (props: { content: JSX.Element; size: 'small' | 'large'; actions?: JSX.Element; onClick?: () => void; moreInfo?: JSX.Element | undefined; moreInfoPreview?: 'small' | 'large' | undefined; className?: string; cardMedia?: V1_DataProductIcon | string | undefined; loadingMedia?: boolean; }): JSX.Element => { const { content, size, actions, onClick, moreInfo, moreInfoPreview, className, cardMedia, loadingMedia, } = props; const cardImage = cardMedia instanceof V1_DataProductEmbeddedImageIcon ? cardMedia.imageUrl : typeof cardMedia === 'string' ? cardMedia : undefined; const cardIcon = cardMedia instanceof V1_DataProductLibraryIcon ? cardMedia : undefined; const [isMouseOver, setIsMouseOver] = useState(false); const containerRef = useRef(null); const CardContentComponent = ( <> {content} {actions && ( {actions} )} {moreInfo && ( setIsMouseOver(false)}> setIsMouseOver(true) : undefined } onMouseLeave={ moreInfoPreview !== undefined ? () => setIsMouseOver(false) : undefined } >
{moreInfo}
)} ); return ( {loadingMedia && ( )} {cardImage !== undefined && (
)} {cardIcon !== undefined && (
{deserializeIcon(cardIcon.libraryId, cardIcon.iconId)}
)} {onClick ? ( setIsMouseOver(true) : undefined } onMouseLeave={ moreInfoPreview === undefined ? () => setIsMouseOver(false) : undefined } className="legend-marketplace-card__content-container" component="div" > {CardContentComponent} ) : (
setIsMouseOver(true) : undefined } onMouseLeave={ moreInfoPreview === undefined ? () => setIsMouseOver(false) : undefined } className="legend-marketplace-card__content-container" > {CardContentComponent}
)}
); };