import React, { Component } from 'react';
import { seafileAPI } from '../utils/seafile-api';
import { gettext, siteRoot } from './constants';
const per_page = 25; // default
class FileActivitiesContent extends Component {
render() {
let {loading, error_msg, items, has_more} = this.props.data;
if (loading) {
return ;
} else if (error_msg) {
return
{error_msg}
;
} else {
return (
{/* avatar */} |
{gettext("User")} |
{gettext("Operation")} |
{gettext("File")} / {gettext("Library")} |
{gettext("Time")} |
{has_more ? : ''}
{error_msg ? {error_msg}
: ''}
);
}
}
}
class TableBody extends Component {
encodePath(path) {
let path_arr = path.split('/'),
path_arr_ = [];
for (let i = 0, len = path_arr.length; i < len; i++) {
path_arr_.push(encodeURIComponent(path_arr[i]));
}
return path_arr_.join('/');
}
render() {
let listFilesActivities = this.props.items.map(function(item, index) {
let op, details;
let userProfileURL = `${siteRoot}profile/${encodeURIComponent(item.author_email)}/`;
let libURL = `${siteRoot}#common/lib/${item.repo_id}`;
let libLink = {item.repo_name};
let smallLibLink = {item.repo_name};
if (item.obj_type == 'repo') {
switch(item.op_type) {
case 'create':
op = gettext("Created library");
details = {libLink} | ;
break;
case 'rename':
op = gettext("Renamed library");
details = {item.old_repo_name} => {libLink} | ;
break;
case 'delete':
op = gettext("Deleted library");
details = {item.repo_name} | ;
break;
case 'recover':
op = gettext("Restored library");
details = {libLink} | ;
break;
case 'clean-up-trash':
if (item.days == 0) {
op = gettext("Removed all items from trash.");
} else {
op = gettext("Removed items older than {n} days from trash.").replace('{n}', item.days);
}
details = {libLink} | ;
break;
}
} else if (item.obj_type == 'file') {
let fileURL = `${siteRoot}lib/${item.repo_id}/file${this.encodePath(item.path)}`;
let fileLink = {item.name};
switch(item.op_type) {
case 'create':
op = gettext("Created file");
details = {fileLink} {smallLibLink} | ;
break;
case 'delete':
op = gettext("Deleted file");
details = {item.name} {smallLibLink} | ;
break;
case 'recover':
op = gettext("Restored file");
details = {fileLink} {smallLibLink} | ;
break;
case 'rename':
op = gettext("Renamed file");
details = {item.old_name} => {fileLink} {smallLibLink} | ;
break;
case 'move':
let filePathLink = {item.path};
op = gettext("Moved file");
details = {item.old_path} => {filePathLink} {smallLibLink} | ;
break;
case 'edit': // update
op = gettext("Updated file");
details = {fileLink} {smallLibLink} | ;
break;
}
} else { // dir
let dirURL = `${siteRoot}#common/lib/${item.repo_id}${this.encodePath(item.path)}`;
let dirLink = {item.name};
switch(item.op_type) {
case 'create':
op = gettext("Created folder");
details = {dirLink} {smallLibLink} | ;
break;
case 'delete':
op = gettext("Deleted folder");
details = {item.name} {smallLibLink} | ;
break;
case 'recover':
op = gettext("Restored folder");
details = {dirLink} {smallLibLink} | ;
break;
case 'rename':
op = gettext("Renamed folder");
details = {item.old_name} => {dirLink} {smallLibLink} | ;
break;
case 'move':
let dirPathLink = {item.path};
op = gettext("Moved folder");
details = {item.old_path} => {dirPathLink} {smallLibLink} | ;
break;
}
}
return (
|
{item.author_name}
|
{op} |
{details}
|
);
}, this);
return (
{listFilesActivities}
);
}
}
class FilesActivities extends Component {
constructor(props) {
super(props);
this.state = {
loading: true,
error_msg: '',
events: {},
items: [],
page: 1,
has_more: false
};
this.handleScroll = this.handleScroll.bind(this);
}
componentDidMount() {
const pageNum = 1
seafileAPI.listActivities(pageNum)
.then(res => {
// not logged in
if (res.status == 403) {
this.setState({
loading: false,
error_msg: gettext("Permission denied")
});
} else {
// {"events":[...]}
this.setState({
loading: false,
items: res.data.events,
has_more: res.data.events.length == '0' ? false : true
});
}
});
}
getMore() {
const pageNum = this.state.page + 1;
this.setState({
page: pageNum
})
seafileAPI.listActivities(pageNum)
.then(res => {
if (res.status == 403) {
this.setState({
loading: false,
error_msg: gettext("Permission denied")
});
} else {
// {"events":[...]}
this.setState({
loading: false,
items: [...this.state.items, ...res.data.events],
has_more: res.data.events.length == '0' ? false : true
});
}
});
}
handleScroll(event) {
const clientHeight = event.target.clientHeight;
const scrollHeight = event.target.scrollHeight;
const scrollTop = event.target.scrollTop;
const isBottom = (clientHeight + scrollTop + 1 >= scrollHeight);
if (this.state.has_more && isBottom) { // scroll to the bottom
this.getMore();
}
}
render() {
return (
);
}
}
export default FilesActivities;