import { exportCalendar, getSecretLink, } from "@/features/Calendars/CalendarApi"; import { Calendar } from "@/features/Calendars/CalendarTypes"; import { Box, Button, CircularProgress, IconButton, InputAdornment, TextField, Typography, } from "@linagora/twake-mui"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; import { useEffect, useState } from "react"; import { useI18n } from "twake-i18n"; import { ErrorSnackbar } from "../Error/ErrorSnackbar"; import { FieldWithLabel } from "../Event/components/FieldWithLabel"; import { SnackbarAlert } from "../Loading/SnackBarAlert"; import { CalendarAccessRights, UserWithAccess } from "./CalendarAccessRights"; interface AccessTabProps { calendar: Calendar; usersWithAccess: UserWithAccess[]; onUsersWithAccessChange: (users: UserWithAccess[]) => void; onInvitesLoaded: (users: UserWithAccess[]) => void; } export function AccessTab({ calendar, usersWithAccess, onUsersWithAccessChange, onInvitesLoaded, }: AccessTabProps) { const { t } = useI18n(); const calDAVLink = `${window.DAV_BASE_URL}${calendar.link.replace(".json", "")}`; const [secretLink, setSecretLink] = useState(""); const [open, setOpen] = useState(false); useEffect(() => { async function fetchSecret() { const existing = await getSecretLink( calendar.link.replace(".json", ""), false ); setSecretLink(existing.secretLink); } fetchSecret(); }, [calendar.link]); const handleCopy = (content: string) => { navigator.clipboard.writeText(content); setOpen(true); }; const handleResetSecretLink = async () => { const newSecret = await getSecretLink( calendar.link.replace(".json", ""), true ); setSecretLink(newSecret.secretLink); }; const [exportLoading, setExportLoading] = useState(false); const [exportError, setExportError] = useState(""); const handleExport = async () => { try { setExportLoading(true); const exportedData = await exportCalendar( calendar.link.replace(".json", "") ); const blob = new Blob([exportedData], { type: "text/calendar" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = `${calendar.id.split("/")[1]}.ics`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); } catch (e) { setExportError((e as Error).message); } finally { setExportLoading(false); } }; return ( <> {!!window.DAV_BASE_URL && ( handleCopy(calDAVLink)} edge="end" > ), }} /> )} handleCopy(secretLink)} edge="end"> ), }} /> {t("calendar.secretUrlDesc")} {t("calendar.exportDesc")} ); }