1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 15:09:14 +00:00

added 'empty tip' for 'groups', linked devices', and 'favourites' pages

This commit is contained in:
llj
2019-06-11 14:11:10 +08:00
parent 56b813dcb9
commit 037d6422a2
6 changed files with 37 additions and 13 deletions

View File

@@ -1,6 +1,6 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { gettext, siteRoot, loginUrl } from '../../utils/constants';
import { gettext, siteRoot, loginUrl, canAddGroup } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api';
import Loading from '../../components/loading';
import Group from '../../models/group';
@@ -10,6 +10,7 @@ import GroupsToolbar from '../../components/toolbar/groups-toolbar';
import SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';
import CreateGroupDialog from '../../components/dialog/create-group-dialog';
import LibDetail from '../../components/dirent-detail/lib-details';
import EmptyTip from '../../components/empty-tip';
import '../../css/groups.css';
@@ -55,11 +56,11 @@ class RepoListViewPanel extends React.Component {
});
this.setState({repoList: repoList});
let name = repo.repo_name;
var msg = gettext("Successfully deleted {name}.").replace('{name}', name);
var msg = gettext('Successfully deleted {name}.').replace('{name}', name);
toaster.success(msg);
}).catch(() => {
let name = repo.repo_name;
var msg = gettext("Failed to delete {name}.").replace('{name}', name);
var msg = gettext('Failed to delete {name}.').replace('{name}', name);
toaster.danger(msg);
});
}
@@ -187,6 +188,16 @@ class GroupsView extends React.Component {
}
render() {
const emptyTip = (
<EmptyTip>
<h2>{gettext('You are not in any groups')}</h2>
{canAddGroup ?
<p>{gettext('Groups allow multiple people to collaborate on libraries. You can create a group by clicking the "New Group" button.')}</p> :
<p>{gettext('Groups allow multiple people to collaborate on libraries. Groups you join will be listed here.')}</p>
}
</EmptyTip>
);
return (
<Fragment>
<GroupsToolbar
@@ -201,8 +212,8 @@ class GroupsView extends React.Component {
</div>
<div className="cur-view-content cur-view-content-groups">
{this.state.isLoading && <Loading />}
{(!this.state.isLoading && this.state.errorMsg !== '') && this.state.errorMsg}
{/* {(!this.state.isLoading && this.state.groupList.length === 0 ) && emptyTip} //todo */}
{(!this.state.isLoading && this.state.errorMsg) && this.state.errorMsg}
{(!this.state.isLoading && !this.state.errorMsg && this.state.groupList.length == 0) && emptyTip}
{!this.state.isLoading && this.state.groupList.map((group, index) => {
return (
<RepoListViewPanel

View File

@@ -3,6 +3,7 @@ import moment from 'moment';
import { seafileAPI } from '../../utils/seafile-api';
import { gettext, loginUrl } from '../../utils/constants';
import toaster from '../../components/toast';
import EmptyTip from '../../components/empty-tip';
class Content extends Component {
@@ -14,6 +15,13 @@ class Content extends Component {
} else if (errorMsg) {
return <p className="error text-center">{errorMsg}</p>;
} else {
const emptyTip = (
<EmptyTip>
<h2>{gettext("You do not have connected devices")}</h2>
<p>{gettext("Your clients (Desktop/Android/iOS) will be listed here.")}</p>
</EmptyTip>
);
const desktopThead = (
<thead>
<tr>
@@ -35,12 +43,12 @@ class Content extends Component {
</thead>
);
return (
return items.length ? (
<table>
{window.innerWidth >= 768 ? desktopThead : mobileThead}
<TableBody items={items} />
</table>
);
): emptyTip;
}
}
}

View File

@@ -4,6 +4,7 @@ import moment from 'moment';
import { seafileAPI } from '../../utils/seafile-api';
import { Utils } from '../../utils/utils';
import { gettext, siteRoot, loginUrl } from '../../utils/constants';
import EmptyTip from '../../components/empty-tip';
class Content extends Component {
@@ -15,6 +16,12 @@ class Content extends Component {
} else if (errorMsg) {
return <p className="error text-center">{errorMsg}</p>;
} else {
const emptyTip = (
<EmptyTip>
<h2>{gettext('You don\'t have any favorite items yet')}</h2>
</EmptyTip>
);
const desktopThead = (
<thead>
<tr>
@@ -36,12 +43,12 @@ class Content extends Component {
</thead>
);
return (
return items.length ? (
<table className="table-hover">
{window.innerWidth >= 768 ? desktopThead : mobileThead}
<TableBody items={items} />
</table>
);
) : emptyTip;
}
}
}

View File

@@ -23,6 +23,7 @@ export const name = window.app.pageOptions.name;
export const contactEmail = window.app.pageOptions.contactEmail;
export const username = window.app.pageOptions.username;
export const canAddRepo = window.app.pageOptions.canAddRepo;
export const canAddGroup = window.app.pageOptions.canAddGroup;
export const canGenerateShareLink = window.app.pageOptions.canGenerateShareLink;
export const canGenerateUploadLink = window.app.pageOptions.canGenerateUploadLink ? true : false;
export const canViewOrg = window.app.pageOptions.canViewOrg === 'True';

View File

@@ -51,6 +51,7 @@
contactEmail: "{{request.user.username|email2contact_email|escapejs}}",
username: "{{request.user.username|escapejs}}",
canAddRepo: {% if user.permissions.can_add_repo %} true {% else %} false {% endif %},
canAddGroup: {% if user.permissions.can_add_group %} true {% else %} false {% endif %},
canGenerateShareLink: {% if user.permissions.can_generate_share_link %} true {% else %} false {% endif %},
canGenerateUploadLink: {% if user.permissions.can_generate_upload_link %} true {% else %} false {% endif %},
canViewOrg:'{{ user.permissions.can_view_org }}',

View File

@@ -1268,7 +1268,3 @@ def react_fake_view(request, **kwargs):
'folder_perm_enabled': folder_perm_enabled,
'file_audit_enabled' : FILE_AUDIT_ENABLED
})
@login_required
def react_group(request, group_id):
return render(request, "react_app.html")