import React, { useCallback, useContext, useMemo } from 'react' import { Form } from 'react-final-form' import clsx from 'clsx' import { DecisionsFormProps, IntegrationConfigOptions, } from '@consent-manager/core' import { Trans } from './trans' import { Integration } from './integration' import { Styles, ButtonProps, IconProps, SwitchProps } from './index' import { ConsentManagerDefaultInterfaceContext } from './context' export interface ConsentFormProps extends DecisionsFormProps { styles: Styles ToggleIcon: React.ComponentType CloseIcon: React.ComponentType Switch: React.ComponentType Button: React.ComponentType } interface FormState { [key: string]: boolean } const ConsentForm: React.FC = ({ integrations, initialValues, onSubmit, CloseIcon, ToggleIcon, styles, Switch, Button, }) => { const { setFormVisible } = useContext(ConsentManagerDefaultInterfaceContext) const onSubmitCb = useCallback( values => { const enabled = [] for (const [key, value] of Object.entries(values)) { if (value) { enabled.push(key) } } setFormVisible(false) onSubmit({ enabled }) }, [onSubmit, setFormVisible] ) const initialState = useMemo(() => { const initialState: FormState = {} for (const integration of integrations) { initialState[integration.id] = initialValues.enabled.includes( integration.id ) } return initialState }, [integrations, initialValues]) const onClose = useCallback(() => setFormVisible(false), [setFormVisible]) return ( <>
{ const controls = (
) return (

{controls}
{integrations.map((integration: IntegrationConfigOptions) => ( ))}
{controls}
) }} /> ( )} /> ) } export default ConsentForm