kopia lustrzana https://github.com/OpenDroneMap/WebODM
Minor bug fixes
rodzic
e706bfd17d
commit
6b80ed7a2c
|
@ -78,6 +78,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||
'owner': project.owner == user,
|
||||
'permissions': normalized_perm_names(perms[user])})
|
||||
|
||||
result.sort(key=lambda r: r['owner'], reverse=True)
|
||||
return Response(result, status=status.HTTP_200_OK)
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
|
@ -117,6 +118,10 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||
perm = p + "_project"
|
||||
user = User.objects.get(username=username)
|
||||
|
||||
# Skip owners
|
||||
if project.owner == user:
|
||||
continue
|
||||
|
||||
# Has permission in database but not in form?
|
||||
if user.has_perm(perm, project) and not p in perms_map[username]:
|
||||
remove_perm(perm, user, project)
|
||||
|
|
|
@ -87,7 +87,8 @@ class EditPermissionsPanel extends React.Component {
|
|||
});
|
||||
|
||||
this.state.permissions.forEach(p => delete(p.autocomplete));
|
||||
perm.autocomplete = json;
|
||||
|
||||
if (this.textFocused) perm.autocomplete = json;
|
||||
|
||||
this.setState({validUsernames: this.state.validUsernames, permissions: this.state.permissions});
|
||||
}).fail(() => {
|
||||
|
@ -192,12 +193,15 @@ class EditPermissionsPanel extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
onFocus = e => {
|
||||
this.textFocused = true;
|
||||
}
|
||||
|
||||
onBlur = perm => {
|
||||
return e => {
|
||||
setTimeout(() => {
|
||||
delete(perm.autocomplete);
|
||||
this.setState({permissions: this.state.permissions});
|
||||
}, 150);
|
||||
delete(perm.autocomplete);
|
||||
this.setState({permissions: this.state.permissions});
|
||||
this.textFocused = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,14 +215,15 @@ class EditPermissionsPanel extends React.Component {
|
|||
onChange={this.handleChangePermissionUser(p)}
|
||||
type="text"
|
||||
autoComplete="off"
|
||||
onFocus={this.onFocus}
|
||||
onBlur={this.onBlur(p)}
|
||||
disabled={p.owner}
|
||||
value={p.username}
|
||||
className="form-control username"
|
||||
placeholder={_("Username")}
|
||||
ref={(domNode) => this.lastTextbox = domNode} />
|
||||
{p.autocomplete ? <div className="autocomplete" style={{borderColor: this.autocompleteBorderColor, backgroundColor: this.backgroundColor}}>
|
||||
{p.autocomplete.map(ac => <div key={ac.username} onClick={this.acOnClick(p, ac)} className="ac-entry" onMouseEnter={this.acOnMouseEnter} onMouseLeave={this.acOnMouseLeave} style={{borderColor: this.autocompleteBorderColor}}>
|
||||
{p.autocomplete && p.autocomplete.length > 0 ? <div className="autocomplete" style={{borderColor: this.autocompleteBorderColor, backgroundColor: this.backgroundColor}}>
|
||||
{p.autocomplete.map(ac => <div key={ac.username} onMouseDown={this.acOnClick(p, ac)} className="ac-entry" onMouseEnter={this.acOnMouseEnter} onMouseLeave={this.acOnMouseLeave} style={{borderColor: this.autocompleteBorderColor}}>
|
||||
<div className="ac-user">{ac.username}</div>
|
||||
<div className="ac-email">{ac.email}</div>
|
||||
</div>)}
|
||||
|
|
Ładowanie…
Reference in New Issue