Renamed DomainsDropdown to DomainSelector

This commit is contained in:
Alejandro Celaya
2020-11-28 09:58:05 +01:00
parent 369fcf2f6a
commit 2a206f11b9
5 changed files with 33 additions and 16 deletions

View File

@@ -15,6 +15,11 @@
color: #495057; color: #495057;
} }
.domains-dropdown__back-btn.domains-dropdown__back-btn,
.domains-dropdown__back-btn.domains-dropdown__back-btn:hover {
border-color: #ced4da;
}
.domains-dropdown__toggle-btn.domains-dropdown__toggle-btn::after { .domains-dropdown__toggle-btn.domains-dropdown__toggle-btn::after {
right: .75rem; right: .75rem;

View File

@@ -17,19 +17,19 @@ import { isEmpty, pipe } from 'ramda';
import classNames from 'classnames'; import classNames from 'classnames';
import { useToggle } from '../utils/helpers/hooks'; import { useToggle } from '../utils/helpers/hooks';
import { DomainsList } from './reducers/domainsList'; import { DomainsList } from './reducers/domainsList';
import './DomainsDropdown.scss'; import './DomainSelector.scss';
export interface DomainsDropdownProps extends Omit<InputProps, 'onChange'> { export interface DomainSelectorProps extends Omit<InputProps, 'onChange'> {
value?: string; value?: string;
onChange: (domain?: string) => void; onChange: (domain?: string) => void;
} }
interface DomainsDropdownConnectProps extends DomainsDropdownProps { interface DomainSelectorConnectProps extends DomainSelectorProps {
listDomains: Function; listDomains: Function;
domainsList: DomainsList; domainsList: DomainsList;
} }
export const DomainsDropdown = ({ listDomains, value, domainsList, onChange }: DomainsDropdownConnectProps) => { export const DomainSelector = ({ listDomains, value, domainsList, onChange }: DomainSelectorConnectProps) => {
const [ inputDisplayed,, showInput, hideInput ] = useToggle(); const [ inputDisplayed,, showInput, hideInput ] = useToggle();
const [ isDropdownOpen, toggleDropdown ] = useToggle(); const [ isDropdownOpen, toggleDropdown ] = useToggle();
const { domains } = domainsList; const { domains } = domainsList;
@@ -48,7 +48,13 @@ export const DomainsDropdown = ({ listDomains, value, domainsList, onChange }: D
onChange={(e) => onChange(e.target.value)} onChange={(e) => onChange(e.target.value)}
/> />
<InputGroupAddon addonType="append"> <InputGroupAddon addonType="append">
<Button id="backToDropdown" outline type="button" onClick={pipe(unselectDomain, hideInput)}> <Button
id="backToDropdown"
outline
type="button"
className="domains-dropdown__back-btn"
onClick={pipe(unselectDomain, hideInput)}
>
<FontAwesomeIcon icon={faUndo} /> <FontAwesomeIcon icon={faUndo} />
</Button> </Button>
<UncontrolledTooltip target="backToDropdown" placement="left" trigger="hover"> <UncontrolledTooltip target="backToDropdown" placement="left" trigger="hover">
@@ -58,7 +64,13 @@ export const DomainsDropdown = ({ listDomains, value, domainsList, onChange }: D
</InputGroup> </InputGroup>
) : ( ) : (
<Dropdown isOpen={isDropdownOpen} toggle={toggleDropdown}> <Dropdown isOpen={isDropdownOpen} toggle={toggleDropdown}>
<DropdownToggle caret className={classNames('domains-dropdown__toggle-btn btn-block', { 'domains-dropdown__toggle-btn--active': !valueIsEmpty })}> <DropdownToggle
caret
className={classNames(
'domains-dropdown__toggle-btn btn-block',
{ 'domains-dropdown__toggle-btn--active': !valueIsEmpty },
)}
>
{valueIsEmpty && <>Domain</>} {valueIsEmpty && <>Domain</>}
{!valueIsEmpty && <>Domain: {value}</>} {!valueIsEmpty && <>Domain: {value}</>}
</DropdownToggle> </DropdownToggle>

View File

@@ -1,12 +1,12 @@
import Bottle from 'bottlejs'; import Bottle from 'bottlejs';
import { ConnectDecorator } from '../../container/types'; import { ConnectDecorator } from '../../container/types';
import { listDomains } from '../reducers/domainsList'; import { listDomains } from '../reducers/domainsList';
import { DomainsDropdown } from '../DomainsDropdown'; import { DomainSelector } from '../DomainSelector';
const provideServices = (bottle: Bottle, connect: ConnectDecorator) => { const provideServices = (bottle: Bottle, connect: ConnectDecorator) => {
// Components // Components
bottle.serviceFactory('DomainsDropdown', () => DomainsDropdown); bottle.serviceFactory('DomainSelector', () => DomainSelector);
bottle.decorator('DomainsDropdown', connect([ 'domainsList' ], [ 'listDomains' ])); bottle.decorator('DomainSelector', connect([ 'domainsList' ], [ 'listDomains' ]));
// Actions // Actions
bottle.serviceFactory('listDomains', listDomains, 'buildShlinkApiClient'); bottle.serviceFactory('listDomains', listDomains, 'buildShlinkApiClient');

View File

@@ -13,7 +13,7 @@ import { useToggle } from '../utils/helpers/hooks';
import { isReachableServer, SelectedServer } from '../servers/data'; import { isReachableServer, SelectedServer } from '../servers/data';
import { formatIsoDate } from '../utils/helpers/date'; import { formatIsoDate } from '../utils/helpers/date';
import { TagsSelectorProps } from '../tags/helpers/TagsSelector'; import { TagsSelectorProps } from '../tags/helpers/TagsSelector';
import { DomainsDropdownProps } from '../domains/DomainsDropdown'; import { DomainSelectorProps } from '../domains/DomainSelector';
import { ShortUrlData } from './data'; import { ShortUrlData } from './data';
import { ShortUrlCreation } from './reducers/shortUrlCreation'; import { ShortUrlCreation } from './reducers/shortUrlCreation';
import UseExistingIfFoundInfoIcon from './UseExistingIfFoundInfoIcon'; import UseExistingIfFoundInfoIcon from './UseExistingIfFoundInfoIcon';
@@ -47,7 +47,7 @@ const CreateShortUrl = (
TagsSelector: FC<TagsSelectorProps>, TagsSelector: FC<TagsSelectorProps>,
CreateShortUrlResult: FC<CreateShortUrlResultProps>, CreateShortUrlResult: FC<CreateShortUrlResultProps>,
ForServerVersion: FC<Versions>, ForServerVersion: FC<Versions>,
DomainsDropdown: FC<DomainsDropdownProps>, DomainSelector: FC<DomainSelectorProps>,
) => ({ createShortUrl, shortUrlCreationResult, resetCreateShortUrl, selectedServer }: CreateShortUrlProps) => { ) => ({ createShortUrl, shortUrlCreationResult, resetCreateShortUrl, selectedServer }: CreateShortUrlProps) => {
const [ shortUrlCreation, setShortUrlCreation ] = useState(initialState); const [ shortUrlCreation, setShortUrlCreation ] = useState(initialState);
const [ moreOptionsVisible, toggleMoreOptionsVisible ] = useToggle(); const [ moreOptionsVisible, toggleMoreOptionsVisible ] = useToggle();
@@ -89,7 +89,7 @@ const CreateShortUrl = (
const currentServerVersion = isReachableServer(selectedServer) ? selectedServer.version : ''; const currentServerVersion = isReachableServer(selectedServer) ? selectedServer.version : '';
const disableDomain = !versionMatch(currentServerVersion, { minVersion: '1.19.0-beta.1' }); const disableDomain = !versionMatch(currentServerVersion, { minVersion: '1.19.0-beta.1' });
const showDomainsDropdown = versionMatch(currentServerVersion, { minVersion: '2.4.0' }); const showDomainSelector = versionMatch(currentServerVersion, { minVersion: '2.4.0' });
const disableShortCodeLength = !versionMatch(currentServerVersion, { minVersion: '2.1.0' }); const disableShortCodeLength = !versionMatch(currentServerVersion, { minVersion: '2.1.0' });
return ( return (
@@ -126,13 +126,13 @@ const CreateShortUrl = (
})} })}
</div> </div>
<div className="col-sm-4"> <div className="col-sm-4">
{!showDomainsDropdown && renderOptionalInput('domain', 'Domain', 'text', { {!showDomainSelector && renderOptionalInput('domain', 'Domain', 'text', {
disabled: disableDomain, disabled: disableDomain,
...disableDomain && { title: 'Shlink 1.19.0 or higher is required to be able to provide the domain' }, ...disableDomain && { title: 'Shlink 1.19.0 or higher is required to be able to provide the domain' },
})} })}
{showDomainsDropdown && ( {showDomainSelector && (
<FormGroup> <FormGroup>
<DomainsDropdown <DomainSelector
value={shortUrlCreation.domain} value={shortUrlCreation.domain}
onChange={(domain?: string) => setShortUrlCreation({ ...shortUrlCreation, domain })} onChange={(domain?: string) => setShortUrlCreation({ ...shortUrlCreation, domain })}
/> />

View File

@@ -57,7 +57,7 @@ const provideServices = (bottle: Bottle, connect: ConnectDecorator) => {
'TagsSelector', 'TagsSelector',
'CreateShortUrlResult', 'CreateShortUrlResult',
'ForServerVersion', 'ForServerVersion',
'DomainsDropdown', 'DomainSelector',
); );
bottle.decorator( bottle.decorator(
'CreateShortUrl', 'CreateShortUrl',