import type { FC } from 'react'; import { useEffect, useRef } from 'react'; import { ExternalLink } from 'react-external-link'; import type { SelectedServer } from '../../servers/data'; import type { Settings } from '../../settings/reducers/settings'; import { CopyToClipboardIcon } from '../../utils/CopyToClipboardIcon'; import { Time } from '../../utils/dates/Time'; import type { TimeoutToggle } from '../../utils/helpers/hooks'; import type { ColorGenerator } from '../../utils/services/ColorGenerator'; import type { ShortUrl } from '../data'; import { useShortUrlsQuery } from './hooks'; import type { ShortUrlsRowMenuType } from './ShortUrlsRowMenu'; import { ShortUrlStatus } from './ShortUrlStatus'; import { ShortUrlVisitsCount } from './ShortUrlVisitsCount'; import { Tags } from './Tags'; import './ShortUrlsRow.scss'; interface ShortUrlsRowProps { onTagClick?: (tag: string) => void; selectedServer: SelectedServer; shortUrl: ShortUrl; } interface ShortUrlsRowConnectProps extends ShortUrlsRowProps { settings: Settings; } export type ShortUrlsRowType = FC; export const ShortUrlsRow = ( ShortUrlsRowMenu: ShortUrlsRowMenuType, colorGenerator: ColorGenerator, useTimeoutToggle: TimeoutToggle, ) => ({ shortUrl, selectedServer, onTagClick, settings }: ShortUrlsRowConnectProps) => { const [copiedToClipboard, setCopiedToClipboard] = useTimeoutToggle(); const [active, setActive] = useTimeoutToggle(false, 500); const isFirstRun = useRef(true); const [{ excludeBots }] = useShortUrlsQuery(); const { visits } = settings; const doExcludeBots = excludeBots ?? visits?.excludeBots; useEffect(() => { !isFirstRun.current && setActive(); isFirstRun.current = false; }, [shortUrl.visitsSummary?.total, shortUrl.visitsSummary?.nonBots, shortUrl.visitsCount]); return (