import { Notification, Settings, Email, Chat, Delete, Webhook, } from "@openstatus/icons"; import { DiscordIcon, GoogleIcon, GrafanaIcon, MicrosoftTeamsIcon, TelegramIcon, WhatsappIcon, } from "@openstatus/icons/brand"; import { OpsGenieIcon } from "@openstatus/icons/brand"; import { PagerDutyIcon } from "@openstatus/icons/brand"; import { SlackIcon } from "@openstatus/icons/brand"; import { FormDiscord } from "@/components/forms/notifications/form-discord"; import { FormEmail } from "@/components/forms/notifications/form-email"; import { FormGoogleChat } from "@/components/forms/notifications/form-google-chat"; import { FormGrafanaOncall } from "@/components/forms/notifications/form-grafana-oncall"; import { FormMsTeams } from "@/components/forms/notifications/form-ms-teams"; import { FormNtfy } from "@/components/forms/notifications/form-ntfy"; import { FormOpsGenie } from "@/components/forms/notifications/form-opsgenie"; import { FormPagerDuty } from "@/components/forms/notifications/form-pagerduty"; import { FormSlack } from "@/components/forms/notifications/form-slack"; import { FormSms } from "@/components/forms/notifications/form-sms"; import { FormTelegram } from "@/components/forms/notifications/form-telegram"; import { FormWebhook } from "@/components/forms/notifications/form-webhook"; import { FormWhatsApp } from "@/components/forms/notifications/form-whatsapp"; export const actions = [ { id: "edit", label: "Settings", icon: Settings, variant: "default" as const, }, { id: "delete", label: "Delete", icon: Delete, variant: "destructive" as const, }, ] as const; export type NotifierAction = (typeof actions)[number]; export const getActions = ( props: Partial Promise | void>>, ): (NotifierAction & { onClick?: () => Promise | void })[] => { return actions.map((action) => ({ ...action, onClick: props[action.id as keyof typeof props], })); }; // List of the notifiers export const config = { slack: { icon: SlackIcon, label: "Slack", form: FormSlack, }, "ms-teams": { icon: MicrosoftTeamsIcon, label: "Microsoft Teams", form: FormMsTeams, }, discord: { icon: DiscordIcon, label: "Discord", form: FormDiscord, }, email: { icon: Email, label: "Email", form: FormEmail, }, sms: { icon: Chat, label: "SMS", form: FormSms, }, webhook: { icon: Webhook, label: "Webhook", form: FormWebhook, }, opsgenie: { icon: OpsGenieIcon, label: "OpsGenie", form: FormOpsGenie, }, "google-chat": { icon: GoogleIcon, label: "Google Chat", form: FormGoogleChat, }, "grafana-oncall": { icon: GrafanaIcon, label: "Grafana OnCall", form: FormGrafanaOncall, }, pagerduty: { icon: PagerDutyIcon, label: "PagerDuty", form: FormPagerDuty, }, ntfy: { icon: Notification, // TODO: add svg icon label: "Ntfy", form: FormNtfy, }, telegram: { icon: TelegramIcon, label: "Telegram", form: FormTelegram, }, whatsapp: { icon: WhatsappIcon, label: "WhatsApp", form: FormWhatsApp, }, }; export type NotifierProvider = keyof typeof config;