mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-30 18:30:32 -06:00
Compare commits
5 Commits
testing/mi
...
aschaber-c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4327319d75 | ||
|
|
dc4f146983 | ||
|
|
0ed6401df7 | ||
|
|
e856006e04 | ||
|
|
01210dba3f |
@@ -1,8 +1,10 @@
|
|||||||
import { PlusIcon } from "lucide-react";
|
import { PlusIcon } from "lucide-react";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
import { createI18nString, extractLanguageCodes } from "@formbricks/lib/i18n/utils";
|
import { createI18nString, extractLanguageCodes } from "@formbricks/lib/i18n/utils";
|
||||||
import { TAttributeClass } from "@formbricks/types/attributeClasses";
|
import { TAttributeClass } from "@formbricks/types/attributeClasses";
|
||||||
import { TSurvey, TSurveyCalQuestion } from "@formbricks/types/surveys";
|
import { TSurvey, TSurveyCalQuestion } from "@formbricks/types/surveys";
|
||||||
import { Button } from "@formbricks/ui/Button";
|
import { Button } from "@formbricks/ui/Button";
|
||||||
|
import { Checkbox } from "@formbricks/ui/Checkbox";
|
||||||
import { Input } from "@formbricks/ui/Input";
|
import { Input } from "@formbricks/ui/Input";
|
||||||
import { Label } from "@formbricks/ui/Label";
|
import { Label } from "@formbricks/ui/Label";
|
||||||
import { QuestionFormInput } from "@formbricks/ui/QuestionFormInput";
|
import { QuestionFormInput } from "@formbricks/ui/QuestionFormInput";
|
||||||
@@ -30,6 +32,15 @@ export const CalQuestionForm = ({
|
|||||||
attributeClasses,
|
attributeClasses,
|
||||||
}: CalQuestionFormProps): JSX.Element => {
|
}: CalQuestionFormProps): JSX.Element => {
|
||||||
const surveyLanguageCodes = extractLanguageCodes(localSurvey.languages);
|
const surveyLanguageCodes = extractLanguageCodes(localSurvey.languages);
|
||||||
|
const [isCalHostEnabled, setIsCalHostEnabled] = useState(!!question.calHost);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isCalHostEnabled) {
|
||||||
|
updateQuestion(questionIdx, { calHost: undefined });
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [isCalHostEnabled]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form>
|
<form>
|
||||||
@@ -80,15 +91,41 @@ export const CalQuestionForm = ({
|
|||||||
Add Description
|
Add Description
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
<div className="mt-3">
|
<div className="mt-3 flex flex-col gap-4">
|
||||||
<Label htmlFor="calUserName">Add your Cal.com username or username/event</Label>
|
<div className="flex flex-col gap-3">
|
||||||
<div className="mt-2">
|
<Label htmlFor="calUserName">Add your Cal.com username or username/event</Label>
|
||||||
<Input
|
<div>
|
||||||
id="calUserName"
|
<Input
|
||||||
name="calUserName"
|
id="calUserName"
|
||||||
value={question.calUserName}
|
name="calUserName"
|
||||||
onChange={(e) => updateQuestion(questionIdx, { calUserName: e.target.value })}
|
value={question.calUserName}
|
||||||
/>
|
onChange={(e) => updateQuestion(questionIdx, { calUserName: e.target.value })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Checkbox
|
||||||
|
id="calHost"
|
||||||
|
checked={isCalHostEnabled}
|
||||||
|
onCheckedChange={(checked: boolean) => setIsCalHostEnabled(checked)}
|
||||||
|
/>
|
||||||
|
<Label htmlFor="calHost">Do you have a self-hosted Cal.com instance?</Label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{isCalHostEnabled && (
|
||||||
|
<div className="flex flex-col gap-2">
|
||||||
|
<Label htmlFor="calHost">Enter the hostname of your self-hosted Cal.com instance</Label>
|
||||||
|
<Input
|
||||||
|
id="calHost"
|
||||||
|
name="calHost"
|
||||||
|
placeholder="cal.com"
|
||||||
|
value={question.calHost}
|
||||||
|
onChange={(e) => updateQuestion(questionIdx, { calHost: e.target.value })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ export const questionTypes: TQuestion[] = [
|
|||||||
preset: {
|
preset: {
|
||||||
headline: { default: "Schedule a call with me" },
|
headline: { default: "Schedule a call with me" },
|
||||||
calUserName: "rick/get-rick-rolled",
|
calUserName: "rick/get-rick-rolled",
|
||||||
|
calHost: "cal.com",
|
||||||
} as Partial<TSurveyCalQuestion>,
|
} as Partial<TSurveyCalQuestion>,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -228,6 +228,7 @@ export const mockCalQuestion: TSurveyCalQuestion = {
|
|||||||
default: "Skip",
|
default: "Skip",
|
||||||
},
|
},
|
||||||
calUserName: "rick/get-rick-rolled",
|
calUserName: "rick/get-rick-rolled",
|
||||||
|
calHost: "cal.com",
|
||||||
id: "o3bnux6p42u9ew9d02l14r26",
|
id: "o3bnux6p42u9ew9d02l14r26",
|
||||||
type: TSurveyQuestionTypeEnum.Cal,
|
type: TSurveyQuestionTypeEnum.Cal,
|
||||||
isDraft: true,
|
isDraft: true,
|
||||||
|
|||||||
@@ -44,8 +44,12 @@ export const CalEmbed = ({ question, onSuccessfulBooking }: CalEmbedProps) => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// remove any existing cal-inline elements
|
// remove any existing cal-inline elements
|
||||||
document.querySelectorAll("cal-inline").forEach((el) => el.remove());
|
document.querySelectorAll("cal-inline").forEach((el) => el.remove());
|
||||||
cal("inline", { elementOrSelector: "#fb-cal-embed", calLink: question.calUserName });
|
cal("init", { calOrigin: question.calHost ? `https://${question.calHost}` : "https://cal.com" });
|
||||||
}, [cal, question.calUserName]);
|
cal("inline", {
|
||||||
|
elementOrSelector: "#fb-cal-embed",
|
||||||
|
calLink: question.calUserName,
|
||||||
|
});
|
||||||
|
}, [cal, question.calHost, question.calUserName]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="fb-relative fb-mt-4 fb-overflow-auto">
|
<div className="fb-relative fb-mt-4 fb-overflow-auto">
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ export type TLegacySurveyFileUploadQuestion = z.infer<typeof ZLegacySurveyFileUp
|
|||||||
export const ZLegacySurveyCalQuestion = ZLegacySurveyQuestionBase.extend({
|
export const ZLegacySurveyCalQuestion = ZLegacySurveyQuestionBase.extend({
|
||||||
type: z.literal(TSurveyQuestionTypeEnum.Cal),
|
type: z.literal(TSurveyQuestionTypeEnum.Cal),
|
||||||
calUserName: z.string(),
|
calUserName: z.string(),
|
||||||
|
calHost: z.string().optional(),
|
||||||
logic: z.array(ZSurveyCalLogic).optional(),
|
logic: z.array(ZSurveyCalLogic).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -385,6 +385,7 @@ export type TSurveyFileUploadQuestion = z.infer<typeof ZSurveyFileUploadQuestion
|
|||||||
export const ZSurveyCalQuestion = ZSurveyQuestionBase.extend({
|
export const ZSurveyCalQuestion = ZSurveyQuestionBase.extend({
|
||||||
type: z.literal(TSurveyQuestionTypeEnum.Cal),
|
type: z.literal(TSurveyQuestionTypeEnum.Cal),
|
||||||
calUserName: z.string(),
|
calUserName: z.string(),
|
||||||
|
calHost: z.string().optional(),
|
||||||
logic: z.array(ZSurveyCalLogic).optional(),
|
logic: z.array(ZSurveyCalLogic).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user