mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-22 08:47:22 +00:00
Repo optimized (#2664)
This commit is contained in:
parent
3b43d2d534
commit
ed5439a4e3
@ -25,7 +25,7 @@ class UserItem extends React.Component {
|
|||||||
|
|
||||||
deleteShareItem = () => {
|
deleteShareItem = () => {
|
||||||
let item = this.props.item;
|
let item = this.props.item;
|
||||||
this.props.deleteShareItem(item.name);
|
this.props.deleteShareItem(item.user_info.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import cookie from 'react-cookies';
|
import cookie from 'react-cookies';
|
||||||
import { gettext, siteRoot } from '../../utils/constants';
|
import { gettext, siteRoot, username } from '../../utils/constants';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
|
||||||
import CommonToolbar from '../toolbar/common-toolbar';
|
import CommonToolbar from '../toolbar/common-toolbar';
|
||||||
import ViewModeToolbar from '../toolbar/view-mode-toolbar';
|
import ViewModeToolbar from '../toolbar/view-mode-toolbar';
|
||||||
import DirOperationToolBar from '../toolbar/dir-operation-toolbar';
|
import DirOperationToolBar from '../toolbar/dir-operation-toolbar';
|
||||||
@ -15,7 +14,7 @@ import ModalPortal from '../modal-portal';
|
|||||||
import LibDecryptDialog from '../dialog/lib-decrypt-dialog';
|
import LibDecryptDialog from '../dialog/lib-decrypt-dialog';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
currentRepo: PropTypes.object,
|
currentRepoInfo: PropTypes.object,
|
||||||
pathPrefix: PropTypes.array.isRequired,
|
pathPrefix: PropTypes.array.isRequired,
|
||||||
path: PropTypes.string.isRequired,
|
path: PropTypes.string.isRequired,
|
||||||
repoID: PropTypes.string.isRequired,
|
repoID: PropTypes.string.isRequired,
|
||||||
@ -56,18 +55,15 @@ class DirPanel extends React.Component {
|
|||||||
currentDirent: null,
|
currentDirent: null,
|
||||||
currentMode: 'list',
|
currentMode: 'list',
|
||||||
isDirentDetailShow: false,
|
isDirentDetailShow: false,
|
||||||
isRepoOwner: true,
|
isRepoOwner: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
let currentRepo = this.props.currentRepo;
|
let currentRepoInfo = this.props.currentRepoInfo;
|
||||||
if (currentRepo) {
|
if (currentRepoInfo) {
|
||||||
seafileAPI.getAccountInfo().then(res => {
|
let isRepoOwner = currentRepoInfo.owner_email === username;
|
||||||
let user_email = res.data.email;
|
this.setState({isRepoOwner: isRepoOwner});
|
||||||
let isRepoOwner = currentRepo.owner_email === user_email;
|
|
||||||
this.setState({isRepoOwner: isRepoOwner});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +75,7 @@ class DirPanel extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onItemDetailsClose = () => {
|
onItemDetailsClose = () => {
|
||||||
|
// todo there is bug when change item
|
||||||
this.setState({isDirentDetailShow: false});
|
this.setState({isDirentDetailShow: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +168,7 @@ class DirPanel extends React.Component {
|
|||||||
path={this.props.path}
|
path={this.props.path}
|
||||||
repoID={this.props.repoID}
|
repoID={this.props.repoID}
|
||||||
direntList={this.props.direntList}
|
direntList={this.props.direntList}
|
||||||
currentRepo={this.props.currentRepo}
|
currentRepoInfo={this.props.currentRepoInfo}
|
||||||
isDirentListLoading={this.props.isDirentListLoading}
|
isDirentListLoading={this.props.isDirentListLoading}
|
||||||
isAllItemSelected={this.props.isAllDirentSelected}
|
isAllItemSelected={this.props.isAllDirentSelected}
|
||||||
isRepoOwner={this.state.isRepoOwner}
|
isRepoOwner={this.state.isRepoOwner}
|
||||||
|
@ -8,7 +8,7 @@ import toaster from '../toast';
|
|||||||
import DirPanel from './dir-panel';
|
import DirPanel from './dir-panel';
|
||||||
import Dirent from '../../models/dirent';
|
import Dirent from '../../models/dirent';
|
||||||
import FileTag from '../../models/file-tag';
|
import FileTag from '../../models/file-tag';
|
||||||
import Repo from '../../models/repo';
|
import RepoInfo from '../../models/repo-info';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
pathPrefix: PropTypes.array.isRequired,
|
pathPrefix: PropTypes.array.isRequired,
|
||||||
@ -31,7 +31,7 @@ class DirView extends React.Component {
|
|||||||
isDirentSelected: false,
|
isDirentSelected: false,
|
||||||
isAllDirentSelected: false,
|
isAllDirentSelected: false,
|
||||||
isDirentListLoading: true,
|
isDirentListLoading: true,
|
||||||
currentRepo: null,
|
currentRepoInfo: null,
|
||||||
direntList: [],
|
direntList: [],
|
||||||
selectedDirentList: [],
|
selectedDirentList: [],
|
||||||
};
|
};
|
||||||
@ -50,16 +50,16 @@ class DirView extends React.Component {
|
|||||||
let location = decodeURIComponent(window.location.href);
|
let location = decodeURIComponent(window.location.href);
|
||||||
let repoID = this.props.repoID;
|
let repoID = this.props.repoID;
|
||||||
seafileAPI.getRepoInfo(repoID).then(res => {
|
seafileAPI.getRepoInfo(repoID).then(res => {
|
||||||
let repo = new Repo(res.data);
|
let repoInfo = new RepoInfo(res.data);
|
||||||
this.setState({
|
this.setState({
|
||||||
repoID: repo.repo_id,
|
currentRepoInfo: repoInfo,
|
||||||
repoName: repo.repo_name,
|
repoID: repoInfo.repo_id,
|
||||||
permission: repo.permission === 'rw',
|
repoName: repoInfo.repo_name,
|
||||||
currentRepo: repo,
|
permission: repoInfo.permission === 'rw',
|
||||||
libNeedDecrypt: res.data.lib_need_decrypt,
|
libNeedDecrypt: res.data.lib_need_decrypt,
|
||||||
});
|
});
|
||||||
|
|
||||||
let repoName = repo.repo_name;
|
let repoName = repoInfo.repo_name;
|
||||||
let index = location.indexOf(repoName);
|
let index = location.indexOf(repoName);
|
||||||
let path = location.slice(index + repoName.length);
|
let path = location.slice(index + repoName.length);
|
||||||
this.setState({path: path});
|
this.setState({path: path});
|
||||||
@ -234,7 +234,11 @@ class DirView extends React.Component {
|
|||||||
let repoID = this.state.repoID;
|
let repoID = this.state.repoID;
|
||||||
seafileAPI.moveDir(repoID, destRepo.repo_id, destDirentPath, this.state.path, dirNames).then(() => {
|
seafileAPI.moveDir(repoID, destRepo.repo_id, destDirentPath, this.state.path, dirNames).then(() => {
|
||||||
let direntList = this.deleteItems(dirNames);
|
let direntList = this.deleteItems(dirNames);
|
||||||
this.setState({direntList: direntList});
|
this.setState({
|
||||||
|
direntList: direntList,
|
||||||
|
isDirentSelected: false,
|
||||||
|
selectedDirentList: [],
|
||||||
|
});
|
||||||
let message = gettext('Successfully moved %(name)s.');
|
let message = gettext('Successfully moved %(name)s.');
|
||||||
message = message.replace('%(name)s', dirNames);
|
message = message.replace('%(name)s', dirNames);
|
||||||
toaster.success(message);
|
toaster.success(message);
|
||||||
@ -264,7 +268,11 @@ class DirView extends React.Component {
|
|||||||
let repoID = this.state.repoID;
|
let repoID = this.state.repoID;
|
||||||
seafileAPI.deleteMutipleDirents(repoID, this.state.path, dirNames).then(res => {
|
seafileAPI.deleteMutipleDirents(repoID, this.state.path, dirNames).then(res => {
|
||||||
let direntList = this.deleteItems(dirNames);
|
let direntList = this.deleteItems(dirNames);
|
||||||
this.setState({direntList: direntList});
|
this.setState({
|
||||||
|
direntList: direntList,
|
||||||
|
isDirentSelected: false,
|
||||||
|
selectedDirentList: [],
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,7 +461,7 @@ class DirView extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<DirPanel
|
<DirPanel
|
||||||
pathPrefix={this.props.pathPrefix}
|
pathPrefix={this.props.pathPrefix}
|
||||||
currentRepo={this.state.currentRepo}
|
currentRepoInfo={this.state.currentRepoInfo}
|
||||||
path={this.state.path}
|
path={this.state.path}
|
||||||
pathExist={this.state.pathExit}
|
pathExist={this.state.pathExit}
|
||||||
repoID={this.state.repoID}
|
repoID={this.state.repoID}
|
||||||
|
@ -6,7 +6,7 @@ import { Utils } from '../../utils/utils';
|
|||||||
import EditFileTagDialog from '../dialog/edit-filetag-dialog';
|
import EditFileTagDialog from '../dialog/edit-filetag-dialog';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
repo: PropTypes.object.isRequired,
|
repoInfo: PropTypes.object.isRequired,
|
||||||
repoID: PropTypes.string.isRequired,
|
repoID: PropTypes.string.isRequired,
|
||||||
dirent: PropTypes.object.isRequired,
|
dirent: PropTypes.object.isRequired,
|
||||||
direntType: PropTypes.string.isRequired,
|
direntType: PropTypes.string.isRequired,
|
||||||
@ -26,9 +26,9 @@ class DetailListView extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDirentPostion = () => {
|
getDirentPostion = () => {
|
||||||
let { repo } = this.props;
|
let { repoInfo } = this.props;
|
||||||
let direntPath = this.getDirentPath();
|
let direntPath = this.getDirentPath();
|
||||||
let position = repo.repo_name;
|
let position = repoInfo.repo_name;
|
||||||
if (direntPath !== '/') {
|
if (direntPath !== '/') {
|
||||||
let index = direntPath.lastIndexOf('/');
|
let index = direntPath.lastIndexOf('/');
|
||||||
let path = direntPath.slice(0, index);
|
let path = direntPath.slice(0, index);
|
||||||
|
@ -4,7 +4,7 @@ import { Utils } from '../../utils/utils';
|
|||||||
import { siteRoot } from '../../utils/constants';
|
import { siteRoot } from '../../utils/constants';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import DetailListView from './detail-list-view';
|
import DetailListView from './detail-list-view';
|
||||||
import Repo from '../../models/repo';
|
import RepoInfo from '../../models/repo-info';
|
||||||
import FileTag from '../../models/file-tag';
|
import FileTag from '../../models/file-tag';
|
||||||
import '../../css/dirent-detail.css';
|
import '../../css/dirent-detail.css';
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ class DirentDetail extends React.Component {
|
|||||||
this.state = {
|
this.state = {
|
||||||
direntType: '',
|
direntType: '',
|
||||||
direntDetail: '',
|
direntDetail: '',
|
||||||
repo: null,
|
repoInfo: null,
|
||||||
fileTagList: [],
|
fileTagList: [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -32,8 +32,8 @@ class DirentDetail extends React.Component {
|
|||||||
let { dirent, path, repoID } = this.props;
|
let { dirent, path, repoID } = this.props;
|
||||||
let direntPath = Utils.joinPath(path, dirent.name);
|
let direntPath = Utils.joinPath(path, dirent.name);
|
||||||
seafileAPI.getRepoInfo(repoID).then(res => {
|
seafileAPI.getRepoInfo(repoID).then(res => {
|
||||||
let repo = new Repo(res.data);
|
let repoInfo = new RepoInfo(res.data);
|
||||||
this.setState({repo: repo});
|
this.setState({repoInfo: repoInfo});
|
||||||
this.updateDetailView(dirent, direntPath);
|
this.updateDetailView(dirent, direntPath);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ class DirentDetail extends React.Component {
|
|||||||
{this.state.direntDetail &&
|
{this.state.direntDetail &&
|
||||||
<div className="dirent-table-container">
|
<div className="dirent-table-container">
|
||||||
<DetailListView
|
<DetailListView
|
||||||
repo={this.state.repo}
|
repoInfo={this.state.repoInfo}
|
||||||
path={this.props.path}
|
path={this.props.path}
|
||||||
repoID={this.props.repoID}
|
repoID={this.props.repoID}
|
||||||
dirent={this.props.dirent}
|
dirent={this.props.dirent}
|
||||||
|
@ -31,7 +31,7 @@ const propTypes = {
|
|||||||
onItemCopy: PropTypes.func.isRequired,
|
onItemCopy: PropTypes.func.isRequired,
|
||||||
onItemDetails: PropTypes.func.isRequired,
|
onItemDetails: PropTypes.func.isRequired,
|
||||||
updateDirent: PropTypes.func.isRequired,
|
updateDirent: PropTypes.func.isRequired,
|
||||||
currentRepo: PropTypes.object,
|
currentRepoInfo: PropTypes.object,
|
||||||
isRepoOwner: PropTypes.bool,
|
isRepoOwner: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -455,7 +455,7 @@ class DirentListItem extends React.Component {
|
|||||||
dirent={this.props.dirent}
|
dirent={this.props.dirent}
|
||||||
menuPosition={this.state.menuPosition}
|
menuPosition={this.state.menuPosition}
|
||||||
onMenuItemClick={this.onMenuItemClick}
|
onMenuItemClick={this.onMenuItemClick}
|
||||||
currentRepo={this.props.currentRepo}
|
currentRepoInfo={this.props.currentRepoInfo}
|
||||||
isRepoOwner={this.props.isRepoOwner}
|
isRepoOwner={this.props.isRepoOwner}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ const propTypes = {
|
|||||||
path: PropTypes.string.isRequired,
|
path: PropTypes.string.isRequired,
|
||||||
repoID: PropTypes.string.isRequired,
|
repoID: PropTypes.string.isRequired,
|
||||||
isRepoOwner: PropTypes.bool,
|
isRepoOwner: PropTypes.bool,
|
||||||
currentRepo: PropTypes.object,
|
currentRepoInfo: PropTypes.object,
|
||||||
isAllItemSelected: PropTypes.bool.isRequired,
|
isAllItemSelected: PropTypes.bool.isRequired,
|
||||||
isDirentListLoading: PropTypes.bool.isRequired,
|
isDirentListLoading: PropTypes.bool.isRequired,
|
||||||
direntList: PropTypes.array.isRequired,
|
direntList: PropTypes.array.isRequired,
|
||||||
@ -80,7 +80,7 @@ class DirentListView extends React.Component {
|
|||||||
dirent={dirent}
|
dirent={dirent}
|
||||||
path={this.props.path}
|
path={this.props.path}
|
||||||
repoID={this.props.repoID}
|
repoID={this.props.repoID}
|
||||||
currentRepo={this.props.currentRepo}
|
currentRepoInfo={this.props.currentRepoInfo}
|
||||||
isRepoOwner={this.props.isRepoOwner}
|
isRepoOwner={this.props.isRepoOwner}
|
||||||
onItemClick={this.props.onItemClick}
|
onItemClick={this.props.onItemClick}
|
||||||
onItemRenameToggle={this.onItemRenameToggle}
|
onItemRenameToggle={this.onItemRenameToggle}
|
||||||
|
@ -7,7 +7,7 @@ const propTypes = {
|
|||||||
dirent: PropTypes.object.isRequired,
|
dirent: PropTypes.object.isRequired,
|
||||||
menuPosition: PropTypes.object.isRequired,
|
menuPosition: PropTypes.object.isRequired,
|
||||||
onMenuItemClick: PropTypes.func.isRequired,
|
onMenuItemClick: PropTypes.func.isRequired,
|
||||||
currentRepo: PropTypes.object.isRequired,
|
currentRepoInfo: PropTypes.object.isRequired,
|
||||||
isRepoOwner: PropTypes.bool.isRequired,
|
isRepoOwner: PropTypes.bool.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -21,8 +21,8 @@ class DirentMenu extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
let repo = this.props.currentRepo;
|
let repoInfo = this.props.currentRepoInfo;
|
||||||
let menuList = this.calculateMenuList(repo);
|
let menuList = this.calculateMenuList(repoInfo);
|
||||||
this.setState({
|
this.setState({
|
||||||
menuList: menuList,
|
menuList: menuList,
|
||||||
menuHeight: menuList.length * 30,
|
menuHeight: menuList.length * 30,
|
||||||
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import RepoListView from './repo-list-view';
|
import RepoListView from './repo-list-view';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import { gettext } from '../../utils/constants';
|
import { gettext } from '../../utils/constants';
|
||||||
import Repo from '../../models/repo';
|
import RepoInfo from '../../models/repo-info';
|
||||||
|
|
||||||
import '../../css/file-chooser.css';
|
import '../../css/file-chooser.css';
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ class FileChooser extends React.Component {
|
|||||||
isCurrentRepoShow: true,
|
isCurrentRepoShow: true,
|
||||||
isOtherRepoShow: false,
|
isOtherRepoShow: false,
|
||||||
repoList: [],
|
repoList: [],
|
||||||
currentRepo: null,
|
currentRepoInfo: null,
|
||||||
selectedRepo: null,
|
selectedRepo: null,
|
||||||
selectedPath: '',
|
selectedPath: '',
|
||||||
};
|
};
|
||||||
@ -31,22 +31,24 @@ class FileChooser extends React.Component {
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
let repoID = this.props.repoID;
|
let repoID = this.props.repoID;
|
||||||
seafileAPI.getRepoInfo(repoID).then(res => {
|
seafileAPI.getRepoInfo(repoID).then(res => {
|
||||||
let repo = new Repo(res.data);
|
// need to optimized
|
||||||
|
let repoInfo = new RepoInfo(res.data);
|
||||||
this.setState({
|
this.setState({
|
||||||
currentRepo: repo,
|
currentRepoInfo: repoInfo,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onOtherRepoToggle = () => {
|
onOtherRepoToggle = () => {
|
||||||
if (!this.state.hasRequest) {
|
if (!this.state.hasRequest) {
|
||||||
let { currentRepo } = this.state;
|
let { currentRepoInfo } = this.state;
|
||||||
seafileAPI.listRepos().then(res => {
|
seafileAPI.listRepos().then(res => {
|
||||||
|
// todo optimized code
|
||||||
let repos = res.data.repos;
|
let repos = res.data.repos;
|
||||||
let repoList = [];
|
let repoList = [];
|
||||||
let repoIdList = [];
|
let repoIdList = [];
|
||||||
for(let i = 0; i < repos.length; i++) {
|
for(let i = 0; i < repos.length; i++) {
|
||||||
if (repos[i].repo_name === currentRepo.repo_name || repos[i].permission !== 'rw') {
|
if (repos[i].repo_name === currentRepoInfo.repo_name || repos[i].permission !== 'rw') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (repoIdList.indexOf(repos[i].repo_id) > -1) {
|
if (repoIdList.indexOf(repos[i].repo_id) > -1) {
|
||||||
@ -94,10 +96,10 @@ class FileChooser extends React.Component {
|
|||||||
<span className="library">{gettext('Current Library')}</span>
|
<span className="library">{gettext('Current Library')}</span>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
this.state.isCurrentRepoShow && this.state.currentRepo &&
|
this.state.isCurrentRepoShow && this.state.currentRepoInfo &&
|
||||||
<RepoListView
|
<RepoListView
|
||||||
initToShowChildren={true}
|
initToShowChildren={true}
|
||||||
repo={this.state.currentRepo}
|
currentRepoInfo={this.state.currentRepoInfo}
|
||||||
selectedRepo={this.state.selectedRepo}
|
selectedRepo={this.state.selectedRepo}
|
||||||
selectedPath={this.state.selectedPath}
|
selectedPath={this.state.selectedPath}
|
||||||
onRepoItemClick={this.onRepoItemClick}
|
onRepoItemClick={this.onRepoItemClick}
|
||||||
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import RepoListItem from './repo-list-item';
|
import RepoListItem from './repo-list-item';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
repo: PropTypes.object,
|
currentRepoInfo: PropTypes.object,
|
||||||
repoList: PropTypes.array,
|
repoList: PropTypes.array,
|
||||||
selectedRepo: PropTypes.object,
|
selectedRepo: PropTypes.object,
|
||||||
initToShowChildren: PropTypes.bool.isRequired,
|
initToShowChildren: PropTypes.bool.isRequired,
|
||||||
@ -15,10 +15,10 @@ const propTypes = {
|
|||||||
class RepoListView extends React.Component {
|
class RepoListView extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let { repo, repoList } = this.props;
|
let { currentRepoInfo, repoList } = this.props;
|
||||||
if (repo) {
|
if (currentRepoInfo) {
|
||||||
repoList = [];
|
repoList = [];
|
||||||
repoList.push(repo);
|
repoList.push(currentRepoInfo);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<ul className="list-view-content file-chooser-item">
|
<ul className="list-view-content file-chooser-item">
|
||||||
|
@ -6,19 +6,16 @@ class RepoInfo {
|
|||||||
this.repo_name = object.repo_name;
|
this.repo_name = object.repo_name;
|
||||||
this.permission = object.permission;
|
this.permission = object.permission;
|
||||||
this.size = Utils.bytesToSize(object.size);
|
this.size = Utils.bytesToSize(object.size);
|
||||||
|
this.file_count = object.file_count;
|
||||||
this.owner_name = object.owner_name;
|
this.owner_name = object.owner_name;
|
||||||
this.owner_email = object.owner_email;
|
this.owner_email = object.owner_email;
|
||||||
this.owner_contact_email = object.owner_contact_name;
|
this.owner_contact_email = object.owner_contact_email;
|
||||||
this.is_admin = object.is_admin;
|
this.is_admin = object.is_admin;
|
||||||
|
this.is_virtual = object.is_virtual;
|
||||||
|
this.no_quota = object.no_quota;
|
||||||
|
this.has_been_shared_out = object.has_been_shared_out;
|
||||||
this.encrypted = object.encrypted;
|
this.encrypted = object.encrypted;
|
||||||
this.last_modified = object.last_modified;
|
|
||||||
this.modifier_contact_email = object.modifier_contact_email;
|
|
||||||
this.modifier_email = object.modifier_email;
|
|
||||||
this.modifier_name = object.modifier_name;
|
|
||||||
this.mtime = object.mtime;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default RepoInfo;
|
export default RepoInfo;
|
||||||
|
|
||||||
//todo rename to repo, and rename repo to repoInfo
|
|
@ -6,15 +6,16 @@ class Repo {
|
|||||||
this.repo_name = object.repo_name;
|
this.repo_name = object.repo_name;
|
||||||
this.permission = object.permission;
|
this.permission = object.permission;
|
||||||
this.size = Utils.bytesToSize(object.size);
|
this.size = Utils.bytesToSize(object.size);
|
||||||
this.file_count = object.file_count;
|
|
||||||
this.owner_name = object.owner_name;
|
this.owner_name = object.owner_name;
|
||||||
this.owner_email = object.owner_email;
|
this.owner_email = object.owner_email;
|
||||||
this.owner_contact_email = object.owner_contact_email;
|
this.owner_contact_email = object.owner_contact_email;
|
||||||
this.is_admin = object.is_admin;
|
this.is_admin = object.is_admin;
|
||||||
this.is_virtual = object.is_virtual;
|
|
||||||
this.no_quota = object.no_quota;
|
|
||||||
this.has_been_shared_out = object.has_been_shared_out;
|
|
||||||
this.encrypted = object.encrypted;
|
this.encrypted = object.encrypted;
|
||||||
|
this.last_modified = object.last_modified;
|
||||||
|
this.modifier_contact_email = object.modifier_contact_email;
|
||||||
|
this.modifier_email = object.modifier_email;
|
||||||
|
this.modifier_name = object.modifier_name;
|
||||||
|
this.mtime = object.mtime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import { seafileAPI } from '../../utils/seafile-api';
|
|||||||
import Loading from '../../components/loading';
|
import Loading from '../../components/loading';
|
||||||
import ModalPortal from '../../components/modal-portal';
|
import ModalPortal from '../../components/modal-portal';
|
||||||
import Group from '../../models/group';
|
import Group from '../../models/group';
|
||||||
import RepoInfo from '../../models/repoInfo';
|
import Repo from '../../models/repo';
|
||||||
import CommonToolbar from '../../components/toolbar/common-toolbar';
|
import CommonToolbar from '../../components/toolbar/common-toolbar';
|
||||||
import CreateRepoDialog from '../../components/dialog/create-repo-dialog';
|
import CreateRepoDialog from '../../components/dialog/create-repo-dialog';
|
||||||
import CreateDepartmentRepoDialog from '../../components/dialog/create-department-repo-dialog';
|
import CreateDepartmentRepoDialog from '../../components/dialog/create-department-repo-dialog';
|
||||||
@ -87,8 +87,8 @@ class GroupView extends React.Component {
|
|||||||
this.setState({isLoading: true});
|
this.setState({isLoading: true});
|
||||||
seafileAPI.listGroupRepos(groupID).then((res) => {
|
seafileAPI.listGroupRepos(groupID).then((res) => {
|
||||||
let repoList = res.data.map(item => {
|
let repoList = res.data.map(item => {
|
||||||
let repoInfo = new RepoInfo(item);
|
let repo = new Repo(item);
|
||||||
return repoInfo;
|
return repo;
|
||||||
});
|
});
|
||||||
this.setState({
|
this.setState({
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
@ -166,7 +166,7 @@ class GroupView extends React.Component {
|
|||||||
size: res.data.size,
|
size: res.data.size,
|
||||||
encrypted: res.data.encrypted,
|
encrypted: res.data.encrypted,
|
||||||
};
|
};
|
||||||
let repo = new RepoInfo(object);
|
let repo = new Repo(object);
|
||||||
let repoList = this.addRepoItem(repo);
|
let repoList = this.addRepoItem(repo);
|
||||||
this.setState({repoList: repoList});
|
this.setState({repoList: repoList});
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
@ -175,7 +175,7 @@ class GroupView extends React.Component {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
seafileAPI.createGroupRepo(groupId, repo).then(res => {
|
seafileAPI.createGroupRepo(groupId, repo).then(res => {
|
||||||
let repo = new RepoInfo(res.data);
|
let repo = new Repo(res.data);
|
||||||
let repoList = this.addRepoItem(repo);
|
let repoList = this.addRepoItem(repo);
|
||||||
this.setState({repoList: repoList});
|
this.setState({repoList: repoList});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
@ -4,7 +4,7 @@ import { gettext, siteRoot, loginUrl } from '../../utils/constants';
|
|||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import Loading from '../../components/loading';
|
import Loading from '../../components/loading';
|
||||||
import Group from '../../models/group';
|
import Group from '../../models/group';
|
||||||
import RepoInfo from '../../models/repoInfo';
|
import Repo from '../../models/repo';
|
||||||
import GroupsToolbar from '../../components/toolbar/groups-toolbar';
|
import GroupsToolbar from '../../components/toolbar/groups-toolbar';
|
||||||
import SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';
|
import SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';
|
||||||
import CreateGroupDialog from '../../components/dialog/create-group-dialog';
|
import CreateGroupDialog from '../../components/dialog/create-group-dialog';
|
||||||
@ -28,7 +28,7 @@ class RepoListViewPanel extends React.Component {
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
let group = this.props.group;
|
let group = this.props.group;
|
||||||
let repoList = group.repos.map(item => {
|
let repoList = group.repos.map(item => {
|
||||||
let repo = new RepoInfo(item);
|
let repo = new Repo(item);
|
||||||
return repo;
|
return repo;
|
||||||
});
|
});
|
||||||
this.setState({repoList: repoList});
|
this.setState({repoList: repoList});
|
||||||
|
@ -4,7 +4,7 @@ import cookie from 'react-cookies';
|
|||||||
import { gettext, repoID, siteRoot, permission } from '../../utils/constants';
|
import { gettext, repoID, siteRoot, permission } from '../../utils/constants';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import { Utils } from '../../utils/utils';
|
import { Utils } from '../../utils/utils';
|
||||||
import Repo from '../../models/repo';
|
import RepoInfo from '../../models/repo-info';
|
||||||
import CommonToolbar from '../../components/toolbar/common-toolbar';
|
import CommonToolbar from '../../components/toolbar/common-toolbar';
|
||||||
import ViewModeToolbar from '../../components/toolbar/view-mode-toolbar';
|
import ViewModeToolbar from '../../components/toolbar/view-mode-toolbar';
|
||||||
import DirOperationToolBar from '../../components/toolbar/dir-operation-toolbar';
|
import DirOperationToolBar from '../../components/toolbar/dir-operation-toolbar';
|
||||||
@ -66,7 +66,7 @@ class MainPanel extends Component {
|
|||||||
isDirentDetailShow: false,
|
isDirentDetailShow: false,
|
||||||
currentDirent: null,
|
currentDirent: null,
|
||||||
direntPath: '',
|
direntPath: '',
|
||||||
currentRepo: null,
|
currentRepoInfo: null,
|
||||||
isRepoOwner: false,
|
isRepoOwner: false,
|
||||||
activeTitleIndex: -1,
|
activeTitleIndex: -1,
|
||||||
};
|
};
|
||||||
@ -76,12 +76,12 @@ class MainPanel extends Component {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
seafileAPI.getRepoInfo(repoID).then(res => {
|
seafileAPI.getRepoInfo(repoID).then(res => {
|
||||||
let repo = new Repo(res.data);
|
let repoInfo = new RepoInfo(res.data);
|
||||||
seafileAPI.getAccountInfo().then(res => {
|
seafileAPI.getAccountInfo().then(res => {
|
||||||
let user_email = res.data.email;
|
let user_email = res.data.email;
|
||||||
let isRepoOwner = repo.owner_email === user_email;
|
let isRepoOwner = repoInfo.owner_email === user_email;
|
||||||
this.setState({
|
this.setState({
|
||||||
currentRepo: repo,
|
currentRepoInfo: repoInfo,
|
||||||
isRepoOwner: isRepoOwner,
|
isRepoOwner: isRepoOwner,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -210,10 +210,10 @@ class MainPanel extends Component {
|
|||||||
<div className="main-panel-center flex-row">
|
<div className="main-panel-center flex-row">
|
||||||
<div className="cur-view-container">
|
<div className="cur-view-container">
|
||||||
<div className="cur-view-path">
|
<div className="cur-view-path">
|
||||||
{this.state.currentRepo && (
|
{this.state.currentRepoInfo && (
|
||||||
<CurDirPath
|
<CurDirPath
|
||||||
repoID={repoID}
|
repoID={repoID}
|
||||||
repoName={this.state.currentRepo.repo_name}
|
repoName={this.state.currentRepoInfo.repo_name}
|
||||||
currentPath={this.props.path}
|
currentPath={this.props.path}
|
||||||
permission={permission}
|
permission={permission}
|
||||||
onPathClick={this.onMainNavBarClick}
|
onPathClick={this.onMainNavBarClick}
|
||||||
@ -254,7 +254,7 @@ class MainPanel extends Component {
|
|||||||
onItemDetails={this.onItemDetails}
|
onItemDetails={this.onItemDetails}
|
||||||
isDirentListLoading={this.props.isDirentListLoading}
|
isDirentListLoading={this.props.isDirentListLoading}
|
||||||
updateDirent={this.props.updateDirent}
|
updateDirent={this.props.updateDirent}
|
||||||
currentRepo={this.state.currentRepo}
|
currentRepoInfo={this.state.currentRepoInfo}
|
||||||
isRepoOwner={this.state.isRepoOwner}
|
isRepoOwner={this.state.isRepoOwner}
|
||||||
isAllItemSelected={this.props.isAllDirentSelected}
|
isAllItemSelected={this.props.isAllDirentSelected}
|
||||||
onAllItemSelected={this.props.onAllDirentSelected}
|
onAllItemSelected={this.props.onAllDirentSelected}
|
||||||
|
Loading…
Reference in New Issue
Block a user