import React, { useEffect } from "react"; import PropTypes from "prop-types"; import { useDispatch, useSelector } from "react-redux"; import { UAParser } from "ua-parser-js"; import moment from "moment"; import { Map } from "immutable"; import { getUserTokens, deleteUserToken } from "../../actions/users"; const UserTokens = () => { const dispatch = useDispatch(); const tokens = useSelector((state) => state.userStore.get("tokens")); useEffect(() => { dispatch(getUserTokens()); }, [dispatch]); return (
{tokens.map((el, index) => ( dispatch(deleteUserToken(token))} /> ))}
); }; const Token = (props) => { const ua = UAParser(props.data.get("user_agent")); return (

{props.data.get("description")}

Last IP: {props.data.get("ip")}

Last used: {moment(props.data.get("last_used")).fromNow()}

Created: {moment(props.data.get("created_at")).fromNow()}

Device:

OS:

Browser:

); }; Token.propTypes = { data: PropTypes.instanceOf(Map).isRequired, }; const Actions = (props) => { const handleClick = () => { props.deleteToken(props.data.get("token")); }; return ( ); }; Actions.propTypes = { data: PropTypes.instanceOf(Map).isRequired, deleteToken: PropTypes.func.isRequired, }; const Logo = ({ ua, device, browser }) => { var className; if (ua === "canape-cli") { className = "terminal"; } else if (device.type == "mobile") { className = "mobile"; } else { switch (browser.name) { case "Chrome": case "chrome": className = "chrome"; break; case "Safari": case "safari": className = "safari"; break; case "Firefox": case "firefox": className = "firefox"; break; default: className = "question"; break; } } return ; }; Logo.propTypes = { ua: PropTypes.string, device: PropTypes.object, browser: PropTypes.object, }; const OS = ({ name, version }) => { var osName = "-"; if (name !== undefined) { osName = name; if (version !== undefined) { osName += " " + version; } } return {osName}; }; OS.propTypes = { name: PropTypes.string, version: PropTypes.string, }; const Device = ({ model }) => { var deviceName = "-"; if (model !== undefined) { deviceName = model; } return {deviceName}; }; Device.propTypes = { model: PropTypes.string, }; const Browser = ({ name, version }) => { var browserName = "-"; if (name !== undefined) { browserName = name; if (version !== undefined) { browserName += " - " + version; } } return {browserName}; }; Browser.propTypes = { name: PropTypes.string, version: PropTypes.string, }; export default UserTokens;