Compare commits

...

5 Commits

Author SHA1 Message Date
Matthias Nannt
f7165272f1 docs: fix js import in developer docs 2024-10-24 22:01:41 +02:00
Matthias Nannt
cd523daa73 fix build errors 2024-10-24 15:52:05 +02:00
Matthias Nannt
d646f82a4a move attributes to root level in local storage 2024-10-24 15:40:02 +02:00
Matthias Nannt
bacabca29f fix build issues 2024-10-24 15:18:08 +02:00
Matthias Nannt
646247024a chore: remove attributes from identify call 2024-10-24 15:11:38 +02:00
8 changed files with 12 additions and 22 deletions

View File

@@ -48,7 +48,7 @@ Initialize the Formbricks JS Client for surveys. When used in a web app, pass a
<CodeGroup title="Initialize Formbricks">
```javascript
import formbricks from "@formbricks/js/app";
import formbricks from "@formbricks/js";
formbricks.init({
environmentId: "<your-environment-id>", // required

View File

@@ -1,6 +1,5 @@
import { prisma } from "@formbricks/database";
import { attributeCache } from "@formbricks/lib/attribute/cache";
import { getAttributesByUserId } from "@formbricks/lib/attribute/service";
import { cache } from "@formbricks/lib/cache";
import { IS_FORMBRICKS_CLOUD } from "@formbricks/lib/constants";
import { displayCache } from "@formbricks/lib/display/cache";
@@ -71,7 +70,6 @@ export const getPersonState = async ({
const personResponses = await getResponsesByUserId(environmentId, userId);
const personDisplays = await getDisplaysByUserId(environmentId, userId);
const segments = await getPersonSegmentIds(environmentId, person, device);
const attributes = await getAttributesByUserId(environmentId, userId);
// If the person exists, return the persons's state
const userState: TJsPersonState["data"] = {
@@ -81,7 +79,6 @@ export const getPersonState = async ({
personDisplays?.map((display) => ({ surveyId: display.surveyId, createdAt: display.createdAt })) ??
[],
responses: personResponses?.map((response) => response.surveyId) ?? [],
attributes,
lastDisplayAt:
personDisplays.length > 0
? personDisplays.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())[0].createdAt

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,
@@ -93,7 +92,7 @@ export const updateAttributes = async (
const updatedAttributes = { ...attributes };
try {
const existingAttributes = config.get().personState.data.attributes;
const existingAttributes = config.get().attributes;
if (existingAttributes) {
for (const [key, value] of Object.entries(existingAttributes)) {
if (updatedAttributes[key] === value) {
@@ -140,7 +139,7 @@ export const updateAttributes = async (
};
export const isExistingAttribute = (key: string, value: string): boolean => {
if (config.get().personState.data.attributes[key] === value) {
if (config.get().attributes[key] === value) {
return true;
}

View File

@@ -239,6 +239,7 @@ export const initialize = async (
environmentState,
personState,
filteredSurveys,
attributes: configInput.attributes || {},
});
const surveyNames = filteredSurveys.map((s) => s.name);
@@ -280,6 +281,7 @@ export const initialize = async (
personState,
environmentState,
filteredSurveys,
attributes: configInput.attributes || {},
});
} catch (e) {
handleErrorOnFirstInit();
@@ -293,15 +295,9 @@ export const initialize = async (
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,
},
},
attributes: {
...config.get().attributes,
...updatedAttributes,
},
});
}

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 {

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,
},
};

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";

View File

@@ -126,7 +126,6 @@ export const ZJsPersonState = z.object({
})
),
responses: z.array(ZId), // responded survey ids
attributes: ZAttributes,
lastDisplayAt: z.date().nullable(),
}),
});
@@ -146,6 +145,7 @@ export const ZJsConfig = z.object({
environmentState: ZJsEnvironmentState,
personState: ZJsPersonState,
filteredSurveys: z.array(ZSurvey).default([]),
attributes: z.record(z.string()),
status: z.object({
value: z.enum(["success", "error"]),
expiresAt: z.date().nullable(),