35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
/**
|
|
* Internal dependencies
|
|
*/
|
|
|
|
import { create } from './create';
|
|
import { normaliseFormats } from './normalise-formats';
|
|
import { RichTextValue } from './types';
|
|
|
|
/**
|
|
* Combine an array of Rich Text values into one, optionally separated by
|
|
* `separator`, which can be a Rich Text value, HTML string, or plain text
|
|
* string. This is similar to `Array.prototype.join`.
|
|
*
|
|
* @param {Array<RichTextValue>} values An array of values to join.
|
|
* @param {string|RichTextValue} [separator] Separator string or value.
|
|
*
|
|
* @return {RichTextValue} A new combined value.
|
|
*/
|
|
export function join( values: RichTextValue[], separator: RichTextValue|string = '' ): RichTextValue {
|
|
if ( typeof separator === 'string' ) {
|
|
separator = create( { text: separator } );
|
|
}
|
|
|
|
return normaliseFormats(
|
|
values.reduce( ( accumlator, { formats, replacements, text } ) => ( {
|
|
formats: accumlator.formats.concat( separator.formats, formats ),
|
|
replacements: accumlator.replacements.concat(
|
|
separator.replacements,
|
|
replacements
|
|
),
|
|
text: accumlator.text + separator.text + text,
|
|
} ) )
|
|
);
|
|
}
|