import { debounce } from "lodash"; import { observer } from "mobx-react"; import { AcademicCapIcon, CheckboxIcon, CollectionIcon, CommentIcon, EditIcon, EmailIcon, PublishIcon, StarredIcon, UserIcon, } from "outline-icons"; import * as React from "react"; import { useTranslation, Trans } from "react-i18next"; import { NotificationEventType } from "@shared/types"; import Flex from "~/components/Flex"; import Heading from "~/components/Heading"; import Input from "~/components/Input"; import Notice from "~/components/Notice"; import Scene from "~/components/Scene"; import Switch from "~/components/Switch"; import Text from "~/components/Text"; import env from "~/env"; import useCurrentUser from "~/hooks/useCurrentUser"; import useToasts from "~/hooks/useToasts"; import isCloudHosted from "~/utils/isCloudHosted"; import SettingRow from "./components/SettingRow"; function Notifications() { const { showToast } = useToasts(); const user = useCurrentUser(); const { t } = useTranslation(); const options = [ { event: NotificationEventType.PublishDocument, icon: , title: t("Document published"), description: t( "Receive a notification whenever a new document is published" ), }, { event: NotificationEventType.UpdateDocument, icon: , title: t("Document updated"), description: t( "Receive a notification when a document you are subscribed to is edited" ), }, { event: NotificationEventType.CreateComment, icon: , title: t("Comment posted"), description: t( "Receive a notification when a document you are subscribed to or a thread you participated in receives a comment" ), }, { event: NotificationEventType.Mentioned, icon: , title: t("Mentioned"), description: t( "Receive a notification when someone mentions you in a document or comment" ), }, { event: NotificationEventType.CreateCollection, icon: , title: t("Collection created"), description: t( "Receive a notification whenever a new collection is created" ), }, { event: NotificationEventType.InviteAccepted, icon: , title: t("Invite accepted"), description: t( "Receive a notification when someone you invited creates an account" ), }, { event: NotificationEventType.ExportCompleted, icon: , title: t("Export completed"), description: t( "Receive a notification when an export you requested has been completed" ), }, { visible: isCloudHosted, icon: , event: NotificationEventType.Onboarding, title: t("Getting started"), description: t("Tips on getting started with features and functionality"), }, { visible: isCloudHosted, icon: , event: NotificationEventType.Features, title: t("New features"), description: t("Receive an email when new features of note are added"), }, ]; const showSuccessMessage = debounce(() => { showToast(t("Notifications saved"), { type: "success", }); }, 500); const handleChange = React.useCallback( async (ev: React.ChangeEvent) => { await user.setNotificationEventType( ev.target.name as NotificationEventType, ev.target.checked ); showSuccessMessage(); }, [user, showSuccessMessage] ); const showSuccessNotice = window.location.search === "?success"; return ( }> {t("Notifications")} {showSuccessNotice && ( Unsubscription successful. Your notification settings were updated )} Manage when and where you receive email notifications. {env.EMAIL_ENABLED ? ( <>

{t("Notifications")}

{options.map((option) => { const setting = user.subscribedToEventType(option.event); return ( {option.icon} {option.title} } name={option.event} description={option.description} > ); })} ) : ( The email integration is currently disabled. Please set the associated environment variables and restart the server to enable notifications. )}
); } export default observer(Notifications);