import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import Chip from '../../../ui/chip'; import Box from '../../../ui/box'; import Typography from '../../../ui/typography'; import { TypographyVariant, TEXT_ALIGN, BackgroundColor, TextColor, } from '../../../../helpers/constants/design-system'; import { useI18nContext } from '../../../../hooks/useI18nContext'; import { SNAPS_METADATA } from '../../../../../shared/constants/snaps'; const snapIdPrefixes = ['npm:', 'local:']; const SnapsAuthorshipPill = ({ snapId, version, className }) => { // @todo Use getSnapPrefix from snaps-monorepo when possible // We're using optional chaining with snapId, because with the current implementation // of snap update in the snap controller, we do not have reference to snapId when an // update request is rejected because the reference comes from the request itself and not subject metadata // like it is done with snap install const snapPrefix = snapIdPrefixes.find((prefix) => snapId?.startsWith(prefix), ); const packageName = snapId?.replace(snapPrefix, ''); const isNPM = snapPrefix === 'npm:'; const url = isNPM ? `https://www.npmjs.com/package/${packageName}` : packageName; const icon = isNPM ? 'fab fa-npm fa-lg' : 'fas fa-code'; const t = useI18nContext(); const friendlyName = SNAPS_METADATA[snapId]?.name ?? packageName; return ( } rightIcon={ version && ( {t('shorthandVersion', [version])} ) } backgroundColor={BackgroundColor.backgroundDefault} > {friendlyName} ); }; SnapsAuthorshipPill.propTypes = { /** * The id of the snap */ snapId: PropTypes.string, /** * The version of the snap */ version: PropTypes.string, /** * The className of the SnapsAuthorshipPill */ className: PropTypes.string, }; export default SnapsAuthorshipPill;