Skip to content

Commit 178a907

Browse files
authored
Merge pull request #517 from GatherPress/GP-440-1
2 parents 3edcdb2 + b090ce7 commit 178a907

File tree

10 files changed

+46
-11
lines changed

10 files changed

+46
-11
lines changed

build/blocks/events-list/block.json

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
"showVenue": true
2222
}
2323
},
24+
"datetimeFormat": {
25+
"type": "string",
26+
"default": "D, M j, Y, g:i a T"
27+
},
2428
"maxNumberOfEvents": {
2529
"type": "integer",
2630
"default": 5
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '3604abe8943f95554574');
1+
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '102d9ce24cd27f5a1b3d');

build/blocks/events-list/events-list.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<?php return array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '4fec9a94e4a16f2a0a93');
1+
<?php return array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '7d75b0853ccb1fee0c70');

build/blocks/events-list/index.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

includes/core/classes/class-rest-api.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ protected function events_list_route(): array {
232232
'required' => true,
233233
'validate_callback' => array( $this, 'validate_number' ),
234234
),
235+
'datetime_format' => array(
236+
'required' => false,
237+
),
235238
'topics' => array(
236239
'required' => false,
237240
),
@@ -520,6 +523,7 @@ public function events_list( WP_REST_Request $request ): WP_REST_Response {
520523
$params = $request->get_params();
521524
$event_list_type = $params['event_list_type'];
522525
$max_number = $this->max_number( (int) $params['max_number'], 5 );
526+
$datetime_format = ! empty( $params['datetime_format'] ) ? $params['datetime_format'] : 'D, M j, Y, g:i a T';
523527
$posts = array();
524528
$topics = array();
525529
$venues = array();
@@ -550,8 +554,8 @@ static function( $slug ): string {
550554
$venue_information = $event->get_venue_information();
551555
$posts[] = array(
552556
'ID' => $post_id,
553-
'datetime_start' => $event->get_datetime_start(),
554-
'datetime_end' => $event->get_datetime_end(),
557+
'datetime_start' => $event->get_datetime_start( $datetime_format ),
558+
'datetime_end' => $event->get_datetime_end( $datetime_format ),
555559
'permalink' => get_the_permalink( $post_id ),
556560
'title' => get_the_title( $post_id ),
557561
'excerpt' => get_the_excerpt( $post_id ),

src/blocks/events-list/block.json

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
"showVenue": true
2222
}
2323
},
24+
"datetimeFormat": {
25+
"type": "string",
26+
"default": "D, M j, Y, g:i a T"
27+
},
2428
"maxNumberOfEvents": {
2529
"type": "integer",
2630
"default": 5

src/blocks/events-list/edit.js

+15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import { includes } from 'lodash';
55
import classnames from 'classnames';
6+
import HtmlReactParser from 'html-react-parser';
67

78
/**
89
* WordPress dependencies.
@@ -188,6 +189,19 @@ const Edit = (props) => {
188189
</ButtonGroup>
189190
</PanelBody>
190191
<PanelBody>
192+
<TextControl
193+
label={__('Date & time format', 'gatherpress')}
194+
value={attributes.datetimeFormat}
195+
help={HtmlReactParser(
196+
__(
197+
'For more information read the <a href="https://wordpress.org/documentation/article/customize-date-and-time-format/">Documentation on date and time formatting</a>.',
198+
'gatherpress'
199+
)
200+
)}
201+
onChange={(newVal) =>
202+
setAttributes({ datetimeFormat: newVal })
203+
}
204+
/>
191205
<RangeControl
192206
label={__(
193207
'Maximum number of events to display',
@@ -362,6 +376,7 @@ const Edit = (props) => {
362376
<EventsList
363377
eventOptions={attributes.eventOptions}
364378
maxNumberOfEvents={attributes.maxNumberOfEvents}
379+
datetimeFormat={attributes.datetimeFormat}
365380
type={attributes.type}
366381
topics={attributes.topics}
367382
venues={attributes.venues}

src/blocks/events-list/events-list.js

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ domReady(() => {
4747
}
4848
type={attrs.type ?? 'upcoming'}
4949
maxNumberOfEvents={attrs.maxNumberOfEvents ?? 5}
50+
datetimeFormat={attrs.datetimeFormat ?? 'D, M j, Y, g:i a T'}
5051
topics={attrs.topics ?? []}
5152
/>
5253
);

src/components/EventsList.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,14 @@ import apiFetch from '@wordpress/api-fetch';
3131
* @return {JSX.Element} The rendered React component.
3232
*/
3333
const EventsList = (props) => {
34-
const { eventOptions, maxNumberOfEvents, type, topics, venues } = props;
34+
const {
35+
eventOptions,
36+
maxNumberOfEvents,
37+
datetimeFormat,
38+
type,
39+
topics,
40+
venues,
41+
} = props;
3542
const [events, setEvents] = useState([]);
3643
const [loaded, setLoaded] = useState(false);
3744
const renderEvents = events.map((event) => {
@@ -84,15 +91,15 @@ const EventsList = (props) => {
8491
*/
8592
if (getFromGlobal('is_user_logged_in')) {
8693
apiFetch({
87-
path: `/gatherpress/v1/event/events-list?event_list_type=${type}&max_number=${maxNumberOfEvents}&topics=${topicsString}&venues=${venuesString}`,
94+
path: `/gatherpress/v1/event/events-list?event_list_type=${type}&max_number=${maxNumberOfEvents}&datetime_format=${datetimeFormat}&topics=${topicsString}&venues=${venuesString}`,
8895
}).then((data) => {
8996
setLoaded(true);
9097
setEvents(data);
9198
});
9299
} else {
93100
const endpoint =
94101
getFromGlobal('event_rest_api') +
95-
`/events-list?event_list_type=${type}&max_number=${maxNumberOfEvents}&topics=${topicsString}&venues=${venuesString}`;
102+
`/events-list?event_list_type=${type}&max_number=${maxNumberOfEvents}&datetime_format=${datetimeFormat}&topics=${topicsString}&venues=${venuesString}`;
96103

97104
/**
98105
* Not using apiFetch helper here as it will use X-Wp-Nonce and cache it when page caching is on causing a 403.
@@ -108,7 +115,7 @@ const EventsList = (props) => {
108115
setEvents(data);
109116
});
110117
}
111-
}, [setEvents, maxNumberOfEvents, type, topics, venues]);
118+
}, [setEvents, maxNumberOfEvents, datetimeFormat, type, topics, venues]);
112119

113120
return (
114121
<div className={`gp-${type}-events-list`}>

0 commit comments

Comments
 (0)