import React, { Component, Fragment } from 'react'; import { seafileAPI } from '../../../utils/seafile-api'; import { gettext, loginUrl, siteRoot } from '../../../utils/constants'; import EmptyTip from '../../../components/empty-tip'; import { Button } from 'reactstrap'; import moment from 'moment'; import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; import UserLink from '../user-link'; import LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog'; import ModalPortal from '../../../components/modal-portal'; class Content extends Component { constructor(props) { super(props); } getPreviousPage = () => { this.props.getLogsByPage(this.props.currentPage - 1); } getNextPage = () => { this.props.getLogsByPage(this.props.currentPage + 1); } render() { const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props; if (loading) { return ; } else if (errorMsg) { return

{errorMsg}

; } else { const emptyTip = (

{gettext('No File Access Logs.')}

); const table = ( {items && {items.map((item, index) => { return (); })} }
{gettext('Name')} {gettext('Type')} {gettext('IP')}{' / '}{gettext('Device')} {gettext('Date')} {gettext('Library')} {gettext('File')}{' / '}{gettext('Folder')}
); 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; return ( {item.event_type} {item.ip}{' / '}{item.device} {moment(item.time).fromNow()} {item.repo_name ? item.repo_name : gettext('Deleted')} {item.file_or_dir_name} ); } } class FileAccessLogs extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', logList: [], perPage: 100, currentPage: 1, hasNextPage: false, isExportExcelDialogOpen: false, }; this.initPage = 1; } toggleExportExcelDialog = () => { this.setState({isExportExcelDialogOpen: !this.state.isExportExcelDialogOpen}); } componentDidMount () { this.getLogsByPage(this.initPage); } getLogsByPage = (page) => { let { perPage } = this.state; seafileAPI.sysAdminListFileAccessLogs(page, perPage).then((res) => { this.setState({ logList: res.data.file_access_log_list, loading: false, currentPage: page, hasNextPage: res.data.has_next_page, }); }).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.') }); } }); } resetPerPage = (newPerPage) => { this.setState({ perPage: newPerPage, }, () => this.getLogsByPage(this.initPage)); } render() { let { logList, currentPage, perPage, hasNextPage, isExportExcelDialogOpen } = this.state; return (
{isExportExcelDialogOpen && }
); } } export default FileAccessLogs;