| import React from "react"; | |
| import { Modal, Button, ModalProps, Textarea, Divider } from "@mantine/core"; | |
| import { decode } from "jsonwebtoken"; | |
| import useFile from "src/store/useFile"; | |
| export const JWTModal: React.FC<ModalProps> = ({ opened, onClose }) => { | |
| const setContents = useFile(state => state.setContents); | |
| const [token, setToken] = React.useState(""); | |
| const resolve = () => { | |
| if (!token) return; | |
| const json = decode(token); | |
| setContents({ contents: JSON.stringify(json, null, 2) }); | |
| setToken(""); | |
| onClose(); | |
| }; | |
| return ( | |
| <Modal title="Decode JSON Web Token" opened={opened} onClose={onClose} centered> | |
| <Textarea | |
| placeholder="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikhlcm93YW5kIiwidXJsIjoiaHR0cHM6Ly9oZXJvd2FuZC5jb20iLCJpYXQiOjE1MTYyMzkwMjJ9.Tmm3Miq6KWCF_QRn3iERhhXThJzv4LQPKYwBhYUld88" | |
| value={token} | |
| onChange={e => setToken(e.target.value)} | |
| autosize | |
| minRows={4} | |
| data-autofocus | |
| /> | |
| <Divider my="xs" /> | |
| <Button onClick={resolve} fullWidth> | |
| Resolve | |
| </Button> | |
| </Modal> | |
| ); | |
| }; | |