/** * WordPress dependencies */ import { Button, TextControl } from '@safe-wordpress/components'; import { useSelect, useDispatch } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { isUrl } from '@nelio-content/utils'; import type { Url } from '@nelio-content/types'; /** * Internal dependencies */ import './style.scss'; import { store as NC_EDIT_POST } from '../../../store'; export const EditImage = (): JSX.Element => { const [ imageUrl, setImageUrl ] = useImageUrl(); const [ imageAlt, setImageAlt ] = useImageAlt(); const { save, cancel } = useActions(); const onKeyDown = ( ev?: unknown ) => { const fix = ( x: unknown ): x is KeyboardEvent => !! x; if ( ! fix( ev ) ) { return; } if ( 'Enter' !== ev.key ) { return; } ev.preventDefault(); void save(); }; return (
void setImageUrl( url as Url ) } onKeyDown={ onKeyDown } />
{ ' ' }
); }; // ===== // HOOKS // ===== const useImageAlt = () => { const imageAlt = useSelect( ( select ) => select( NC_EDIT_POST ).getExternalFeaturedImageAltField(), [] ); const { setExternalFeaturedImageAltField } = useDispatch( NC_EDIT_POST ); return [ imageAlt, setExternalFeaturedImageAltField ] as const; }; const useImageUrl = () => { const imageUrl = useSelect( ( select ) => select( NC_EDIT_POST ).getExternalFeaturedImageUrlField(), [] ); const { setExternalFeaturedImageUrlField } = useDispatch( NC_EDIT_POST ); return [ imageUrl, setExternalFeaturedImageUrlField ] as const; }; const useActions = () => { const [ imageAlt ] = useImageAlt(); const [ imageUrl ] = useImageUrl(); const { cancelEditionOfExternalFeaturedImage, setExternalFeaturedImage } = useDispatch( NC_EDIT_POST ); return { save: () => isUrl( imageUrl ) ? setExternalFeaturedImage( imageUrl, imageAlt ) : undefined, cancel: () => cancelEditionOfExternalFeaturedImage(), }; };