"use client"; import { Loader2, UsersIcon } from "lucide-react"; import { useState } from "react"; import toast from "react-hot-toast"; import { cn } from "@formbricks/lib/cn"; import { formatDate, timeSinceDate } from "@formbricks/lib/time"; import { TSegment, ZSegmentFilters } from "@formbricks/types/segment"; import { TSurvey } from "@formbricks/types/surveys"; import { Modal } from "../Modal"; type SegmentDetailProps = { segment: TSegment; setSegment: (segment: TSegment) => void; setOpen: (open: boolean) => void; setIsSegmentEditorOpen: (isOpen: boolean) => void; onSegmentLoad: (surveyId: string, segmentId: string) => Promise; surveyId: string; currentSegment: TSegment; }; const SegmentDetail = ({ segment, setIsSegmentEditorOpen, setOpen, setSegment, onSegmentLoad, surveyId, currentSegment, }: SegmentDetailProps) => { const [isLoading, setIsLoading] = useState(false); const handleLoadNewSegment = async (segmentId: string) => { try { if (currentSegment.id === segmentId) { return; } setIsLoading(true); const updatedSurvey = await onSegmentLoad(surveyId, segmentId); if (!updatedSurvey?.id || !updatedSurvey?.segment) { toast.error("Error loading survey"); setIsLoading(false); setIsSegmentEditorOpen(false); setOpen(false); return; } const parsedFilters = ZSegmentFilters.safeParse(updatedSurvey?.segment?.filters); if (!parsedFilters.success) { toast.error("Error loading survey"); setIsLoading(false); setIsSegmentEditorOpen(false); setOpen(false); return; } setSegment({ ...updatedSurvey.segment, description: updatedSurvey.segment.description || "", filters: parsedFilters.data, surveys: updatedSurvey.segment.surveys, }); setIsLoading(false); } catch (err: any) { setIsLoading(false); toast.error(err.message); setOpen(false); } }; return (
{ setIsLoading(true); try { await handleLoadNewSegment(segment.id); setIsLoading(false); } catch (err) { setIsLoading(false); } }}> {isLoading && (
)}
{segment.title}
{segment.description}
{timeSinceDate(segment.updatedAt)}
{formatDate(segment.createdAt)}
); }; type LoadSegmentModalProps = { open: boolean; setOpen: (open: boolean) => void; surveyId: string; currentSegment: TSegment; segments: TSegment[]; setSegment: (segment: TSegment) => void; setIsSegmentEditorOpen: (isOpen: boolean) => void; onSegmentLoad: (surveyId: string, segmentId: string) => Promise; }; export const LoadSegmentModal = ({ open, surveyId, setOpen, currentSegment, segments, setSegment, setIsSegmentEditorOpen, onSegmentLoad, }: LoadSegmentModalProps) => { const handleResetState = () => { setOpen(false); }; const segmentsArray = segments?.filter((segment) => !segment.isPrivate); return ( { handleResetState(); }} title="Load Segment" size="lg"> <> {!segmentsArray?.length ? (
You have not created a segment yet.
) : (
Segment
Updated at
Created at
{segmentsArray.map((segment) => ( ))}
)}
); };