/** * WordPress dependencies */ import { Button, TextControl } from '@safe-wordpress/components'; import { useSelect, useDispatch } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; import { isURL } from '@safe-wordpress/url'; /** * External dependencies */ import { store as NC_DATA } from '@nelio-content/data'; import { isEmpty, isUrl } from '@nelio-content/utils'; /** * Internal dependencies */ import './style.scss'; import { store as NC_EDIT_POST } from '../../../store'; const ENTER_KEY = 13; export const ReferenceCreator = (): JSX.Element => { const [ url, setUrl ] = useUrl(); const suggest = useSuggest(); const isCurrentUserAuthor = useIsCurrentUserAuthor(); const isUrlValid = ! isEmpty( url ) && isURL( url ); return (
{ if ( ENTER_KEY !== ev.keyCode ) { return; } ev.preventDefault(); if ( ! isUrlValid ) { return; } suggest(); } } />
); }; // ===== // HOOKS // ===== const useUrl = (): [ string, ( url: string ) => void ] => { const url = useSelect( ( select ) => select( NC_EDIT_POST ).getSuggestedReferenceUrl(), [] ); const { setSuggestedReferenceUrl } = useDispatch( NC_EDIT_POST ); return [ url, setSuggestedReferenceUrl ]; }; const useSuggest = () => { const [ url, setUrl ] = useUrl(); const { suggestReference } = useDispatch( NC_EDIT_POST ); return () => { if ( isUrl( url ) ) { void suggestReference( url ); } setUrl( '' ); }; }; const useIsCurrentUserAuthor = () => useSelect( ( select ) => select( NC_DATA ).getCurrentUserId() === select( NC_EDIT_POST ).getAuthorId(), [] );