UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

66 lines (65 loc) 2.54 kB
import { Children } from "react"; const findDescriptors = (children, descriptors = { input: [], label: [], description: [], controlled: [], errormessage: [], // TODO: refactor this out HvCalendarHeader: [] }) => { Children.forEach(children, (child) => { if (child?.type?.formElementType && child.props?.id) { descriptors[child.type.formElementType]?.push( { id: child.props?.id, htmlFor: child.props?.htmlFor } ); } if (child?.type?.formElementType !== "formelement") { findDescriptors(child?.props?.children, descriptors); } }); return descriptors; }; const getIdReferenceListFor = (formElementType, descriptors, filterFor = null) => { const referenceList = descriptors?.[formElementType]?.filter((d) => d.htmlFor !== filterFor)?.map((d) => d.id).join(" ").trim(); return referenceList !== "" ? referenceList : void 0; }; const getIdReferenceFor = (formElementType, descriptors, filterFor = null) => { const referenceList = descriptors?.[formElementType]?.filter((d) => d.htmlFor !== filterFor)?.map((d) => d.id)?.[0]; return referenceList !== "" ? referenceList : void 0; }; const buildFormElementPropsFromContext = (name, disabled, readOnly, required, context) => { return { name: name || context?.name, disabled: disabled ?? context?.disabled, readOnly: readOnly ?? context?.readOnly, required: required ?? context?.required, status: context?.status }; }; const buildAriaPropsFromContext = (props, context, isInvalid2, inputId) => { const arias = { "aria-labelledby": props?.["aria-labelledby"] !== void 0 ? props?.["aria-labelledby"] : getIdReferenceListFor("label", context?.descriptors, inputId), "aria-describedby": props?.["aria-describedby"] !== void 0 ? props?.["aria-describedby"] : getIdReferenceListFor("description", context?.descriptors), "aria-controls": props?.["aria-controls"] !== void 0 ? props?.["aria-controls"] : getIdReferenceListFor("controlled", context?.descriptors) }; if (isInvalid2) { arias["aria-invalid"] = isInvalid2; arias["aria-errormessage"] = props?.["aria-errormessage"] !== void 0 ? props?.["aria-errormessage"] : getIdReferenceFor("errormessage", context?.descriptors); } return arias; }; const isValid = (state) => state === "valid"; const isInvalid = (state) => state === "invalid"; export { buildAriaPropsFromContext, buildFormElementPropsFromContext, findDescriptors, getIdReferenceFor, getIdReferenceListFor, isInvalid, isValid };