diff --git a/src/short-urls/CreateShortUrl.tsx b/src/short-urls/CreateShortUrl.tsx index 68d28125..aa98109e 100644 --- a/src/short-urls/CreateShortUrl.tsx +++ b/src/short-urls/CreateShortUrl.tsx @@ -30,6 +30,7 @@ const getInitialState = (settings?: ShortUrlCreationSettings): ShortUrlData => ( maxVisits: undefined, findIfExists: false, validateUrl: settings?.validateUrls ?? false, + forwardQuery: true, }); const CreateShortUrl = (ShortUrlForm: FC, CreateShortUrlResult: FC) => ({ diff --git a/src/short-urls/EditShortUrl.tsx b/src/short-urls/EditShortUrl.tsx index 56151bfa..0ecba149 100644 --- a/src/short-urls/EditShortUrl.tsx +++ b/src/short-urls/EditShortUrl.tsx @@ -42,6 +42,7 @@ const getInitialState = (shortUrl?: ShortUrl, settings?: ShortUrlCreationSetting validUntil: shortUrl.meta.validUntil ?? undefined, maxVisits: shortUrl.meta.maxVisits ?? undefined, crawlable: shortUrl.crawlable, + forwardQuery: shortUrl.forwardQuery, validateUrl, }; }; diff --git a/src/short-urls/ShortUrlForm.tsx b/src/short-urls/ShortUrlForm.tsx index b09a70cb..4534f514 100644 --- a/src/short-urls/ShortUrlForm.tsx +++ b/src/short-urls/ShortUrlForm.tsx @@ -5,7 +5,7 @@ import { isEmpty, pipe, replace, trim } from 'ramda'; import classNames from 'classnames'; import { parseISO } from 'date-fns'; import DateInput, { DateInputProps } from '../utils/DateInput'; -import { supportsCrawlableVisits, supportsShortUrlTitle } from '../utils/helpers/features'; +import { supportsCrawlableVisits, supportsForwardQuery, supportsShortUrlTitle } from '../utils/helpers/features'; import { SimpleCard } from '../utils/SimpleCard'; import { handleEventPreventingDefault, hasValue } from '../utils/utils'; import Checkbox from '../utils/Checkbox'; @@ -33,6 +33,7 @@ export interface ShortUrlFormProps { const normalizeTag = pipe(trim, replace(/ /g, '-')); const toDate = (date?: string | Date): Date | undefined => typeof date === 'string' ? parseISO(date) : date; +const dynamicColClasses = (flag: boolean) => ({ 'col-sm-6': flag, 'col-sm-12': !flag }); export const ShortUrlForm = ( TagsSelector: FC, @@ -98,11 +99,11 @@ export const ShortUrlForm = ( const supportsTitle = supportsShortUrlTitle(selectedServer); const showCustomizeCard = supportsTitle || !isEdit; - const limitAccessCardClasses = classNames('mb-3', { - 'col-sm-6': showCustomizeCard, - 'col-sm-12': !showCustomizeCard, - }); + const limitAccessCardClasses = classNames('mb-3', dynamicColClasses(showCustomizeCard)); const showCrawlableControl = supportsCrawlableVisits(selectedServer); + const showForwardQueryControl = supportsForwardQuery(selectedServer); + const showBehaviorCard = showCrawlableControl || showForwardQueryControl; + const extraChecksCardClasses = classNames('mb-3', dynamicColClasses(showBehaviorCard)); return (
@@ -154,37 +155,56 @@ export const ShortUrlForm = ( - - setShortUrlData({ ...shortUrlData, validateUrl })} - > - Validate URL - - {showCrawlableControl && ( - setShortUrlData({ ...shortUrlData, crawlable })} - > - Make it crawlable - - )} - {!isEdit && ( -

- setShortUrlData({ ...shortUrlData, findIfExists })} + +

+ + setShortUrlData({ ...shortUrlData, validateUrl })} > - Use existing URL if found - - -

+ Validate URL +
+ {!isEdit && ( +

+ setShortUrlData({ ...shortUrlData, findIfExists })} + > + Use existing URL if found + + +

+ )} +
+
+ {showBehaviorCard && ( +
+ + {showCrawlableControl && ( + setShortUrlData({ ...shortUrlData, crawlable })} + > + Make it crawlable + + )} + {showForwardQueryControl && ( + setShortUrlData({ ...shortUrlData, forwardQuery })} + > + Forward query params on redirect + + )} + +
)} -
+ )} diff --git a/src/short-urls/data/index.ts b/src/short-urls/data/index.ts index c0fded8b..39e2ea39 100644 --- a/src/short-urls/data/index.ts +++ b/src/short-urls/data/index.ts @@ -9,6 +9,7 @@ export interface EditShortUrlData { maxVisits?: number | null; validateUrl?: boolean; crawlable?: boolean; + forwardQuery?: boolean; } export interface ShortUrlData extends EditShortUrlData { @@ -30,6 +31,7 @@ export interface ShortUrl { domain: string | null; title?: string | null; crawlable?: boolean; + forwardQuery?: boolean; } export interface ShortUrlMeta { diff --git a/src/utils/helpers/features.ts b/src/utils/helpers/features.ts index 120926f8..d424e512 100644 --- a/src/utils/helpers/features.ts +++ b/src/utils/helpers/features.ts @@ -21,3 +21,5 @@ export const supportsCrawlableVisits = supportsBotVisits; export const supportsQrErrorCorrection = serverMatchesVersions({ minVersion: '2.8.0' }); export const supportsDomainRedirects = supportsQrErrorCorrection; + +export const supportsForwardQuery = serverMatchesVersions({ minVersion: '2.9.0' });