@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
66 lines (65 loc) • 2.54 kB
JavaScript
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
};