// @flow import * as React from 'react'; import Button from 'component/button'; import { buildURI } from 'util/lbryURI'; import I18nMessage from 'component/i18nMessage'; function isUriPendingUpload(uri: ?string, currentUploadNames: Array<string>) { const protocol = 'lbry://'; const uriName = uri && uri.startsWith(protocol) ? uri.substring(protocol.length) : uri; return currentUploadNames.includes(uriName); } type Props = { uri: ?string, myClaimForUri: ?StreamClaim, currentUploads: { [key: string]: FileUploadItem }, isStillEditing: boolean, onEditMyClaim: (any, string) => void, }; function NameHelpText(props: Props) { const { uri, myClaimForUri, currentUploads, onEditMyClaim, isStillEditing } = props; const currentUploadNames: Array<string> = React.useMemo(() => { // $FlowFixMe - unable to resolve mixed return Object.values(currentUploads).map((x) => (x.params ? x.params.name : '')); }, [currentUploads]); let nameHelpText; if (isStillEditing) { nameHelpText = __('You are currently editing this claim.'); } else if (isUriPendingUpload(uri, currentUploadNames)) { nameHelpText = ( <div className="error__text"> {/* prettier-ignore */} <I18nMessage tokens={{ existing_uri: (<u><em>{uri}</em></u>) }}> You already have a pending upload at %existing_uri%. </I18nMessage> </div> ); } else if (uri && myClaimForUri) { const editUri = buildURI({ streamName: myClaimForUri.name, streamClaimId: myClaimForUri.claim_id, }); nameHelpText = ( <React.Fragment> <div className="error__text"> <I18nMessage tokens={{ existing_uri: ( <u> <em>{uri}</em> </u> ), }} > You already have a claim at %existing_uri%. Publishing will update (overwrite) your existing claim. </I18nMessage> </div> <Button button="link" label={__('Edit existing claim instead')} onClick={() => onEditMyClaim(myClaimForUri, editUri)} /> </React.Fragment> ); } return ( <React.Fragment> {nameHelpText || ( <span>{__('Create a URL for this content. Simpler names are easier to find and remember.')}</span> )} </React.Fragment> ); } export default NameHelpText;