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")}
}
disabled={exportLoading}
sx={{ borderRadius: "4px" }}
>
{exportLoading ? (
{t("actions.exporting")}
) : (
t("actions.export")
)}
>
);
}