import { Button, Typography } from 'antd'; import React, { useState, useContext, useEffect } from 'react'; import { ServerStatusContext } from '../../../utils/server-status-context'; import TextField, { TEXTFIELD_TYPE_PASSWORD } from '../form-textfield'; import FormStatusIndicator from '../form-status-indicator'; import { postConfigUpdateToAPI, RESET_TIMEOUT, TWITTER_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'; import { TEXTFIELD_TYPE_TEXT } from '../form-textfield-with-submit'; const { Title } = Typography; export default function ConfigNotify() { const serverStatusData = useContext(ServerStatusContext); const { serverConfig, setFieldInConfigState } = serverStatusData || {}; const { notifications } = serverConfig || {}; const { twitter } = notifications || {}; const { enabled, apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken, goLiveMessage } = twitter || {}; const [formDataValues, setFormDataValues] = useState({}); const [submitStatus, setSubmitStatus] = useState(null); const [enableSaveButton, setEnableSaveButton] = useState(false); useEffect(() => { setFormDataValues({ enabled, apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken, goLiveMessage, }); }, [twitter]); const canSave = (): boolean => true; // update individual values in state const handleFieldChange = ({ fieldName, value }: UpdateArgs) => { setFormDataValues({ ...formDataValues, [fieldName]: value, }); setEnableSaveButton(canSave()); }; // toggle switch. const handleSwitchChange = (switchEnabled: boolean) => { handleFieldChange({ fieldName: 'enabled', value: switchEnabled }); }; let resetTimer = null; const resetStates = () => { setSubmitStatus(null); resetTimer = null; clearTimeout(resetTimer); }; const save = async () => { const postValue = formDataValues; await postConfigUpdateToAPI({ apiPath: '/notifications/twitter', data: { value: postValue }, onSuccess: () => { setFieldInConfigState({ fieldName: 'twitter', 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); }, }); }; return ( <> Twitter

Let your Twitter followers know each time you go live.

Read how to configure your Twitter account {' '} to support posting from Owncast.

And then get your Twitter developer credentials {' '} to fill in below.

); }