mirror of
https://github.com/hanzoai/dataroom.git
synced 2026-10-30 18:41:07 +00:00
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
import { useEffect, useState } from "react";
|
|
|
|
import { motion } from "motion/react";
|
|
|
|
import { Input } from "@/components/ui/input";
|
|
import { Label } from "@/components/ui/label";
|
|
import {
|
|
Select,
|
|
SelectContent,
|
|
SelectItem,
|
|
SelectTrigger,
|
|
SelectValue,
|
|
} from "@/components/ui/select";
|
|
|
|
import { FADE_IN_ANIMATION_SETTINGS } from "@/lib/constants";
|
|
|
|
import { DEFAULT_LINK_TYPE } from ".";
|
|
import LinkItem from "./link-item";
|
|
import { LinkUpgradeOptions } from "./link-options";
|
|
|
|
export default function QuestionSection({
|
|
data,
|
|
setData,
|
|
isAllowed,
|
|
handleUpgradeStateChange,
|
|
}: {
|
|
data: DEFAULT_LINK_TYPE;
|
|
setData: React.Dispatch<React.SetStateAction<DEFAULT_LINK_TYPE>>;
|
|
isAllowed: boolean;
|
|
handleUpgradeStateChange: ({
|
|
state,
|
|
trigger,
|
|
plan,
|
|
}: LinkUpgradeOptions) => void;
|
|
}) {
|
|
const { enableQuestion, questionText, questionType } = data;
|
|
const [enabled, setEnabled] = useState<boolean>(false);
|
|
|
|
useEffect(() => {
|
|
setEnabled(enableQuestion!);
|
|
}, [enableQuestion]);
|
|
|
|
const handleQuestion = async () => {
|
|
const updatedQuestion = !enabled;
|
|
|
|
setData({ ...data, enableQuestion: updatedQuestion });
|
|
setEnabled(updatedQuestion);
|
|
};
|
|
|
|
return (
|
|
<div className="pb-5">
|
|
<LinkItem
|
|
title="Feedback Question"
|
|
tooltipContent="Create a concise question for visitor feedback."
|
|
enabled={enabled}
|
|
action={handleQuestion}
|
|
isAllowed={isAllowed}
|
|
requiredPlan="business"
|
|
upgradeAction={() =>
|
|
handleUpgradeStateChange({
|
|
state: true,
|
|
trigger: "link_sheet_question_section",
|
|
plan: "Business",
|
|
})
|
|
}
|
|
/>
|
|
|
|
{enabled && (
|
|
<motion.div
|
|
className="relative mt-4 space-y-3"
|
|
{...FADE_IN_ANIMATION_SETTINGS}
|
|
>
|
|
<div className="flex w-full flex-col items-start gap-6 overflow-x-visible pb-4 pt-0">
|
|
<div className="w-full space-y-2">
|
|
<Label>Question Type</Label>
|
|
<Select defaultValue="yes-no">
|
|
<SelectTrigger className="flex w-full rounded-md border border-input bg-white text-foreground placeholder-muted-foreground focus:border-muted-foreground focus:outline-none focus:ring-inset focus:ring-muted-foreground dark:border-gray-500 dark:bg-gray-800 focus:dark:bg-transparent sm:text-sm">
|
|
<SelectValue placeholder="Select a question type" />
|
|
</SelectTrigger>
|
|
<SelectContent className="z-50 flex w-full rounded-md border border-input bg-white text-foreground placeholder-muted-foreground focus:border-muted-foreground focus:outline-none focus:ring-inset focus:ring-muted-foreground dark:border-gray-500 dark:bg-gray-800 focus:dark:bg-gray-900 sm:text-sm">
|
|
<SelectItem value="yes-no">Yes / No</SelectItem>
|
|
</SelectContent>
|
|
</Select>
|
|
</div>
|
|
<div className="w-full space-y-2">
|
|
<Label htmlFor="question">Question</Label>
|
|
<Input
|
|
className="focus:ring-inset"
|
|
id="question"
|
|
type="text"
|
|
name="question"
|
|
required
|
|
placeholder="Are you interested?"
|
|
value={questionText || ""}
|
|
onChange={(e) =>
|
|
setData({
|
|
...data,
|
|
questionText: e.target.value,
|
|
questionType: "YES_NO",
|
|
})
|
|
}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</motion.div>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|