/** * WordPress dependencies. */ const { blockEditor: { InspectorControls, BlockControls, }, components: { Placeholder, PanelBody, SelectControl, ToggleControl, Button, Dashicon, Tooltip, ToolbarGroup, RangeControl, }, element: { createElement, Fragment, useState, }, i18n: { __, sprintf, }, apiFetch, url: { addQueryArgs, }, } = wp; /** * BuddyPress dependencies. */ const { blockComponents: { AutoCompleter, }, blockData: { isActive, } } = bp; /** * Internal dependencies. */ import { AVATAR_SIZES, EXTRA_DATA } from './constants'; /** * External dependencies. */ const { reject, remove, sortBy, } = lodash; const getSlugValue = ( item ) => { if ( item && item.mention_name ) { return item.mention_name; } return null; } const editMembersBlock = ( { attributes, setAttributes, isSelected } ) => { const isAvatarEnabled = isActive( 'members', 'avatar' ); const isMentionEnabled = isActive( 'activity', 'mentions' ); const { itemIDs, avatarSize, displayMentionSlug, displayUserName, extraData, layoutPreference, columns, } = attributes; const hasMembers = 0 !== itemIDs.length; const [ members, setMembers ] = useState( [] ); const layoutControls = [ { icon: 'text', title: __( 'List view', 'buddypress' ), onClick: () => setAttributes( { layoutPreference: 'list' } ), isActive: layoutPreference === 'list', }, { icon: 'screenoptions', title: __( 'Grid view', 'buddypress' ), onClick: () => setAttributes( { layoutPreference: 'grid' } ), isActive: layoutPreference === 'grid', }, ]; let membersList; let containerClasses = 'bp-block-members avatar-' + avatarSize; let extraDataOptions = EXTRA_DATA; if ( layoutPreference === 'grid' ) { containerClasses += ' is-grid columns-' + columns; extraDataOptions = EXTRA_DATA.filter( ( extra ) => { return 'latest_update' !== extra.value; } ); } const onSelectedMember = ( { itemID } ) => { if ( itemID && -1 === itemIDs.indexOf( itemID ) ) { setAttributes( { itemIDs: [...itemIDs, parseInt( itemID, 10 ) ] } ); } }; const onRemoveMember = ( ( itemID ) => { if ( itemID && -1 !== itemIDs.indexOf( itemID ) ) { setMembers( reject( members, ['id', itemID ] ) ); setAttributes( { itemIDs: remove( itemIDs, ( value ) => { return value !== itemID } ) } ); } } ); if ( hasMembers && itemIDs.length !== members.length ) { apiFetch( { path: addQueryArgs( `/buddypress/v1/members`, { populate_extras: true, include: itemIDs } ), } ).then( items => { setMembers( sortBy( items, [ ( item ) => { return itemIDs.indexOf( item.id ); } ] ) ); } ) } if ( members.length ) { membersList = members.map( ( member ) => { let hasActivity = false; let memberItemClasses = 'member-content'; if ( layoutPreference === 'list' && 'latest_update' === extraData && member.latest_update && member.latest_update.rendered ) { hasActivity = true; memberItemClasses = 'member-content has-activity'; } return (
{ isSelected && ( ) } { isAvatarEnabled && 'none' !== avatarSize && (
{
) }
{ hasActivity && (
{ displayUserName && ( { member.name } ) }   { isMentionEnabled && displayMentionSlug && ( (@{ member.mention_name }) ) }
) } { ! hasActivity && displayUserName && ( { member.name } ) } { ! hasActivity && isMentionEnabled && displayMentionSlug && ( @{ member.mention_name } ) } { 'last_activity' === extraData && member.last_activity && member.last_activity.date && ( ) }
); } ); } return ( { setAttributes( { displayUserName: ! displayUserName } ); } } help={ displayUserName ? __( 'Include the user\'s display name.', 'buddypress' ) : __( 'Toggle to include user\'s display name.', 'buddypress' ) } /> { isMentionEnabled && ( { setAttributes( { displayMentionSlug: ! displayMentionSlug } ); } } help={ displayMentionSlug ? __( 'Include the user\'s mention name under their display name.', 'buddypress' ) : __( 'Toggle to display the user\'s mention name under their display name.', 'buddypress' ) } /> ) } { isAvatarEnabled && ( { setAttributes( { avatarSize: option } ); } } /> ) } { setAttributes( { extraData: option } ); } } /> { layoutPreference === 'grid' && ( setAttributes( { columns: value } ) } min={ 2 } max={ 4 } required /> ) } { hasMembers && (
{ membersList }
) } { ( isSelected || 0 === itemIDs.length ) && ( ) }
); }; export default editMembersBlock;