schlechtenburg/packages/rich-text/lib/join.ts

35 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-10-08 07:15:26 +00:00
/**
* 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,
} ) )
);
}