Added title to short URL form

This commit is contained in:
Alejandro Celaya
2021-03-20 11:18:00 +01:00
parent 98aa85ca14
commit 631b46393b
2 changed files with 64 additions and 39 deletions

View File

@@ -1,6 +1,10 @@
@import '../utils/base'; @import '../utils/base';
.short-url-form .form-group:last-child, .short-url-form .card-body > .form-group:last-child,
.short-url-form p:last-child { .short-url-form p:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.short-url-form .card {
height: 100%;
}

View File

@@ -1,10 +1,14 @@
import { FC, useState } from 'react'; import { FC, useState } from 'react';
import { InputType } from 'reactstrap/lib/Input'; import { InputType } from 'reactstrap/lib/Input';
import { Button, FormGroup, Input } from 'reactstrap'; import { Button, FormGroup, Input, Row } from 'reactstrap';
import { isEmpty } from 'ramda'; import { isEmpty } from 'ramda';
import * as m from 'moment'; import * as m from 'moment';
import DateInput, { DateInputProps } from '../utils/DateInput'; import DateInput, { DateInputProps } from '../utils/DateInput';
import { supportsListingDomains, supportsSettingShortCodeLength } from '../utils/helpers/features'; import {
supportsListingDomains,
supportsSettingShortCodeLength,
supportsShortUrlTitle,
} from '../utils/helpers/features';
import { SimpleCard } from '../utils/SimpleCard'; import { SimpleCard } from '../utils/SimpleCard';
import { handleEventPreventingDefault, hasValue } from '../utils/utils'; import { handleEventPreventingDefault, hasValue } from '../utils/utils';
import Checkbox from '../utils/Checkbox'; import Checkbox from '../utils/Checkbox';
@@ -34,7 +38,7 @@ export const ShortUrlForm = (
TagsSelector: FC<TagsSelectorProps>, TagsSelector: FC<TagsSelectorProps>,
ForServerVersion: FC<Versions>, ForServerVersion: FC<Versions>,
DomainSelector: FC<DomainSelectorProps>, DomainSelector: FC<DomainSelectorProps>,
): FC<ShortUrlFormProps> => ({ mode, saving, onSave, initialState, selectedServer, children }) => { ): FC<ShortUrlFormProps> => ({ mode, saving, onSave, initialState, selectedServer, children }) => { // eslint-disable-line complexity
const [ shortUrlData, setShortUrlData ] = useState(initialState); const [ shortUrlData, setShortUrlData ] = useState(initialState);
const changeTags = (tags: string[]) => setShortUrlData({ ...shortUrlData, tags: tags.map(normalizeTag) }); const changeTags = (tags: string[]) => setShortUrlData({ ...shortUrlData, tags: tags.map(normalizeTag) });
const reset = () => setShortUrlData(initialState); const reset = () => setShortUrlData(initialState);
@@ -88,6 +92,8 @@ export const ShortUrlForm = (
const showDomainSelector = supportsListingDomains(selectedServer); const showDomainSelector = supportsListingDomains(selectedServer);
const disableShortCodeLength = !supportsSettingShortCodeLength(selectedServer); const disableShortCodeLength = !supportsSettingShortCodeLength(selectedServer);
const supportsTitle = supportsShortUrlTitle(selectedServer);
const isEdit = mode === 'edit';
return ( return (
<form className="short-url-form" onSubmit={submit}> <form className="short-url-form" onSubmit={submit}>
@@ -98,12 +104,19 @@ export const ShortUrlForm = (
{basicComponents} {basicComponents}
</SimpleCard> </SimpleCard>
<div className="row"> <Row>
<div className="col-sm-6 mb-3"> <div className="col-sm-6 mb-3">
<SimpleCard title="Customize the short URL"> <SimpleCard title="Customize the short URL">
{supportsTitle && renderOptionalInput('title', 'Title')}
{!isEdit && (
<>
<Row>
<div className="col-lg-6">
{renderOptionalInput('customSlug', 'Custom slug', 'text', { {renderOptionalInput('customSlug', 'Custom slug', 'text', {
disabled: hasValue(shortUrlData.shortCodeLength), disabled: hasValue(shortUrlData.shortCodeLength),
})} })}
</div>
<div className="col-lg-6">
{renderOptionalInput('shortCodeLength', 'Short code length', 'number', { {renderOptionalInput('shortCodeLength', 'Short code length', 'number', {
min: 4, min: 4,
disabled: disableShortCodeLength || hasValue(shortUrlData.customSlug), disabled: disableShortCodeLength || hasValue(shortUrlData.customSlug),
@@ -111,6 +124,8 @@ export const ShortUrlForm = (
title: 'Shlink 2.1.0 or higher is required to be able to provide the short code length', title: 'Shlink 2.1.0 or higher is required to be able to provide the short code length',
}, },
})} })}
</div>
</Row>
{!showDomainSelector && renderOptionalInput('domain', 'Domain', 'text')} {!showDomainSelector && renderOptionalInput('domain', 'Domain', 'text')}
{showDomainSelector && ( {showDomainSelector && (
<FormGroup> <FormGroup>
@@ -120,6 +135,8 @@ export const ShortUrlForm = (
/> />
</FormGroup> </FormGroup>
)} )}
</>
)}
</SimpleCard> </SimpleCard>
</div> </div>
@@ -130,13 +147,15 @@ export const ShortUrlForm = (
{renderDateInput('validUntil', 'Enabled until...', { minDate: shortUrlData.validSince as m.Moment | undefined })} {renderDateInput('validUntil', 'Enabled until...', { minDate: shortUrlData.validSince as m.Moment | undefined })}
</SimpleCard> </SimpleCard>
</div> </div>
</div> </Row>
<SimpleCard title="Extra validations" className="mb-3"> <SimpleCard title="Extra validations" className="mb-3">
{!isEdit && (
<p> <p>
Make sure the long URL is valid, or ensure an existing short URL is returned if it matches all Make sure the long URL is valid, or ensure an existing short URL is returned if it matches all
provided data. provided data.
</p> </p>
)}
<ForServerVersion minVersion="2.4.0"> <ForServerVersion minVersion="2.4.0">
<p> <p>
<Checkbox <Checkbox
@@ -148,6 +167,7 @@ export const ShortUrlForm = (
</Checkbox> </Checkbox>
</p> </p>
</ForServerVersion> </ForServerVersion>
{!isEdit && (
<p> <p>
<Checkbox <Checkbox
inline inline
@@ -159,6 +179,7 @@ export const ShortUrlForm = (
</Checkbox> </Checkbox>
<UseExistingIfFoundInfoIcon /> <UseExistingIfFoundInfoIcon />
</p> </p>
)}
</SimpleCard> </SimpleCard>
</> </>
)} )}