2020-08-30 10:59:14 +03:00
|
|
|
import { faImage as pictureIcon } from '@fortawesome/free-regular-svg-icons';
|
|
|
|
import {
|
|
|
|
faTags as tagsIcon,
|
|
|
|
faChartPie as pieChartIcon,
|
|
|
|
faEllipsisV as menuIcon,
|
|
|
|
faQrcode as qrIcon,
|
|
|
|
faMinusCircle as deleteIcon,
|
|
|
|
faEdit as editIcon,
|
|
|
|
faLink as linkIcon,
|
|
|
|
} from '@fortawesome/free-solid-svg-icons';
|
|
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
2020-11-14 00:44:26 +03:00
|
|
|
import { FC } from 'react';
|
2020-08-30 10:59:14 +03:00
|
|
|
import { ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';
|
|
|
|
import { useToggle } from '../../utils/helpers/hooks';
|
|
|
|
import { ShortUrl, ShortUrlModalProps } from '../data';
|
|
|
|
import { Versions } from '../../utils/helpers/version';
|
|
|
|
import { SelectedServer } from '../../servers/data';
|
|
|
|
import PreviewModal from './PreviewModal';
|
|
|
|
import QrCodeModal from './QrCodeModal';
|
|
|
|
import VisitStatsLink from './VisitStatsLink';
|
|
|
|
import './ShortUrlsRowMenu.scss';
|
|
|
|
|
|
|
|
export interface ShortUrlsRowMenuProps {
|
|
|
|
selectedServer: SelectedServer;
|
|
|
|
shortUrl: ShortUrl;
|
|
|
|
}
|
|
|
|
type ShortUrlModal = FC<ShortUrlModalProps>;
|
|
|
|
|
|
|
|
const ShortUrlsRowMenu = (
|
|
|
|
DeleteShortUrlModal: ShortUrlModal,
|
|
|
|
EditTagsModal: ShortUrlModal,
|
|
|
|
EditMetaModal: ShortUrlModal,
|
|
|
|
EditShortUrlModal: ShortUrlModal,
|
|
|
|
ForServerVersion: FC<Versions>,
|
|
|
|
) => ({ shortUrl, selectedServer }: ShortUrlsRowMenuProps) => {
|
|
|
|
const [ isOpen, toggle ] = useToggle();
|
|
|
|
const [ isQrModalOpen, toggleQrCode ] = useToggle();
|
|
|
|
const [ isPreviewModalOpen, togglePreview ] = useToggle();
|
|
|
|
const [ isTagsModalOpen, toggleTags ] = useToggle();
|
|
|
|
const [ isMetaModalOpen, toggleMeta ] = useToggle();
|
|
|
|
const [ isDeleteModalOpen, toggleDelete ] = useToggle();
|
|
|
|
const [ isEditModalOpen, toggleEdit ] = useToggle();
|
|
|
|
|
|
|
|
return (
|
|
|
|
<ButtonDropdown toggle={toggle} isOpen={isOpen}>
|
|
|
|
<DropdownToggle size="sm" caret outline className="short-urls-row-menu__dropdown-toggle">
|
|
|
|
<FontAwesomeIcon icon={menuIcon} />
|
|
|
|
</DropdownToggle>
|
|
|
|
<DropdownMenu right>
|
|
|
|
<DropdownItem tag={VisitStatsLink} selectedServer={selectedServer} shortUrl={shortUrl}>
|
|
|
|
<FontAwesomeIcon icon={pieChartIcon} fixedWidth /> Visit stats
|
|
|
|
</DropdownItem>
|
|
|
|
|
|
|
|
<DropdownItem onClick={toggleTags}>
|
|
|
|
<FontAwesomeIcon icon={tagsIcon} fixedWidth /> Edit tags
|
|
|
|
</DropdownItem>
|
|
|
|
<EditTagsModal shortUrl={shortUrl} isOpen={isTagsModalOpen} toggle={toggleTags} />
|
|
|
|
|
|
|
|
<ForServerVersion minVersion="1.18.0">
|
|
|
|
<DropdownItem onClick={toggleMeta}>
|
|
|
|
<FontAwesomeIcon icon={editIcon} fixedWidth /> Edit metadata
|
|
|
|
</DropdownItem>
|
|
|
|
<EditMetaModal shortUrl={shortUrl} isOpen={isMetaModalOpen} toggle={toggleMeta} />
|
|
|
|
</ForServerVersion>
|
|
|
|
|
|
|
|
<ForServerVersion minVersion="2.1.0">
|
|
|
|
<DropdownItem onClick={toggleEdit}>
|
|
|
|
<FontAwesomeIcon icon={linkIcon} fixedWidth /> Edit long URL
|
|
|
|
</DropdownItem>
|
|
|
|
<EditShortUrlModal shortUrl={shortUrl} isOpen={isEditModalOpen} toggle={toggleEdit} />
|
|
|
|
</ForServerVersion>
|
|
|
|
|
|
|
|
<DropdownItem onClick={toggleQrCode}>
|
|
|
|
<FontAwesomeIcon icon={qrIcon} fixedWidth /> QR code
|
|
|
|
</DropdownItem>
|
|
|
|
<QrCodeModal shortUrl={shortUrl} isOpen={isQrModalOpen} toggle={toggleQrCode} />
|
|
|
|
|
|
|
|
<ForServerVersion maxVersion="1.x">
|
|
|
|
<DropdownItem onClick={togglePreview}>
|
|
|
|
<FontAwesomeIcon icon={pictureIcon} fixedWidth /> Preview
|
|
|
|
</DropdownItem>
|
|
|
|
<PreviewModal shortUrl={shortUrl} isOpen={isPreviewModalOpen} toggle={togglePreview} />
|
|
|
|
</ForServerVersion>
|
|
|
|
|
|
|
|
<DropdownItem divider />
|
|
|
|
|
|
|
|
<DropdownItem className="short-urls-row-menu__dropdown-item--danger" onClick={toggleDelete}>
|
|
|
|
<FontAwesomeIcon icon={deleteIcon} fixedWidth /> Delete short URL
|
|
|
|
</DropdownItem>
|
|
|
|
<DeleteShortUrlModal shortUrl={shortUrl} isOpen={isDeleteModalOpen} toggle={toggleDelete} />
|
|
|
|
</DropdownMenu>
|
|
|
|
</ButtonDropdown>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default ShortUrlsRowMenu;
|