import React from 'react'; import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { NUMERIC_OPERATIONS, STRING_OPERATIONS, } from '../../audiences/data/constants'; import { defaultAudience } from '../../audiences/data/defaults'; import { Group, Operator } from '../../audiences/types'; import { Filter } from '../../utils/admin'; import './Header.css'; type FilterItemProps = { operator: Operator, title: string, value: string, onRemove(): void, } const FilterItem = ( props: FilterItemProps ) => { return ( { props.title } { ' ' } { NUMERIC_OPERATIONS[ props.operator ] || STRING_OPERATIONS[ props.operator ] || props.operator } { ' ' } { props.value } ); }; type GroupSummaryProps = { definitions: FieldSetting[], group: Group, }; function GroupSummary( props: GroupSummaryProps ) { const { definitions, group } = props; const label = ( id: string ) => definitions.find( d => d.name === id )?.label || id; return ( <> { group.groups?.filter( g => !! g.rules || !! g.groups ).map( ( group, i ) => ( { i > 0 && ( group.include === 'any' ? ' or ' : ' and ' ) } ) ) } { group.rules?.filter( r => !! r.field ).map( ( rule, i ) => ( { i > 0 && ( group.include === 'any' ? ' or ' : ' and ' ) } {} } /> ) ) } ); } interface FieldSetting { name: string, type: 'string' | 'number', label: string, options: any, data?: { label: string, value: string, }[], } export default function FilterSummary( props: { filter: Filter } ) { const { filter } = props; // @ts-ignore const definitions: FieldSetting[] = useSelect( select => select( 'audience' )?.getFields() || [], [] ); if ( ( ! filter.path && ! filter.audience ) || filter?.audience === defaultAudience ) { return <>{ __( 'All traffic', 'altis' ) }; } // If a named audience is selected, show its name if ( filter.audienceName ) { return ( <> { filter.path && ( <> {} } /> { ' and ' } ) } { filter.audienceName } ); } return ( <> { filter.path && ( {} } /> ) } { filter.path && filter.audience && ' and ' } { filter.audience && ( ) } ); }