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