PluginProbe ʕ •ᴥ•ʔ
GenerateBlocks / 1.5.3
GenerateBlocks v1.5.3
trunk 1.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.3.0
generateblocks / src / blocks / query-loop / components / QueryLoopRenderer.js
generateblocks / src / blocks / query-loop / components Last commit date
inspector-controls 3 years ago BlockControls.js 4 years ago InspectorControls.js 3 years ago LayoutSelector.js 4 years ago LoopRenderer.js 3 years ago QueryLoopRenderer.js 4 years ago utils.js 3 years ago
QueryLoopRenderer.js
48 lines
1 import { useMemo } from '@wordpress/element';
2 import { useSelect } from '@wordpress/data';
3 import LoopRenderer from './LoopRenderer';
4 import { normalizeRepeatableArgs, removeEmpty } from './utils';
5 import { store as coreStore } from '@wordpress/core-data';
6
7 export default function QueryLoopRenderer( props ) {
8 const { clientId, context } = props;
9 const query = context[ 'generateblocks/query' ] || {};
10
11 const normalizedQuery = useMemo( () => {
12 return normalizeRepeatableArgs( removeEmpty( query ) );
13 }, [ JSON.stringify( query ) ] );
14
15 const { data, isResolvingData, hasResolvedData } = useSelect( ( select ) => {
16 const {
17 getEntityRecords,
18 isResolving,
19 hasFinishedResolution,
20 } = select( coreStore );
21
22 const queryParams = [ 'postType', query.post_type || 'post', normalizedQuery ];
23
24 return {
25 data: getEntityRecords( ...queryParams ),
26 isResolvingData: isResolving( 'getEntityRecords', queryParams ),
27 hasResolvedData: hasFinishedResolution( 'getEntityRecords', queryParams ),
28 };
29 }, [ JSON.stringify( normalizedQuery ) ] );
30
31 return (
32 <div className="gb-post-template-wrapper">
33 <LoopRenderer
34 data={ data }
35 hasData={ !! ( hasResolvedData && data?.length ) }
36 isResolvingData={ isResolvingData }
37 hasResolvedData={ hasResolvedData }
38 templateLock={ true }
39 clientId={ clientId }
40 contextCallback={ ( post ) => ( {
41 postType: post.type,
42 postId: post.id,
43 } ) }
44 />
45 </div>
46 );
47 }
48