feat: new notification provider: discord bot

This commit is contained in:
Fu Diwei
2025-05-26 15:55:09 +08:00
parent cd9dac7765
commit 8e23b14bf3
21 changed files with 361 additions and 41 deletions

View File

@@ -17,6 +17,7 @@ import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks
import { useAccessesStore } from "@/stores/access";
import { useNotifyChannelsStore } from "@/stores/notify";
import NotifyNodeConfigFormDiscordBotConfig from "./NotifyNodeConfigFormDiscordBotConfig";
import NotifyNodeConfigFormEmailConfig from "./NotifyNodeConfigFormEmailConfig";
import NotifyNodeConfigFormMattermostConfig from "./NotifyNodeConfigFormMattermostConfig";
import NotifyNodeConfigFormTelegramBotConfig from "./NotifyNodeConfigFormTelegramBotConfig";
@@ -110,6 +111,8 @@ const NotifyNodeConfigForm = forwardRef<NotifyNodeConfigFormInstance, NotifyNode
NOTICE: If you add new child component, please keep ASCII order.
*/
switch (fieldProvider) {
case NOTIFICATION_PROVIDERS.DISCORDBOT:
return <NotifyNodeConfigFormDiscordBotConfig {...nestedFormProps} />;
case NOTIFICATION_PROVIDERS.EMAIL:
return <NotifyNodeConfigFormEmailConfig {...nestedFormProps} />;
case NOTIFICATION_PROVIDERS.MATTERMOST:

View File

@@ -0,0 +1,61 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
type NotifyNodeConfigFormDiscordBotConfigFieldValues = Nullish<{
channelId?: string;
}>;
export type NotifyNodeConfigFormDiscordBotConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: NotifyNodeConfigFormDiscordBotConfigFieldValues;
onValuesChange?: (values: NotifyNodeConfigFormDiscordBotConfigFieldValues) => void;
};
const initFormModel = (): NotifyNodeConfigFormDiscordBotConfigFieldValues => {
return {};
};
const NotifyNodeConfigFormDiscordBotConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: NotifyNodeConfigFormDiscordBotConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
channelId: z.string().nullish(),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="channelId"
label={t("workflow_node.notify.form.discordbot_channel_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.notify.form.discordbot_channel_id.tooltip") }}></span>}
>
<Input allowClear placeholder={t("workflow_node.notify.form.discordbot_channel_id.placeholder")} />
</Form.Item>
</Form>
);
};
export default NotifyNodeConfigFormDiscordBotConfig;

View File

@@ -38,7 +38,7 @@ const NotifyNodeConfigFormTelegramBotConfig = ({
.refine((v) => {
if (v == null || v + "" === "") return true;
return !Number.isNaN(+v!) && +v! !== 0;
}, t("workflow_node.notify.form.telegram_bot_chat_id.placeholder"))
}, t("workflow_node.notify.form.telegrambot_chat_id.placeholder"))
)
.nullish(),
});
@@ -59,11 +59,11 @@ const NotifyNodeConfigFormTelegramBotConfig = ({
>
<Form.Item
name="chatId"
label={t("workflow_node.notify.form.telegram_bot_chat_id.label")}
label={t("workflow_node.notify.form.telegrambot_chat_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.notify.form.telegram_bot_chat_id.tooltip") }}></span>}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.notify.form.telegrambot_chat_id.tooltip") }}></span>}
>
<Input allowClear placeholder={t("workflow_node.notify.form.telegram_bot_chat_id.placeholder")} />
<Input allowClear placeholder={t("workflow_node.notify.form.telegrambot_chat_id.placeholder")} />
</Form.Item>
</Form>
);