-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
entity-provider.js
41 lines (39 loc) · 1.01 KB
/
entity-provider.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
/**
* WordPress dependencies
*/
import { useContext, useMemo } from '@wordpress/element';
/**
* Internal dependencies
*/
import { EntityContext } from './entity-context';
/**
* Context provider component for providing
* an entity for a specific entity.
*
* @param {Object} props The component's props.
* @param {string} props.kind The entity kind.
* @param {string} props.type The entity name.
* @param {number} props.id The entity ID.
* @param {*} props.children The children to wrap.
*
* @return {Object} The provided children, wrapped with
* the entity's context provider.
*/
export default function EntityProvider( { kind, type: name, id, children } ) {
const parent = useContext( EntityContext );
const childContext = useMemo(
() => ( {
...parent,
[ kind ]: {
...parent?.[ kind ],
[ name ]: id,
},
} ),
[ parent, kind, name, id ]
);
return (
<EntityContext.Provider value={ childContext }>
{ children }
</EntityContext.Provider>
);
}