@capillarytech/creatives-library 8.0.313 → 8.0.315
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 +1 -1
- package/v2Containers/InApp/index.js +76 -10
package/package.json
CHANGED
|
@@ -68,6 +68,7 @@ import { HTML_EDITOR_VARIANTS } from "../../v2Components/HtmlEditor/constants";
|
|
|
68
68
|
import { INAPP_EDITOR_TYPES } from "../InAppWrapper/constants";
|
|
69
69
|
import InappAdvanced from "../InappAdvance/index";
|
|
70
70
|
import CapDeviceContent from "../../v2Components/CapDeviceContent";
|
|
71
|
+
import capDeviceContentMessages from "../../v2Components/CapDeviceContent/messages";
|
|
71
72
|
import { ErrorInfoNote } from "../../v2Components/ErrorInfoNote";
|
|
72
73
|
|
|
73
74
|
let editContent = {};
|
|
@@ -1218,6 +1219,47 @@ export const InApp = (props) => {
|
|
|
1218
1219
|
// ── Old-flow helpers (used by CapDeviceContent when flag is disabled) ──────
|
|
1219
1220
|
const isAiContentBotDisabled = currentOrgDetails?.accessibleFeatures?.includes(AI_CONTENT_BOT_DISABLED);
|
|
1220
1221
|
|
|
1222
|
+
/**
|
|
1223
|
+
* Clears stored API/liquid errors for a specific device (and GENERIC) so
|
|
1224
|
+
* hasAnyErrors() goes false and Done can be re-clicked after editing.
|
|
1225
|
+
* Does NOT clear errors that belong only to the *other* device.
|
|
1226
|
+
*/
|
|
1227
|
+
const clearDeviceErrors = useCallback((platform) => {
|
|
1228
|
+
const key = platform === IOS ? IOS_CAPITAL : ANDROID;
|
|
1229
|
+
setErrorMessage((prev) => ({
|
|
1230
|
+
STANDARD_ERROR_MSG: {
|
|
1231
|
+
...prev.STANDARD_ERROR_MSG,
|
|
1232
|
+
[key]: [],
|
|
1233
|
+
GENERIC: [],
|
|
1234
|
+
},
|
|
1235
|
+
LIQUID_ERROR_MSG: {
|
|
1236
|
+
...prev.LIQUID_ERROR_MSG,
|
|
1237
|
+
[key]: [],
|
|
1238
|
+
GENERIC: [],
|
|
1239
|
+
},
|
|
1240
|
+
}));
|
|
1241
|
+
}, [IOS_CAPITAL, ANDROID]);
|
|
1242
|
+
|
|
1243
|
+
const setTitleAndroidWithClear = useCallback((value) => {
|
|
1244
|
+
clearDeviceErrors(ANDROID);
|
|
1245
|
+
setTitleAndroid(value);
|
|
1246
|
+
}, [clearDeviceErrors]);
|
|
1247
|
+
|
|
1248
|
+
const setTitleIosWithClear = useCallback((value) => {
|
|
1249
|
+
clearDeviceErrors(IOS);
|
|
1250
|
+
setTitleIos(value);
|
|
1251
|
+
}, [clearDeviceErrors]);
|
|
1252
|
+
|
|
1253
|
+
const setTemplateMessageAndroidWithClear = useCallback((value) => {
|
|
1254
|
+
clearDeviceErrors(ANDROID);
|
|
1255
|
+
setTemplateMessageAndroid(value);
|
|
1256
|
+
}, [clearDeviceErrors]);
|
|
1257
|
+
|
|
1258
|
+
const setTemplateMessageIosWithClear = useCallback((value) => {
|
|
1259
|
+
clearDeviceErrors(IOS);
|
|
1260
|
+
setTemplateMessageIos(value);
|
|
1261
|
+
}, [clearDeviceErrors]);
|
|
1262
|
+
|
|
1221
1263
|
const templateDescErrorHandler = (value) => {
|
|
1222
1264
|
const { unsupportedTags, isBraceError } = validateTags({
|
|
1223
1265
|
content: value,
|
|
@@ -1231,19 +1273,34 @@ export const InApp = (props) => {
|
|
|
1231
1273
|
return formatMessage(globalMessages.unsupportedTagsValidationError, { unsupportedTags });
|
|
1232
1274
|
}
|
|
1233
1275
|
if (isBraceError) {
|
|
1234
|
-
return formatMessage(globalMessages.
|
|
1276
|
+
return formatMessage(globalMessages.unbalanacedCurlyBraces);
|
|
1235
1277
|
}
|
|
1236
1278
|
return '';
|
|
1237
1279
|
};
|
|
1238
1280
|
|
|
1281
|
+
/** Same rules as CapDeviceContent onTitleChange / onTemplateMessageChange */
|
|
1282
|
+
const computeInAppTemplateFieldError = (value) => {
|
|
1283
|
+
let error = templateDescErrorHandler(value);
|
|
1284
|
+
if (value === '') {
|
|
1285
|
+
error = formatMessage(capDeviceContentMessages.emptyTemplateMessageErrorMessage);
|
|
1286
|
+
}
|
|
1287
|
+
return error;
|
|
1288
|
+
};
|
|
1289
|
+
|
|
1239
1290
|
const onCopyTitleAndContent = () => {
|
|
1240
1291
|
if (panes === ANDROID) {
|
|
1292
|
+
clearDeviceErrors(ANDROID);
|
|
1241
1293
|
setTitleAndroid(titleIos);
|
|
1242
1294
|
setTemplateMessageAndroid(templateMessageIos);
|
|
1295
|
+
setTemplateTitleErrorAndroid(computeInAppTemplateFieldError(titleIos));
|
|
1296
|
+
setTemplateMessageErrorAndroid(computeInAppTemplateFieldError(templateMessageIos));
|
|
1243
1297
|
setInAppImageSrcAndroid(inAppImageSrcIos);
|
|
1244
1298
|
} else {
|
|
1299
|
+
clearDeviceErrors(IOS);
|
|
1245
1300
|
setTitleIos(titleAndroid);
|
|
1246
1301
|
setTemplateMessageIos(templateMessageAndroid);
|
|
1302
|
+
setTemplateTitleErrorIos(computeInAppTemplateFieldError(titleAndroid));
|
|
1303
|
+
setTemplateMessageErrorIos(computeInAppTemplateFieldError(templateMessageAndroid));
|
|
1247
1304
|
setInAppImageSrcIos(inAppImageSrcAndroid);
|
|
1248
1305
|
}
|
|
1249
1306
|
};
|
|
@@ -1251,12 +1308,21 @@ export const InApp = (props) => {
|
|
|
1251
1308
|
const onTagSelect = (value, index) => {
|
|
1252
1309
|
const tag = `{{${value}}}`;
|
|
1253
1310
|
if (panes === ANDROID) {
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1311
|
+
clearDeviceErrors(ANDROID);
|
|
1312
|
+
const nextTitle = index === 0 ? titleAndroid + tag : titleAndroid;
|
|
1313
|
+
const nextMessage = index === 0 ? templateMessageAndroid : templateMessageAndroid + tag;
|
|
1314
|
+
if (index === 0) setTitleAndroid(nextTitle);
|
|
1315
|
+
else setTemplateMessageAndroid(nextMessage);
|
|
1316
|
+
setTemplateTitleErrorAndroid(computeInAppTemplateFieldError(nextTitle));
|
|
1317
|
+
setTemplateMessageErrorAndroid(computeInAppTemplateFieldError(nextMessage));
|
|
1258
1318
|
} else {
|
|
1259
|
-
|
|
1319
|
+
clearDeviceErrors(IOS);
|
|
1320
|
+
const nextTitle = index === 0 ? titleIos + tag : titleIos;
|
|
1321
|
+
const nextMessage = index === 0 ? templateMessageIos : templateMessageIos + tag;
|
|
1322
|
+
if (index === 0) setTitleIos(nextTitle);
|
|
1323
|
+
else setTemplateMessageIos(nextMessage);
|
|
1324
|
+
setTemplateTitleErrorIos(computeInAppTemplateFieldError(nextTitle));
|
|
1325
|
+
setTemplateMessageErrorIos(computeInAppTemplateFieldError(nextMessage));
|
|
1260
1326
|
}
|
|
1261
1327
|
};
|
|
1262
1328
|
|
|
@@ -1283,10 +1349,10 @@ export const InApp = (props) => {
|
|
|
1283
1349
|
templateMediaType={templateMediaType}
|
|
1284
1350
|
setTemplateMediaType={setTemplateMediaType}
|
|
1285
1351
|
title={titleAndroid}
|
|
1286
|
-
setTitle={
|
|
1352
|
+
setTitle={setTitleAndroidWithClear}
|
|
1287
1353
|
templateMessageError={templateMessageErrorAndroid}
|
|
1288
1354
|
templateMessage={templateMessageAndroid}
|
|
1289
|
-
setTemplateMessage={
|
|
1355
|
+
setTemplateMessage={setTemplateMessageAndroidWithClear}
|
|
1290
1356
|
setTemplateMessageError={setTemplateMessageErrorAndroid}
|
|
1291
1357
|
addActionLink={addActionLinkAndroid}
|
|
1292
1358
|
setAddActionLink={setAddActionLinkAndroid}
|
|
@@ -1328,10 +1394,10 @@ export const InApp = (props) => {
|
|
|
1328
1394
|
templateMediaType={templateMediaType}
|
|
1329
1395
|
setTemplateMediaType={setTemplateMediaType}
|
|
1330
1396
|
title={titleIos}
|
|
1331
|
-
setTitle={
|
|
1397
|
+
setTitle={setTitleIosWithClear}
|
|
1332
1398
|
templateMessageError={templateMessageErrorIos}
|
|
1333
1399
|
templateMessage={templateMessageIos}
|
|
1334
|
-
setTemplateMessage={
|
|
1400
|
+
setTemplateMessage={setTemplateMessageIosWithClear}
|
|
1335
1401
|
setTemplateMessageError={setTemplateMessageErrorIos}
|
|
1336
1402
|
addActionLink={addActionLinkIos}
|
|
1337
1403
|
setAddActionLink={setAddActionLinkIos}
|