import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { getSnapPrefix } from '@metamask/snaps-utils'; import { useSelector } from 'react-redux'; import Box from '../../../ui/box'; import { BackgroundColor, TextColor, IconColor, FLEX_DIRECTION, TextVariant, BorderColor, AlignItems, DISPLAY, BorderRadius, BLOCK_SIZES, } from '../../../../helpers/constants/design-system'; import { getSnapName, removeSnapIdPrefix, } from '../../../../helpers/utils/util'; import { ICON_NAMES, ICON_SIZES, Text, ButtonIcon, } from '../../../component-library'; import { getTargetSubjectMetadata } from '../../../../selectors'; import SnapAvatar from '../snap-avatar'; const SnapAuthorship = ({ snapId, className }) => { // 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 = snapId && getSnapPrefix(snapId); const packageName = snapId && removeSnapIdPrefix(snapId); const isNPM = snapPrefix === 'npm:'; const url = isNPM ? `https://www.npmjs.com/package/${packageName}` : packageName; const subjectMetadata = useSelector((state) => getTargetSubjectMetadata(state, snapId), ); const friendlyName = snapId && getSnapName(snapId, subjectMetadata); return ( {friendlyName} {packageName} ); }; SnapAuthorship.propTypes = { /** * The id of the snap */ snapId: PropTypes.string, /** * The className of the SnapAuthorship */ className: PropTypes.string, }; export default SnapAuthorship;