UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

66 lines 2.76 kB
import * as React from 'react'; import { useEffect } from 'react'; import { FormGroupContext } from './FormGroupContext'; import { useFormGroups } from './useFormGroups'; /** * This provider allows its input children to register to a specific group. * This enables other components in the group to access group properties such as its * validation (valid/invalid) or whether its inputs have been updated (dirty/pristine). * * @example * import { Edit, SimpleForm, TextInput, FormGroupContextProvider, useFormGroup } from 'react-admin'; * import { Accordion, AccordionDetails, AccordionSummary, Typography } from '@mui/material'; * * const PostEdit = () => ( * <Edit> * <SimpleForm> * <TextInput source="title" /> * <FormGroupContextProvider name="options"> * <Accordion> * <AccordionSummary * expandIcon={<ExpandMoreIcon />} * aria-controls="options-content" * id="options-header" * > * <AccordionSectionTitle name="options">Options</AccordionSectionTitle> * </AccordionSummary> * <AccordionDetails id="options-content" aria-labelledby="options-header"> * <TextInput source="teaser" validate={minLength(20)} /> * </AccordionDetails> * </Accordion> * </FormGroupContextProvider> * </SimpleForm> * </Edit> * ); * * const AccordionSectionTitle = ({ children, name }) => { * const formGroupState = useFormGroup(name); * return ( * <Typography color={formGroupState.invalid && formGroupState.dirty ? 'error' : 'inherit'}> * {children} * </Typography> * ); * } * * @param props The component props * @param {ReactNode} props.children The form group content * @param {String} props.name The form group name */ export var FormGroupContextProvider = function (_a) { var children = _a.children, name = _a.name; var formGroups = useFormGroups(); useEffect(function () { if (!formGroups || !formGroups.registerGroup || !formGroups.unregisterGroup) { console.warn("The FormGroupContextProvider can only be used inside a FormContext such as provided by the SimpleForm and TabbedForm components"); return; } formGroups.registerGroup(name); return function () { formGroups.unregisterGroup(name); }; }, [formGroups, name]); return (React.createElement(FormGroupContext.Provider, { value: name }, children)); }; //# sourceMappingURL=FormGroupContextProvider.js.map