import React, { useState, useEffect } from 'react'; import { Table, Tag, Space, Button, Modal, Checkbox, Input, Typography, Tooltip } from 'antd'; import { DeleteOutlined } from '@ant-design/icons'; import { isValidUrl } from '../utils/urls'; import { fetchData, DELETE_WEBHOOK, CREATE_WEBHOOK, WEBHOOKS } from '../utils/apis'; const { Title, Paragraph } = Typography; const availableEvents = { CHAT: { name: 'Chat messages', description: 'When a user sends a chat message', color: 'purple' }, USER_JOINED: { name: 'User joined', description: 'When a user joins the chat', color: 'green' }, NAME_CHANGE: { name: 'User name changed', description: 'When a user changes their name', color: 'blue', }, 'VISIBILITY-UPDATE': { name: 'Message visibility changed', description: 'When a message visibility changes, likely due to moderation', color: 'red', }, STREAM_STARTED: { name: 'Stream started', description: 'When a stream starts', color: 'orange' }, STREAM_STOPPED: { name: 'Stream stopped', description: 'When a stream stops', color: 'cyan' }, }; function convertEventStringToTag(eventString) { if (!eventString || !availableEvents[eventString]) { return null; } const event = availableEvents[eventString]; return ( {event.name} ); } function NewWebhookModal(props) { const [selectedEvents, setSelectedEvents] = useState([]); const [webhookUrl, setWebhookUrl] = useState(''); const events = Object.keys(availableEvents).map(function (key) { return { value: key, label: availableEvents[key].description }; }); function onChange(checkedValues) { setSelectedEvents(checkedValues); } function selectAll() { setSelectedEvents(Object.keys(availableEvents)); } function save() { props.onOk(webhookUrl, selectedEvents); // Reset the modal setWebhookUrl(''); setSelectedEvents(null); } const okButtonProps = { disabled: selectedEvents?.length === 0 || !isValidUrl(webhookUrl), }; return (
setWebhookUrl(input.currentTarget.value)} />

Select the events that will be sent to this webhook.

); } export default function Webhooks() { const [webhooks, setWebhooks] = useState([]); const [isModalVisible, setIsModalVisible] = useState(false); const columns = [ { title: '', key: 'delete', render: (text, record) => (