diff --git a/web/pages/webhooks.tsx b/web/pages/webhooks.tsx new file mode 100644 index 000000000..0cad870b5 --- /dev/null +++ b/web/pages/webhooks.tsx @@ -0,0 +1,181 @@ +import React, { useState, useEffect } from "react"; +import { Table, Tag, Space, Button, Modal, Checkbox, Input, Typography, Tooltip, Select } from 'antd'; +import { DeleteOutlined, EyeTwoTone, EyeInvisibleOutlined } from '@ant-design/icons'; + +const { Title, Paragraph, Text } = Typography; +const { Option } = Select; + +import format from 'date-fns/format' + +import { + fetchData, + DELETE_WEBHOOK, + CREATE_WEBHOOK, + WEBHOOKS, +} from "../utils/apis"; + +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) { + var selectedEvents = []; + const [name, setName] = useState(''); + + const events = Object.keys(availableEvents).map(function (key) { + return { value: key, label: availableEvents[key].description } + }); + + + function onChange(checkedValues) { + selectedEvents = checkedValues + } + + function save() { + props.onOk(name, selectedEvents) + } + + return ( + +
setName(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) => ( + +