"use client"; import React, { useEffect, useState } from "react"; import { GetTranscript } from "../../api"; import Pagination from "./pagination"; import NextLink from "next/link"; import { FaArrowRotateRight, FaGear } from "react-icons/fa6"; import { FaCheck, FaTrash, FaStar, FaMicrophone } from "react-icons/fa"; import { MdError } from "react-icons/md"; import useTranscriptList from "../transcripts/useTranscriptList"; import { formatTimeMs } from "../../lib/time"; import useApi from "../../lib/useApi"; import { useError } from "../../(errors)/errorContext"; import { FaEllipsisVertical } from "react-icons/fa6"; import { Flex, Spinner, Heading, Button, Card, Link, CardBody, Stack, Text, Icon, Grid, IconButton, Spacer, Menu, MenuButton, MenuItem, MenuList, AlertDialog, AlertDialogOverlay, AlertDialogContent, AlertDialogHeader, AlertDialogBody, AlertDialogFooter, Tooltip, } from "@chakra-ui/react"; import { PlusSquareIcon } from "@chakra-ui/icons"; import { ExpandableText } from "../../lib/expandableText"; // import { useFiefUserinfo } from "@fief/fief/nextjs/react"; export default function TranscriptBrowser() { const [page, setPage] = useState(1); const { loading, response, refetch } = useTranscriptList(page); const [deletionLoading, setDeletionLoading] = useState(false); const api = useApi(); const { setError } = useError(); const cancelRef = React.useRef(null); const [transcriptToDeleteId, setTranscriptToDeleteId] = React.useState(); const [deletedItemIds, setDeletedItemIds] = React.useState(); // Todo: fief add name field to userinfo // const user = useFiefUserinfo(); // console.log(user); useEffect(() => { setDeletedItemIds([]); }, [page, response]); if (loading && !response) return ( ); if (!loading && !response) return ( No transcripts found, but you can  record a meeting  to get started. ); const onCloseDeletion = () => setTranscriptToDeleteId(undefined); const handleDeleteTranscript = (transcriptId) => (e) => { e.stopPropagation(); if (api && !deletionLoading) { setDeletionLoading(true); api .v1TranscriptDelete({ transcriptId }) .then(() => { refetch(); setDeletionLoading(false); refetch(); onCloseDeletion(); setDeletedItemIds((deletedItemIds) => [ deletedItemIds, ...transcriptId, ]); }) .catch((err) => { setDeletionLoading(false); setError(err, "There was an error deleting the transcript"); }); } }; const handleProcessTranscript = (transcriptId) => (e) => { if (api) { api .v1TranscriptProcess({ transcriptId }) .then((result) => { const status = (result as any).status; if (status === "already running") { setError( new Error("Processing is already running, please wait"), "Processing is already running, please wait", ); } }) .catch((err) => { setError(err, "There was an error processing the transcript"); }); } }; return ( {/* {user?.fields?.name}'s Meetings */} Your Meetings {loading || (deletionLoading && )} {response?.items .filter((i) => !deletedItemIds?.includes(i.id)) .map((item: GetTranscript) => ( {item.status == "ended" && ( )} {item.status == "error" && ( )} {item.status == "idle" && ( )} {item.status == "processing" && ( )} {item.status == "recording" && ( )} {item.title || item.name || "Unnamed Transcript"} } aria-label="actions" /> setTranscriptToDeleteId(item.id)} icon={} > Delete } > Process Delete{" "} {item.title || item.name || "Unnamed Transcript"} Are you sure? You can't undo this action afterwards. {new Date(item.created_at).toLocaleString("en-US")} {"\u00A0"}-{"\u00A0"} {formatTimeMs(item.duration)} {item.short_summary} ))} ); }