chore: remove attributes from identify call (#4012)

Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com>
This commit is contained in:
Matti Nannt
2024-10-24 19:16:56 +02:00
committed by GitHub
parent 0d11c08be7
commit 5daeab6554
7 changed files with 34 additions and 78 deletions
+5 -28
View File
@@ -55,8 +55,7 @@ export const updateAttribute = async (
}
return err({
code: "network_error",
// @ts-expect-error
status: res.error.status ?? 500,
status: 500,
message: res.error.message ?? `Error updating person with userId ${userId}`,
url: `${config.get().apiHost}/api/v1/client/${environmentId}/people/${userId}/attributes`,
responseMessage: res.error.message,
@@ -92,19 +91,6 @@ export const updateAttributes = async (
// clean attributes and remove existing attributes if config already exists
const updatedAttributes = { ...attributes };
try {
const existingAttributes = config.get().personState.data.attributes;
if (existingAttributes) {
for (const [key, value] of Object.entries(existingAttributes)) {
if (updatedAttributes[key] === value) {
delete updatedAttributes[key];
}
}
}
} catch (e) {
logger.debug("config not set; sending all attributes to backend");
}
// send to backend if updatedAttributes is not empty
if (Object.keys(updatedAttributes).length === 0) {
logger.debug("No attributes to update. Skipping update.");
@@ -139,14 +125,6 @@ export const updateAttributes = async (
}
};
export const isExistingAttribute = (key: string, value: string): boolean => {
if (config.get().personState.data.attributes[key] === value) {
return true;
}
return false;
};
export const setAttributeInApp = async (
key: string,
value: any
@@ -159,11 +137,6 @@ export const setAttributeInApp = async (
const userId = config.get().personState.data.userId;
logger.debug("Setting attribute: " + key + " to value: " + value);
// check if attribute already exists with this value
if (isExistingAttribute(key, value.toString())) {
logger.debug("Attribute already set to this value. Skipping update.");
return okVoid();
}
if (!userId) {
logger.error(
@@ -191,6 +164,10 @@ export const setAttributeInApp = async (
...config.get(),
personState,
filteredSurveys,
attributes: {
...config.get().attributes,
[key]: value.toString(),
},
});
}
+26 -42
View File
@@ -162,24 +162,6 @@ export const initialize = async (
logger.debug("Adding widget container to DOM");
addWidgetContainer();
let updatedAttributes: TAttributes | null = null;
if (configInput.attributes) {
if (configInput.userId) {
const res = await updateAttributes(
configInput.apiHost,
configInput.environmentId,
configInput.userId,
configInput.attributes
);
if (res.ok !== true) {
return err(res.error);
}
updatedAttributes = res.value;
} else {
updatedAttributes = { ...configInput.attributes };
}
}
if (
existingConfig &&
existingConfig.environmentState &&
@@ -195,13 +177,12 @@ export const initialize = async (
isEnvironmentStateExpired = true;
}
// if the config has a userId and the person state has expired, we need to sync the person state
if (
configInput.userId &&
existingConfig.personState.expiresAt &&
new Date(existingConfig.personState.expiresAt) < new Date()
(existingConfig.personState === null ||
(existingConfig.personState.expiresAt && new Date(existingConfig.personState.expiresAt) < new Date()))
) {
logger.debug("Person state expired. Syncing.");
logger.debug("Person state needs syncing - either null or expired");
isPersonStateExpired = true;
}
@@ -239,6 +220,7 @@ export const initialize = async (
environmentState,
personState,
filteredSurveys,
attributes: configInput.attributes ?? {},
});
const surveyNames = filteredSurveys.map((s) => s.name);
@@ -247,12 +229,30 @@ export const initialize = async (
putFormbricksInErrorState(config);
}
} else {
logger.debug(
"No valid configuration found or it has been expired. Resetting config and creating new one."
);
logger.debug("No valid configuration found. Resetting config and creating new one.");
config.resetConfig();
logger.debug("Syncing.");
let updatedAttributes: TAttributes | null = null;
if (configInput.attributes) {
if (configInput.userId) {
const res = await updateAttributes(
configInput.apiHost,
configInput.environmentId,
configInput.userId,
configInput.attributes
);
if (res.ok !== true) {
return err(res.error);
}
updatedAttributes = res.value;
} else {
updatedAttributes = { ...configInput.attributes };
}
}
try {
const environmentState = await fetchEnvironmentState(
{
@@ -280,6 +280,7 @@ export const initialize = async (
personState,
environmentState,
filteredSurveys,
attributes: updatedAttributes ?? {},
});
} catch (e) {
handleErrorOnFirstInit();
@@ -289,23 +290,6 @@ export const initialize = async (
await trackNoCodeAction("New Session");
}
// update attributes in config
if (updatedAttributes && Object.keys(updatedAttributes).length > 0) {
config.update({
...config.get(),
personState: {
...config.get().personState,
data: {
...config.get().personState.data,
attributes: {
...config.get().personState.data.attributes,
...updatedAttributes,
},
},
},
});
}
logger.debug("Adding event listeners");
addEventListeners();
addCleanupEventListeners();
+1 -1
View File
@@ -22,7 +22,7 @@ export const resetPerson = async (): Promise<Result<void, NetworkError>> => {
environmentId: config.get().environmentId,
apiHost: config.get().apiHost,
...(userId && { userId }),
attributes: config.get().personState.data.attributes,
attributes: config.get().attributes,
};
await logoutPerson();
try {
-2
View File
@@ -15,7 +15,6 @@ export const DEFAULT_PERSON_STATE_NO_USER_ID: TJsPersonState = {
segments: [],
displays: [],
responses: [],
attributes: {},
lastDisplayAt: null,
},
} as const;
@@ -68,7 +67,6 @@ export const fetchPersonState = async (
segments: [],
displays: [],
responses: [],
attributes: {},
lastDisplayAt: null,
},
};
+1 -1
View File
@@ -65,7 +65,7 @@ const renderWidget = async (
}
const { product } = config.get().environmentState.data ?? {};
const { attributes } = config.get().personState.data ?? {};
const { attributes } = config.get() ?? {};
const isMultiLanguageSurvey = survey.languages.length > 1;
let languageCode = "default";