import moment from "moment"; import Image from "next/image"; import { useState } from "react"; import toast from "react-hot-toast"; import { FaCheck, FaPlay } from "react-icons/fa"; import { useAuth } from "../contexts/authContext"; import { useKeyboardContext } from "../contexts/keyboardContext"; import { useTeamDashboardContext } from "../contexts/teamDashboardContext"; import Announcement, { AnnouncementState } from "../models/announcement"; import { User } from "../models/user"; import { AnnouncementService } from "../services/announcementService"; import SkeletonLoader from "./Loading/skeletonLoader"; interface IAnnouncementCardProps { announcement: Announcement; } const announcementService = new AnnouncementService(); export default function AnnouncementCard(props: IAnnouncementCardProps) { const { currUser } = useAuth(); const { teamUsersMap, user } = useTeamDashboardContext(); const { handleAddAudioToQueue } = useKeyboardContext(); const [loading, setLoading] = useState(false); function playAnnouncement() { handleAddAudioToQueue([props.announcement.audioDataUrl], true); } async function resolveAnnouncement() { setLoading(true); try { await announcementService.updateAnnouncementState( props.announcement.id, AnnouncementState.resolved ); } catch (error) { toast.error("unable to resolve announcement"); } setLoading(false); } async function deleteAnnouncement() { try { await announcementService.updateAnnouncementState( props.announcement.id, AnnouncementState.deleted ); } catch (error) { toast.error("unable to resolve announcement"); } } var announcementUser: User = null; if (props.announcement.createdByUserId in teamUsersMap) { announcementUser = teamUsersMap[props.announcement.createdByUserId]; } else if (currUser.uid == props.announcement.createdByUserId) { announcementUser = user; } const relativeCreatedDate = moment( props.announcement.createdDate.toDate() ).fromNow(); if (loading) { return ; } return ( profile {announcementUser?.nickName} {relativeCreatedDate} {props.announcement.state == AnnouncementState.active && ( )} ); }