@capillarytech/creatives-library 7.12.3 → 7.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "7.12.3",
4
+ "version": "7.12.5",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -726,40 +726,38 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
726
726
  }
727
727
  {
728
728
  channel?.toUpperCase() === RCS && (
729
- <>
730
- <div className='shell-v2 align-center'>
731
- <CapImage
732
- className='preview-image'
733
- src={smsMobileAndroid}
734
- alt={formatMessage(messages.previewGenerated)}
735
- />
736
- <div className='msg-container sms'>
737
- <div className='message-pop sms'>
738
- {rcsImageSrc && (
739
- <CapImage
740
- src={rcsImageSrc}
741
- className='rcs-image'
742
- alt={formatMessage(messages.previewGenerated)}
743
- />
744
- )}
745
- {rcsTitle && (
746
- <CapLabel
747
- type="label5"
748
- className='message-pop-item align-left rcs-content'
749
- fontWeight='bold'
750
- >
751
- {rcsTitle}
752
- </CapLabel>
753
- )}
754
- {rcsDesc && (
755
- <CapLabel type="label5" className='message-pop-item align-left rcs-content rcs-desc'>
756
- {rcsDesc}
757
- </CapLabel>
758
- )}
759
- </div>
729
+ <div className='shell-v2 align-center'>
730
+ <CapImage
731
+ className='preview-image'
732
+ src={smsMobileAndroid}
733
+ alt={formatMessage(messages.previewGenerated)}
734
+ />
735
+ <div className='msg-container sms'>
736
+ <div className='message-pop sms'>
737
+ {rcsImageSrc && (
738
+ <CapImage
739
+ src={rcsImageSrc}
740
+ className='rcs-image'
741
+ alt={formatMessage(messages.previewGenerated)}
742
+ />
743
+ )}
744
+ {rcsTitle && (
745
+ <CapLabel
746
+ type="label5"
747
+ className='message-pop-item align-left rcs-content'
748
+ fontWeight='bold'
749
+ >
750
+ {rcsTitle}
751
+ </CapLabel>
752
+ )}
753
+ {rcsDesc && (
754
+ <CapLabel type="label5" className='message-pop-item align-left rcs-content rcs-desc'>
755
+ {rcsDesc}
756
+ </CapLabel>
757
+ )}
760
758
  </div>
761
759
  </div>
762
- </>
760
+ </div>
763
761
  )
764
762
  }
765
763
  {channel && channel.toLowerCase() === FACEBOOK && (
@@ -339,7 +339,7 @@ export function SlideBoxContent(props) {
339
339
  }
340
340
  case constants.RCS: {
341
341
  const template = cloneDeep(templateDataObject);
342
- const { description = "", media: {mediaUrl = ""}, title} = get(template, 'versions.base.content.RCS.cardContent[0]', {});
342
+ const { description = "", media: { mediaUrl = "" } = {}, title = "" } = get(template, 'versions.base.content.RCS.cardContent[0]', {});
343
343
  return {
344
344
  rcsPreviewContent: {
345
345
  rcsImageSrc: mediaUrl,
@@ -7,6 +7,7 @@ import moment from 'moment';
7
7
  import PropTypes from 'prop-types';
8
8
  import messages from './messages';
9
9
  import whatsppMsg from '../Whatsapp/messages';
10
+ import { LANGUAGE_OPTIONS } from '../Whatsapp/constants'
10
11
  import globalMessages from '../Cap/messages'
11
12
  import { MAP_TEMPLATE } from '../WeChat/Wrapper/constants';
12
13
  import { NO_COMMUNICATION, FTP, WHATSAPP } from '../App/constants';
@@ -43,10 +44,11 @@ export function SlideBoxHeader(props) {
43
44
  const {
44
45
  whatsappTemplateName,
45
46
  whatsappTemplateCategory,
47
+ whatsappTemplateLanguageCode,
46
48
  } = templateData || {};
47
49
  const whatsappName = whatsappTemplateName || templateData?.name;
48
50
  const whatsappCategory = whatsappTemplateCategory || get(templateData, `versions.base.content.whatsapp.category`, '');
49
-
51
+ const whatsappLanguageCode = whatsappTemplateLanguageCode || get(templateData, `versions.base.content.whatsapp.languages[0].language`, '');
50
52
 
51
53
  const getChannelLabel = (currentChannel = '') => {
52
54
  const labels = {
@@ -103,7 +105,7 @@ export function SlideBoxHeader(props) {
103
105
  {renderWhatsappData("label2", formatString(whatsappCategory))}
104
106
  {renderWhatsappData("label3", <FormattedMessage {...whatsppMsg.labelSeperator} />)}
105
107
  {renderWhatsappData("label1", <FormattedMessage {...whatsppMsg.languageLabel} />)}
106
- {renderWhatsappData("label2", <FormattedMessage {...whatsppMsg.templateLanguageEnglish} />)}
108
+ {renderWhatsappData("label2", LANGUAGE_OPTIONS?.find(option => option.value === whatsappLanguageCode)?.label)}
107
109
  </>)
108
110
  }
109
111
  prefix={creativesMode !== 'edit' && !isFullMode && showPrefix &&
@@ -190,7 +190,7 @@ exports[`Test SlideBoxHeader container Should render correct component for whats
190
190
  >
191
191
  <FormattedMessage
192
192
  defaultMessage="English"
193
- id="creatives.containersV2.Whatsapp.templateLanguageEnglish"
193
+ id="creatives.containersV2.Whatsapp.english"
194
194
  values={Object {}}
195
195
  />
196
196
  </SlideBoxHeader__StyledLabel>
@@ -14,8 +14,9 @@ export const RCS_DLT_MODE = {
14
14
  TEMPLATES: 'templates',
15
15
  EDIT: 'editTemplate',
16
16
  };
17
- export const TEMPLATE_MESSAGE_MAX_LENGTH = 1000;
17
+ export const TEMPLATE_DESC_MAX_LENGTH = 1000;
18
18
  export const FALLBACK_MESSAGE_MAX_LENGTH = 160;
19
+ export const TEMPLATE_TITLE_MAX_LENGTH = 200;
19
20
  export const TAG = 'TAG';
20
21
  export const EMBEDDED = 'embedded';
21
22
  export const DEFAULT = 'default';
@@ -1,6 +1,4 @@
1
1
  /* eslint-disable no-unused-expressions */
2
- /* eslint-disable indent */
3
- /* eslint-disable no-unused-vars */
4
2
  import React, { useState, useEffect, useCallback } from 'react';
5
3
  import { bindActionCreators } from 'redux';
6
4
  import { createStructuredSelector } from 'reselect';
@@ -44,13 +42,14 @@ import {
44
42
  setInjectedTags,
45
43
  } from '../Cap/selectors';
46
44
  import * as RcsActions from './actions';
47
- import * as TemplatesActions from '../Templates/actions'
45
+ import * as TemplatesActions from '../Templates/actions';
48
46
  import './index.scss';
49
47
  import {
50
48
  RCS,
51
49
  SMS,
52
50
  RCS_MEDIA_TYPES,
53
- TEMPLATE_MESSAGE_MAX_LENGTH,
51
+ TEMPLATE_TITLE_MAX_LENGTH,
52
+ TEMPLATE_DESC_MAX_LENGTH,
54
53
  FALLBACK_MESSAGE_MAX_LENGTH,
55
54
  TAG,
56
55
  EMBEDDED,
@@ -172,11 +171,9 @@ export const Rcs = (props) => {
172
171
  const paramObj = params || {};
173
172
  useEffect(() => {
174
173
  const { id } = paramObj;
175
- if (id) {
176
- if (isFullMode) {
177
- setSpin(true);
178
- actions.getTemplateDetails(id, setSpin);
179
- }
174
+ if (id && isFullMode) {
175
+ setSpin(true);
176
+ actions.getTemplateDetails(id, setSpin);
180
177
  }
181
178
  //cleanup code
182
179
  return () => {
@@ -189,21 +186,21 @@ export const Rcs = (props) => {
189
186
  ? rcsData.templateDetails || {}
190
187
  : templateData || {};
191
188
  const editContent = get(versions, `base.content.RCS`, {});
192
- if (editContent && !isEmpty(editContent)) {
189
+ if (!isEmpty(editContent)) {
193
190
  const { cardContent = [], smsFallBackContent = {} } = editContent;
194
191
  const {
195
- media = { mediaUrl: '' },
196
- mediaType,
197
- title,
198
- description,
192
+ media: { mediaUrl = '' } = {},
193
+ mediaType = '',
194
+ title = '',
195
+ description = '',
199
196
  } = cardContent[0] || {};
200
197
  const { message, templateConfigs = {} } = smsFallBackContent;
201
198
  setTemplateName(name);
202
- setFallbackMessage(message);
203
- setTemplateDesc(description);
204
- setTemplateTitle(title);
205
199
  setTemplateMediaType(mediaType);
206
- updateRcsImageSrc(media.mediaUrl);
200
+ updateRcsImageSrc(mediaUrl);
201
+ setTemplateTitle(title);
202
+ setTemplateDesc(description);
203
+ setFallbackMessage(message);
207
204
  setEditFlow(true);
208
205
  // for DLT Fallback message
209
206
  if (isDltEnabled) {
@@ -217,11 +214,10 @@ export const Rcs = (props) => {
217
214
  if (header.length > 0) {
218
215
  const tempData = {
219
216
  versions: {
220
- // eslint-disable-next-line no-undef
221
217
  base: {
222
218
  header,
223
- "template_id": templateId,
224
- "template_name": tmpName,
219
+ 'template_id': templateId,
220
+ 'template_name': tmpName,
225
221
  'sms-editor': template,
226
222
  'var-mapped': templateVariableMapping,
227
223
  },
@@ -361,7 +357,7 @@ export const Rcs = (props) => {
361
357
  }) || {};
362
358
  if (value === '' && isMediaTypeNone) {
363
359
  errorMessage = formatMessage(messages.emptyTemplateDescErrorMessage);
364
- } else if (value?.length > TEMPLATE_MESSAGE_MAX_LENGTH) {
360
+ } else if (value?.length > TEMPLATE_DESC_MAX_LENGTH) {
365
361
  errorMessage = formatMessage(messages.templateDescLengthError);
366
362
  } else if (unsupportedTags?.length > 0) {
367
363
  errorMessage = formatMessage(
@@ -408,21 +404,21 @@ export const Rcs = (props) => {
408
404
  {/* template title */}
409
405
  {renderLabel('templateTitle', true)}
410
406
  <CapInput
411
- id={`rcs-template-title-input`}
407
+ id="rcs-template-title-input"
412
408
  onChange={onTemplateTitleChange}
413
409
  placeholder={formatMessage(messages.templateTitlePlaceholder)}
414
410
  value={templateTitle || ''}
415
411
  size="default"
416
- maxLength={200}
412
+ maxLength={TEMPLATE_TITLE_MAX_LENGTH}
417
413
  suffix={
418
- <CapLabel type="label1">{`${templateTitle.length} / 200`}</CapLabel>
414
+ <CapLabel type="label1">{`${templateTitle.length} / ${TEMPLATE_TITLE_MAX_LENGTH}`}</CapLabel>
419
415
  }
420
416
  />
421
417
  {/* template message */}
422
- <CapRow id={`rcs-template-message-label`}>
418
+ <CapRow id="rcs-template-message-label">
423
419
  <CapHeader
424
420
  title={
425
- <CapRow style={{ display: 'flex' }}>
421
+ <CapRow type="flex">
426
422
  <CapHeading type="h4">
427
423
  {formatMessage(messages.templateDescLabel)}
428
424
  </CapHeading>
@@ -446,7 +442,7 @@ export const Rcs = (props) => {
446
442
  />
447
443
  </CapRow>
448
444
  <TextArea
449
- id={`rcs_template_message_textarea`}
445
+ id="rcs_template_message_textarea"
450
446
  autosize={{ minRows: 3, maxRows: 5 }}
451
447
  placeholder={formatMessage(messages.templateDescPlaceholder)}
452
448
  onChange={onTemplateDescChange}
@@ -460,7 +456,9 @@ export const Rcs = (props) => {
460
456
  const fallbackSmsLength = () => (
461
457
  <CapLabel type="label1" className="fallback-sms-length">
462
458
  {formatMessage(messages.totalCharacters, {
463
- smsCount: Math.ceil(fallbackMessage.length / 160),
459
+ smsCount: Math.ceil(
460
+ fallbackMessage.length / FALLBACK_MESSAGE_MAX_LENGTH,
461
+ ),
464
462
  number: fallbackMessage.length,
465
463
  })}
466
464
  </CapLabel>
@@ -477,7 +475,7 @@ export const Rcs = (props) => {
477
475
  const closeDltContainerHandler = () => {
478
476
  setShowDltContainer(false);
479
477
  setDltMode('');
480
- templatesActions.getAllTemplates('Rcs', { page: 1, perPage: 25 })
478
+ templatesActions.getAllTemplates('Rcs', { page: 1, perPage: 25 });
481
479
  };
482
480
 
483
481
  const rcsDltEditSelectHandler = (data) => {
@@ -618,7 +616,7 @@ export const Rcs = (props) => {
618
616
  >
619
617
  <CapHeader
620
618
  title={
621
- <CapRow style={{ display: 'flex' }}>
619
+ <CapRow type="flex">
622
620
  <CapHeading type="h4">
623
621
  {formatMessage(messages.fallbackLabel)}
624
622
  </CapHeading>
@@ -712,7 +710,7 @@ export const Rcs = (props) => {
712
710
  />
713
711
  </CapRow>
714
712
  <TextArea
715
- id={`rcs_fallback_message_textarea`}
713
+ id="rcs_fallback_message_textarea"
716
714
  autosize={{ minRows: 3, maxRows: 5 }}
717
715
  placeholder={formatMessage(messages.fallbackMsgPlaceholder)}
718
716
  onChange={onFallbackMessageChange}
@@ -762,8 +760,8 @@ export const Rcs = (props) => {
762
760
  updateImageSrc={setUpdateRcsImageSrc}
763
761
  updateOnReUpload={updateOnRcsImageReUpload}
764
762
  index={0}
765
- className={'cap-custom-image-upload'}
766
- key={`rcs-uploaded-image`}
763
+ className="cap-custom-image-upload"
764
+ key="rcs-uploaded-image"
767
765
  imageData={rcsData}
768
766
  channel={RCS}
769
767
  />
@@ -949,7 +947,7 @@ export const Rcs = (props) => {
949
947
  {/* template name */}
950
948
  {isFullMode && (
951
949
  <CapInput
952
- id={`rcs_template_name_input`}
950
+ id="rcs_template_name_input"
953
951
  onChange={onTemplateNameChange}
954
952
  errorMessage={templateNameError}
955
953
  placeholder={formatMessage(
@@ -966,7 +964,7 @@ export const Rcs = (props) => {
966
964
  options={mediaRadioOptions || []}
967
965
  value={templateMediaType}
968
966
  onChange={onTemplateMediaTypeChange}
969
- className={'rcs-radio'}
967
+ className="rcs-radio"
970
968
  />
971
969
  {getMediaBasedComponent()}
972
970
  <CapDivider style={{ margin: `${CAP_SPACE_28} 0` }} />
@@ -983,8 +981,8 @@ export const Rcs = (props) => {
983
981
  title={
984
982
  isDisableDone()
985
983
  ? formatMessage(messages.rcsDoneBtnToolTip, {
986
- type: formatMessage(messages[mediaTypeMsg]),
987
- })
984
+ type: formatMessage(messages[mediaTypeMsg]),
985
+ })
988
986
  : ''
989
987
  }
990
988
  placement={'right'}
@@ -1026,7 +1024,9 @@ export const Rcs = (props) => {
1026
1024
  className="margin-t-16"
1027
1025
  >
1028
1026
  {formatMessage(messages.totalCharacters, {
1029
- smsCount: Math.ceil(tempMsg.length / 160),
1027
+ smsCount: Math.ceil(
1028
+ tempMsg.length / FALLBACK_MESSAGE_MAX_LENGTH,
1029
+ ),
1030
1030
  number: tempMsg.length,
1031
1031
  })}
1032
1032
  </CapHeading>
@@ -23,7 +23,7 @@ export function* uploadRcsAsset(file, assetType, fileParams) {
23
23
  yield put({
24
24
  type: UPLOAD_RCS_ASSET_SUCCESS,
25
25
  data: result.response.asset,
26
- statusCode: result.status ? result.status.code : '',
26
+ statusCode: result?.status?.code || '',
27
27
  templateType: file.templateType,
28
28
  });
29
29
  } catch (error) {
@@ -50,7 +50,7 @@ export function* createRCSTemplate({ template, callback }) {
50
50
  yield put({
51
51
  type: CREATE_RCS_TEMPLATE_SUCCESS,
52
52
  data: result.response,
53
- statusCode: result.status ? result.status.code : '',
53
+ statusCode: result?.status?.code || '',
54
54
  errorMsg,
55
55
  });
56
56
  if (callback) {
@@ -87,7 +87,7 @@ export function* editTemplate({ template, callback }) {
87
87
  yield put({
88
88
  type: EDIT_RCS_TEMPLATE_SUCCESS,
89
89
  data: result.response,
90
- statusCode: result.status ? result.status.code : '',
90
+ statusCode: result?.status?.code || '',
91
91
  errorMsg,
92
92
  });
93
93
  if (callback) {
@@ -662,6 +662,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
662
662
  const { name = '', versions = {} } = whatsappSelectedTemplateData;
663
663
  creativesParams.whatsappTemplateName = name;
664
664
  creativesParams.whatsappTemplateCategory = get(versions, `base.content.whatsapp.category`, '');
665
+ creativesParams.whatsappTemplateLanguageCode = get(versions, `base.content.whatsapp.languages[0].language`, '');
665
666
  }
666
667
  }
667
668
  creativesParams.type = this.state.channel.toUpperCase();
@@ -129,3 +129,290 @@ export const WHATSAPP_MEDIA_TYPES = {
129
129
  IMAGE: 'IMAGE',
130
130
  VIDEO: 'VIDEO',
131
131
  };
132
+
133
+ export const LANGUAGE_OPTIONS = [
134
+ {
135
+ value: 'af',
136
+ label: <FormattedMessage {...messages.afrikaans} />,
137
+ },
138
+ {
139
+ value: 'sq',
140
+ label: <FormattedMessage {...messages.albanian} />,
141
+ },
142
+ {
143
+ value: 'ar',
144
+ label: <FormattedMessage {...messages.arabic} />,
145
+ },
146
+ {
147
+ value: 'az',
148
+ label: <FormattedMessage {...messages.azerbaijani} />,
149
+ },
150
+ {
151
+ value: 'bn',
152
+ label: <FormattedMessage {...messages.bengali} />,
153
+ },
154
+ {
155
+ value: 'bg',
156
+ label: <FormattedMessage {...messages.bulgarian} />,
157
+ },
158
+ {
159
+ value: 'ca',
160
+ label: <FormattedMessage {...messages.catalan} />,
161
+ },
162
+ {
163
+ value: 'zh_CN',
164
+ label: <FormattedMessage {...messages.chineseCHN} />,
165
+ },
166
+ {
167
+ value: 'zh_HK',
168
+ label: <FormattedMessage {...messages.chineseHKG} />,
169
+ },
170
+ {
171
+ value: 'zh_TW',
172
+ label: <FormattedMessage {...messages.chineseTAI} />,
173
+ },
174
+ {
175
+ value: 'hr',
176
+ label: <FormattedMessage {...messages.croatian} />,
177
+ },
178
+ {
179
+ value: 'cs',
180
+ label: <FormattedMessage {...messages.czech} />,
181
+ },
182
+ {
183
+ value: 'da',
184
+ label: <FormattedMessage {...messages.danish} />,
185
+ },
186
+ {
187
+ value: 'nl',
188
+ label: <FormattedMessage {...messages.dutch} />,
189
+ },
190
+ {
191
+ value: 'en',
192
+ label: <FormattedMessage {...messages.english} />,
193
+ },
194
+ {
195
+ value: 'en_GB',
196
+ label: <FormattedMessage {...messages.englishUK} />,
197
+ },
198
+ {
199
+ value: 'en_US',
200
+ label: <FormattedMessage {...messages.englishUS} />,
201
+ },
202
+ {
203
+ value: 'et',
204
+ label: <FormattedMessage {...messages.estonian} />,
205
+ },
206
+ {
207
+ value: 'fil',
208
+ label: <FormattedMessage {...messages.filipino} />,
209
+ },
210
+ {
211
+ value: 'fi',
212
+ label: <FormattedMessage {...messages.finnish} />,
213
+ },
214
+ {
215
+ value: 'fr',
216
+ label: <FormattedMessage {...messages.french} />,
217
+ },
218
+ {
219
+ value: 'ka',
220
+ label: <FormattedMessage {...messages.georgian} />,
221
+ },
222
+ {
223
+ value: 'de',
224
+ label: <FormattedMessage {...messages.german} />,
225
+ },
226
+ {
227
+ value: 'el',
228
+ label: <FormattedMessage {...messages.greek} />,
229
+ },
230
+ {
231
+ value: 'gu',
232
+ label: <FormattedMessage {...messages.gujarati} />,
233
+ },
234
+ {
235
+ value: 'ha',
236
+ label: <FormattedMessage {...messages.hausa} />,
237
+ },
238
+ {
239
+ value: 'he',
240
+ label: <FormattedMessage {...messages.hebrew} />,
241
+ },
242
+ {
243
+ value: 'hi',
244
+ label: <FormattedMessage {...messages.hindi} />,
245
+ },
246
+ {
247
+ value: 'hu',
248
+ label: <FormattedMessage {...messages.hungarian} />,
249
+ },
250
+ {
251
+ value: 'id',
252
+ label: <FormattedMessage {...messages.indonesian} />,
253
+ },
254
+ {
255
+ value: 'ga',
256
+ label: <FormattedMessage {...messages.irish} />,
257
+ },
258
+ {
259
+ value: 'it',
260
+ label: <FormattedMessage {...messages.italian} />,
261
+ },
262
+ {
263
+ value: 'ja',
264
+ label: <FormattedMessage {...messages.japanese} />,
265
+ },
266
+ {
267
+ value: 'kn',
268
+ label: <FormattedMessage {...messages.kannada} />,
269
+ },
270
+ {
271
+ value: 'kk',
272
+ label: <FormattedMessage {...messages.kazakh} />,
273
+ },
274
+ {
275
+ value: 'rw_RW',
276
+ label: <FormattedMessage {...messages.kinyarwanda} />,
277
+ },
278
+ {
279
+ value: 'ko',
280
+ label: <FormattedMessage {...messages.korean} />,
281
+ },
282
+ {
283
+ value: 'ky_KG',
284
+ label: <FormattedMessage {...messages.kyrgyz} />,
285
+ },
286
+ {
287
+ value: 'lo',
288
+ label: <FormattedMessage {...messages.lao} />,
289
+ },
290
+ {
291
+ value: 'lv',
292
+ label: <FormattedMessage {...messages.latvian} />,
293
+ },
294
+ {
295
+ value: 'lt',
296
+ label: <FormattedMessage {...messages.lithuanian} />,
297
+ },
298
+ {
299
+ value: 'mk',
300
+ label: <FormattedMessage {...messages.macedonian} />,
301
+ },
302
+ {
303
+ value: 'ms',
304
+ label: <FormattedMessage {...messages.malay} />,
305
+ },
306
+ {
307
+ value: 'ml',
308
+ label: <FormattedMessage {...messages.malayalam} />,
309
+ },
310
+ {
311
+ value: 'mr',
312
+ label: <FormattedMessage {...messages.marathi} />,
313
+ },
314
+ {
315
+ value: 'nb',
316
+ label: <FormattedMessage {...messages.norwegian} />,
317
+ },
318
+ {
319
+ value: 'fa',
320
+ label: <FormattedMessage {...messages.persian} />,
321
+ },
322
+ {
323
+ value: 'pl',
324
+ label: <FormattedMessage {...messages.polish} />,
325
+ },
326
+ {
327
+ value: 'pt_BR',
328
+ label: <FormattedMessage {...messages.portugueseBR} />,
329
+ },
330
+ {
331
+ value: 'pt_PT',
332
+ label: <FormattedMessage {...messages.portuguesePOR} />,
333
+ },
334
+ {
335
+ value: 'pa',
336
+ label: <FormattedMessage {...messages.punjabi} />,
337
+ },
338
+ {
339
+ value: 'ro',
340
+ label: <FormattedMessage {...messages.romanian} />,
341
+ },
342
+ {
343
+ value: 'ru',
344
+ label: <FormattedMessage {...messages.russian} />,
345
+ },
346
+ {
347
+ value: 'sr',
348
+ label: <FormattedMessage {...messages.serbian} />,
349
+ },
350
+ {
351
+ value: 'sk',
352
+ label: <FormattedMessage {...messages.slovak} />,
353
+ },
354
+ {
355
+ value: 'sl',
356
+ label: <FormattedMessage {...messages.slovenian} />,
357
+ },
358
+ {
359
+ value: 'es',
360
+ label: <FormattedMessage {...messages.spanish} />,
361
+ },
362
+ {
363
+ value: 'es_AR',
364
+ label: <FormattedMessage {...messages.spanishARG} />,
365
+ },
366
+ {
367
+ value: 'es_ES',
368
+ label: <FormattedMessage {...messages.spanishSPA} />,
369
+ },
370
+ {
371
+ value: 'es_MX',
372
+ label: <FormattedMessage {...messages.spanishMEX} />,
373
+ },
374
+ {
375
+ value: 'sw',
376
+ label: <FormattedMessage {...messages.swahili} />,
377
+ },
378
+ {
379
+ value: 'sv',
380
+ label: <FormattedMessage {...messages.swedish} />,
381
+ },
382
+ {
383
+ value: 'ta',
384
+ label: <FormattedMessage {...messages.tamil} />,
385
+ },
386
+ {
387
+ value: 'te',
388
+ label: <FormattedMessage {...messages.telugu} />,
389
+ },
390
+ {
391
+ value: 'th',
392
+ label: <FormattedMessage {...messages.thai} />,
393
+ },
394
+ {
395
+ value: 'tr',
396
+ label: <FormattedMessage {...messages.turkish} />,
397
+ },
398
+ {
399
+ value: 'uk',
400
+ label: <FormattedMessage {...messages.ukrainian} />,
401
+ },
402
+ {
403
+ value: 'ur',
404
+ label: <FormattedMessage {...messages.urdu} />,
405
+ },
406
+ {
407
+ value: 'uz',
408
+ label: <FormattedMessage {...messages.uzbek} />,
409
+ },
410
+ {
411
+ value: 'vi',
412
+ label: <FormattedMessage {...messages.vietnamese} />,
413
+ },
414
+ {
415
+ value: 'zu',
416
+ label: <FormattedMessage {...messages.zulu} />,
417
+ },
418
+ ];