import { useEffect, useState } from "react"; import { featureEnabled } from "../../domainContext"; import { ShareMode, toShareMode } from "../../lib/shareMode"; import { GetTranscript, GetTranscriptTopic, UpdateTranscript } from "../../api"; import { Box, Flex, IconButton, Modal, ModalBody, ModalContent, ModalHeader, ModalOverlay, Text, } from "@chakra-ui/react"; import { FaShare } from "react-icons/fa"; import useApi from "../../lib/useApi"; import useSessionUser from "../../lib/useSessionUser"; import { CustomSession } from "../../lib/types"; import { Select } from "chakra-react-select"; import ShareLink from "./shareLink"; import ShareCopy from "./shareCopy"; import ShareZulip from "./shareZulip"; type ShareAndPrivacyProps = { finalSummaryRef: any; transcriptResponse: GetTranscript; topicsResponse: GetTranscriptTopic[]; }; type ShareOption = { value: ShareMode; label: string }; const shareOptions = [ { label: "Private", value: toShareMode("private") }, { label: "Secure", value: toShareMode("semi-private") }, { label: "Public", value: toShareMode("public") }, ]; export default function ShareAndPrivacy(props: ShareAndPrivacyProps) { const [showModal, setShowModal] = useState(false); const [isOwner, setIsOwner] = useState(false); const [shareMode, setShareMode] = useState( shareOptions.find( (option) => option.value === props.transcriptResponse.share_mode, ) || shareOptions[0], ); const [shareLoading, setShareLoading] = useState(false); const requireLogin = featureEnabled("requireLogin"); const api = useApi(); const updateShareMode = async (selectedShareMode: any) => { if (!api) throw new Error("ShareLink's API should always be ready at this point"); setShareLoading(true); const requestBody: UpdateTranscript = { share_mode: toShareMode(selectedShareMode.value), }; const updatedTranscript = await api.v1TranscriptUpdate({ transcriptId: props.transcriptResponse.id, requestBody, }); setShareMode( shareOptions.find( (option) => option.value === updatedTranscript.share_mode, ) || shareOptions[0], ); setShareLoading(false); }; const userId = useSessionUser().id; useEffect(() => { setIsOwner(!!(requireLogin && userId === props.transcriptResponse.user_id)); }, [userId, props.transcriptResponse.user_id]); return ( <> } onClick={() => setShowModal(true)} aria-label="Share" /> setShowModal(false)} size={"xl"} > Share {requireLogin && ( Share mode {shareMode.value === "private" && "This transcript is private and can only be accessed by you."} {shareMode.value === "semi-private" && "This transcript is secure. Only authenticated users can access it."} {shareMode.value === "public" && "This transcript is public. Everyone can access it."} {isOwner && api && (