@kontent-ai/smart-link
Version:
Kontent.ai Smart Link SDK allowing to automatically inject [smart links](https://docs.kontent.ai/tutorials/develop-apps/build-strong-foundation/set-up-editing-from-preview#a-using-smart-links) to Kontent.ai according to manually specified [HTML data attri
197 lines • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateEditButtonMessageData = void 0;
exports.validateAddInitialMessageData = validateAddInitialMessageData;
const IFrameCommunicatorTypes_1 = require("../lib/IFrameCommunicatorTypes");
const Logger_1 = require("../lib/Logger");
const validateConfigurationDataAttributes = (data, configurationDataAttributes) => {
const languageCodename = data.parsed.languageCodename ?? configurationDataAttributes.languageCodename;
const projectId = data.parsed.environmentId ?? configurationDataAttributes.environmentId;
if (!languageCodename || !projectId) {
const missing = [
...(!languageCodename ? ["languageCodename"] : []),
...(!projectId ? ["environmentId"] : []),
];
return { success: false, missing: missing };
}
return { success: true, data: { languageCodename, projectId } };
};
function validateContentItemClickEditMessageData(data, configurationDataAttributes) {
const configData = validateConfigurationDataAttributes(data, configurationDataAttributes);
if (!data.parsed.itemId || !configData.success) {
return {
success: false,
missing: [
...(!data.parsed.itemId ? ["itemId"] : []),
...(configData.success ? [] : configData.missing),
],
};
}
return {
success: true,
data: {
languageCodename: configData.data.languageCodename,
projectId: configData.data.projectId,
itemId: data.parsed.itemId,
},
};
}
function validateElementClickMessageData(data, configurationDataAttributes) {
const parseItem = validateContentItemClickEditMessageData(data, configurationDataAttributes);
if (!data.parsed.elementCodename || !parseItem.success) {
return {
success: false,
missing: ["elementCodename", ...(parseItem.success ? [] : parseItem.missing)],
};
}
return {
success: true,
data: {
...parseItem.data,
elementCodename: data.parsed.elementCodename,
contentComponentId: data.parsed.contentComponentId ?? undefined,
},
};
}
function validateContentComponentClickMessageData(data, configurationDataAttributes) {
const parseItem = validateContentItemClickEditMessageData(data, configurationDataAttributes);
if (!data.parsed.contentComponentId || !parseItem.success) {
return {
success: false,
missing: ["contentComponentId", ...(parseItem.success ? [] : parseItem.missing)],
};
}
return {
success: true,
data: {
...parseItem.data,
contentComponentId: data.parsed.contentComponentId,
},
};
}
const validateEditButtonMessageData = (data, configuration) => {
const getValidationResult = () => {
if ("elementCodename" in data.parsed) {
return {
type: "element",
validationResult: validateElementClickMessageData(data, configuration.defaultDataAttributes),
};
}
if ("contentComponentId" in data.parsed) {
return {
type: "contentComponent",
validationResult: validateContentComponentClickMessageData(data, configuration.defaultDataAttributes),
};
}
return {
type: "contentItem",
validationResult: validateContentItemClickEditMessageData(data, configuration.defaultDataAttributes),
};
};
const { type, validationResult } = getValidationResult();
if (!validationResult.success) {
printDebugData(data.debugData, "[KSL]: Parsing edit button data attributes failed");
return {
type: "error",
missing: validationResult.missing,
};
}
if (configuration.debug) {
printDebugData(data.debugData, "[KSL]: Parsed edit button data attributes");
}
if (type === "element") {
return {
type: "element",
data: validationResult.data,
};
}
if (type === "contentComponent") {
return {
type: "contentComponent",
data: validationResult.data,
};
}
return {
type: "contentItem",
data: validationResult.data,
};
};
exports.validateEditButtonMessageData = validateEditButtonMessageData;
const validatePlacement = (data) => {
const insertPosition = getPlacement(data.parsed.placement);
if ((insertPosition === IFrameCommunicatorTypes_1.InsertPositionPlacement.After ||
insertPosition === IFrameCommunicatorTypes_1.InsertPositionPlacement.Before) &&
!data.parsed.targetId) {
return { success: false, missing: ["targetId"] };
}
return {
success: true,
data: { placement: insertPosition, targetId: data.parsed.targetId ?? undefined },
};
};
const getPlacement = (placement) => {
switch (placement) {
case "after":
return IFrameCommunicatorTypes_1.InsertPositionPlacement.After;
case "before":
return IFrameCommunicatorTypes_1.InsertPositionPlacement.Before;
case "start":
return IFrameCommunicatorTypes_1.InsertPositionPlacement.Start;
default:
return IFrameCommunicatorTypes_1.InsertPositionPlacement.End;
}
};
function validateAddInitialMessageData(data, configuration) {
const configData = validateConfigurationDataAttributes(data, configuration.defaultDataAttributes);
const placement = validatePlacement(data);
if (!data.parsed.itemId ||
!data.parsed.elementCodename ||
!placement.success ||
!configData.success) {
printDebugData(data.debugData, "[KSL]: Parsing add button data attributes failed");
return {
success: false,
missing: [
...(!data.parsed.itemId ? ["itemId"] : []),
...(!data.parsed.elementCodename ? ["elementCodename"] : []),
...(placement.success ? [] : placement.missing),
...(configData.success ? [] : configData.missing),
],
};
}
if (configuration.debug) {
printDebugData(data.debugData, "[KSL]: Parsed add button data attributes");
}
return {
success: true,
data: {
projectId: configData.data.projectId,
languageCodename: configData.data.languageCodename,
itemId: data.parsed.itemId,
contentComponentId: data.parsed.contentComponentId ?? undefined,
insertPosition: placement.data,
elementCodename: data.parsed.elementCodename,
},
};
}
const printDebugData = (debugData, message) => {
(0, Logger_1.logGroupCollapsed)(message);
debugData.forEach((item) => {
(0, Logger_1.logGroupCollapsed)(item.element);
if (item.parsedAttributes.length > 0) {
(0, Logger_1.logInfo)("Resolved attributes:");
item.parsedAttributes.forEach((attr) => {
(0, Logger_1.logInfo)(`${attr.token}: ${attr.dataAttribute}: ${attr.value}`);
});
}
if (item.skippedAttributes.length > 0) {
(0, Logger_1.logInfo)("Parsed Kontent.ai attributes:");
item.skippedAttributes.forEach((attr) => {
(0, Logger_1.logInfo)(`${attr.dataAttribute}: ${attr.value}`);
});
}
(0, Logger_1.logGroupEnd)();
});
(0, Logger_1.logGroupEnd)();
};
//# sourceMappingURL=messageValidation.js.map