/** * WordPress dependencies */ import { createInterpolateElement } from '@safe-wordpress/element'; import { sprintf, _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { trim } from 'lodash'; import { isEmpty, listify } from '@nab/utils'; import type { SRViewProps } from '@nab/types'; /** * Internal dependencies */ import type { Attributes } from './types'; export const View = ( { attributes: { name, condition, value: originalValue }, }: SRViewProps< Attributes > ): JSX.Element => { if ( isEmpty( name ) ) { return ( <> { _x( 'URL parameter to be defined.', 'text', 'nelio-ab-testing' ) } ); } if ( condition === 'exists' ) { return createInterpolateElement( sprintf( /* translators: %s: Parameter name. */ _x( 'URL parameter %s exists.', 'text', 'nelio-ab-testing' ), `${ name }` ), { code: } ); } if ( condition === 'does-not-exist' ) { return createInterpolateElement( sprintf( /* translators: %s: Parameter name. */ _x( 'URL parameter %s does not exist.', 'text', 'nelio-ab-testing' ), `${ name }` ), { code: } ); } const value = originalValue .split( '\n' ) .map( ( v ) => trim( v ) ) .filter( ( v ) => !! v ) .join( '\n' ); if ( isEmpty( value ) ) { return ( <> { _x( 'URL parameter’s value to be defined.', 'text', 'nelio-ab-testing' ) } ); } switch ( condition ) { case 'is-equal-to': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: Text value. */ _x( 'URL parameter %1$s is equal to %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, `${ value }` ), { code: } ); case 'is-not-equal-to': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: Text value. */ _x( 'URL parameter %1$s is not equal to %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, `${ value }` ), { code: } ); case 'contains': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: Text value. */ _x( 'URL parameter %1$s contains %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, `${ value }` ), { code: } ); case 'does-not-contain': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: List of parameter values. */ _x( 'URL parameter %1$s does not contain %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, `${ value }` ), { code: } ); case 'is-any-of': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: List of parameter values. */ _x( 'URL parameter %1$s is %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, makeList( value ) ), { code: } ); case 'is-none-of': return createInterpolateElement( sprintf( /* translators: %1$s: Parameter name. %2$s: Text value. */ _x( 'URL parameter %1$s is not %2$s.', 'text', 'nelio-ab-testing' ), `${ name }`, makeList( value ) ), { code: } ); } }; // ======= // HELPERS // ======= const makeList = ( value: string ): string => listify( 'or', value .split( '\n' ) .map( ( v ) => trim( v ) ) .filter( ( v ) => !! v ) .map( ( v ) => `${ v }` ) );