import React, { Component, Fragment } from 'react'; import moment from 'moment'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext, loginUrl } from '../../utils/constants'; import GeneralToolbar from '../../components/toolbar/general-toolbar'; import Toast from '../../components/toast'; class Content extends Component { render() { const {loading, errorMsg, items} = this.props.data; if (loading) { return ; } else if (errorMsg) { return

{errorMsg}

; } else { const desktopThead = ( {gettext("Platform")} {gettext("Device Name")} {gettext("IP")} {gettext("Last Access")} ); const mobileThead = ( {gettext("Platform")} {gettext('Device Name')} ); return ( {window.innerWidth >= 768 ? desktopThead : mobileThead}
); } } } class TableBody extends Component { constructor(props) { super(props); this.state = { items: this.props.items }; } render() { let listLinkedDevices = this.state.items.map(function(item, index) { return ; }, this); return ( {listLinkedDevices} ); } } class Item extends Component { constructor(props) { super(props); this.state = { showOpIcon: false, unlinked: false }; this.handleMouseOver = this.handleMouseOver.bind(this); this.handleMouseOut = this.handleMouseOut.bind(this); this.handleClick = this.handleClick.bind(this); } handleMouseOver() { this.setState({ showOpIcon: true }); } handleMouseOut() { this.setState({ showOpIcon: false }); } handleClick(e) { e.preventDefault(); const data = this.props.data; seafileAPI.unlinkDevice(data.platform, data.device_id).then((res) => { this.setState({ unlinked: true }); let msg_s = gettext("Successfully unlink %(name)s."); msg_s = msg_s.replace('%(name)s', data.device_name); Toast.success(msg_s); }).catch((error) => { let message = gettext("Failed to unlink %(name)s"); message = message.replace('%(name)s', data.device_name); Toast.error(message); }); } render() { if (this.state.unlinked) { return null; } const data = this.props.data; let opClasses = 'sf2-icon-delete unlink-device op-icon'; opClasses += this.state.showOpIcon ? '' : ' invisible'; const desktopItem = ( {data.platform} {data.device_name} {data.last_login_ip} {moment(data.last_accessed).fromNow()} ); const mobileItem = ( {data.platform} {data.device_name} ); if (window.innerWidth >= 768) { return desktopItem; } else { return mobileItem; } } } class LinkedDevices extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', items: [] }; } componentDidMount() { seafileAPI.listLinkedDevices().then((res) => { //res: {data: Array(2), status: 200, statusText: "OK", headers: {…}, config: {…}, …} this.setState({ loading: false, items: res.data }); }).catch((error) => { if (error.response) { if (error.response.status == 403) { this.setState({ loading: false, errorMsg: gettext('Permission denied') }); location.href = `${loginUrl}?next=${encodeURIComponent(location.href)}`; } else { this.setState({ loading: false, errorMsg: gettext('Error') }); } } else { this.setState({ loading: false, errorMsg: gettext('Please check the network.') }); } }); } render() { return (

{gettext('Linked Devices')}

); } } export default LinkedDevices;