/**
* External dependencies
*/
import clsx from 'clsx';
/**
* WordPress dependencies
*/
import { useContext, useMemo } from '@wordpress/element';
import {
__experimentalHeading as Heading,
BaseControl,
} from '@wordpress/components';
import { Stack } from '@wordpress/ui';
/**
* Internal dependencies
*/
import type {
FieldLayoutProps,
NormalizedForm,
NormalizedRegularLayout,
} from '../../../types';
import DataFormContext from '../../dataform-context';
import { DataFormLayout } from '../data-form-layout';
import { DEFAULT_LAYOUT } from '../normalize-form';
function Header( { title }: { title: string } ) {
return (
{ title }
);
}
export default function FormRegularField< Item >( {
data,
field,
onChange,
hideLabelFromVision,
markWhenOptional,
validity,
}: FieldLayoutProps< Item > ) {
const { fields } = useContext( DataFormContext );
const layout = field.layout as NormalizedRegularLayout;
const form: NormalizedForm = useMemo(
() => ( {
layout: DEFAULT_LAYOUT,
fields: !! field.children ? field.children : [],
} ),
[ field ]
);
if ( !! field.children ) {
return (
<>
{ ! hideLabelFromVision && field.label && (
) }
>
);
}
const labelPosition = layout.labelPosition;
const fieldDefinition = fields.find(
( fieldDef ) => fieldDef.id === field.id
);
if ( ! fieldDefinition || ! fieldDefinition.Edit ) {
return null;
}
if ( labelPosition === 'side' ) {
return (
{ fieldDefinition.label }
{ fieldDefinition.readOnly === true ? (
) : (
) }
);
}
return (
{ fieldDefinition.readOnly === true ? (
<>
<>
{ ! hideLabelFromVision && labelPosition !== 'none' && (
{ fieldDefinition.label }
) }
>
>
) : (
) }
);
}