Fix multiple client-side errors in formbricks-js

This commit is contained in:
Matti Nannt
2023-07-13 11:17:04 +02:00
committed by GitHub
parent 8ea6016cf5
commit a4a771ba70
10 changed files with 40 additions and 28 deletions

View File

@@ -1,12 +1,13 @@
import type { TSurveyCTAQuestion } from "../../../types/v1/surveys";
import { h } from "preact";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyCTAQuestion } from "../../../types/v1/surveys";
import Headline from "./Headline";
import HtmlBody from "./HtmlBody";
import SubmitButton from "./SubmitButton";
interface CTAQuestionProps {
question: TSurveyCTAQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}

View File

@@ -1,12 +1,13 @@
import type { TSurveyConsentQuestion } from "../../../types/v1/surveys";
import { h } from "preact";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyConsentQuestion } from "../../../types/v1/surveys";
import Headline from "./Headline";
import HtmlBody from "./HtmlBody";
import SubmitButton from "./SubmitButton";
interface ConsentQuestionProps {
question: TSurveyConsentQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}

View File

@@ -1,6 +1,7 @@
import type { TSurveyMultipleChoiceMultiQuestion } from "../../../types/v1/surveys";
import { h } from "preact";
import { useState, useRef, useEffect } from "preact/hooks";
import { useEffect, useRef, useState } from "preact/hooks";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyMultipleChoiceMultiQuestion } from "../../../types/v1/surveys";
import { cn } from "../lib/utils";
import Headline from "./Headline";
import Subheader from "./Subheader";
@@ -8,7 +9,7 @@ import SubmitButton from "./SubmitButton";
interface MultipleChoiceMultiProps {
question: TSurveyMultipleChoiceMultiQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}

View File

@@ -1,14 +1,15 @@
import { h } from "preact";
import { useRef, useState, useEffect } from "preact/hooks";
import { cn } from "../lib/utils";
import { useEffect, useRef, useState } from "preact/hooks";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyMultipleChoiceSingleQuestion } from "../../../types/v1/surveys";
import { cn } from "../lib/utils";
import Headline from "./Headline";
import Subheader from "./Subheader";
import SubmitButton from "./SubmitButton";
interface MultipleChoiceSingleProps {
question: TSurveyMultipleChoiceSingleQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}

View File

@@ -1,14 +1,15 @@
import { h } from "preact";
import { useState } from "preact/hooks";
import { cn } from "../lib/utils";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyNPSQuestion } from "../../../types/v1/surveys";
import { cn } from "../lib/utils";
import Headline from "./Headline";
import Subheader from "./Subheader";
import SubmitButton from "./SubmitButton";
interface NPSQuestionProps {
question: TSurveyNPSQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}
@@ -30,9 +31,10 @@ export default function NPSQuestion({ question, onSubmit, lastQuestion, brandCol
onSubmit={(e) => {
e.preventDefault();
const data = {
[question.id]: selectedChoice,
};
const data = {};
if (selectedChoice !== null) {
data[question.id] = selectedChoice;
}
onSubmit(data);
// reset form

View File

@@ -1,12 +1,13 @@
import type { TSurveyOpenTextQuestion } from "../../../types/v1/surveys";
import { h } from "preact";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyOpenTextQuestion } from "../../../types/v1/surveys";
import Headline from "./Headline";
import Subheader from "./Subheader";
import SubmitButton from "./SubmitButton";
interface OpenTextQuestionProps {
question: TSurveyOpenTextQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}

View File

@@ -1,9 +1,9 @@
import { h } from "preact";
import { useState } from "preact/hooks";
import { cn } from "../lib/utils";
import { TResponseData } from "../../../types/v1/responses";
import type { TSurveyRatingQuestion } from "../../../types/v1/surveys";
import { cn } from "../lib/utils";
import Headline from "./Headline";
import Subheader from "./Subheader";
import {
ConfusedFace,
FrowningFace,
@@ -16,11 +16,12 @@ import {
TiredFace,
WearyFace,
} from "./Smileys";
import Subheader from "./Subheader";
import SubmitButton from "./SubmitButton";
interface RatingQuestionProps {
question: TSurveyRatingQuestion;
onSubmit: (data: { [x: string]: any }) => void;
onSubmit: (data: TResponseData) => void;
lastQuestion: boolean;
brandColor: string;
}
@@ -60,9 +61,10 @@ export default function RatingQuestion({
onSubmit={(e) => {
e.preventDefault();
const data = {
[question.id]: selectedChoice,
};
const data = {};
if (selectedChoice !== null) {
data[question.id] = selectedChoice;
}
setSelectedChoice(null); // reset choice

View File

@@ -12,7 +12,7 @@ import Progress from "./Progress";
import QuestionConditional from "./QuestionConditional";
import ThankYouCard from "./ThankYouCard";
import FormbricksSignature from "./FormbricksSignature";
import type { TResponseInput } from "../../../types/v1/responses";
import type { TResponseData, TResponseInput } from "../../../types/v1/responses";
interface SurveyViewProps {
config: TJsConfig;
@@ -168,7 +168,7 @@ export default function SurveyView({ config, survey, close, errorHandler }: Surv
return questions[currentQuestionIndex + 1]?.id || "end";
}
const submitResponse = async (data: { [x: string]: any }) => {
const submitResponse = async (data: TResponseData) => {
setLoadingElement(true);
const nextQuestionId = getNextQuestion(data);

View File

@@ -98,10 +98,13 @@ export function checkUrlMatch(
export const checkClickMatch = (event: MouseEvent) => {
const { state } = config.get();
const innerHtmlEvents: TActionClass[] = state?.noCodeActionClasses.filter(
if (!state) {
return;
}
const innerHtmlEvents: TActionClass[] = state?.noCodeActionClasses?.filter(
(e) => e.noCodeConfig?.type === "innerHtml"
);
const cssSelectorEvents: TActionClass[] = state?.noCodeActionClasses.filter(
const cssSelectorEvents: TActionClass[] = state?.noCodeActionClasses?.filter(
(e) => e.noCodeConfig?.type === "cssSelector"
);

View File

@@ -177,7 +177,7 @@ export const setPersonAttribute = async (
};
export const resetPerson = async (): Promise<Result<void, NetworkError>> => {
logger.debug("Resetting person. Getting new person, session and settings from backend");
logger.debug("Resetting state & getting new state from backend");
config.update({ state: undefined });
const syncResult = await sync();