import { useEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import type { FormEvent, JSX } from 'react'; import type { Settings } from '../../shared/api/types/settings'; import { useUpdateSettings } from '../../shared/api/useSettings'; import { Button } from '../../shared/ui/Button'; import { useNotifyOutcome } from '../../shared/ui/useNotifyOutcome'; import { settingsUpdateOf, withoutHost } from './settingsDraft'; import { settingToggles } from './settingToggles'; import { SkipHosts } from './SkipHosts'; import { ToggleRow } from './ToggleRow'; const EMAIL_FIELD_STYLE = { flex: '1 1 240px', maxWidth: 320 }; export function SettingsForm( { saved }: { saved: Settings } ): JSX.Element { const notifyOutcome = useNotifyOutcome(); const updateSettings = useUpdateSettings(); const [ draft, setDraft ] = useState( saved ); useEffect( () => { setDraft( saved ); }, [ saved ] ); const changeDraft = ( change: Partial< Settings > ) => { setDraft( ( previousDraft ) => ( { ...previousDraft, ...change } ) ); }; const submit = ( event: FormEvent ) => { event.preventDefault(); updateSettings.mutate( settingsUpdateOf( draft ), notifyOutcome( __( 'Settings saved.', 'aiplaz-link-checkup' ) ) ); }; return (
{ settingToggles().map( ( toggle ) => ( { changeDraft( { [ toggle.key ]: isOn } ); } } /> ) ) }
{ changeDraft( { email_to: event.target.value } ); } } />
{ changeDraft( { skip_hosts: withoutHost( draft.skip_hosts, host ), } ); } } />
{ __( 'Changes apply to the next check.', 'aiplaz-link-checkup' ) }
); }