/** * WordPress dependencies */ import { createInterpolateElement } from '@safe-wordpress/element'; import { sprintf, _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { isEmpty, listify } from '@nab/utils'; import type { SRViewProps } from '@nab/types'; /** * Internal dependencies */ import type { Attributes } from './types'; export const View = ( { attributes: { condition, values }, }: SRViewProps< Attributes > ): JSX.Element => { const wildcard = usesWildcard( values ); if ( isEmpty( values ) ) { return ( <> { _x( 'Visitor’s IP address to be defined.', 'text', 'nelio-ab-testing' ) } ); } const list = listify( 'or', values.map( ( i ) => `${ i }` ) ); switch ( condition ) { case 'is-equal-to': const isEqualTo = wildcard ? /* translators: %s: List of IP addresses. */ _x( 'Visitor’s IP address matches %s.', 'text', 'nelio-ab-testing' ) : /* translators: %s: List of IP addresses. */ _x( 'Visitor’s IP address is %s.', 'text', 'nelio-ab-testing' ); return createInterpolateElement( sprintf( isEqualTo, list ), { strong: , } ); case 'is-not-equal-to': const isNotEqualTo = wildcard ? /* translators: %s: List of IP addresses. */ _x( 'Visitor’s IP address does not match %s.', 'text', 'nelio-ab-testing' ) : /* translators: %s: List of IP addresses. */ _x( 'Visitor’s IP address is not %s.', 'text', 'nelio-ab-testing' ); return createInterpolateElement( sprintf( isNotEqualTo, list ), { strong: , } ); } }; function usesWildcard( values: ReadonlyArray< string > ) { return values.some( ( value ) => value.includes( '*' ) ); }