mirror of
https://github.com/formbricks/formbricks.git
synced 2026-02-21 10:08:34 -06:00
fix: logic issues (#6561)
This commit is contained in:
committed by
GitHub
parent
34d3145fcd
commit
646921cd37
@@ -357,7 +357,10 @@ const buildNotionPayloadProperties = (
|
||||
|
||||
// notion requires specific payload for each column type
|
||||
// * TYPES NOT SUPPORTED BY NOTION API - rollup, created_by, created_time, last_edited_by, or last_edited_time
|
||||
const getValue = (colType: string, value: string | string[] | Date | number | Record<string, string>) => {
|
||||
const getValue = (
|
||||
colType: string,
|
||||
value: string | string[] | Date | number | Record<string, string> | undefined
|
||||
) => {
|
||||
try {
|
||||
switch (colType) {
|
||||
case "select":
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { parseRecallInfo } from "@/lib/utils/recall";
|
||||
import { TResponse } from "@formbricks/types/responses";
|
||||
import { TResponse, TResponseDataValue } from "@formbricks/types/responses";
|
||||
import { TSurvey, TSurveyQuestion, TSurveyQuestionType } from "@formbricks/types/surveys/types";
|
||||
import { getLanguageCode, getLocalizedValue } from "./i18n/utils";
|
||||
|
||||
// function to convert response value of type string | number | string[] or Record<string, string> to string | string[]
|
||||
export const convertResponseValue = (
|
||||
answer: string | number | string[] | Record<string, string>,
|
||||
answer: TResponseDataValue,
|
||||
question: TSurveyQuestion
|
||||
): string | string[] => {
|
||||
switch (question.type) {
|
||||
@@ -57,9 +57,7 @@ export const getQuestionResponseMapping = (
|
||||
return questionResponseMapping;
|
||||
};
|
||||
|
||||
export const processResponseData = (
|
||||
responseData: string | number | string[] | Record<string, string>
|
||||
): string => {
|
||||
export const processResponseData = (responseData: TResponseDataValue): string => {
|
||||
switch (typeof responseData) {
|
||||
case "string":
|
||||
return responseData;
|
||||
|
||||
@@ -450,7 +450,7 @@ const evaluateSingleCondition = (
|
||||
return (
|
||||
Array.isArray(leftValue) &&
|
||||
Array.isArray(rightValue) &&
|
||||
rightValue.some((v) => !leftValue.includes(v))
|
||||
!rightValue.some((v) => leftValue.includes(v))
|
||||
);
|
||||
case "isAccepted":
|
||||
return leftValue === "accepted";
|
||||
|
||||
@@ -13,6 +13,7 @@ import { RatingResponse } from "@/modules/ui/components/rating-response";
|
||||
import { ResponseBadges } from "@/modules/ui/components/response-badges";
|
||||
import { CheckCheckIcon, MousePointerClickIcon, PhoneIcon } from "lucide-react";
|
||||
import React from "react";
|
||||
import { TResponseDataValue } from "@formbricks/types/responses";
|
||||
import {
|
||||
TSurvey,
|
||||
TSurveyMatrixQuestion,
|
||||
@@ -23,7 +24,7 @@ import {
|
||||
} from "@formbricks/types/surveys/types";
|
||||
|
||||
interface RenderResponseProps {
|
||||
responseData: string | number | string[] | Record<string, string>;
|
||||
responseData: TResponseDataValue;
|
||||
question: TSurveyQuestion;
|
||||
survey: TSurvey;
|
||||
language: string | null;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
export const isValidValue = (value: string | number | Record<string, string> | string[]) => {
|
||||
import { TResponseDataValue } from "@formbricks/types/responses";
|
||||
|
||||
export const isValidValue = (value: TResponseDataValue) => {
|
||||
return (
|
||||
(typeof value === "string" && value.trim() !== "") ||
|
||||
(Array.isArray(value) && value.length > 0) ||
|
||||
|
||||
@@ -27,7 +27,7 @@ import {
|
||||
|
||||
interface QuestionConditionalProps {
|
||||
question: TSurveyQuestion;
|
||||
value: string | number | string[] | Record<string, string>;
|
||||
value: TResponseDataValue;
|
||||
onChange: (responseData: TResponseData) => void;
|
||||
onSubmit: (data: TResponseData, ttc: TResponseTtc) => void;
|
||||
onBack: () => void;
|
||||
|
||||
@@ -112,7 +112,7 @@ export function MultipleChoiceSingleQuestion({
|
||||
e.preventDefault();
|
||||
const updatedTtcObj = getUpdatedTtc(ttc, question.id, performance.now() - startTime);
|
||||
setTtc(updatedTtcObj);
|
||||
onSubmit({ [question.id]: value ?? "" }, updatedTtcObj);
|
||||
onSubmit({ [question.id]: value }, updatedTtcObj);
|
||||
}}
|
||||
className="fb-w-full">
|
||||
{isMediaAvailable ? <QuestionMedia imgUrl={question.imageUrl} videoUrl={question.videoUrl} /> : null}
|
||||
@@ -208,9 +208,13 @@ export function MultipleChoiceSingleQuestion({
|
||||
value={getLocalizedValue(otherOption.label, languageCode)}
|
||||
className="fb-border-brand fb-text-brand fb-h-4 fb-w-4 fb-flex-shrink-0 fb-border focus:fb-ring-0 focus:fb-ring-offset-0"
|
||||
aria-labelledby={`${otherOption.id}-label`}
|
||||
onChange={() => {
|
||||
setOtherSelected(!otherSelected);
|
||||
onChange({ [question.id]: "" });
|
||||
onClick={() => {
|
||||
if (otherSelected) {
|
||||
onChange({ [question.id]: undefined });
|
||||
} else {
|
||||
setOtherSelected(!otherSelected);
|
||||
onChange({ [question.id]: "" });
|
||||
}
|
||||
}}
|
||||
checked={otherSelected}
|
||||
/>
|
||||
|
||||
@@ -407,7 +407,7 @@ const evaluateSingleCondition = (
|
||||
return (
|
||||
Array.isArray(leftValue) &&
|
||||
Array.isArray(rightValue) &&
|
||||
rightValue.some((v) => !leftValue.includes(v))
|
||||
!rightValue.some((v) => leftValue.includes(v))
|
||||
);
|
||||
case "isAccepted":
|
||||
return leftValue === "accepted";
|
||||
|
||||
@@ -4,12 +4,9 @@ import { ZSurveyQuota } from "./quota";
|
||||
import { ZSurvey } from "./surveys/types";
|
||||
import { ZTag } from "./tags";
|
||||
|
||||
export const ZResponseDataValue = z.union([
|
||||
z.string(),
|
||||
z.number(),
|
||||
z.array(z.string()),
|
||||
z.record(z.string()),
|
||||
]);
|
||||
export const ZResponseDataValue = z
|
||||
.union([z.string(), z.number(), z.array(z.string()), z.record(z.string())])
|
||||
.optional();
|
||||
|
||||
export const ZResponseFilterCondition = z.enum([
|
||||
"accepted",
|
||||
|
||||
Reference in New Issue
Block a user