import PropTypes from 'prop-types'; import copyToClipboard from 'copy-to-clipboard'; import { clsm } from '../../../../utils'; import { Copy, ErrorIcon } from '../../../../assets/icons'; import { dashboard as $dashboardContent } from '../../../../content'; import { NO_DATA_VALUE } from '../../../../constants'; import { substitutePlaceholders } from '../../../../utils'; import { useNotif } from '../../../../contexts/Notification'; import { useStreams } from '../../../../contexts/Streams'; import Button from '../../../../components/Button'; import Tooltip from '../../../../components/Tooltip'; import useStringOverflow from '../../../../hooks/useStringOverflow'; const $content = $dashboardContent.stream_session_page.encoder_configuration; const valueRegex = /({.+})/; const commonErrorClasses = clsm([ 'dark:text-darkMode-red', 'text-lightMode-red' ]); const commonClasses = clsm([ '[&>svg]:fill-lightMode-red', '[&>svg]:ml-[6px]', '[&>svg]:shrink-0', 'dark:[&>svg]:fill-darkMode-red', 'dark:text-darkMode-gray-light', 'flex', 'items-center', 'min-w-[168px]', 'relative', 'text-lightMode-gray-dark' ]); const ConfigRow = ({ label, value, error }) => { const { activeStreamSession, isLoadingStreamData } = useStreams(); const { notifySuccess } = useNotif(); const renderedValue = isLoadingStreamData ? NO_DATA_VALUE : value; const [isValueOverflowing, valueRef] = useStringOverflow(renderedValue); const hasError = !!error && !isLoadingStreamData; let ErrorMessage; if (hasError && $content.errors[error]) { ErrorMessage = ( <> {$content.errors[error].split(valueRegex).map((strPart) => !!strPart.match(valueRegex) ? ( {substitutePlaceholders(strPart, activeStreamSession)} ) : ( strPart ) )} > ); } const handleCopy = (label, value) => { copyToClipboard(value); notifySuccess(`${label} ${$content.copied}`); }; const getEncoderValueElement = () => (
{renderedValue}
); return ( {renderedValue !== NO_DATA_VALUE && !!ErrorMessage ? (