mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-06 05:40:02 -06:00
* 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>
66 lines
1.5 KiB
TypeScript
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;
|