import React, { useCallback, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import Alert from 'Components/Alert'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import SpinnerButton from 'Components/Link/SpinnerButton'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import usePrevious from 'Helpers/Hooks/usePrevious'; import { inputTypes, kinds } from 'Helpers/Props'; import { authenticationMethodOptions, authenticationRequiredOptions, } from 'Settings/General/SecuritySettings'; import { clearPendingChanges } from 'Store/Actions/baseActions'; import { fetchGeneralSettings, saveGeneralSettings, setGeneralSettingsValue, } from 'Store/Actions/settingsActions'; import { fetchStatus } from 'Store/Actions/systemActions'; import createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector'; import { InputChanged } from 'typings/inputs'; import translate from 'Utilities/String/translate'; import styles from './AuthenticationRequiredModalContent.css'; const SECTION = 'general'; const selector = createSettingsSectionSelector(SECTION); function onModalClose() { // No-op } export default function AuthenticationRequiredModalContent() { const { isPopulated, error, isSaving, settings } = useSelector(selector); const dispatch = useDispatch(); const { authenticationMethod, authenticationRequired, username, password, passwordConfirmation, } = settings; const wasSaving = usePrevious(isSaving); useEffect(() => { dispatch(fetchGeneralSettings()); return () => { dispatch(clearPendingChanges({ section: `settings.${SECTION}` })); }; }, [dispatch]); const onInputChange = useCallback( (args: InputChanged) => { // @ts-expect-error Actions aren't typed dispatch(setGeneralSettingsValue(args)); }, [dispatch] ); const authenticationEnabled = authenticationMethod && authenticationMethod.value !== 'none'; useEffect(() => { if (isSaving || !wasSaving) { return; } dispatch(fetchStatus()); }, [isSaving, wasSaving, dispatch]); const onPress = useCallback(() => { dispatch(saveGeneralSettings()); }, [dispatch]); return ( {translate('AuthenticationRequired')} {translate('AuthenticationRequiredWarning')} {isPopulated && !error ? (
{translate('AuthenticationMethod')} {translate('AuthenticationRequired')} {translate('Username')} {translate('Password')} {translate('PasswordConfirmation')}
) : null} {!isPopulated && !error ? : null}
{translate('Save')}
); }