46 lines
866 B
TypeScript
46 lines
866 B
TypeScript
|
/**
|
||
|
* External dependencies
|
||
|
*/
|
||
|
import { __ } from '@wordpress/i18n';
|
||
|
import { SelectControl, TextControl } from '@wordpress/components';
|
||
|
|
||
|
const StateControl = ( {
|
||
|
states,
|
||
|
currentCountry,
|
||
|
...props
|
||
|
}: {
|
||
|
states: Record< string, Record< string, string > >;
|
||
|
currentCountry: string;
|
||
|
} ): JSX.Element | null => {
|
||
|
const filteredStates = states[ currentCountry ] || [];
|
||
|
|
||
|
if ( filteredStates.length === 0 ) {
|
||
|
return (
|
||
|
<TextControl
|
||
|
{ ...props }
|
||
|
disabled={ ! currentCountry || props.disabled }
|
||
|
/>
|
||
|
);
|
||
|
}
|
||
|
return (
|
||
|
<SelectControl
|
||
|
{ ...props }
|
||
|
options={ [
|
||
|
{
|
||
|
value: '',
|
||
|
disabled: true,
|
||
|
label: __( 'State', 'woo-gutenberg-products-block' ),
|
||
|
},
|
||
|
...Object.entries( filteredStates ).map(
|
||
|
( [ code, state ] ) => ( {
|
||
|
value: code,
|
||
|
label: state,
|
||
|
} )
|
||
|
),
|
||
|
] }
|
||
|
/>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default StateControl;
|