-
Notifications
You must be signed in to change notification settings - Fork 4.1k
/
edit.js
55 lines (54 loc) · 1.46 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
/**
* WordPress dependencies
*/
import { useEntityProp, useEntitySaving } 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 [ content, setContent ] = useEntityProp( 'postType', 'post', 'content' );
const initialBlocks = useMemo( () => {
const parsedContent = parse( content );
return parsedContent.length ? parsedContent : undefined;
}, [] );
const [ blocks = initialBlocks, setBlocks ] = useEntityProp(
'postType',
'post',
'blocks'
);
const [ isDirty, isSaving, save ] = useEntitySaving(
'postType',
'post',
'content'
);
return (
<>
<Button
isPrimary
className="wp-block-custom-entity__save-button"
disabled={ ! isDirty || ! content }
isBusy={ isSaving }
onClick={ useCallback( () => {
setContent( content( { blocks } ) );
save();
}, [ content, blocks ] ) }
>
{ __( 'Update' ) }
</Button>
<div className="entry-content">
<InnerBlocks
value={ blocks }
onChange={ setBlocks }
onInput={ useCallback( () => {
setContent( ( { blocks: blocksForSerialization = [] } ) =>
serializeBlocks( blocksForSerialization )
);
}, [] ) }
/>
</div>
</>
);
}