woocommerce/plugins/woocommerce-blocks/assets/js/base/components/form-token-field/index.tsx

67 lines
1.4 KiB
TypeScript
Raw Normal View History

/**
* External dependencies
*/
import { FormTokenField as WPFormTokenField } from 'wordpress-components';
import clsx from 'clsx';
/**
* Internal dependencies
*/
import './style.scss';
export interface Props {
className?: string;
disabled?: boolean;
displayTransform?: ( value: string ) => string;
label?: string;
messages?: Record< string, string >;
multiple?: boolean;
onChange: ( value: string[] ) => void;
placeholder?: string;
saveTransform?: ( value: string ) => string;
style?: React.CSSProperties;
suggestions: string[];
validateInput?: ( token: string ) => boolean;
value: string[];
}
const FormTokenField = ( {
className,
style,
suggestions,
multiple = true,
saveTransform = ( incompleteToken ) =>
incompleteToken.trim().replace( /\s/g, '-' ),
messages = {},
validateInput = ( token: string ) => suggestions.includes( token ),
label = '',
...props
}: Props ) => {
return (
<div
className={ clsx(
'wc-blocks-components-form-token-field-wrapper',
className,
{
'single-selection': ! multiple,
}
) }
style={ style }
>
<WPFormTokenField
label={ label }
__experimentalExpandOnFocus={ true }
__experimentalShowHowTo={ false }
__experimentalValidateInput={ validateInput }
saveTransform={ saveTransform }
maxLength={ multiple ? undefined : 1 }
suggestions={ suggestions }
messages={ messages }
{ ...props }
/>
</div>
);
};
export default FormTokenField;