Add search for filtering Personalization Tags by query
[MAILPOET-6354]
This commit is contained in:
@ -1,5 +1,11 @@
|
|||||||
import * as React from '@wordpress/element';
|
import * as React from '@wordpress/element';
|
||||||
import { Modal, Button, MenuGroup, MenuItem } from '@wordpress/components';
|
import {
|
||||||
|
Modal,
|
||||||
|
Button,
|
||||||
|
MenuGroup,
|
||||||
|
MenuItem,
|
||||||
|
SearchControl,
|
||||||
|
} from '@wordpress/components';
|
||||||
import { __ } from '@wordpress/i18n';
|
import { __ } from '@wordpress/i18n';
|
||||||
import { PersonalizationTag, storeName } from '../../store';
|
import { PersonalizationTag, storeName } from '../../store';
|
||||||
import { useDispatch, useSelect } from '@wordpress/data';
|
import { useDispatch, useSelect } from '@wordpress/data';
|
||||||
@ -9,6 +15,7 @@ import { useState } from '@wordpress/element';
|
|||||||
|
|
||||||
const PersonalizationTagsModal = () => {
|
const PersonalizationTagsModal = () => {
|
||||||
const [ activeCategory, setActiveCategory ] = useState( null );
|
const [ activeCategory, setActiveCategory ] = useState( null );
|
||||||
|
const [ searchQuery, setSearchQuery ] = useState( '' );
|
||||||
|
|
||||||
const { togglePersonalizationTagsModal } = useDispatch( storeName );
|
const { togglePersonalizationTagsModal } = useDispatch( storeName );
|
||||||
|
|
||||||
@ -23,11 +30,18 @@ const PersonalizationTagsModal = () => {
|
|||||||
|
|
||||||
const groupedTags: Record< string, PersonalizationTag[] > = list.reduce(
|
const groupedTags: Record< string, PersonalizationTag[] > = list.reduce(
|
||||||
( groups, item ) => {
|
( groups, item ) => {
|
||||||
const { category } = item;
|
const { category, name, token } = item;
|
||||||
|
|
||||||
|
if (
|
||||||
|
! searchQuery ||
|
||||||
|
name.toLowerCase().includes( searchQuery.toLowerCase() ) ||
|
||||||
|
token.toLowerCase().includes( searchQuery.toLowerCase() )
|
||||||
|
) {
|
||||||
if ( ! groups[ category ] ) {
|
if ( ! groups[ category ] ) {
|
||||||
groups[ category ] = [];
|
groups[ category ] = [];
|
||||||
}
|
}
|
||||||
groups[ category ].push( item );
|
groups[ category ].push( item );
|
||||||
|
}
|
||||||
return groups;
|
return groups;
|
||||||
},
|
},
|
||||||
{} as Record< string, PersonalizationTag[] >
|
{} as Record< string, PersonalizationTag[] >
|
||||||
@ -46,10 +60,13 @@ const PersonalizationTagsModal = () => {
|
|||||||
className="mailpoet-personalization-tags-modal"
|
className="mailpoet-personalization-tags-modal"
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
Insert shortcodes to dynamically fill in information and
|
{ __(
|
||||||
personalize your emails. Learn more{ ' ' }
|
'Insert shortcodes to dynamically fill in information and personalize your emails. Learn more',
|
||||||
|
'mailpoet'
|
||||||
|
) }{ ' ' }
|
||||||
<Icon icon={ external } size={ 16 } />
|
<Icon icon={ external } size={ 16 } />
|
||||||
</p>
|
</p>
|
||||||
|
<SearchControl onChange={ setSearchQuery } value={ searchQuery } />
|
||||||
<MenuGroup className="mailpoet-personalization-tags-modal__menu">
|
<MenuGroup className="mailpoet-personalization-tags-modal__menu">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={ () => setActiveCategory( null ) }
|
onClick={ () => setActiveCategory( null ) }
|
||||||
|
Reference in New Issue
Block a user