import { TextControl, RadioControl, TextareaControl, __experimentalNumberControl as NumberControl } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import License from "./License/License"; import Password from "./Password"; import SelectControl from "./SelectControl"; import Host from "./Host/Host"; import Hyperlink from "../utils/Hyperlink"; import LetsEncrypt from "../LetsEncrypt/LetsEncrypt"; import Activate from "../LetsEncrypt/Activate"; import MixedContentScan from "./MixedContentScan/MixedContentScan"; import PermissionsPolicy from "./PermissionsPolicy"; import CheckboxControl from "./CheckboxControl"; import Support from "./Support"; import LearningMode from "./LearningMode/LearningMode"; import RiskComponent from "./RiskConfiguration/RiskComponent"; import VulnerabilitiesOverview from "./RiskConfiguration/vulnerabilitiesOverview"; import IpAddressDatatable from "./LimitLoginAttempts/IpAddressDatatable"; import TwoFaRolesDropDown from "./TwoFA/TwoFaRolesDropDown"; import Button from "./Button"; import Icon from "../utils/Icon"; import { useEffect, useState, useRef } from "@wordpress/element"; import useFields from "./FieldsData"; import PostDropdown from "./PostDropDown"; import NotificationTester from "./RiskConfiguration/NotificationTester"; import getAnchor from "../utils/getAnchor"; import useMenu from "../Menu/MenuData"; import UserDatatable from "./LimitLoginAttempts/UserDatatable"; import CountryDatatable from "./LimitLoginAttempts/CountryDatatable"; import BlockListDatatable from "./GeoBlockList/BlockListDatatable"; import TwoFaDataTable from "./TwoFA/TwoFaDataTable"; import EventLogDataTable from "./EventLog/EventLogDataTable"; import DOMPurify from "dompurify"; import RolesDropDown from "./RolesDropDown"; import GeoDatatable from "./GeoBlockList/GeoDatatable"; import WhiteListDatatable from "./GeoBlockList/WhiteListDatatable"; import Captcha from "./Captcha/Captcha"; import CaptchaKey from "./Captcha/CaptchaKey"; import UserAgentTable from "./firewall/UserAgentTable"; import TwoFaEnabledDropDown from "./TwoFA/TwoFaEnabledDropDown"; const Field = (props) => { const scrollAnchor = useRef(null); const { updateField, setChangedField, highLightField, setHighLightField , getFieldValue} = useFields(); const [anchor, setAnchor] = useState(null); const { selectedFilter, setSelectedFilter } = useMenu(); useEffect(() => { // Check URL for anchor and highlightfield parameters const anchor = getAnchor('anchor'); const highlightField = getAnchor('highlightfield'); setAnchor(anchor); if (highlightField) { setHighLightField(highlightField); } if (highlightField === props.field.id && scrollAnchor.current) { scrollAnchor.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } //if the field is a captcha provider, scroll to the captcha provider is a temp fix cause i can't get the scroll to work properly. if (highLightField === 'enabled_captcha_provider' && props.fields) { let captchaField = document.getElementsByClassName('rsssl-highlight')[0]; if (captchaField) { captchaField.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } if (anchor && anchor === props.field.id) { scrollAnchor.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, []); useEffect(() => { handleAnchor(); }, [anchor]); window.addEventListener('hashchange', () => { const anchor = getAnchor('anchor'); const highlightField = getAnchor('highlightfield'); setAnchor(anchor); if (highlightField) { setHighLightField(highlightField); } if (highlightField === props.field.id && scrollAnchor.current) { scrollAnchor.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } if (anchor && anchor === props.field.id) { scrollAnchor.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); const handleAnchor = () => { if (anchor && anchor === props.field.id) { scrollAnchor.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }; const onChangeHandler = (fieldValue) => { let field = props.field; if (field.pattern) { const regex = new RegExp(field.pattern, 'g'); const allowedCharactersArray = fieldValue.match(regex); fieldValue = allowedCharactersArray ? allowedCharactersArray.join('') : ''; } updateField(field.id, fieldValue); // We can configure other fields if a field is enabled, or set to a certain value. let configureFieldCondition = false; if (field.configure_on_activation) { if (field.configure_on_activation.hasOwnProperty('condition') && props.field.value == field.configure_on_activation.condition) { configureFieldCondition = true; } let configureField = field.configure_on_activation[0]; for (let fieldId in configureField) { if (configureFieldCondition && configureField.hasOwnProperty(fieldId)) { updateField(fieldId, configureField[fieldId]); } } } setChangedField(field.id, fieldValue); }; const labelWrap = (field) => { let tooltipColor = field.warning ? 'red' : 'black'; return ( <>