diff --git a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json index 6911fa56..1c4de72e 100644 --- a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json +++ b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json @@ -12,6 +12,10 @@ "heading": { "type": "string", "default": "Featured" + }, + "featuredExpertId": { + "type": "number", + "default": 0 } }, "supports": { diff --git a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js index 63db88f0..27b810b0 100644 --- a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js +++ b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js @@ -4,14 +4,47 @@ * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/ */ import { __ } from '@wordpress/i18n'; -import { useBlockProps, RichText } from '@wordpress/block-editor'; +import { useBlockProps, RichText, InspectorControls } from '@wordpress/block-editor'; +import { PanelBody, SelectControl, Spinner } from '@wordpress/components'; +import { useSelect } from '@wordpress/data'; +import { store as coreStore } from '@wordpress/core-data'; import './editor.scss'; export default function Edit( { attributes, setAttributes } ) { - const { heading } = attributes; + const { heading, featuredExpertId } = attributes; + + const { experts, hasResolvedExperts } = useSelect( ( select ) => { + const query = { per_page: -1, status: 'publish', orderby: 'title', order: 'asc' }; + return { + experts: select( coreStore ).getEntityRecords( 'postType', 'experts', query ), + hasResolvedExperts: select( coreStore ).hasFinishedResolution( 'getEntityRecords', [ 'postType', 'experts', query ] ), + }; + }, [] ); + + const expertOptions = [ + { label: __( 'Select an expert…', 'mitlib-blocks' ), value: 0 }, + ...( experts || [] ).map( ( expert ) => ( { + label: expert.title.rendered, + value: expert.id, + } ) ), + ]; return (
+ + + { hasResolvedExperts ? ( + setAttributes( { featuredExpertId: Number( value ) } ) } + /> + ) : ( + + ) } + + post_type && 'publish' === $maybe_expert->post_status ) { + $featured_expert = $maybe_expert; + } +} + +// Fallback used when no librarian has been selected in the block editor. +$default_expert = array( + 'name' => 'Alejandro Paz', + 'first_name' => 'Alejandro', + 'url' => 'https://libguides.mit.edu/profiles/apaz', + 'image' => 'https://libapps.s3.amazonaws.com/accounts/349/images/apaz-100x100.jpg', + 'excerpt' => 'Librarian for Energy and Environment', +); + +// If we have a valid expert, use those values. If not, use the fallback values. +if ( $featured_expert ) { + $expert_name = get_the_title( $featured_expert ); + $expert_first_name = strtok( $expert_name, ' ' ); + $expert_url = get_post_meta( $featured_expert->ID, 'expert_url', true ); + $expert_image = get_the_post_thumbnail_url( $featured_expert, 'thumbnail' ); + $expert_excerpt = get_the_excerpt( $featured_expert ); +} else { + $expert_name = $default_expert['name']; + $expert_first_name = $default_expert['first_name']; + $expert_url = $default_expert['url']; + $expert_image = $default_expert['image']; + $expert_excerpt = $default_expert['excerpt']; +} + +// Generate the strings for alt text and help link text +$expert_alt_text = "Headshot of " . $expert_name; +$expert_help_link_text = "How can " . $expert_first_name . " help you?"; + ?>