import React, { Component } from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api'; import { siteRoot, gettext, lang } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import toaster from '../../components/toast'; import OrgLogsFilePermEvent from '../../models/org-logs-perm-audit'; import '../../css/org-logs.css'; moment.locale(lang); class OrgLogsFileUpdate extends Component { constructor(props) { super(props); this.state = { page: 1, pageNext: false, eventList: [], userSelected: '', repoSelected: '', isItemFreezed: false }; } componentDidMount() { let page = this.state.page; let email = this.state.userSelected; let repoID = this.state.repoSelected; this.initData(email, repoID, page); } initData = (email, repoID, page) => { seafileAPI.orgAdminListPermAudit(email, repoID, page).then(res => { let eventList = res.data.log_list.map(item => { return new OrgLogsFilePermEvent(item); }); this.setState({ eventList: eventList, pageNext: res.data.page_next, page: res.data.page, }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } onChangePageNum = (e, num) => { e.preventDefault(); let page = this.state.page; if (num == 1) { page = page + 1; } else { page = page - 1; } this.initData(page); } filterUser = (userSelected) => { this.setState({ userSelected: userSelected }); } render() { let eventList = this.state.eventList; return (
{this.state.userSelected && {this.state.userSelected}{' ✖'} } {eventList.map((item, index) => { return ( ); })}
{gettext('Share From')} {gettext('Share To')} {gettext('Actions')} {gettext('Permission')} {gettext('Library')} {gettext('Folder')} {gettext('Date')}
{this.state.page != 1 && this.onChangePageNum(e, -1)}>{gettext('Previous')}} {(this.state.page != 1 && this.state.pageNext) && | } {this.state.pageNext && this.onChangePageNum(e, 1)}>{gettext('Next')}}
); } } const propTypes = { filterUser: PropTypes.func.isRequired, isItemFreezed: PropTypes.bool.isRequired, userSelected: PropTypes.string.isRequired, permEvent: PropTypes.object.isRequired, }; class PermAuditItem extends React.Component { constructor(props) { super(props); this.state = { highlight: false, showMenu: false, isItemMenuShow: false, userDropdownOpen: false, }; } onMouseEnter = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: true, highlight: true, }); } } onMouseLeave = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: false, highlight: false }); } } renderFromUser = (permEvent) => { if (!permEvent.from_user_email) { return gettext('Anonymous User'); } return ( {permEvent.from_user_name}{' '} {gettext('Only Show')}{' '} {permEvent.from_user_name} ); } toggleUserDropdown = () => { this.setState({ userDropdownOpen: !this.state.userDropdownOpen }); } renderToUser = (permEvent) => { if (permEvent.type.indexOf('public') != -1) { return {gettext('Organization')}; } if (permEvent.type.indexOf('group') != -1) { if (permEvent.to_group_name) { return {permEvent.to_group_name}; } return 'Deleted'; } if (permEvent.type.indexOf('user') != -1) { return {permEvent.to_user_name}; } } renderType = (type) => { if (type.indexOf('add') != -1) { type = 'Add'; } if (type.indexOf('modify') != -1) { type = 'Modify'; } if (type.indexOf('delete') != -1) { type = 'Delete'; } return type; } renderRepo = (permEvent) => { let repoName = 'Deleted'; if (permEvent.repo_name) { repoName = permEvent.repo_name; } return repoName; } renderFolder = (name) => { let folderName = '/'; if (name) { folderName = name; } return folderName; } render() { let { permEvent } = this.props; if (this.props.userSelected && permEvent.from_user_email !== this.props.userSelected ) { return null; } else { return ( {this.renderFromUser(permEvent)} {this.renderToUser(permEvent)} {this.renderType(permEvent.type)} {Utils.sharePerms(permEvent.permission)} {this.renderRepo(permEvent)} {this.renderFolder(permEvent.folder_name)} {moment(permEvent.time).format('YYYY-MM-DD HH:mm:ss')} ); } } } PermAuditItem.propTypes = propTypes; export default OrgLogsFileUpdate;