import { Button, Typography } from 'antd'; import React, { useState, useContext, useEffect } from 'react'; import { ServerStatusContext } from '../../../utils/server-status-context'; import TextField from '../form-textfield'; import FormStatusIndicator from '../form-status-indicator'; import { postConfigUpdateToAPI, RESET_TIMEOUT, DISCORD_CONFIG_FIELDS, } from '../../../utils/config-constants'; import ToggleSwitch from '../form-toggleswitch'; import { createInputStatus, StatusState, STATUS_ERROR, STATUS_SUCCESS, } from '../../../utils/input-statuses'; import { UpdateArgs } from '../../../types/config-section'; const { Title } = Typography; export default function ConfigNotify() { const serverStatusData = useContext(ServerStatusContext); const { serverConfig, setFieldInConfigState } = serverStatusData || {}; const { notifications } = serverConfig || {}; const { discord } = notifications || {}; const { enabled, webhook, goLiveMessage } = discord || {}; const [formDataValues, setFormDataValues] = useState({}); const [submitStatus, setSubmitStatus] = useState(null); const [enableSaveButton, setEnableSaveButton] = useState(false); useEffect(() => { setFormDataValues({ enabled, webhook, goLiveMessage, }); }, [notifications, discord]); const canSave = (): boolean => { if (webhook === '' || goLiveMessage === '') { return false; } return true; }; // update individual values in state const handleFieldChange = ({ fieldName, value }: UpdateArgs) => { setFormDataValues({ ...formDataValues, [fieldName]: value, }); setEnableSaveButton(canSave()); }; let resetTimer = null; const resetStates = () => { setSubmitStatus(null); resetTimer = null; clearTimeout(resetTimer); }; const save = async () => { const postValue = formDataValues; await postConfigUpdateToAPI({ apiPath: '/notifications/discord', data: { value: postValue }, onSuccess: () => { setFieldInConfigState({ fieldName: 'discord', value: postValue, path: 'notifications', }); setSubmitStatus(createInputStatus(STATUS_SUCCESS, 'Updated.')); resetTimer = setTimeout(resetStates, RESET_TIMEOUT); }, onError: (message: string) => { setSubmitStatus(createInputStatus(STATUS_ERROR, message)); resetTimer = setTimeout(resetStates, RESET_TIMEOUT); }, }); }; // toggle switch. const handleSwitchChange = (switchEnabled: boolean) => { // setShouldDisplayForm(storageEnabled); handleFieldChange({ fieldName: 'enabled', value: switchEnabled }); }; return ( <> Discord

Let your Discord channel know each time you go live.

Create a webhook {' '} under Edit Channel / Integrations on your Discord channel and provide it below.

); }