@capillarytech/creatives-library 8.0.260-alpha.0 → 8.0.260-alpha.1

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": "8.0.260-alpha.0",
4
+ "version": "8.0.260-alpha.1",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/utils/common.js CHANGED
@@ -22,6 +22,7 @@ import {
22
22
  BADGES_ISSUE,
23
23
  ENABLE_WECHAT,
24
24
  ENABLE_WEBPUSH,
25
+ LIQUID_SUPPORT,
25
26
  ENABLE_NEW_MPUSH
26
27
  } from '../constants/unified';
27
28
  import { apiMessageFormatHandler } from './commonUtils';
@@ -90,6 +91,12 @@ export const hasPromoFeature = Auth.hasFeatureAccess.bind(
90
91
  PROMO_ENGINE,
91
92
  );
92
93
 
94
+ export const hasLiquidSupportFeature = Auth.hasFeatureAccess.bind(
95
+ null,
96
+ LIQUID_SUPPORT,
97
+ );
98
+
99
+
93
100
  export const hasGiftVoucherFeature = Auth.hasFeatureAccess.bind(
94
101
  null,
95
102
  GIFT_CARDS,
@@ -60,7 +60,7 @@ import { GET_TRANSLATION_MAPPED } from '../../constants/unified';
60
60
  import moment from 'moment';
61
61
  import { CUSTOMER_BARCODE_TAG , COPY_OF, ENTRY_TRIGGER_TAG_REGEX, SKIP_TAGS_REGEX_GROUPS} from '../../constants/unified';
62
62
  import { REQUEST } from '../../v2Containers/Cap/constants'
63
- import { isEmailUnsubscribeTagMandatory } from '../../utils/common';
63
+ import { hasLiquidSupportFeature, isEmailUnsubscribeTagMandatory } from '../../utils/common';
64
64
  import { isUrl } from '../../v2Containers/Line/Container/Wrapper/utils';
65
65
  import { bindActionCreators } from 'redux';
66
66
  import { getChannelData, validateLiquidTemplateContent, validateMobilePushContent } from '../../utils/commonUtils';
@@ -331,7 +331,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
331
331
  }
332
332
 
333
333
  isLiquidFlowSupported = () => {
334
- return Boolean(LIQUID_SUPPORTED_CHANNELS.includes(this.props?.schema?.channel?.toUpperCase()));
334
+ return Boolean(LIQUID_SUPPORTED_CHANNELS.includes(this.props?.schema?.channel?.toUpperCase()) && hasLiquidSupportFeature());
335
335
  }
336
336
 
337
337
  componentWillMount() {
@@ -3971,7 +3971,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
3971
3971
  <CapColumn
3972
3972
  style={val.colStyle ? val.colStyle : {border : ""}}
3973
3973
  span={val.width}
3974
- className={`${(this.state.liquidErrorMessage?.LIQUID_ERROR_MSG?.length || this.state.liquidErrorMessage?.STANDARD_ERROR_MSG?.length) && this.liquidFlow() ? "error-boundary" : ""} `}
3974
+ className={`${(this.state.liquidErrorMessage?.LIQUID_ERROR_MSG?.length || this.state.liquidErrorMessage?.STANDARD_ERROR_MSG?.length) && this.liquidFlow() && "error-boundary"} `}
3975
3975
  >
3976
3976
  <CKEditor
3977
3977
  id={val.id}
@@ -4015,7 +4015,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
4015
4015
  isModuleFilterEnabled = this.props.isFullMode;
4016
4016
  }
4017
4017
  columns.push(
4018
- <CapColumn style={val.colStyle ? val.colStyle : {}} span={val.width} className={`${(this.state.liquidErrorMessage?.LIQUID_ERROR_MSG?.length || this.state.liquidErrorMessage?.STANDARD_ERROR_MSG?.length) && this.liquidFlow() ? "error-boundary" : ""}`}>
4018
+ <CapColumn style={val.colStyle ? val.colStyle : {}} span={val.width} className={`${(this.state.liquidErrorMessage?.LIQUID_ERROR_MSG?.length || this.state.liquidErrorMessage?.STANDARD_ERROR_MSG?.length) && this.liquidFlow() && "error-boundary"}`}>
4019
4019
  <BeeEditor
4020
4020
  uid={uuid}
4021
4021
  tokenData={beeToken}
@@ -109,6 +109,7 @@ export class Creatives extends React.Component {
109
109
  // Performance optimization: Local template name for immediate UI feedback
110
110
  localTemplateName: '',
111
111
  };
112
+ this.liquidFlow = Boolean(commonUtil.hasLiquidSupportFeature());
112
113
  this.creativesTemplateSteps = {
113
114
  1: 'modeSelection',
114
115
  2: 'templateSelection', // only for email in current flows wil be used for mpush, line and wechat as well.
@@ -26,7 +26,7 @@ import * as globalActions from '../Cap/actions';
26
26
  import './_email.scss';
27
27
  import {getMessageObject} from '../../utils/messageUtils';
28
28
  import EmailPreview from '../../v2Components/EmailPreview';
29
- import { getDecodedFileName } from '../../utils/common';
29
+ import { getDecodedFileName ,hasLiquidSupportFeature} from '../../utils/common';
30
30
  import Pagination from '../../v2Components/Pagination';
31
31
  import * as creativesContainerActions from '../CreativesContainer/actions';
32
32
  import withCreatives from '../../hoc/withCreatives';
@@ -62,6 +62,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
62
62
  isEdit: false,
63
63
  schema: {},
64
64
  loading: false,
65
+ isFormValid: true,
65
66
  injectedTags: {},
66
67
  checkValidation: false,
67
68
  saveEdmDataMode: 'save',
@@ -167,6 +168,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
167
168
  deleteLanguage: this.deleteLanguage,
168
169
  },
169
170
  };
171
+ this.liquidFlow = hasLiquidSupportFeature();
170
172
  }
171
173
  componentWillMount() {
172
174
  const formData = this.initFormData(this.props, true); //_.cloneDeep(this.state.formData);
@@ -228,6 +230,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
228
230
  layout: 'EMAIL',
229
231
  type: 'LAYOUT',
230
232
  version: 'v2',
233
+ liquidFlow:this.liquidFlow,
231
234
  };
232
235
  this.props.globalActions.fetchSchemaForEntity(query);
233
236
  window.addEventListener("message", this.handleFrameTasks);
@@ -271,6 +274,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
271
274
  type: 'TAG',
272
275
  context: this.props.location.query.type === 'embedded' ? this.props.location.query.module : 'default',
273
276
  embedded: this.props.location.query.type === 'embedded' ? this.props.location.query.type : 'full',
277
+ liquidFlow:this.liquidFlow
274
278
  };
275
279
  if (this.props.getDefaultTags) {
276
280
  query.context = this.props.getDefaultTags;
@@ -885,7 +889,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
885
889
  return '';
886
890
  }
887
891
 
888
- setFormValidity = () => {}
892
+ setFormValidity = (isFormValid) => {
893
+ this.setState({isFormValid});
894
+ }
889
895
 
890
896
  setEditData(editData) {
891
897
  const isBEESupport = (this.props.location.query.isBEESupport !== "false") || false;
@@ -1112,6 +1118,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
1112
1118
  isEdit: false,
1113
1119
  schema: {},
1114
1120
  loading: false,
1121
+ isFormValid: true,
1115
1122
  injectedTags: {},
1116
1123
  checkValidation: false,
1117
1124
  tabKey: '',
@@ -2120,6 +2127,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
2120
2127
  type: 'TAG',
2121
2128
  context: (data || '').toLowerCase() === 'all' ? 'default' : (data || '').toLowerCase(),
2122
2129
  embedded: 'full',
2130
+ liquidFlow:this.liquidFlow
2123
2131
  };
2124
2132
  this.props.globalActions.fetchSchemaForEntity(query);
2125
2133
  }
@@ -2452,14 +2460,14 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
2452
2460
  }
2453
2461
 
2454
2462
  saveFormData = (passedData) => {
2463
+ //saveFormData gets called only when validation result is true
2455
2464
  if (this.state.gettingFormData && !this.props.isFullMode) {
2456
2465
  const response = {
2457
2466
  action: "getFormData",
2458
2467
  postAction: this.state.getFormDataValue || 'next',
2459
2468
  id: _.get(this.props, 'Email.templateDetails._id', ''),
2460
2469
  value: this.transformFormData(passedData),
2461
- //saveFormData gets called only when validation result is true
2462
- validity: true,
2470
+ validity: this.state.isFormValid,
2463
2471
  type: 'EMAIL',
2464
2472
  };
2465
2473
 
@@ -59,6 +59,7 @@ import { getCdnUrl } from "../../utils/cdnTransformation";
59
59
  import { getCtaObject, hasAnyErrors, getSingleTab } from "./utils";
60
60
  import { validateInAppContent } from "../../utils/commonUtils";
61
61
  import ErrorInfoNote from "../../v2Components/ErrorInfoNote";
62
+ import { hasLiquidSupportFeature } from "../../utils/common";
62
63
  import formBuilderMessages from "../../v2Components/FormBuilder/messages";
63
64
 
64
65
  let editContent = {};
@@ -875,7 +876,7 @@ export const InApp = (props) => {
875
876
  });
876
877
  };
877
878
 
878
- const isLiquidFlow = true;
879
+ const isLiquidFlow = hasLiquidSupportFeature();
879
880
  return (
880
881
  <CapSpin spinning={spin || fetchingLiquidValidation} tip={fetchingLiquidValidation ? <FormattedMessage {...formBuilderMessages.liquidSpinText} /> : ""}>
881
882
  <CapRow className="cap-inapp-creatives">
@@ -6,7 +6,7 @@ import { configureStore } from '@capillarytech/vulcan-react-sdk/utils';
6
6
  import history from '../../../utils/history';
7
7
  import { initialReducer } from '../../../initialReducer';
8
8
  import { InApp } from '../index';
9
- import { render, screen, fireEvent, within, waitFor } from '../../../utils/test-utils';
9
+ import { render, screen, fireEvent, within } from '../../../utils/test-utils';
10
10
  import {
11
11
  editData,
12
12
  accountData,
@@ -16,19 +16,15 @@ import {
16
16
  } from './mockData';
17
17
  import { metaEntities, getDefaultTags, injectedTags } from '../../Zalo/tests/mockData';
18
18
  import { getCtaObject } from '../utils';
19
- import * as commonUtils from '../../../utils/commonUtils';
20
19
 
21
20
  const mockActions = {
22
21
  getTemplateInfoById: jest.fn(),
23
22
  resetEditTemplate: jest.fn(),
24
- getTemplateDetails: jest.fn((id, setSpin) => setSpin(false)),
23
+ getTemplateDetails: jest.fn(),
25
24
  editTemplate: jest.fn(),
26
25
  };
27
26
  const mockGlobalActions = {
28
27
  fetchSchemaForEntity: jest.fn(),
29
- getLiquidTags: jest.fn((content, callback) =>
30
- callback({ askAiraResponse: { data: [], errors: [] }, isError: false }),
31
- ),
32
28
  };
33
29
 
34
30
  jest.mock('../../../v2Containers/TagList/index.js', () => ({
@@ -54,17 +50,7 @@ const renderComponent = (props) =>
54
50
  );
55
51
 
56
52
  describe('Test activity inApp container', () => {
57
- afterEach(() => {
58
- jest.restoreAllMocks();
59
- });
60
-
61
53
  it('test case for inApp template update flow', async () => {
62
- jest
63
- .spyOn(commonUtils, 'validateInAppContent')
64
- .mockImplementation((payload, options) => {
65
- options.onSuccess();
66
- return Promise.resolve(true);
67
- });
68
54
  renderComponent({
69
55
  actions: mockActions,
70
56
  globalActions: mockGlobalActions,
@@ -83,32 +69,23 @@ describe('Test activity inApp container', () => {
83
69
  name: /ios/i,
84
70
  });
85
71
  fireEvent.click(within(iosTab).getByText(/ios/i));
86
- const titleInput = await screen.findAllByPlaceholderText(
87
- 'Please input message title name',
88
- );
89
- fireEvent.change(titleInput[1], { target: { value: 'Hello title ios' } });
90
- const msgBoxes = screen.getAllByPlaceholderText(/Please input in-app notification message content/i);
91
- fireEvent.change(msgBoxes[1], { target: { value: 'val ios' }});
92
-
93
72
  const androidTab = screen.getByRole('tab', {
94
73
  name: /android/i,
95
74
  });
96
75
  fireEvent.click(within(androidTab).getByText(/android/i));
97
- fireEvent.change(titleInput[0], { target: { value: 'Hello title' } });
98
76
  const inputNameBox = await screen.findAllByPlaceholderText(
99
77
  'Enter template name',
100
78
  );
101
79
  fireEvent.change(inputNameBox[0], { target: { value: 'Hello, welcome' } });
102
- msgBoxes[0].focus();
103
- fireEvent.change(msgBoxes[0], { target: { value: 'val' }});
80
+ const msgBox = screen.getAllByPlaceholderText(/Please input in-app notification message content/i);
81
+ msgBox[0].focus();
82
+ fireEvent.change(msgBox[0], { target: { value: 'val' }});
104
83
  const updateBtn = screen.getByRole('button', {
105
84
  name: /update/i,
106
85
  });
107
86
  expect(updateBtn).toBeEnabled();
108
87
  fireEvent.click(updateBtn);
109
- await waitFor(() => {
110
- expect(mockActions.editTemplate).toHaveBeenCalled();
111
- });
88
+ expect(mockActions.editTemplate).toHaveBeenCalled();
112
89
  });
113
90
  it('test case for inApp template configuration', async () => {
114
91
  renderComponent({
@@ -77,6 +77,7 @@ import { getContent } from "../MobilePush/commonMethods";
77
77
  import { getMessageObject } from "../../utils/messageUtils";
78
78
  import { gtmPush } from "../../utils/gtmTrackers";
79
79
  import mobilePushReducer from "./reducer";
80
+ import { hasLiquidSupportFeature } from "../../utils/common";
80
81
  import formBuilderMessages from "../../v2Components/FormBuilder/messages";
81
82
  import { validateMobilePushContent } from "../../utils/commonUtils";
82
83
  import { getSingleTab } from "../InApp/utils";
@@ -2606,7 +2607,7 @@ const MobilePushNew = ({
2606
2607
  messages: formBuilderMessages,
2607
2608
  tagLookupMap: metaEntities?.tagLookupMap || {},
2608
2609
  eventContextTags: metaEntities?.eventContextTags || [],
2609
- isLiquidFlow: true,
2610
+ isLiquidFlow: hasLiquidSupportFeature(),
2610
2611
  forwardedTags: {},
2611
2612
  skipTags: (tag) => {
2612
2613
  const skipRegexes = [
@@ -2630,7 +2631,7 @@ const MobilePushNew = ({
2630
2631
  accountData,
2631
2632
  ]);
2632
2633
 
2633
- const isLiquidFlow = true;
2634
+ const isLiquidFlow = hasLiquidSupportFeature();
2634
2635
 
2635
2636
  useEffect(() => {
2636
2637
  // Always map to { label } for both platforms
@@ -55,6 +55,7 @@ import v2EditSmsReducer from '../../Sms/Edit/reducer';
55
55
  import { v2SmsEditSagas } from '../../Sms/Edit/sagas';
56
56
  import ErrorInfoNote from '../../../v2Components/ErrorInfoNote';
57
57
  import { validateLiquidTemplateContent } from '../../../utils/commonUtils';
58
+ import { hasLiquidSupportFeature } from '../../../utils/common';
58
59
  import { ANDROID } from '../../../v2Components/CommonTestAndPreview/constants';
59
60
 
60
61
  let varMap = {};
@@ -590,7 +591,7 @@ export const SmsTraiEdit = (props) => {
590
591
  setShowTestAndPreviewSlidebox(false);
591
592
  };
592
593
 
593
- const isLiquidSupportFeatureEnabled = true;
594
+ const isLiquidSupportFeatureEnabled = hasLiquidSupportFeature();
594
595
  return (
595
596
  <>
596
597
  <CapSpin spinning={loading || fetchingLiquidTags} tip={fetchingLiquidTags && formatMessage(formBuilderMessages.liquidSpinText)}>
@@ -3007,8 +3007,130 @@ FREE GIFTS-
3007
3007
  "template_name": "CAP71871_4",
3008
3008
  "type": "Service-Explicit",
3009
3009
  "unicode-validity": false,
3010
+ "updated-sms-editor": Array [
3011
+ "LATEST FASHION@VISHAL
3012
+ ",
3013
+ "{#var#}",
3014
+ "
3015
+
3016
+ BUY1GET1-
3017
+ ",
3018
+ "{#var#}",
3019
+ "
3020
+ ",
3021
+ "{#var#}",
3022
+ "
3023
+ ",
3024
+ "{#var#}",
3025
+ "
3026
+
3027
+ FREE GIFTS-
3028
+ ",
3029
+ "{#var#}",
3030
+ "
3031
+ ",
3032
+ "{#var#}",
3033
+ ],
3034
+ "var-mapped": Object {
3035
+ "{#var#}_1": Object {
3036
+ "count": 1,
3037
+ "data": "",
3038
+ },
3039
+ "{#var#}_11": Object {
3040
+ "count": 1,
3041
+ "data": "",
3042
+ },
3043
+ "{#var#}_3": Object {
3044
+ "count": 1,
3045
+ "data": "",
3046
+ },
3047
+ "{#var#}_5": Object {
3048
+ "count": 1,
3049
+ "data": "",
3050
+ },
3051
+ "{#var#}_7": Object {
3052
+ "count": 1,
3053
+ "data": "",
3054
+ },
3055
+ "{#var#}_9": Object {
3056
+ "count": 1,
3057
+ "data": "",
3058
+ },
3059
+ },
3010
3060
  },
3011
- "history": Array [],
3061
+ "history": Array [
3062
+ Object {
3063
+ "category": "--",
3064
+ "consent-type": "Explicit",
3065
+ "header": "VISHMM",
3066
+ "sms-editor": "LATEST FASHION@VISHAL
3067
+ {#var#}
3068
+
3069
+ BUY1GET1-
3070
+ {#var#}
3071
+ {#var#}
3072
+ {#var#}
3073
+
3074
+ FREE GIFTS-
3075
+ {#var#}
3076
+ {#var#}",
3077
+ "tabKey": 1,
3078
+ "template_id": "'1107160207324585172'",
3079
+ "template_name": "CAP71871_4",
3080
+ "type": "Service-Explicit",
3081
+ "unicode-validity": false,
3082
+ "updated-sms-editor": Array [
3083
+ "LATEST FASHION@VISHAL
3084
+ ",
3085
+ "{#var#}",
3086
+ "
3087
+
3088
+ BUY1GET1-
3089
+ ",
3090
+ "{#var#}",
3091
+ "
3092
+ ",
3093
+ "{#var#}",
3094
+ "
3095
+ ",
3096
+ "{#var#}",
3097
+ "
3098
+
3099
+ FREE GIFTS-
3100
+ ",
3101
+ "{#var#}",
3102
+ "
3103
+ ",
3104
+ "{#var#}",
3105
+ ],
3106
+ "var-mapped": Object {
3107
+ "{#var#}_1": Object {
3108
+ "count": 1,
3109
+ "data": "",
3110
+ },
3111
+ "{#var#}_11": Object {
3112
+ "count": 1,
3113
+ "data": "",
3114
+ },
3115
+ "{#var#}_3": Object {
3116
+ "count": 1,
3117
+ "data": "",
3118
+ },
3119
+ "{#var#}_5": Object {
3120
+ "count": 1,
3121
+ "data": "",
3122
+ },
3123
+ "{#var#}_7": Object {
3124
+ "count": 1,
3125
+ "data": "",
3126
+ },
3127
+ "{#var#}_9": Object {
3128
+ "count": 1,
3129
+ "data": "",
3130
+ },
3131
+ },
3132
+ },
3133
+ ],
3012
3134
  },
3013
3135
  }
3014
3136
  }
@@ -5920,7 +6042,6 @@ FREE GIFTS-
5920
6042
  </CapButton>
5921
6043
  <CapButton
5922
6044
  className="create-msg create-dlt-msg"
5923
- disabled={true}
5924
6045
  isAddBtn={false}
5925
6046
  onClick={[Function]}
5926
6047
  type="primary"
@@ -5928,7 +6049,6 @@ FREE GIFTS-
5928
6049
  <Button
5929
6050
  block={false}
5930
6051
  className="cap-button-v2 create-msg create-dlt-msg"
5931
- disabled={true}
5932
6052
  ghost={false}
5933
6053
  htmlType="button"
5934
6054
  loading={false}
@@ -5938,7 +6058,6 @@ FREE GIFTS-
5938
6058
  <Wave>
5939
6059
  <button
5940
6060
  className="ant-btn cap-button-v2 create-msg create-dlt-msg ant-btn-primary"
5941
- disabled={true}
5942
6061
  onClick={[Function]}
5943
6062
  type="button"
5944
6063
  >
@@ -16743,7 +16862,6 @@ FREE GIFTS-
16743
16862
  </CapButton>
16744
16863
  <CapButton
16745
16864
  className="create-msg create-dlt-msg"
16746
- disabled={true}
16747
16865
  isAddBtn={false}
16748
16866
  onClick={[Function]}
16749
16867
  type="primary"
@@ -16751,7 +16869,6 @@ FREE GIFTS-
16751
16869
  <Button
16752
16870
  block={false}
16753
16871
  className="cap-button-v2 create-msg create-dlt-msg"
16754
- disabled={true}
16755
16872
  ghost={false}
16756
16873
  htmlType="button"
16757
16874
  loading={false}
@@ -16761,7 +16878,6 @@ FREE GIFTS-
16761
16878
  <Wave>
16762
16879
  <button
16763
16880
  className="ant-btn cap-button-v2 create-msg create-dlt-msg ant-btn-primary"
16764
- disabled={true}
16765
16881
  onClick={[Function]}
16766
16882
  type="button"
16767
16883
  >
@@ -27538,7 +27654,6 @@ FREE GIFTS-
27538
27654
  </CapButton>
27539
27655
  <CapButton
27540
27656
  className="create-msg create-dlt-msg"
27541
- disabled={true}
27542
27657
  isAddBtn={false}
27543
27658
  onClick={[Function]}
27544
27659
  type="primary"
@@ -27546,7 +27661,6 @@ FREE GIFTS-
27546
27661
  <Button
27547
27662
  block={false}
27548
27663
  className="cap-button-v2 create-msg create-dlt-msg"
27549
- disabled={true}
27550
27664
  ghost={false}
27551
27665
  htmlType="button"
27552
27666
  loading={false}
@@ -27556,7 +27670,6 @@ FREE GIFTS-
27556
27670
  <Wave>
27557
27671
  <button
27558
27672
  className="ant-btn cap-button-v2 create-msg create-dlt-msg ant-btn-primary"
27559
- disabled={true}
27560
27673
  onClick={[Function]}
27561
27674
  type="button"
27562
27675
  >
@@ -34839,7 +34952,176 @@ new message content.",
34839
34952
  actions={
34840
34953
  Object {
34841
34954
  "clearEditResponse": [MockFunction],
34842
- "editTemplate": [MockFunction],
34955
+ "editTemplate": [MockFunction] {
34956
+ "calls": Array [
34957
+ Array [
34958
+ Object {
34959
+ "_id": "6125eec5feae248f88e6a634",
34960
+ "createdAt": "2021-08-25T07:25:12.559Z",
34961
+ "createdBy": "15000449",
34962
+ "isActive": true,
34963
+ "name": "CAP71871_4",
34964
+ "orgId": 50146,
34965
+ "type": "SMS",
34966
+ "updatedAt": "2021-08-30T05:54:59.951Z",
34967
+ "updatedBy": "15000449",
34968
+ "versions": Object {
34969
+ "base": Object {
34970
+ "category": "--",
34971
+ "consent-type": "Explicit",
34972
+ "header": "VISHMM",
34973
+ "sms-editor": "LATEST FASHION@VISHAL
34974
+ {#var#}
34975
+
34976
+ BUY1GET1-
34977
+ {#var#}
34978
+ {#var#}
34979
+ {#var#}
34980
+
34981
+ FREE GIFTS-
34982
+ {#var#}
34983
+ {#var#}",
34984
+ "tabKey": 1,
34985
+ "template_id": "'1107160207324585172'",
34986
+ "template_name": "CAP71871_4",
34987
+ "type": "Service-Explicit",
34988
+ "unicode-validity": false,
34989
+ "updated-sms-editor": Array [
34990
+ "LATEST FASHION@VISHAL
34991
+ ",
34992
+ "{#var#}",
34993
+ "
34994
+
34995
+ BUY1GET1-
34996
+ ",
34997
+ "{#var#}",
34998
+ "
34999
+ ",
35000
+ "{#var#}",
35001
+ "
35002
+ ",
35003
+ "{#var#}",
35004
+ "
35005
+
35006
+ FREE GIFTS-
35007
+ ",
35008
+ "{#var#}",
35009
+ "
35010
+ ",
35011
+ "{#var#}",
35012
+ ],
35013
+ "var-mapped": Object {
35014
+ "{#var#}_1": Object {
35015
+ "count": 1,
35016
+ "data": "",
35017
+ },
35018
+ "{#var#}_11": Object {
35019
+ "count": 1,
35020
+ "data": "",
35021
+ },
35022
+ "{#var#}_3": Object {
35023
+ "count": 1,
35024
+ "data": "",
35025
+ },
35026
+ "{#var#}_5": Object {
35027
+ "count": 1,
35028
+ "data": "",
35029
+ },
35030
+ "{#var#}_7": Object {
35031
+ "count": 1,
35032
+ "data": "",
35033
+ },
35034
+ "{#var#}_9": Object {
35035
+ "count": 1,
35036
+ "data": "",
35037
+ },
35038
+ },
35039
+ },
35040
+ "history": Array [
35041
+ Object {
35042
+ "category": "--",
35043
+ "consent-type": "Explicit",
35044
+ "header": "VISHMM",
35045
+ "sms-editor": "LATEST FASHION@VISHAL
35046
+ {#var#}
35047
+
35048
+ BUY1GET1-
35049
+ {#var#}
35050
+ {#var#}
35051
+ {#var#}
35052
+
35053
+ FREE GIFTS-
35054
+ {#var#}
35055
+ {#var#}",
35056
+ "tabKey": 1,
35057
+ "template_id": "'1107160207324585172'",
35058
+ "template_name": "CAP71871_4",
35059
+ "type": "Service-Explicit",
35060
+ "unicode-validity": false,
35061
+ "updated-sms-editor": Array [
35062
+ "LATEST FASHION@VISHAL
35063
+ ",
35064
+ "{#var#}",
35065
+ "
35066
+
35067
+ BUY1GET1-
35068
+ ",
35069
+ "{#var#}",
35070
+ "
35071
+ ",
35072
+ "{#var#}",
35073
+ "
35074
+ ",
35075
+ "{#var#}",
35076
+ "
35077
+
35078
+ FREE GIFTS-
35079
+ ",
35080
+ "{#var#}",
35081
+ "
35082
+ ",
35083
+ "{#var#}",
35084
+ ],
35085
+ "var-mapped": Object {
35086
+ "{#var#}_1": Object {
35087
+ "count": 1,
35088
+ "data": "",
35089
+ },
35090
+ "{#var#}_11": Object {
35091
+ "count": 1,
35092
+ "data": "",
35093
+ },
35094
+ "{#var#}_3": Object {
35095
+ "count": 1,
35096
+ "data": "",
35097
+ },
35098
+ "{#var#}_5": Object {
35099
+ "count": 1,
35100
+ "data": "",
35101
+ },
35102
+ "{#var#}_7": Object {
35103
+ "count": 1,
35104
+ "data": "",
35105
+ },
35106
+ "{#var#}_9": Object {
35107
+ "count": 1,
35108
+ "data": "",
35109
+ },
35110
+ },
35111
+ },
35112
+ ],
35113
+ },
35114
+ },
35115
+ [Function],
35116
+ ],
35117
+ ],
35118
+ "results": Array [
35119
+ Object {
35120
+ "type": "return",
35121
+ "value": undefined,
35122
+ },
35123
+ ],
35124
+ },
34843
35125
  "getTemplateDetails": [MockFunction] {
34844
35126
  "calls": Array [
34845
35127
  Array [
@@ -35256,18 +35538,6 @@ new message content.",
35256
35538
  "id": "app.v2Components.TestAndPreviewSlidebox.senderId",
35257
35539
  },
35258
35540
  ],
35259
- Array [
35260
- Object {
35261
- "defaultMessage": "Email body cannot be empty",
35262
- "id": "creatives.componentsV2.FormBuilder.emailBodyEmptyError",
35263
- },
35264
- ],
35265
- Array [
35266
- Object {
35267
- "defaultMessage": "Something went wrong while validating content, please try again later",
35268
- "id": "creatives.componentsV2.FormBuilder.somethingWentWrong",
35269
- },
35270
- ],
35271
35541
  ],
35272
35542
  "results": Array [
35273
35543
  Object {
@@ -35470,14 +35740,6 @@ new message content.",
35470
35740
  "type": "return",
35471
35741
  "value": undefined,
35472
35742
  },
35473
- Object {
35474
- "type": "return",
35475
- "value": undefined,
35476
- },
35477
- Object {
35478
- "type": "return",
35479
- "value": undefined,
35480
- },
35481
35743
  ],
35482
35744
  },
35483
35745
  }
@@ -35530,8 +35792,130 @@ FREE GIFTS-
35530
35792
  "template_name": "CAP71871_4",
35531
35793
  "type": "Service-Explicit",
35532
35794
  "unicode-validity": false,
35795
+ "updated-sms-editor": Array [
35796
+ "LATEST FASHION@VISHAL
35797
+ ",
35798
+ "{#var#}",
35799
+ "
35800
+
35801
+ BUY1GET1-
35802
+ ",
35803
+ "{#var#}",
35804
+ "
35805
+ ",
35806
+ "{#var#}",
35807
+ "
35808
+ ",
35809
+ "{#var#}",
35810
+ "
35811
+
35812
+ FREE GIFTS-
35813
+ ",
35814
+ "{#var#}",
35815
+ "
35816
+ ",
35817
+ "{#var#}",
35818
+ ],
35819
+ "var-mapped": Object {
35820
+ "{#var#}_1": Object {
35821
+ "count": 1,
35822
+ "data": "",
35823
+ },
35824
+ "{#var#}_11": Object {
35825
+ "count": 1,
35826
+ "data": "",
35827
+ },
35828
+ "{#var#}_3": Object {
35829
+ "count": 1,
35830
+ "data": "",
35831
+ },
35832
+ "{#var#}_5": Object {
35833
+ "count": 1,
35834
+ "data": "",
35835
+ },
35836
+ "{#var#}_7": Object {
35837
+ "count": 1,
35838
+ "data": "",
35839
+ },
35840
+ "{#var#}_9": Object {
35841
+ "count": 1,
35842
+ "data": "",
35843
+ },
35844
+ },
35533
35845
  },
35534
- "history": Array [],
35846
+ "history": Array [
35847
+ Object {
35848
+ "category": "--",
35849
+ "consent-type": "Explicit",
35850
+ "header": "VISHMM",
35851
+ "sms-editor": "LATEST FASHION@VISHAL
35852
+ {#var#}
35853
+
35854
+ BUY1GET1-
35855
+ {#var#}
35856
+ {#var#}
35857
+ {#var#}
35858
+
35859
+ FREE GIFTS-
35860
+ {#var#}
35861
+ {#var#}",
35862
+ "tabKey": 1,
35863
+ "template_id": "'1107160207324585172'",
35864
+ "template_name": "CAP71871_4",
35865
+ "type": "Service-Explicit",
35866
+ "unicode-validity": false,
35867
+ "updated-sms-editor": Array [
35868
+ "LATEST FASHION@VISHAL
35869
+ ",
35870
+ "{#var#}",
35871
+ "
35872
+
35873
+ BUY1GET1-
35874
+ ",
35875
+ "{#var#}",
35876
+ "
35877
+ ",
35878
+ "{#var#}",
35879
+ "
35880
+ ",
35881
+ "{#var#}",
35882
+ "
35883
+
35884
+ FREE GIFTS-
35885
+ ",
35886
+ "{#var#}",
35887
+ "
35888
+ ",
35889
+ "{#var#}",
35890
+ ],
35891
+ "var-mapped": Object {
35892
+ "{#var#}_1": Object {
35893
+ "count": 1,
35894
+ "data": "",
35895
+ },
35896
+ "{#var#}_11": Object {
35897
+ "count": 1,
35898
+ "data": "",
35899
+ },
35900
+ "{#var#}_3": Object {
35901
+ "count": 1,
35902
+ "data": "",
35903
+ },
35904
+ "{#var#}_5": Object {
35905
+ "count": 1,
35906
+ "data": "",
35907
+ },
35908
+ "{#var#}_7": Object {
35909
+ "count": 1,
35910
+ "data": "",
35911
+ },
35912
+ "{#var#}_9": Object {
35913
+ "count": 1,
35914
+ "data": "",
35915
+ },
35916
+ },
35917
+ },
35918
+ ],
35535
35919
  },
35536
35920
  }
35537
35921
  }
@@ -37306,18 +37690,6 @@ FREE GIFTS-
37306
37690
  "id": "app.v2Components.TestAndPreviewSlidebox.senderId",
37307
37691
  },
37308
37692
  ],
37309
- Array [
37310
- Object {
37311
- "defaultMessage": "Email body cannot be empty",
37312
- "id": "creatives.componentsV2.FormBuilder.emailBodyEmptyError",
37313
- },
37314
- ],
37315
- Array [
37316
- Object {
37317
- "defaultMessage": "Something went wrong while validating content, please try again later",
37318
- "id": "creatives.componentsV2.FormBuilder.somethingWentWrong",
37319
- },
37320
- ],
37321
37693
  ],
37322
37694
  "results": Array [
37323
37695
  Object {
@@ -37520,14 +37892,6 @@ FREE GIFTS-
37520
37892
  "type": "return",
37521
37893
  "value": undefined,
37522
37894
  },
37523
- Object {
37524
- "type": "return",
37525
- "value": undefined,
37526
- },
37527
- Object {
37528
- "type": "return",
37529
- "value": undefined,
37530
- },
37531
37895
  ],
37532
37896
  }
37533
37897
  }
@@ -37951,18 +38315,6 @@ FREE GIFTS-
37951
38315
  "id": "app.v2Components.TestAndPreviewSlidebox.senderId",
37952
38316
  },
37953
38317
  ],
37954
- Array [
37955
- Object {
37956
- "defaultMessage": "Email body cannot be empty",
37957
- "id": "creatives.componentsV2.FormBuilder.emailBodyEmptyError",
37958
- },
37959
- ],
37960
- Array [
37961
- Object {
37962
- "defaultMessage": "Something went wrong while validating content, please try again later",
37963
- "id": "creatives.componentsV2.FormBuilder.somethingWentWrong",
37964
- },
37965
- ],
37966
38318
  ],
37967
38319
  "results": Array [
37968
38320
  Object {
@@ -38165,14 +38517,6 @@ FREE GIFTS-
38165
38517
  "type": "return",
38166
38518
  "value": undefined,
38167
38519
  },
38168
- Object {
38169
- "type": "return",
38170
- "value": undefined,
38171
- },
38172
- Object {
38173
- "type": "return",
38174
- "value": undefined,
38175
- },
38176
38520
  ],
38177
38521
  }
38178
38522
  }
@@ -38483,7 +38827,6 @@ FREE GIFTS-
38483
38827
  </CapButton>
38484
38828
  <CapButton
38485
38829
  className="create-msg create-dlt-msg"
38486
- disabled={true}
38487
38830
  isAddBtn={false}
38488
38831
  onClick={[Function]}
38489
38832
  type="primary"
@@ -38491,7 +38834,6 @@ FREE GIFTS-
38491
38834
  <Button
38492
38835
  block={false}
38493
38836
  className="cap-button-v2 create-msg create-dlt-msg"
38494
- disabled={true}
38495
38837
  ghost={false}
38496
38838
  htmlType="button"
38497
38839
  loading={false}
@@ -38501,7 +38843,6 @@ FREE GIFTS-
38501
38843
  <Wave>
38502
38844
  <button
38503
38845
  className="ant-btn cap-button-v2 create-msg create-dlt-msg ant-btn-primary"
38504
- disabled={true}
38505
38846
  onClick={[Function]}
38506
38847
  type="button"
38507
38848
  >