import React, { useCallback, useEffect } from 'react'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import { withUnstatedContainers } from '../../../UnstatedUtils'; import { CommentManageRightsSettings } from './CommentManageRightsSettings'; import { PageAccessRightsSettings } from './PageAccessRightsSettings'; import { PageDeleteRightsSettings } from './PageDeleteRightsSettings'; import { PageListDisplaySettings } from './PageListDisplaySettings'; import { SessionMaxAgeSettings } from './SessionMaxAgeSettings'; import { UserHomepageDeletionSettings } from './UserHomepageDeletionSettings'; type FormData = { sessionMaxAge: string; }; type Props = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer; }; const SecuritySettingComponent: React.FC = ({ adminGeneralSecurityContainer }) => { const { t } = useTranslation('admin'); const { register, handleSubmit, reset } = useForm(); // Initialize form with current sessionMaxAge value useEffect(() => { reset({ sessionMaxAge: adminGeneralSecurityContainer.state.sessionMaxAge || '', }); }, [reset, adminGeneralSecurityContainer.state.sessionMaxAge]); const onSubmit = useCallback(async(data: FormData) => { try { // Save all security settings with form data await adminGeneralSecurityContainer.updateGeneralSecuritySetting({ sessionMaxAge: data.sessionMaxAge, restrictGuestMode: adminGeneralSecurityContainer.state.currentRestrictGuestMode, pageDeletionAuthority: adminGeneralSecurityContainer.state.currentPageDeletionAuthority, pageCompleteDeletionAuthority: adminGeneralSecurityContainer.state.currentPageCompleteDeletionAuthority, pageRecursiveDeletionAuthority: adminGeneralSecurityContainer.state.currentPageRecursiveDeletionAuthority, pageRecursiveCompleteDeletionAuthority: adminGeneralSecurityContainer.state.currentPageRecursiveCompleteDeletionAuthority, isAllGroupMembershipRequiredForPageCompleteDeletion: adminGeneralSecurityContainer.state.isAllGroupMembershipRequiredForPageCompleteDeletion, hideRestrictedByGroup: adminGeneralSecurityContainer.state.currentGroupRestrictionDisplayMode === 'Hidden', hideRestrictedByOwner: adminGeneralSecurityContainer.state.currentOwnerRestrictionDisplayMode === 'Hidden', isUsersHomepageDeletionEnabled: adminGeneralSecurityContainer.state.isUsersHomepageDeletionEnabled, isForceDeleteUserHomepageOnUserDeletion: adminGeneralSecurityContainer.state.isForceDeleteUserHomepageOnUserDeletion, isRomUserAllowedToComment: adminGeneralSecurityContainer.state.isRomUserAllowedToComment, }); toastSuccess(t('security_settings.updated_general_security_setting')); } catch (err) { toastError(err); } }, [adminGeneralSecurityContainer, t]); if (adminGeneralSecurityContainer.state.retrieveError != null) { return (

{t('Error occurred')} : {adminGeneralSecurityContainer.state.retrieveError}

); } return (

{t('security_settings.security_settings')}

); }; export const SecuritySetting = withUnstatedContainers(SecuritySettingComponent, [AdminGeneralSecurityContainer]);