Files
formbricks-formbricks/packages/lib/surveyState.ts
Matti Nannt 0a08d7df68 chore: Introduce unified survey UI package @formbricks/surveys (#698)
* add vite survey package

* add renderSurvey method

* add all survey components

* First working version of renderSurvey

* integrate survey package into survey preview

* add survey modal functionality to formbricks-surveys

* fix build errors and add new template types

* add response queue

* add simple formbricks-js integration

* add local state management for surveys

* add local storage to multiple choice and open text questions

* add local state to other question types, layout fixes

* Fix modal close button, clean js package code

* add new calculate progress function

* fix progressbar on thankyou card

* fix churn survey branching in demo product

* use tsup to bundle @formbricks/js

* update survey positioning in link surveys

* fix preview reset button in link survey

* change logic for progress bar

* update progressbar logic

* update spacing

* add conditional autofocus / disable for iframe

* add userId to link survey

* integrated email verification

* moved token verification and reading to server component

* ran pnpm format

* added question prefilling

* ran pnpm format

* Moved question prefilling logic to Link Survey

* Refactor types

* centralize survey package props, fix build errors

* fix userId in link survey

* fix survey closed message

* add redirect on complete, fix bugs

* smaller bugfixes

* smaller bugfixes

* fix bugs

* fix build errors

* remove logs

---------

Co-authored-by: Johannes <johannes@formbricks.com>
Co-authored-by: Dhruwang <dhruwangjariwala18@gmail.com>
2023-09-10 14:06:55 +09:00

66 lines
1.5 KiB
TypeScript

import { TResponseUpdate } from "@formbricks/types/v1/responses";
export class SurveyState {
responseId: string | null = null;
surveyId: string;
responseAcc: TResponseUpdate = { finished: false, data: {} };
constructor(surveyId: string) {
this.surveyId = surveyId;
}
/**
* Set the current survey ID
* @param id - The survey ID
*/
setSurveyId(id: string) {
this.surveyId = id;
this.clear(); // Reset the state when setting a new surveyId
}
/**
* Get a copy of the current state
*/
copy() {
const copyInstance = new SurveyState(this.surveyId);
copyInstance.responseId = this.responseId;
copyInstance.responseAcc = this.responseAcc;
return copyInstance;
}
/**
* Update the response ID after a successful response creation
* @param id - The response ID
*/
updateResponseId(id: string) {
this.responseId = id;
}
/**
* Accumulate the responses
* @param responseUpdate - The new response data to add
*/
accumulateResponse(responseUpdate: TResponseUpdate) {
this.responseAcc = {
finished: responseUpdate.finished,
data: { ...this.responseAcc.data, ...responseUpdate.data },
};
}
/**
* Check if the current accumulated response is finished
*/
isResponseFinished() {
return this.responseAcc.finished;
}
/**
* Clear the current state
*/
clear() {
this.responseId = null;
this.responseAcc = { finished: false, data: {} };
}
}
export default SurveyState;