You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.2 KiB
116 lines
4.2 KiB
import styles from './styles.module.css'
|
|
import {Autocomplete, IconButton, TextareaAutosize, TextField} from "@mui/material";
|
|
import {useContext, useEffect, useState} from "react";
|
|
import Context from "../../../context/token";
|
|
import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined';
|
|
import DeleteForeverOutlined from '@mui/icons-material/DeleteForeverOutlined';
|
|
import Modal from '@mui/material/Modal';
|
|
import Fade from '@mui/material/Fade';
|
|
import Backdrop from '@mui/material/Backdrop';
|
|
import Box from '@mui/material/Box';
|
|
import Grid from "@mui/material/Grid";
|
|
import ConfirmDialog from "../confirm-dialog";
|
|
|
|
const style = {
|
|
position: 'absolute' as 'absolute',
|
|
top: '50%',
|
|
left: '50%',
|
|
transform: 'translate(-50%, -50%)',
|
|
width: '100%',
|
|
bgcolor: 'background.paper',
|
|
border: '2px solid #000',
|
|
boxShadow: 24,
|
|
p: 4,
|
|
};
|
|
|
|
export default function Tokens() {
|
|
const {token, tokens, addToken, deleteToken, switchToken} = useContext(Context)
|
|
const [showAddForm, setShowAddForm] = useState(false)
|
|
const [showConfirm, setShowConfirm] = useState(false)
|
|
|
|
let variants = tokens.map((token, index) => ({
|
|
...token,
|
|
label: `${token.host} [${token.id}]`
|
|
}));
|
|
|
|
useEffect(() => {
|
|
setShowAddForm(!token)
|
|
}, [token])
|
|
|
|
return (
|
|
<>
|
|
<Grid container>
|
|
<Grid item xs={2}>
|
|
<Autocomplete
|
|
freeSolo
|
|
value={{
|
|
...token,
|
|
label: token?.host ? `${token.host} [${token.id}]` : ''
|
|
}}
|
|
onChange={(event: any, newValue: any) => {
|
|
console.log('newValue', newValue);
|
|
if (newValue?.id) {
|
|
switchToken(newValue?.id)
|
|
}
|
|
}}
|
|
disablePortal
|
|
options={variants}
|
|
renderInput={(params) => <TextField {...params} label="Tokens"/>}
|
|
/>
|
|
</Grid>
|
|
<Grid item xs={1}>
|
|
<IconButton onClick={() => setShowAddForm(true)} title={`Add new token`}
|
|
aria-label="Add new token">
|
|
<AddCircleOutlineOutlinedIcon/>
|
|
</IconButton>
|
|
<IconButton onClick={() => setShowConfirm(true)} title={`Delete current token`}
|
|
aria-label="Add new token">
|
|
<DeleteForeverOutlined/>
|
|
</IconButton>
|
|
</Grid>
|
|
</Grid>
|
|
<Modal
|
|
aria-labelledby="transition-modal-title"
|
|
aria-describedby="transition-modal-description"
|
|
open={showAddForm}
|
|
onClose={() => setShowAddForm(false)}
|
|
closeAfterTransition
|
|
slots={{backdrop: Backdrop}}
|
|
slotProps={{
|
|
backdrop: {
|
|
timeout: 500,
|
|
},
|
|
}}
|
|
>
|
|
<Fade in={showAddForm}>
|
|
<Box sx={style}>
|
|
<TextareaAutosize
|
|
placeholder={`Pass JWT token`}
|
|
minRows={25}
|
|
style={{width: '100%'}}
|
|
onInput={(event: any) => {
|
|
if (addToken(event.target.value)) {
|
|
setShowAddForm(false)
|
|
}
|
|
}}
|
|
/>
|
|
</Box>
|
|
</Fade>
|
|
</Modal>
|
|
<ConfirmDialog
|
|
title={`Delete curent token`}
|
|
open={showConfirm}
|
|
agreeCallback={async () => {
|
|
let tokenId = token?.id || null
|
|
if (tokenId) {
|
|
deleteToken(tokenId)
|
|
}
|
|
setShowConfirm(false)
|
|
}}
|
|
|
|
closeCallback={() => {setShowConfirm(false)}}>
|
|
Confirm?
|
|
</ConfirmDialog>
|
|
</>
|
|
)
|
|
}
|
|
|