import {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import renderHtmlAttributes from "../../utils/renderHtmlAttributes"; import useFormSubmitSuccess from "../../hooks/useFormSubmitSuccess"; import UpgradeOverlay from "../../components/UpgradeOverlay"; import type {FreemiusProps} from "../../types/freemius"; import Select, {createFilter} from "react-select"; type FieldProps = { itemId: string formId: string attrs: Record value: readonly { value: string; label: string }[]; options: { value: string; label: string }[] isMulti: boolean isClearable: boolean isRtl: boolean isSearchable: boolean placeholder: string noOptionsMessage: string isOptionDisabled: boolean minimumSelectionLength: number maximumSelectionLength: number filterOption: boolean; ignoreCase: boolean; ignoreAccents: boolean; matchFrom: 'any' | 'start' } & FreemiusProps const Field = (props: FieldProps) => { const parentRef = useRef(null); const containerRef = useRef(null); const attrs = useMemo(() => renderHtmlAttributes(props.attrs), [props.attrs]); const [value, setValue] = useState(props.value); // Reset after form submit useFormSubmitSuccess(parentRef, () => { setValue(props.value); }, [props.value]); useEffect(() => { const element = containerRef.current?.controlRef .closest('.hulk_affef_select2_wrap') .querySelector(`input[name="${attrs.name}"]`); element?.dispatchEvent(new Event('change', {bubbles: true})); }, [attrs.name, value]); const isOptionDisabled = useCallback((option: any) => { return (value.length >= props.maximumSelectionLength) && (props.maximumSelectionLength > 0) && !value.some((s: any) => s.value === option.value); }, [props.maximumSelectionLength, value]); return (
{!props.freemius.can_use_premium_code && }