import { FC, useEffect, useMemo } from 'react'; import { Button, Card } from 'reactstrap'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faArrowLeft } from '@fortawesome/free-solid-svg-icons'; import { ExternalLink } from 'react-external-link'; import { useLocation, useParams } from 'react-router-dom'; import { SelectedServer } from '../servers/data'; import { Settings } from '../settings/reducers/settings'; import { OptionalString } from '../utils/utils'; import { parseQuery } from '../utils/helpers/query'; import { Message } from '../utils/Message'; import { Result } from '../utils/Result'; import { ShlinkApiError } from '../api/ShlinkApiError'; import { useGoBack, useToggle } from '../utils/helpers/hooks'; import { ShortUrlFormProps } from './ShortUrlForm'; import { ShortUrlDetail } from './reducers/shortUrlDetail'; import { EditShortUrlData } from './data'; import { ShortUrlEdition } from './reducers/shortUrlEdition'; import { shortUrlDataFromShortUrl } from './helpers'; interface EditShortUrlConnectProps { settings: Settings; selectedServer: SelectedServer; shortUrlDetail: ShortUrlDetail; shortUrlEdition: ShortUrlEdition; getShortUrlDetail: (shortCode: string, domain: OptionalString) => void; editShortUrl: (shortUrl: string, domain: OptionalString, data: EditShortUrlData) => Promise; } export const EditShortUrl = (ShortUrlForm: FC) => ({ settings: { shortUrlCreation: shortUrlCreationSettings }, selectedServer, shortUrlDetail, getShortUrlDetail, shortUrlEdition, editShortUrl, }: EditShortUrlConnectProps) => { const { search } = useLocation(); const params = useParams<{ shortCode: string }>(); const goBack = useGoBack(); const { loading, error, errorData, shortUrl } = shortUrlDetail; const { saving, error: savingError, errorData: savingErrorData } = shortUrlEdition; const { domain } = parseQuery<{ domain?: string }>(search); const initialState = useMemo( () => shortUrlDataFromShortUrl(shortUrl, shortUrlCreationSettings), [shortUrl, shortUrlCreationSettings], ); const [savingSucceeded,, isSuccessful, isNotSuccessful] = useToggle(); useEffect(() => { params.shortCode && getShortUrlDetail(params.shortCode, domain); }, []); if (loading) { return ; } if (error) { return ( ); } return ( <>

Edit

{ if (!shortUrl) { return; } isNotSuccessful(); editShortUrl(shortUrl.shortCode, shortUrl.domain, shortUrlData) .then(isSuccessful) .catch(isNotSuccessful); }} /> {savingError && ( )} {savingSucceeded && Short URL properly edited.} ); };