From 6b80ed7a2c01012b0eac58d6eb2827e45d119a15 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 19 Oct 2021 16:32:06 -0400 Subject: [PATCH] Minor bug fixes --- app/api/projects.py | 5 +++++ .../js/components/EditPermissionsPanel.jsx | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/api/projects.py b/app/api/projects.py index b1b860eb..48c25623 100644 --- a/app/api/projects.py +++ b/app/api/projects.py @@ -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) diff --git a/app/static/app/js/components/EditPermissionsPanel.jsx b/app/static/app/js/components/EditPermissionsPanel.jsx index 6e6a8997..a2416d61 100644 --- a/app/static/app/js/components/EditPermissionsPanel.jsx +++ b/app/static/app/js/components/EditPermissionsPanel.jsx @@ -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 ?
- {p.autocomplete.map(ac =>
+ {p.autocomplete && p.autocomplete.length > 0 ?
+ {p.autocomplete.map(ac =>
{ac.username}
{ac.email}
)}