import React from 'react'; import superagent from 'superagent'; import { fromUnixTime, formatDistanceToNow, format } from "date-fns"; import { formatInTimeZone } from 'date-fns-tz'; import { Segment, Header, Icon, Button, Table, Label, Modal, Message } from 'semantic-ui-react' import { DEFAULT_TIMEZONE } from '../../CloudApi/Constants.js'; import _ from 'lodash'; export default class AccountDevices extends React.Component { constructor(props) { super(props); this.state = { showBanDeviceDialog: false, pendingBanDeviceId: null, loading: false }; } async componentDidMount() { return this.reload(); } async reload() { try { this.setState({deviceHistory: null, loading: true}); const deviceHistory = await superagent.get(`/api/admin/account/${this.props.account.id}/device_history`).accept('json'); console.log(deviceHistory.body); this.setState({ loading: false, deviceHistory: deviceHistory.body }); } catch (e) { console.log(e); this.setState({ loading: false, deviceHistory: null }); } } // Ban device dialog onBanDeviceId( pendingBanDeviceId, e) { e.preventDefault(); this.setState({showBanDeviceDialog: true, pendingBanDeviceId }); } async onRemoveBannedDeviceId(deviceUniqueIdentifier, e) { e.preventDefault(); try { const result = await superagent.put(`/api/admin/device/${deviceUniqueIdentifier}`).accept('json').send({ status: "FullAccess" }); return this.reload(); } catch (e) { console.log(e); } } closeBanDeviceIdModal(e) { this.setState({showBanDeviceDialog: false, pendingBanDeviceId: null }); } async onConfirmBanDeviceId(e) { e.preventDefault(); try { const result = await superagent.put(`/api/admin/device/${this.state.pendingBanDeviceId}`).accept('json').send({ status: "BannedFromEverything" }); this.setState({showBanDeviceDialog: false, pendingBanDeviceId: null }); return this.reload(); } catch (e) { this.setState({showBanDeviceDialog: false, pendingBanDeviceId: null }); console.log(e); } } render() { if (this.state.loading) { return ( Loading... ) } if (this.state.deviceHistory == null || this.state.deviceHistory.devices == null || this.state.deviceHistory.devices.length == 0) { return ( No device history for this account. They've likely not logged in for a while. ) } const sortedDeviceList = _.orderBy(this.state.deviceHistory.devices, ["date._seconds"], ["desc"]); return (
{ (this.props.account.status == "Ok") && Ban the user's account first! Banning the account will kick the user out of public rooms. } { (this.props.account) &&

Are you sure you want to ban the device id {this.state.pendingBanDeviceId}?

}
Device Status GPU/CPU OS App Version Last Date Device ID {sortedDeviceList.map(device => { let statusLabelColor = (device.status === "FullAccess") ? "green" : "red"; let dateString = "(n/a)"; if (device.date) { if (device.date._seconds) { dateString = formatInTimeZone(fromUnixTime(device.date._seconds), DEFAULT_TIMEZONE, 'PPPp z'); } else if (_.isDate(device.date)) { dateString = formatInTimeZone(fromUnixTime(Date.parse(device.date)), DEFAULT_TIMEZONE, 'PPPp z'); } } return (
{device.GPU} {device.CPU}
{device.operatingSystem} {device.version} {dateString} { (device.status === "FullAccess") ? : }
{device.deviceUniqueIdentifier}
) })}
); } }