Skip to content

Commit

Permalink
Add backward compatability for the audienceManager property
Browse files Browse the repository at this point in the history
  • Loading branch information
jonsnyder committed May 13, 2024
1 parent 3eb3702 commit 214c65c
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 123 deletions.
30 changes: 19 additions & 11 deletions src/lib/actions/updateVariable/createUpdateVariable.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,25 @@ const { deletePath } = require("../../utils/pathUtils");

module.exports =
({ variableStore, deepAssign }) =>
({ data, dataElementCacheId, transforms, customCode }, event) => {
const existingValue = Object.keys(transforms || {}).reduce((memo, path) => {
const { clear } = transforms[path];
return clear ? deletePath(memo, path) : memo;
}, variableStore[dataElementCacheId] || {});
({ data, dataElementCacheId, transforms, customCode }, event) => {
const existingValue = Object.keys(transforms || {}).reduce((memo, path) => {
const { clear } = transforms[path];
return clear ? deletePath(memo, path) : memo;
}, variableStore[dataElementCacheId] || {});

variableStore[dataElementCacheId] = deepAssign({}, existingValue, data);
variableStore[dataElementCacheId] = deepAssign({}, existingValue, data);

if (customCode) {
customCode(variableStore[dataElementCacheId], event);
}
if (customCode) {
customCode(variableStore[dataElementCacheId], event);
}

return Promise.resolve();
};
// This is a temporary fix to support the 'audienceManager' property that should be lowercased.
// eslint-disable-next-line no-underscore-dangle
const analytics = variableStore[dataElementCacheId]?.__adobe?.analytics || {};
if (analytics.audienceManager) {
analytics.audiencemanager = analytics.audienceManager;
delete analytics.audienceManager;
}

return Promise.resolve();
};
222 changes: 115 additions & 107 deletions src/view/actions/updateVariable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,14 @@ const getInitialFormStateFromDataElement = async ({
context.schema = schema;
context.dataElementId = dataElement.id;

// Temporary fix to support the audienceManager property that should have been lowercased.
// eslint-disable-next-line no-underscore-dangle
const analytics = data?.__adobe?.analytics || {};
if (analytics.audienceManager) {
analytics.audiencemanager = analytics.audienceManager;
delete analytics.audienceManager;
}

return getInitialFormState({
schema,
value: data,
Expand All @@ -122,139 +130,139 @@ const getInitialFormStateFromDataElement = async ({

const getInitialValues =
context =>
async ({ initInfo }) => {
const {
propertySettings: { id: propertyId } = {},
company: { orgId },
tokens: { imsAccess }
} = initInfo;
const {
dataElementId,
transforms = {},
schema: previouslySavedSchemaInfo,
customCode = ""
} = initInfo.settings || {};

let { data = {} } = initInfo.settings || {};

const initialValues = {
data,
customCode
};

const {
results: dataElementsFirstPage,
nextPage: dataElementsFirstPageCursor
} = await fetchDataElements({
orgId,
imsAccess,
propertyId
});

context.dataElementsFirstPage = dataElementsFirstPage;
context.dataElementsFirstPageCursor = dataElementsFirstPageCursor;
async ({ initInfo }) => {
const {
propertySettings: { id: propertyId } = {},
company: { orgId },
tokens: { imsAccess }
} = initInfo;
const {
dataElementId,
transforms = {},
schema: previouslySavedSchemaInfo,
customCode = ""
} = initInfo.settings || {};

let { data = {} } = initInfo.settings || {};

const initialValues = {
data,
customCode
};

let dataElement;
if (dataElementId) {
dataElement = await fetchDataElement({
const {
results: dataElementsFirstPage,
nextPage: dataElementsFirstPageCursor
} = await fetchDataElements({
orgId,
imsAccess,
dataElementId
propertyId
});
context.previouslySavedSchemaInfo = previouslySavedSchemaInfo;
} else if (
dataElementsFirstPage.length === 1 &&
dataElementsFirstPageCursor === null
) {
dataElement = dataElementsFirstPage[0];
}

initialValues.dataElement = dataElement;
context.dataElementsFirstPage = dataElementsFirstPage;
context.dataElementsFirstPageCursor = dataElementsFirstPageCursor;

let dataElement;
if (dataElementId) {
dataElement = await fetchDataElement({
orgId,
imsAccess,
dataElementId
});
context.previouslySavedSchemaInfo = previouslySavedSchemaInfo;
} else if (
dataElementsFirstPage.length === 1 &&
dataElementsFirstPageCursor === null
) {
dataElement = dataElementsFirstPage[0];
}

initialValues.dataElement = dataElement;

if (dataElement) {
const prefix = isDataVariable(dataElement) ? "data" : "xdm";
const prefixedTransforms = Object.keys(transforms).reduce((memo, key) => {
// The key for a root element transform is "".
memo[key === "" ? prefix : `${prefix}.${key}`] = transforms[key];
return memo;
}, {});
if (dataElement) {
const prefix = isDataVariable(dataElement) ? "data" : "xdm";
const prefixedTransforms = Object.keys(transforms).reduce((memo, key) => {
// The key for a root element transform is "".
memo[key === "" ? prefix : `${prefix}.${key}`] = transforms[key];
return memo;
}, {});

data = { [prefix]: data };
data = { [prefix]: data };

const initialFormState = await getInitialFormStateFromDataElement({
dataElement,
context,
orgId,
imsAccess,
data,
transforms: prefixedTransforms
});
const initialFormState = await getInitialFormStateFromDataElement({
dataElement,
context,
orgId,
imsAccess,
data,
transforms: prefixedTransforms
});

return { ...initialValues, ...initialFormState };
}
return { ...initialValues, ...initialFormState };
}

return initialValues;
};
return initialValues;
};

const getSettings =
context =>
({ values }) => {
const { dataElement } = values;
const { id: dataElementId, settings } = dataElement || {};
const { cacheId: dataElementCacheId } = settings || {};

const transforms = {};

const { xdm, data } =
getValueFromFormState({ formStateNode: values, transforms }) || {};

const dataTransforms = Object.keys(transforms).reduce((memo, key) => {
const period = key.indexOf(".");
memo[key.substring(period === -1 ? key.length : period + 1)] =
transforms[key];
return memo;
}, {});

const schema = {
id: context.schema?.$id,
version: context.schema?.version
};
({ values }) => {
const { dataElement } = values;
const { id: dataElementId, settings } = dataElement || {};
const { cacheId: dataElementCacheId } = settings || {};

const response = {
dataElementId,
dataElementCacheId,
data: xdm || data || {}
};
const transforms = {};

if (schema.id) {
response.schema = schema;
}
const { xdm, data } =
getValueFromFormState({ formStateNode: values, transforms }) || {};

if (Object.keys(dataTransforms).length > 0) {
response.transforms = dataTransforms;
}
const dataTransforms = Object.keys(transforms).reduce((memo, key) => {
const period = key.indexOf(".");
memo[key.substring(period === -1 ? key.length : period + 1)] =
transforms[key];
return memo;
}, {});

if (values.customCode) {
response.customCode = values.customCode;
}
const schema = {
id: context.schema?.$id,
version: context.schema?.version
};

const response = {
dataElementId,
dataElementCacheId,
data: xdm || data || {}
};

return response;
};
if (schema.id) {
response.schema = schema;
}

if (Object.keys(dataTransforms).length > 0) {
response.transforms = dataTransforms;
}

if (values.customCode) {
response.customCode = values.customCode;
}

return response;
};

const validationSchema = object().shape({
dataElement: object().required("Please specify a data element.")
});

const validateFormikState =
context =>
({ values }) => {
const { schema } = context;
if (!schema) {
return {};
}
({ values }) => {
const { schema } = context;
if (!schema) {
return {};
}

return validate(values);
};
return validate(values);
};

const findFirstNodeIdForDepth = (formStateNode, depth) => {
const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ export default solutions => ({
__adobe: {
title: "Adobe",
type: "object",
properties: solutions.reduce((accumulator, currentValue) => {
accumulator[currentValue] = {
properties: solutions.reduce((accumulator, solutionKey) => {
// Temporary support for 'audienceManager' property that should have been lowercased.
const solutionKeyLower = solutionKey.toLowerCase();
accumulator[solutionKeyLower] = {
type:
currentValue === "analytics" ? OBJECT_ANALYTICS : OBJECT_JSON,
solutionKeyLower === "analytics" ? OBJECT_ANALYTICS : OBJECT_JSON,
expandPaths: false,
title: solutionsContext.find(
([solution]) => currentValue === solution
([solution]) => solutionKeyLower === solution
)[1]
};
return accumulator;
Expand Down
3 changes: 2 additions & 1 deletion src/view/dataElements/variable/components/dataVariable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ export const bridge = {
const { solutions = [] } = settings;

const initialValues = {
solutions
// Temporary support for 'audienceManager' property that should have been lowercased.
solutions: solutions.map(s => s.toLowerCase())
};

return initialValues;
Expand Down

0 comments on commit 214c65c

Please sign in to comment.