-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
edit.js
62 lines (61 loc) · 1.68 KB
/
edit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* WordPress dependencies
*/
import {
useEntityId,
useEntityProp,
__experimentalUseEntitySaving,
} from '@wordpress/core-data';
import { useMemo, useCallback } from '@wordpress/element';
import { parse } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { InnerBlocks } from '@wordpress/block-editor';
import { serializeBlocks } from '@wordpress/editor';
export default function PostContentEdit() {
const postId = useEntityId( 'postType', 'post' );
const [ content, _setContent ] = useEntityProp( 'postType', 'post', 'content' );
const initialBlocks = useMemo( () => {
if ( postId && typeof content !== 'function' ) {
const parsedContent = parse( content );
return parsedContent.length ? parsedContent : undefined;
}
}, [] );
const [ blocks = initialBlocks, setBlocks ] = useEntityProp(
'postType',
'post',
'blocks'
);
const [ isDirty, isSaving, save ] = __experimentalUseEntitySaving(
'postType',
'post',
'content'
);
const saveContent = useCallback( () => {
_setContent( content( { blocks } ) );
save();
}, [ content, blocks ] );
const setContent = useCallback( () => {
_setContent( ( { blocks: blocksForSerialization = [] } ) =>
serializeBlocks( blocksForSerialization )
);
}, [] );
return postId ? (
<>
<Button
isPrimary
className="wp-block-custom-entity__save-button"
disabled={ ! isDirty || ! content }
isBusy={ isSaving }
onClick={ saveContent }
>
{ __( 'Update' ) }
</Button>
<div className="entry-content">
<InnerBlocks value={ blocks } onChange={ setBlocks } onInput={ setContent } />
</div>
</>
) : (
'Post Content Placeholder'
);
}