diff --git a/web/pages/access-tokens.tsx b/web/pages/access-tokens.tsx new file mode 100644 index 000000000..79e096f47 --- /dev/null +++ b/web/pages/access-tokens.tsx @@ -0,0 +1,184 @@ +import React, { useState, useEffect } from "react"; +import { Table, Tag, Space, Button, Modal, Checkbox, Input, Typography, Tooltip } from 'antd'; +import { DeleteOutlined, EyeTwoTone, EyeInvisibleOutlined } from '@ant-design/icons'; +const { Title, Paragraph, Text } = Typography; + +import format from 'date-fns/format' + +import { + fetchData, + ACCESS_TOKENS, + DELETE_ACCESS_TOKEN, + CREATE_ACCESS_TOKEN, +} from "../utils/apis"; + +const availableScopes = { + 'CAN_SEND_SYSTEM_MESSAGES': { name: 'System messages', description: 'You can send official messages on behalf of the system', color: 'purple' }, + 'CAN_SEND_MESSAGES': { name: 'User chat messages', description: 'You can send messages on behalf of a username', color: 'green' }, +}; + +function convertScopeStringToTag(scopeString) { + if (!scopeString || !availableScopes[scopeString]) { + return null; + } + + const scope = availableScopes[scopeString]; + + return ( + + + {scope.name} + + + ); +} + +function NewTokenModal(props) { + var selectedScopes = []; + + + const scopes = Object.keys(availableScopes).map(function (key) { + return { value: key, label: availableScopes[key].description } + }); + + function onChange(checkedValues) { + selectedScopes = checkedValues + } + + function saveToken() { + props.onOk(name, selectedScopes) + } + + const [name, setName] = useState(''); + + return ( + +

setName(input.currentTarget.value)} />

+ +

+ Select the permissions this access token will have. It cannot be edited after it's created. +

+ +
+ ) +} + +export default function AccessTokens() { + const [tokens, setTokens] = useState([]); + const [isTokenModalVisible, setIsTokenModalVisible] = useState(false); + + const columns = [ + { + title: '', + key: 'delete', + render: (text, record) => ( + +