import type { FC } from 'react'; import { useMemo } from 'react'; import type { ShortUrlCreationSettings } from '../utils/settings'; import { useSetting } from '../utils/settings'; import type { ShortUrlData } from './data'; import type { CreateShortUrlResultProps } from './helpers/CreateShortUrlResult'; import type { ShortUrlCreation } from './reducers/shortUrlCreation'; import type { ShortUrlFormProps } from './ShortUrlForm'; export interface CreateShortUrlProps { basicMode?: boolean; } interface CreateShortUrlConnectProps extends CreateShortUrlProps { shortUrlCreation: ShortUrlCreation; createShortUrl: (data: ShortUrlData) => Promise; resetCreateShortUrl: () => void; } const getInitialState = (settings?: ShortUrlCreationSettings): ShortUrlData => ({ longUrl: '', tags: [], customSlug: '', title: undefined, shortCodeLength: undefined, domain: '', validSince: undefined, validUntil: undefined, maxVisits: undefined, findIfExists: false, validateUrl: settings?.validateUrls ?? false, forwardQuery: settings?.forwardQuery ?? true, }); export const CreateShortUrl = ( ShortUrlForm: FC, CreateShortUrlResult: FC, ) => ({ createShortUrl, shortUrlCreation, resetCreateShortUrl, basicMode = false, }: CreateShortUrlConnectProps) => { const shortUrlCreationSettings = useSetting('shortUrlCreation'); const initialState = useMemo(() => getInitialState(shortUrlCreationSettings), [shortUrlCreationSettings]); return ( <> { resetCreateShortUrl(); return createShortUrl(data); }} /> ); };