import React, { Component, Fragment } from 'react'; import { Button } from 'reactstrap'; import { seafileAPI } from '../../../utils/seafile-api'; import { siteRoot, loginUrl, gettext } from '../../../utils/constants'; import toaster from '../../../components/toast'; import { Utils } from '../../../utils/utils'; import EmptyTip from '../../../components/empty-tip'; import moment from 'moment'; import Loading from '../../../components/loading'; import { Link } from '@reach/router'; import DevicesNav from './devices-nav'; import MainPanelTopbar from '../main-panel-topbar'; import UserLink from '../user-link'; class Content extends Component { constructor(props) { super(props); } render() { const { loading, errorMsg, items } = this.props; if (loading) { return ; } else if (errorMsg) { return

{errorMsg}

; } else { const emptyTip = (

{gettext('No sync errors')}

); const table = ( {items.map((item, index) => { return (); })}
{gettext('User')} {gettext('Device')}{' / '}{gettext('Version')} {gettext('IP')} {gettext('Library')} {gettext('Error')} {gettext('Time')}
); return items.length ? table : emptyTip; } } } class Item extends Component { constructor(props) { super(props); this.state = { isOpIconShown: false, }; } handleMouseOver = () => { this.setState({isOpIconShown: true}); } handleMouseOut = () => { this.setState({isOpIconShown: false}); } render() { let item = this.props.item; return ( {item.device_name}{' / '}{item.client_version} {item.device_ip} {item.repo_name} {item.error_msg} {moment(item.error_time).fromNow()} ); } } class DeviceErrors extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', devicesErrors: [], isCleanBtnShown: false }; } componentDidMount () { seafileAPI.sysAdminListDeviceErrors().then((res) => { this.setState({ loading: false, devicesErrors: res.data, isCleanBtnShown: res.data.length > 0 }); }).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.') }); } }); } clean = () => { seafileAPI.sysAdminClearDeviceErrors().then((res) => { this.setState({ devicesErrors: [], isCleanBtnShown: false }); let message = gettext('Successfully cleaned all errors.'); toaster.success(message); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } render() { return ( {this.state.isCleanBtnShown ? ( ) : ( )}
); } } export default DeviceErrors;