/******************************************************************************** * Copyright (c) 2020 TypeFox and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 ********************************************************************************/ import type { ReactNode } from 'react'; import { FunctionComponent } from 'react'; import { Link as RouteLink } from 'react-router'; import { Paper, Typography, Box, styled } from '@mui/material'; import { Extension } from '../../extension-registry-types'; import { createRoute } from '../../utils'; import { ExtensionIcon } from './extension-icon'; import { Timestamp } from '../timestamp'; const getOpacity = (extension: Extension) => { if (extension.deprecated) { return 0.5; } else if (extension.active === false) { return 0.75; } else { return 1; } }; const noOverflow = { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', ml: 0.5 }; const Paragraph = styled(Box)({ display: 'flex', justifyContent: 'space-between' }); export const ExtensionCardListItem: FunctionComponent = props => { const { extension } = props; const route = createRoute([props.routePrefix, extension.namespace, extension.name]); const inactive = extension.active === false; const renderStatus = (): ReactNode => { if (extension?.removed) { return ( Deleted {extension.reviewMessage ?? 'The extension has been deleted.'} ); } if (extension.reviewStatus === 'under_review') { return ( Under review {extension.reviewMessage ?? 'Your extension is being reviewed. Please contact support for details.'} ); } if (extension.reviewStatus === 'rejected') { return ( Rejected {extension.reviewMessage ?? 'Your extension could not be published.'} ); } if (inactive) { return Deactivated; } if (extension.timestamp) { return ( Published: ); } return null; }; const status = renderStatus(); return extension ? ( {extension.displayName ?? extension.name} Version: {extension.version} {status} ) : null; }; export interface ExtensionCardListItemProps { extension: Extension; canDelete?: boolean; // Base route the card links to; the extension's namespace and name are appended. Supplied by the // caller (e.g. the user settings or admin extension route). routePrefix: string; }