mirror of
https://github.com/haiwen/seahub.git
synced 2025-05-09 16:38:20 +00:00
optimize filter
This commit is contained in:
parent
b29f2438f3
commit
d1b1cdd2e1
frontend/src
pages
utils
seahub/api2/endpoints/admin
@ -14,6 +14,7 @@ const propTypes = {
|
||||
isOpen: PropTypes.bool.isRequired,
|
||||
onToggle: PropTypes.func.isRequired,
|
||||
searchUsersFunc: PropTypes.func.isRequired,
|
||||
searchGroupsFunc: PropTypes.func
|
||||
};
|
||||
|
||||
class LogUserSelector extends Component {
|
||||
@ -71,6 +72,15 @@ class LogUserSelector extends Component {
|
||||
this.setState({
|
||||
searchResults: users,
|
||||
isLoading: false
|
||||
}, () => {
|
||||
if (this.props.searchGroupsFunc) {
|
||||
this.props.searchGroupsFunc(value).then((res) => {
|
||||
const groups = res.data.group_list || res.data.groups || [];
|
||||
this.setState({
|
||||
searchResults: [...users, ...groups]
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}).catch((error) => {
|
||||
this.setState({
|
||||
@ -132,7 +142,10 @@ class LogUserSelector extends Component {
|
||||
</li>
|
||||
) : (
|
||||
displayItems.map((item, index) => {
|
||||
const isSelected = selectedItems.some(selected => selected.email === item.email);
|
||||
const isSelected = selectedItems.some(selected =>
|
||||
(item.email && selected.email === item.email) ||
|
||||
(item.id && selected.id === item.id)
|
||||
);
|
||||
return (
|
||||
<li key={index}
|
||||
className="activity-user-item h-6 p-1 rounded d-flex justify-content-between align-items-center"
|
||||
|
@ -167,6 +167,7 @@ class FIleTransferLogs extends Component {
|
||||
availableUsers: [],
|
||||
selectedFromUsers: [],
|
||||
selectedToUsers: [],
|
||||
selectedToGroups: [],
|
||||
selectedOperators: [],
|
||||
openSelector: null,
|
||||
availableRepos: [],
|
||||
@ -187,10 +188,19 @@ class FIleTransferLogs extends Component {
|
||||
}
|
||||
|
||||
getLogsByPage = (page) => {
|
||||
let { perPage, selectedFromUsers, selectedToUsers, selectedOperators, selectedRepos } = this.state;
|
||||
let {
|
||||
perPage,
|
||||
selectedFromUsers,
|
||||
selectedToUsers,
|
||||
selectedToGroups,
|
||||
selectedOperators,
|
||||
selectedRepos
|
||||
} = this.state;
|
||||
|
||||
const emails = {
|
||||
from_emails: selectedFromUsers.map(user => user.email),
|
||||
to_emails: selectedToUsers.map(user => user.email),
|
||||
to_groups: selectedToGroups.map(group => group.to_group_id || group.id),
|
||||
operator_emails: selectedOperators.map(user => user.email)
|
||||
};
|
||||
|
||||
@ -246,23 +256,51 @@ class FIleTransferLogs extends Component {
|
||||
});
|
||||
};
|
||||
|
||||
handleToUserFilter = (user, shouldFetchData = true) => {
|
||||
const { selectedToUsers } = this.state;
|
||||
let newSelectedUsers;
|
||||
handleToUserFilter = (item, shouldFetchData = true) => {
|
||||
const { selectedToUsers, selectedToGroups } = this.state;
|
||||
let newSelectedUsers = selectedToUsers;
|
||||
let newSelectedGroups = selectedToGroups;
|
||||
|
||||
if (user === null) {
|
||||
if (item === null) {
|
||||
newSelectedUsers = selectedToUsers;
|
||||
newSelectedGroups = selectedToGroups;
|
||||
} else {
|
||||
const isSelected = selectedToUsers.find(item => item.email === user.email);
|
||||
if (isSelected) {
|
||||
newSelectedUsers = selectedToUsers.filter(item => item.email !== user.email);
|
||||
if (item.email) {
|
||||
const isSelected = selectedToUsers.find(user => user.email === item.email);
|
||||
if (isSelected) {
|
||||
newSelectedUsers = selectedToUsers.filter(user => user.email !== item.email);
|
||||
} else {
|
||||
newSelectedUsers = [...selectedToUsers, item];
|
||||
}
|
||||
} else {
|
||||
newSelectedUsers = [...selectedToUsers, user];
|
||||
const groupId = item.to_group_id || item.id;
|
||||
const groupName = item.to_group_name || item.name;
|
||||
|
||||
const isSelected = selectedToGroups.find(group => {
|
||||
const selectedGroupId = group.to_group_id || group.id;
|
||||
return selectedGroupId === groupId;
|
||||
});
|
||||
|
||||
if (isSelected) {
|
||||
newSelectedGroups = selectedToGroups.filter(group => {
|
||||
const selectedGroupId = group.to_group_id || group.id;
|
||||
return selectedGroupId !== groupId;
|
||||
});
|
||||
} else {
|
||||
const groupItem = {
|
||||
id: groupId,
|
||||
name: groupName,
|
||||
to_group_id: groupId,
|
||||
to_group_name: groupName
|
||||
};
|
||||
newSelectedGroups = [...selectedToGroups, groupItem];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
selectedToUsers: newSelectedUsers,
|
||||
selectedToGroups: newSelectedGroups,
|
||||
currentPage: 1
|
||||
}, () => {
|
||||
if (shouldFetchData) {
|
||||
@ -339,6 +377,10 @@ class FIleTransferLogs extends Component {
|
||||
return systemAdminAPI.sysAdminSearchUsers(value);
|
||||
};
|
||||
|
||||
searchGroups = (value) => {
|
||||
return systemAdminAPI.sysAdminSearchGroups(value);
|
||||
};
|
||||
|
||||
searchRepos = (value) => {
|
||||
return systemAdminAPI.sysAdminSearchRepos(value);
|
||||
};
|
||||
@ -346,11 +388,23 @@ class FIleTransferLogs extends Component {
|
||||
render() {
|
||||
let {
|
||||
logList, currentPage, perPage, hasNextPage,
|
||||
availableUsers, selectedFromUsers, selectedToUsers, selectedOperators,
|
||||
availableUsers, selectedFromUsers,
|
||||
selectedToUsers, selectedToGroups,
|
||||
selectedOperators,
|
||||
availableRepos, selectedRepos,
|
||||
openSelector
|
||||
} = this.state;
|
||||
|
||||
const selectedToItems = [
|
||||
...selectedToUsers,
|
||||
...selectedToGroups.map(group => ({
|
||||
id: group.to_group_id || group.id,
|
||||
name: group.to_group_name || group.name,
|
||||
to_group_id: group.to_group_id || group.id,
|
||||
to_group_name: group.to_group_name || group.name
|
||||
}))
|
||||
];
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<MainPanelTopbar {...this.props} />
|
||||
@ -372,11 +426,12 @@ class FIleTransferLogs extends Component {
|
||||
<LogUserSelector
|
||||
componentName="Transfer To"
|
||||
items={availableUsers}
|
||||
selectedItems={selectedToUsers}
|
||||
selectedItems={selectedToItems}
|
||||
onSelect={this.handleToUserFilter}
|
||||
isOpen={openSelector === 'toUser'}
|
||||
onToggle={() => this.handleSelectorToggle('toUser')}
|
||||
searchUsersFunc={this.searchUsers}
|
||||
searchGroupsFunc={this.searchGroups}
|
||||
/>
|
||||
<LogUserSelector
|
||||
componentName="Operator"
|
||||
|
@ -156,6 +156,7 @@ class SharePermissionLogs extends Component {
|
||||
availableUsers: [],
|
||||
selectedFromUsers: [],
|
||||
selectedToUsers: [],
|
||||
selectedToGroups: [],
|
||||
availableRepos: [],
|
||||
selectedRepos: [],
|
||||
openSelector: null,
|
||||
@ -179,13 +180,20 @@ class SharePermissionLogs extends Component {
|
||||
}
|
||||
|
||||
getLogsByPage = (page) => {
|
||||
let { perPage, selectedFromUsers, selectedToUsers, selectedRepos } = this.state;
|
||||
let fromEmails = selectedFromUsers.map(user => user.email);
|
||||
let toEmails = selectedToUsers.map(user => user.email);
|
||||
let {
|
||||
perPage,
|
||||
selectedFromUsers,
|
||||
selectedToUsers,
|
||||
selectedToGroups,
|
||||
selectedRepos
|
||||
} = this.state;
|
||||
|
||||
const emails = {
|
||||
from_emails: fromEmails,
|
||||
to_emails: toEmails
|
||||
from_emails: selectedFromUsers.map(user => user.email),
|
||||
to_emails: selectedToUsers.map(user => user.email),
|
||||
to_groups: selectedToGroups.map(group => group.id)
|
||||
};
|
||||
|
||||
systemAdminAPI.sysAdminListSharePermissionLogs(
|
||||
page,
|
||||
perPage,
|
||||
@ -237,23 +245,35 @@ class SharePermissionLogs extends Component {
|
||||
});
|
||||
};
|
||||
|
||||
handleToUserFilter = (user, shouldFetchData = true) => {
|
||||
const { selectedToUsers } = this.state;
|
||||
let newSelectedUsers;
|
||||
handleToUserFilter = (item, shouldFetchData = true) => {
|
||||
const { selectedToUsers, selectedToGroups } = this.state;
|
||||
let newSelectedUsers = selectedToUsers;
|
||||
let newSelectedGroups = selectedToGroups;
|
||||
|
||||
if (user === null) {
|
||||
if (item === null) {
|
||||
newSelectedUsers = selectedToUsers;
|
||||
newSelectedGroups = selectedToGroups;
|
||||
} else {
|
||||
const isSelected = selectedToUsers.find(item => item.email === user.email);
|
||||
if (isSelected) {
|
||||
newSelectedUsers = selectedToUsers.filter(item => item.email !== user.email);
|
||||
if (item.email) {
|
||||
const isSelected = selectedToUsers.find(user => user.email === item.email);
|
||||
if (isSelected) {
|
||||
newSelectedUsers = selectedToUsers.filter(user => user.email !== item.email);
|
||||
} else {
|
||||
newSelectedUsers = [...selectedToUsers, item];
|
||||
}
|
||||
} else {
|
||||
newSelectedUsers = [...selectedToUsers, user];
|
||||
const isSelected = selectedToGroups.find(group => group.id === item.id);
|
||||
if (isSelected) {
|
||||
newSelectedGroups = selectedToGroups.filter(group => group.id !== item.id);
|
||||
} else {
|
||||
newSelectedGroups = [...selectedToGroups, item];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
selectedToUsers: newSelectedUsers,
|
||||
selectedToGroups: newSelectedGroups,
|
||||
currentPage: 1
|
||||
}, () => {
|
||||
if (shouldFetchData) {
|
||||
@ -308,11 +328,15 @@ class SharePermissionLogs extends Component {
|
||||
return systemAdminAPI.sysAdminSearchRepos(value);
|
||||
};
|
||||
|
||||
searchGroups = (value) => {
|
||||
return systemAdminAPI.sysAdminSearchGroups(value);
|
||||
};
|
||||
|
||||
render() {
|
||||
let {
|
||||
logList, currentPage, perPage, hasNextPage, isExportExcelDialogOpen,
|
||||
availableUsers, selectedFromUsers, selectedToUsers,
|
||||
availableRepos, selectedRepos, openSelector
|
||||
selectedToGroups, availableRepos, selectedRepos, openSelector
|
||||
} = this.state;
|
||||
return (
|
||||
<Fragment>
|
||||
@ -337,11 +361,12 @@ class SharePermissionLogs extends Component {
|
||||
<LogUserSelector
|
||||
componentName="Share To"
|
||||
items={availableUsers}
|
||||
selectedItems={selectedToUsers}
|
||||
selectedItems={[...selectedToUsers, ...selectedToGroups]}
|
||||
onSelect={this.handleToUserFilter}
|
||||
isOpen={openSelector === 'toUser'}
|
||||
onToggle={() => this.handleSelectorToggle('toUser')}
|
||||
searchUsersFunc={this.searchUsers}
|
||||
searchGroupsFunc={this.searchGroups}
|
||||
/>
|
||||
<div className="mx-3"></div>
|
||||
<LogRepoSelector
|
||||
|
@ -734,6 +734,9 @@ class SystemAdminAPI {
|
||||
if (emails.to_emails && emails.to_emails.length) {
|
||||
params.to_emails = emails.to_emails.join(',');
|
||||
}
|
||||
if (emails.to_groups && emails.to_groups.length) {
|
||||
params.to_groups = emails.to_groups.join(',');
|
||||
}
|
||||
if (repos && repos.length) {
|
||||
params.repos = repos.map(repo => repo.id).join(',');
|
||||
}
|
||||
@ -755,6 +758,9 @@ class SystemAdminAPI {
|
||||
if (emails.operator_emails && emails.operator_emails.length) {
|
||||
params.operator_emails = emails.operator_emails.join(',');
|
||||
}
|
||||
if (emails.to_groups && emails.to_groups.length) {
|
||||
params.to_groups = emails.to_groups.join(',');
|
||||
}
|
||||
if (repos && repos.length) {
|
||||
params.repos = repos.map(repo => repo.id).join(',');
|
||||
}
|
||||
|
@ -314,9 +314,13 @@ class AdminLogsSharePermissionLogs(APIView):
|
||||
if not is_valid_email(user_selected):
|
||||
error_msg = 'email %s invalid.' % user_selected
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
to_groups = request.GET.get('to_groups')
|
||||
to_groups = to_groups.split(',') if to_groups else []
|
||||
emails = {
|
||||
'from_emails': from_emails,
|
||||
'to_emails': to_emails
|
||||
'to_emails': to_emails,
|
||||
'to_groups': to_groups
|
||||
}
|
||||
|
||||
repos = request.GET.get('repos', None)
|
||||
@ -489,7 +493,9 @@ class AdminLogsFileTransferLogs(APIView):
|
||||
if not is_valid_email(user_selected):
|
||||
error_msg = 'email %s invalid.' % user_selected
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
to_groups = request.GET.get('to_groups')
|
||||
to_groups = to_groups.split(',') if to_groups else []
|
||||
to_groups = [group_id + '@seafile_group' for group_id in to_groups]
|
||||
repos = request.GET.get('repos', None)
|
||||
if repos:
|
||||
repos = repos.split(',')
|
||||
@ -501,8 +507,8 @@ class AdminLogsFileTransferLogs(APIView):
|
||||
queryset = RepoTransfer.objects.all()
|
||||
if from_emails:
|
||||
queryset = queryset.by_from_user(from_emails)
|
||||
if to_emails:
|
||||
queryset = queryset.by_to_user(to_emails)
|
||||
if to_emails or to_groups:
|
||||
queryset = queryset.by_to_user(to_emails + to_groups)
|
||||
if operator_emails:
|
||||
queryset = queryset.by_operator(operator_emails)
|
||||
if repos:
|
||||
|
Loading…
Reference in New Issue
Block a user