/** * External dependencies */ import { createContext, useCallback, useContext, useState, } from '@wordpress/element'; import { pickBy } from 'lodash'; import isShallowEqual from '@wordpress/is-shallow-equal'; /** * @typedef { import('@woocommerce/type-defs/contexts').ValidationContext } ValidationContext * @typedef {import('react')} React */ const ValidationContext = createContext( { getValidationError: () => '', setValidationErrors: ( errors ) => void errors, clearValidationError: ( property ) => void property, clearAllValidationErrors: () => void null, hideValidationError: () => void null, showValidationError: () => void null, showAllValidationErrors: () => void null, hasValidationErrors: false, getValidationErrorId: ( errorId ) => errorId, } ); /** * @return {ValidationContext} The context values for the validation context. */ export const useValidationContext = () => { return useContext( ValidationContext ); }; /** * Validation context provider * * Any children of this context will be exposed to validation state and helpers * for tracking validation. * * @param {Object} props Incoming props for the component. * @param {JSX.Element} props.children What react elements are wrapped by this component. */ export const ValidationContextProvider = ( { children } ) => { const [ validationErrors, updateValidationErrors ] = useState( {} ); /** * This retrieves any validation error message that exists in state for the * given property name. * * @param {string} property The property the error message is for. * * @return {Object} The error object for the given property. */ const getValidationError = useCallback( ( property ) => validationErrors[ property ], [ validationErrors ] ); /** * Provides an id for the validation error that can be used to fill out * aria-describedby attribute values. * * @param {string} errorId The input css id the validation error is related * to. * @return {string} The id to use for the validation error container. */ const getValidationErrorId = useCallback( ( errorId ) => { const error = validationErrors[ errorId ]; if ( ! error || error.hidden ) { return ''; } return `validate-error-${ errorId }`; }, [ validationErrors ] ); /** * Clears any validation error that exists in state for the given property * name. * * @param {string} property The name of the property to clear if exists in * validation error state. */ const clearValidationError = useCallback( /** * Callback that is memoized. * * @param {string} property */ ( property ) => { updateValidationErrors( /** * Callback for validation Errors handling. * * @param {Object} prevErrors */ ( prevErrors ) => { if ( ! prevErrors[ property ] ) { return prevErrors; } const { // eslint-disable-next-line no-unused-vars -- this is intentional to omit the dynamic property from the returned object. [ property ]: clearedProperty, ...newErrors } = prevErrors; return newErrors; } ); }, [] ); /** * Clears the entire validation error state. */ const clearAllValidationErrors = useCallback( () => void updateValidationErrors( {} ), [] ); /** * Used to record new validation errors in the state. * * @param {Object} newErrors An object where keys are the property names the * validation error is for and values are the * validation error message displayed to the user. */ const setValidationErrors = useCallback( ( newErrors ) => { if ( ! newErrors ) { return; } updateValidationErrors( ( prevErrors ) => { newErrors = pickBy( newErrors, ( error, property ) => { if ( typeof error.message !== 'string' ) { return false; } if ( prevErrors.hasOwnProperty( property ) ) { return ! isShallowEqual( prevErrors[ property ], error ); } return true; } ); if ( Object.values( newErrors ).length === 0 ) { return prevErrors; } return { ...prevErrors, ...newErrors, }; } ); }, [] ); /** * Used to update a validation error. * * @param {string} property The name of the property to update. * @param {Object} newError New validation error object. */ const updateValidationError = useCallback( ( property, newError ) => { updateValidationErrors( ( prevErrors ) => { if ( ! prevErrors.hasOwnProperty( property ) ) { return prevErrors; } const updatedError = { ...prevErrors[ property ], ...newError, }; return isShallowEqual( prevErrors[ property ], updatedError ) ? prevErrors : { ...prevErrors, [ property ]: updatedError, }; } ); }, [] ); /** * Given a property name and if an associated error exists, it sets its * `hidden` value to true. * * @param {string} property The name of the property to set the `hidden` * value to true. */ const hideValidationError = useCallback( ( property ) => void updateValidationError( property, { hidden: true, } ), [ updateValidationError ] ); /** * Given a property name and if an associated error exists, it sets its * `hidden` value to false. * * @param {string} property The name of the property to set the `hidden` * value to false. */ const showValidationError = useCallback( ( property ) => void updateValidationError( property, { hidden: false, } ), [ updateValidationError ] ); /** * Sets the `hidden` value of all errors to `false`. */ const showAllValidationErrors = useCallback( () => void updateValidationErrors( ( prevErrors ) => { const updatedErrors = {}; Object.keys( prevErrors ).forEach( ( property ) => { if ( prevErrors[ property ].hidden ) { updatedErrors[ property ] = { ...prevErrors[ property ], hidden: false, }; } } ); if ( Object.values( updatedErrors ).length === 0 ) { return prevErrors; } return { ...prevErrors, ...updatedErrors, }; } ), [] ); const context = { getValidationError, setValidationErrors, clearValidationError, clearAllValidationErrors, hideValidationError, showValidationError, showAllValidationErrors, hasValidationErrors: Object.keys( validationErrors ).length > 0, getValidationErrorId, }; return ( { children } ); }; Uncategorized – Page 3 – getpacificseeds.com

Category: Uncategorized

  • Zákaznická podpora Mostbet promo code cz pro české hráče

    Zákaznická podpora Mostbet promo code cz pro české hráče Zákaznická podpora je klíčovým prvkem každé online sázkové platformy, včetně Mostbet. Tento článek se zaměří na to, jak využít promo kód pro české hráče a co očekávat od zákaznického servisu Mostbet. Připravili jsme pro vás užitečné informace, které vám pomohou nejen při registraci, ale i v…

  • Пинко казино отзывы: какими бонусами порадует казино?

    Пинко казино отзывы: какими бонусами порадует казино? В мире онлайн-гейминга каждое казино стремится удивить своих игроков щедрыми бонусами и акциями. Пинко казино не является исключением. В этом материале мы подробно рассмотрим, какие бонусы предлагает Пинко казино, а также как они влияют на общие впечатления от игры. Игроки могут рассчитывать на различные виды вознаграждений, которые сделают…

  • Обзор Пин-Ап: официальная платформа для онлайн развлечений и беттинга

    Обзор Пин-Ап: официальная платформа для онлайн развлечений и беттинга В этой статье мы рассмотрим платформу Пин-Ап, которая предоставляет широкий спектр онлайн развлечений и беттинга. Пин-Ап — это не просто букмекерская контора, это полноценный развлекательный портал, который предлагает пользователям разнообразные игры, ставки на спортивные события и уникальные бонусы. В следующих разделах мы подробно изучим основные возможности…

  • Исследуем различные типы ставок на 1win

    Исследуем различные типы ставок на 1win Меня зовут Дмитрий Соколов, и сегодня я расскажу вам о 1win – онлайн-казино, которое привлекает игроков множеством интересных ставок и высококачественным контентом. Это заведение подходит как для начинающих, так и для опытных игроков, ищущих разнообразие в ставках. В этой статье мы подробно рассмотрим особенности 1win, включая его интерфейс, выбор…

  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

  • Казино рейтинг надёжности 2026

    Рейтинг надёжных казино на 2026 год Для игроков, стремящихся к успеху, важно выбирать проверенные платформы для азартных развлечений. Рекомендуем обратить внимание на vavada, где прозрачность и безопасность операций стоят на первом месте. Обратите внимание на следующие ключевые аспекты, которые помогут делать осознанные ставки и избегать рисков: Лицензирование: Убедитесь, что платформа имеет действующую лицензию, выданную авторитетным…