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 '../TextField'; import { FormStatusIndicator } from '../FormStatusIndicator'; import { postConfigUpdateToAPI, RESET_TIMEOUT, TWITTER_CONFIG_FIELDS, } from '../../../utils/config-constants'; import { ToggleSwitch } from '../ToggleSwitch'; import { createInputStatus, StatusState, STATUS_ERROR, STATUS_SUCCESS, } from '../../../utils/input-statuses'; import { UpdateArgs } from '../../../types/config-section'; import { TEXTFIELD_TYPE_TEXT } from '../TextFieldWithSubmit'; const { Title } = Typography; export const ConfigNotify = () => { const serverStatusData = useContext(ServerStatusContext); const { serverConfig, setFieldInConfigState } = serverStatusData || {}; const { notifications } = serverConfig || {}; const { twitter } = notifications || {}; const [formDataValues, setFormDataValues] = useState({}); const [submitStatus, setSubmitStatus] = useState(null); const [enableSaveButton, setEnableSaveButton] = useState(false); useEffect(() => { const { enabled, apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken, goLiveMessage, } = twitter || {}; setFormDataValues({ enabled, apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken, goLiveMessage, }); }, [twitter]); const canSave = (): boolean => { const { apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken, goLiveMessage } = formDataValues; return ( !!apiKey && !!apiSecret && !!accessToken && !!accessTokenSecret && !!bearerToken && !!goLiveMessage ); }; useEffect(() => { setEnableSaveButton(canSave()); }, [formDataValues]); // update individual values in state const handleFieldChange = ({ fieldName, value }: UpdateArgs) => { setFormDataValues({ ...formDataValues, [fieldName]: value, }); }; // toggle switch. const handleSwitchChange = (switchEnabled: boolean) => { const previouslySaved = formDataValues.enabled; handleFieldChange({ fieldName: 'enabled', value: switchEnabled }); return switchEnabled !== previouslySaved; }; let resetTimer = null; const resetStates = () => { setSubmitStatus(null); resetTimer = null; clearTimeout(resetTimer); setEnableSaveButton(false); }; 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.

); }; export default ConfigNotify;