import React from 'react'; import { useSelector } from 'react-redux'; import classNames from 'classnames'; import propTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { DEFAULT_SHORT_DATE_FORMAT_OPTIONS, LONG_TIME_FORMAT, SCHEME_TO_PROTOCOL_MAP, } from '../../../helpers/constants'; import { captitalizeWords, formatDateTime, formatTime } from '../../../helpers/helpers'; import { getSourceData } from '../../../helpers/trackers/trackers'; import IconTooltip from './IconTooltip'; const DomainCell = ({ answer_dnssec, service_name, client_proto, domain, time, tracker, type, }) => { const { t } = useTranslation(); const dnssec_enabled = useSelector((state) => state.dnsConfig.dnssec_enabled); const isDetailed = useSelector((state) => state.queryLogs.isDetailed); const hasTracker = !!tracker; const lockIconClass = classNames('icons icon--24 d-none d-sm-block', { 'icon--green': answer_dnssec, 'icon--disabled': !answer_dnssec, 'my-3': isDetailed, }); const privacyIconClass = classNames('icons mx-2 icon--24 d-none d-sm-block', { 'icon--green': hasTracker, 'icon--disabled': !hasTracker, 'my-3': isDetailed, }); const protocol = t(SCHEME_TO_PROTOCOL_MAP[client_proto]) || ''; const ip = type ? `${t('type_table_header')}: ${type}` : ''; const requestDetailsObj = { time_table_header: formatTime(time, LONG_TIME_FORMAT), date: formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS), domain, type_table_header: type, protocol, }; if (service_name) { requestDetailsObj.check_service = service_name; } const sourceData = getSourceData(tracker); const knownTrackerDataObj = { name_table_header: tracker?.name, category_label: hasTracker && captitalizeWords(tracker.category), source_label: sourceData && {sourceData.name}, }; const renderGrid = (content, idx) => { const preparedContent = typeof content === 'string' ? t(content) : content; const className = classNames('text-truncate o-hidden', { 'overflow-break': preparedContent.length > 100, }); return