import React, { useState, useEffect } from 'react'; import { Table, Tag, Space, Button, Modal, Checkbox, Input, Typography, Tooltip, Row, Col, } from 'antd'; import { DeleteOutlined } from '@ant-design/icons'; import isValidUrl, { DEFAULT_TEXTFIELD_URL_PATTERN } 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} ); } interface Props { onCancel: () => void; onOk: any; // todo: make better type visible: boolean; } function NewWebhookModal(props: Props) { const { onOk, onCancel, visible } = props; const [selectedEvents, setSelectedEvents] = useState([]); const [webhookUrl, setWebhookUrl] = useState(''); const events = Object.keys(availableEvents).map(key => { return { value: key, label: availableEvents[key].description }; }); function onChange(checkedValues) { setSelectedEvents(checkedValues); } function selectAll() { setSelectedEvents(Object.keys(availableEvents)); } function save() { onOk(webhookUrl, selectedEvents); // Reset the modal setWebhookUrl(''); setSelectedEvents(null); } const okButtonProps = { disabled: selectedEvents?.length === 0 || !isValidUrl(webhookUrl), }; const checkboxes = events.map(function (singleEvent) { return ( {singleEvent.label} ); }); return (
setWebhookUrl(input.currentTarget.value.trim())} type="url" pattern={DEFAULT_TEXTFIELD_URL_PATTERN} />

Select the events that will be sent to this webhook.

{checkboxes}

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