@chakra-ui/core
Version:
Responsive and accessible React UI components built with React and Emotion
54 lines (48 loc) • 1.53 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
/** @jsx jsx */
import { jsx } from "@emotion/core";
import { createContext, useContext, forwardRef } from "react";
import Box from "../Box";
export var useFormControl = function useFormControl(props) {
var context = useFormControlContext();
if (!context) {
return props;
}
var keys = Object.keys(context);
return keys.reduce(function (acc, prop) {
/** Giving precedence to `props` over `context` */
acc[prop] = props[prop];
if (context) {
if (props[prop] == null) {
acc[prop] = context[prop];
}
}
return acc;
}, {});
};
var FormControlContext = createContext();
export var useFormControlContext = function useFormControlContext() {
return useContext(FormControlContext);
};
var FormControl = forwardRef(function (_ref, ref) {
var isInvalid = _ref.isInvalid,
isRequired = _ref.isRequired,
isDisabled = _ref.isDisabled,
isReadOnly = _ref.isReadOnly,
rest = _objectWithoutPropertiesLoose(_ref, ["isInvalid", "isRequired", "isDisabled", "isReadOnly"]);
var context = {
isRequired: isRequired,
isDisabled: isDisabled,
isInvalid: isInvalid,
isReadOnly: isReadOnly
};
return jsx(FormControlContext.Provider, {
value: context
}, jsx(Box, _extends({
role: "group",
ref: ref
}, rest)));
});
FormControl.displayName = "FormControl";
export default FormControl;