Skip to content

Commit 98a1b96

Browse files
fix: fixing and exporting mergeMessages() (#550)
1 parent a0a2d0d commit 98a1b96

3 files changed

Lines changed: 76 additions & 4 deletions

File tree

src/i18n/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ export {
104104
getMessages,
105105
isRtl,
106106
handleRtl,
107+
mergeMessages,
107108
LOCALE_CHANGED,
108109
LOCALE_TOPIC,
109110
} from './lib';

src/i18n/lib.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,15 @@ const optionsShape = {
236236
/**
237237
*
238238
*
239-
* @param {Array} [messagesArray=[]]
239+
* @param {Object} newMessages
240240
* @returns {Object}
241241
* @memberof module:Internationalization
242242
*/
243-
export function mergeMessages(messagesArray = []) {
244-
return Array.isArray(messagesArray) ? merge({}, ...messagesArray) : {};
243+
export function mergeMessages(newMessages) {
244+
const msgs = Array.isArray(newMessages) ? merge({}, ...newMessages) : newMessages;
245+
messages = merge(messages, msgs);
246+
247+
return messages;
245248
}
246249

247250
/**
@@ -262,7 +265,7 @@ export function configure(options) {
262265
loggingService = options.loggingService;
263266
// eslint-disable-next-line prefer-destructuring
264267
config = options.config;
265-
messages = Array.isArray(options.messages) ? mergeMessages(options.messages) : options.messages;
268+
messages = Array.isArray(options.messages) ? merge({}, ...options.messages) : options.messages;
266269

267270
if (config.ENVIRONMENT !== 'production') {
268271
Object.keys(messages).forEach((key) => {

src/i18n/lib.test.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,58 @@ describe('lib', () => {
250250
});
251251

252252
describe('mergeMessages', () => {
253+
it('should merge objects', () => {
254+
configure({
255+
loggingService: { logError: jest.fn() },
256+
config: {
257+
ENVIRONMENT: 'production',
258+
LANGUAGE_PREFERENCE_COOKIE_NAME: 'yum',
259+
},
260+
messages: {
261+
ar: { message: 'ar-hah' },
262+
},
263+
});
264+
const result = mergeMessages({ en: { foo: 'bar' }, de: { buh: 'baz' }, jp: { gah: 'wut' } });
265+
expect(result).toEqual({
266+
ar: { message: 'ar-hah' },
267+
en: { foo: 'bar' },
268+
de: { buh: 'baz' },
269+
jp: { gah: 'wut' },
270+
});
271+
});
272+
253273
it('should merge objects from an array', () => {
274+
configure({
275+
loggingService: { logError: jest.fn() },
276+
config: {
277+
ENVIRONMENT: 'production',
278+
LANGUAGE_PREFERENCE_COOKIE_NAME: 'yum',
279+
},
280+
messages: {
281+
ar: { message: 'ar-hah' },
282+
},
283+
});
254284
const result = mergeMessages([{ foo: 'bar' }, { buh: 'baz' }, { gah: 'wut' }]);
255285
expect(result).toEqual({
286+
ar: { message: 'ar-hah' },
256287
foo: 'bar',
257288
buh: 'baz',
258289
gah: 'wut',
259290
});
260291
});
261292

262293
it('should merge nested objects from an array', () => {
294+
configure({
295+
loggingService: { logError: jest.fn() },
296+
config: {
297+
ENVIRONMENT: 'production',
298+
LANGUAGE_PREFERENCE_COOKIE_NAME: 'yum',
299+
},
300+
messages: {
301+
en: { init: 'initial' },
302+
es: { init: 'inicial' },
303+
},
304+
});
263305
const messages = [
264306
{
265307
en: { hello: 'hello' },
@@ -274,19 +316,45 @@ describe('mergeMessages', () => {
274316
const result = mergeMessages(messages);
275317
expect(result).toEqual({
276318
en: {
319+
init: 'initial',
277320
hello: 'hello',
278321
goodbye: 'goodbye',
279322
},
280323
es: {
324+
init: 'inicial',
281325
hello: 'hola',
282326
goodbye: 'adiós',
283327
},
284328
});
285329
});
286330

287331
it('should return an empty object if no messages', () => {
332+
configure({
333+
loggingService: { logError: jest.fn() },
334+
config: {
335+
ENVIRONMENT: 'production',
336+
LANGUAGE_PREFERENCE_COOKIE_NAME: 'yum',
337+
},
338+
messages: {},
339+
});
288340
expect(mergeMessages(undefined)).toEqual({});
289341
expect(mergeMessages(null)).toEqual({});
290342
expect(mergeMessages([])).toEqual({});
343+
expect(mergeMessages({})).toEqual({});
344+
});
345+
346+
it('should return the original object if no messages', () => {
347+
configure({
348+
loggingService: { logError: jest.fn() },
349+
config: {
350+
ENVIRONMENT: 'production',
351+
LANGUAGE_PREFERENCE_COOKIE_NAME: 'yum',
352+
},
353+
messages: { en: { hello: 'world ' } },
354+
});
355+
expect(mergeMessages(undefined)).toEqual({ en: { hello: 'world ' } });
356+
expect(mergeMessages(null)).toEqual({ en: { hello: 'world ' } });
357+
expect(mergeMessages([])).toEqual({ en: { hello: 'world ' } });
358+
expect(mergeMessages({})).toEqual({ en: { hello: 'world ' } });
291359
});
292360
});

0 commit comments

Comments
 (0)