import { ReactNode, useCallback } from 'react' import { useTranslation } from 'react-i18next' import OLBadge from '@/shared/components/ol/ol-badge' import { postJSON } from '@/infrastructure/fetch-json' import OLButton from '@/shared/components/ol/ol-button' import getMeta from '@/utils/meta' import Notification from '../notification' import { LabsEnableButton } from '@/shared/components/labs/labs-enable-button' export type LabsExperimentWidgetProps = { logo: ReactNode title: string description: string | ReactNode optedInDescription?: string | ReactNode helpPath?: string labsEnabled?: boolean experimentName: string setErrorMessage: (message: string) => void optedIn: boolean setOptedIn: (optedIn: boolean) => void feedbackLink?: string } /** @knipignore */ export function LabsExperimentWidget({ logo, title, description, optedInDescription, helpPath, labsEnabled, experimentName, setErrorMessage, optedIn, setOptedIn, feedbackLink, }: LabsExperimentWidgetProps) { const { t } = useTranslation() const experimentsErrorMessage = t( 'we_are_unable_to_opt_you_into_this_experiment' ) const allowedExperiments = getMeta('ol-allowedExperiments') const disabled = !allowedExperiments.includes(experimentName) && !optedIn const handleEnable = useCallback(async () => { try { const enablePath = `/labs/participate/experiments/${experimentName}/opt-in` await postJSON(enablePath) setOptedIn(true) } catch (err) { setErrorMessage(experimentsErrorMessage) } }, [experimentName, setErrorMessage, experimentsErrorMessage, setOptedIn]) const handleDisable = useCallback(async () => { try { const disablePath = `/labs/participate/experiments/${experimentName}/opt-out` await postJSON(disablePath) setOptedIn(false) } catch (err) { setErrorMessage(experimentsErrorMessage) } }, [experimentName, setErrorMessage, experimentsErrorMessage, setOptedIn]) return (
{logo}

{title}

{optedIn && {t('enabled')}}
{optedIn && optedInDescription ? optedInDescription : description}{' '} {helpPath && ( {t('learn_more')} )}
{optedIn && feedbackLink && ( {t('give_feedback')} )}
{labsEnabled && ( )}
{disabled && ( <>
)}
) } export default LabsExperimentWidget