PluginProbe ʕ •ᴥ•ʔ
GenerateBlocks / 2.0.0
GenerateBlocks v2.0.0
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 / components / DateQueryControl.jsx
generateblocks / src / blocks / query / components Last commit date
AddQueryParameterButton.jsx 1 year ago BlockSettings.jsx 1 year ago ControlBuilder.jsx 1 year ago DateQueryControl.jsx 1 year ago DateTimeControl.jsx 1 year ago ParameterControl.jsx 1 year ago ParameterList.jsx 1 year ago QueryInspectorControls.jsx 1 year ago SelectQueryParameter.jsx 1 year ago TaxonomyParameterControl.jsx 1 year ago editor.scss 1 year ago
DateQueryControl.jsx
114 lines
1 import { __ } from '@wordpress/i18n';
2 import { useState, useCallback } from '@wordpress/element';
3 import { BaseControl, ToggleControl } from '@wordpress/components';
4
5 import { Stack } from '@edge22/components';
6
7 import { DateTimeControl } from './DateTimeControl';
8
9 export function DateQueryControl( { id, value, onChange } ) {
10 const [ dateQuery, setDateQuery ] = useState( value );
11 const { before = '', after = '' } = dateQuery;
12 // Default to include before if both are unset
13 const [ includeBefore, setIncludeBefore ] = useState( ( ! before && ! after ) ? true : !! before );
14 const [ includeAfter, setIncludeAfter ] = useState( !! after );
15 const beforeDateTimeStamp = new Date(
16 'string' === typeof before
17 ? before
18 : `${ before.month }/${ before.day }/${ before.year } ${ before.hour }:${ before.minute }:${ before.second }`
19 );
20 const afterDateTimeStamp = new Date(
21 'string' === typeof after
22 ? after
23 : `${ after.month }/${ after.day }/${ after.year } ${ after.hour }:${ after.minute }:${ after.second }`
24 );
25
26 const onBeforeChange = useCallback( function onBeforeChange( newValue ) {
27 const newDateQuery = {
28 ...dateQuery,
29 };
30
31 if ( newValue ) {
32 newDateQuery.before = newValue;
33 } else {
34 delete newDateQuery.before;
35 }
36
37 setDateQuery( newDateQuery );
38
39 if ( onChange ) {
40 onChange( newDateQuery );
41 }
42 }, [ setDateQuery, onChange ] );
43
44 const onAfterChange = useCallback( function onAfterChange( newValue ) {
45 const newDateQuery = {
46 ...dateQuery,
47 };
48
49 if ( newValue ) {
50 newDateQuery.after = newValue;
51 } else {
52 delete newDateQuery.after;
53 }
54
55 setDateQuery( newDateQuery );
56
57 if ( onChange ) {
58 onChange( newDateQuery );
59 }
60 }, [ setDateQuery, onChange ] );
61
62 return (
63 <BaseControl
64 id="gblocks-date-query"
65 label={ __( 'Date Query', 'generateblocks' ) }
66 className="gb-date-query"
67 __nextHasNoMarginBottom
68 >
69 <Stack gap="12px" className="gb-date-query__inner">
70 <ToggleControl
71 label={ __( 'Before', 'generateblocks' ) }
72 onChange={ () => {
73 const newIncludeBefore = ! includeBefore;
74 setIncludeBefore( newIncludeBefore );
75
76 // If the new value is false, clear the before value.
77 onBeforeChange( newIncludeBefore ? new Date() : '' );
78 } }
79 checked={ includeBefore }
80 />
81 { includeBefore && (
82 <DateTimeControl
83 id={ `${ id }-before` }
84 label={ __( 'Before', 'generateblocks' ) }
85 help={ __( 'Limit response to posts published before a given date.', 'generateblocks' ) }
86 value={ beforeDateTimeStamp }
87 onChange={ onBeforeChange }
88 />
89 ) }
90 <ToggleControl
91 label={ __( 'After', 'generateblocks' ) }
92 onChange={ () => {
93 const newIncludeAfter = ! includeAfter;
94 setIncludeAfter( newIncludeAfter );
95
96 // If the new value is false, clear the after value.
97 onAfterChange( newIncludeAfter ? new Date() : '' );
98 } }
99 checked={ includeAfter }
100 />
101 { includeAfter && (
102 <DateTimeControl
103 id={ `${ id }-after` }
104 label={ __( 'After', 'generateblocks' ) }
105 help={ __( 'Limit response to posts published after a given date.', 'generateblocks' ) }
106 value={ afterDateTimeStamp }
107 onChange={ onAfterChange }
108 />
109 ) }
110 </Stack>
111 </BaseControl>
112 );
113 }
114