mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-05 08:53:14 +00:00
search group member
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table, Input, Label, FormGroup } from 'reactstrap';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
@@ -31,7 +31,8 @@ class ManageMembersDialog extends React.Component {
|
||||
hasNextPage: false,
|
||||
selectedOption: null,
|
||||
errMessage: [],
|
||||
isItemFreezed: false
|
||||
isItemFreezed: false,
|
||||
searchGroupMemberInputValue: '',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -92,6 +93,24 @@ class ManageMembersDialog extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
handleSearchGroupMemberInputChange = (e) => {
|
||||
this.setState({
|
||||
searchGroupMemberInputValue: e.target.value
|
||||
});
|
||||
}
|
||||
|
||||
searchGroupMember = () => {
|
||||
|
||||
seafileAPI.searchGroupMember(this.props.groupID, this.state.searchGroupMemberInputValue).then((res) => {
|
||||
this.setState({
|
||||
groupMembers: res.data,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
toggleItemFreezed = (isFreezed) => {
|
||||
this.setState({
|
||||
isItemFreezed: isFreezed
|
||||
@@ -143,6 +162,7 @@ class ManageMembersDialog extends React.Component {
|
||||
<Modal isOpen={true} toggle={this.toggle}>
|
||||
<ModalHeader toggle={this.toggle}>{gettext('Manage group members')}</ModalHeader>
|
||||
<ModalBody>
|
||||
<FormGroup>
|
||||
<p>{gettext('Add group member')}</p>
|
||||
<div className='add-members'>
|
||||
<UserSelect
|
||||
@@ -157,6 +177,24 @@ class ManageMembersDialog extends React.Component {
|
||||
<Button color="secondary" disabled>{gettext('Submit')}</Button>
|
||||
}
|
||||
</div>
|
||||
</FormGroup>
|
||||
<FormGroup>
|
||||
<p>{gettext('Search group member')}</p>
|
||||
<div className="search-members">
|
||||
<Input
|
||||
type="text"
|
||||
id="search-member"
|
||||
className="form-control search-members-input"
|
||||
value={this.state.searchGroupMemberInputValue}
|
||||
onChange={this.handleSearchGroupMemberInputChange}
|
||||
placeholder={gettext('Search users...')}
|
||||
/>
|
||||
{this.state.searchGroupMemberInputValue ?
|
||||
<Button color="secondary" onClick={this.searchGroupMember}>{gettext('Search')}</Button> :
|
||||
<Button color="secondary" disabled>{gettext('Search')}</Button>
|
||||
}
|
||||
</div>
|
||||
</FormGroup>
|
||||
{
|
||||
this.state.errMessage.length > 0 &&
|
||||
this.state.errMessage.map((item, index = 0) => {
|
||||
|
@@ -33,17 +33,22 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
.add-members {
|
||||
.add-members,
|
||||
.search-members {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.add-members .add-members-select {
|
||||
.add-members .add-members-select,
|
||||
.search-members .search-members-input {
|
||||
width: 385px;
|
||||
}
|
||||
.add-members .btn {
|
||||
|
||||
.add-members .btn,
|
||||
.search-members .btn {
|
||||
width: 75px;
|
||||
}
|
||||
|
||||
.group-error {
|
||||
margin-top: 10px;
|
||||
}
|
@@ -133,10 +133,42 @@ class GroupMembers(APIView):
|
||||
return Response(member_info, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class GroupSearchMember(APIView):
|
||||
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
|
||||
@api_check_group
|
||||
def get(self, request, group_id, format=None):
|
||||
"""
|
||||
Search group member by email.
|
||||
"""
|
||||
|
||||
q = request.GET.get('q', '')
|
||||
if not q:
|
||||
error_msg = 'q invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
if not is_group_member(group_id, request.user.username):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
group_members = []
|
||||
members = ccnet_api.search_group_members(group_id, q)
|
||||
for member in members:
|
||||
|
||||
member_info = get_group_member_info(request, group_id, member.user_name)
|
||||
|
||||
group_members.append(member_info)
|
||||
|
||||
return Response(group_members)
|
||||
|
||||
|
||||
class GroupMember(APIView):
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
|
||||
@api_check_group
|
||||
def get(self, request, group_id, email):
|
||||
|
@@ -36,7 +36,7 @@ from seahub.api2.endpoints.group_owned_libraries import GroupOwnedLibraries, \
|
||||
from seahub.api2.endpoints.address_book.groups import AddressBookGroupsSubGroups
|
||||
from seahub.api2.endpoints.address_book.members import AddressBookGroupsSearchMember
|
||||
|
||||
from seahub.api2.endpoints.group_members import GroupMembers, GroupMember, \
|
||||
from seahub.api2.endpoints.group_members import GroupMembers, GroupSearchMember, GroupMember, \
|
||||
GroupMembersBulk, GroupMembersImport, GroupMembersImportExample
|
||||
from seahub.api2.endpoints.search_group import SearchGroup
|
||||
from seahub.api2.endpoints.share_links import ShareLinks, ShareLink, \
|
||||
@@ -307,6 +307,7 @@ urlpatterns = [
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/group-owned-libraries/$', GroupOwnedLibraries.as_view(), name='api-v2.1-group-owned-libraries'),
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/group-owned-libraries/(?P<repo_id>[-0-9a-f]{36})/$', GroupOwnedLibrary.as_view(), name='api-v2.1-owned-group-library'),
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/members/$', GroupMembers.as_view(), name='api-v2.1-group-members'),
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/search-member/$', GroupSearchMember.as_view(), name='api-v2.1-group-search-member'),
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/members/bulk/$', GroupMembersBulk.as_view(), name='api-v2.1-group-members-bulk'),
|
||||
url(r'^api/v2.1/groups/(?P<group_id>\d+)/members/import/$', GroupMembersImport.as_view(), name='api-v2.1-group-members-import'),
|
||||
url(r'^api/v2.1/group-members-import-example/$', GroupMembersImportExample.as_view(), name='api-v2.1-group-members-import-example'),
|
||||
|
Reference in New Issue
Block a user