diff --git a/atst/domain/workspace_roles.py b/atst/domain/workspace_roles.py index e5002f0f..f6942e2f 100644 --- a/atst/domain/workspace_roles.py +++ b/atst/domain/workspace_roles.py @@ -9,6 +9,16 @@ from .users import Users from .exceptions import NotFoundError +MEMBER_STATUSES = [ + {"name": "active", "display_name": "Active"}, + {"name": "revoked", "display_name": "Revoked"}, + {"name": "expired", "display_name": "Invite expired"}, + {"name": "error", "display_name": "Error on invite"}, + {"name": "pending", "display_name": "Pending"}, + {"name": "unknown", "display_name": "Unknown errors"}, +] + + class WorkspaceRoles(object): @classmethod def get(cls, workspace_id, user_id): diff --git a/atst/models/workspace_role.py b/atst/models/workspace_role.py index 93a4a85b..ad223c5f 100644 --- a/atst/models/workspace_role.py +++ b/atst/models/workspace_role.py @@ -53,11 +53,12 @@ class WorkspaceRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): elif self.latest_invitation: if self.latest_invitation.is_revoked: return "Revoked" - elif self.latest_invitation.is_rejected_expired: - return "Invite expired" elif self.latest_invitation.is_rejected_wrong_user: return "Error on invite" - elif self.latest_invitation.is_expired: + elif ( + self.latest_invitation.is_rejected_expired + or self.latest_invitation.is_expired + ): return "Invite expired" else: return "Pending" diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index a557473d..bbe47803 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -14,7 +14,7 @@ from atst.domain.exceptions import UnauthorizedError, AlreadyExistsError from atst.domain.projects import Projects from atst.domain.reports import Reports from atst.domain.workspaces import Workspaces -from atst.domain.workspace_roles import WorkspaceRoles +from atst.domain.workspace_roles import WorkspaceRoles, MEMBER_STATUSES from atst.domain.environments import Environments from atst.domain.environment_roles import EnvironmentRoles from atst.forms.project import NewProjectForm, ProjectForm @@ -123,7 +123,8 @@ def workspace_members(workspace_id): return render_template( "workspaces/members/index.html", workspace=workspace, - choices=WORKSPACE_ROLE_DEFINITIONS, + role_choices=WORKSPACE_ROLE_DEFINITIONS, + status_choices=MEMBER_STATUSES, members=members_list, new_member=new_member, ) diff --git a/js/components/forms/members_list.js b/js/components/forms/members_list.js index e7e722e7..7de99020 100644 --- a/js/components/forms/members_list.js +++ b/js/components/forms/members_list.js @@ -11,12 +11,14 @@ const search = (query, members) => { } } -const filterByStatus = (status, members) => { +const filterByStatus = (status, statusesByDisplayName, members) => { + const getStatusFromDisplayName = (_status) => statusesByDisplayName[_status].name + if (status === '' || status === 'all') { return members } else { return members.filter( - (member) => member.status.toLowerCase() === status + (member) => getStatusFromDisplayName(member.status) === status ) } } @@ -51,7 +53,8 @@ export default { props: { members: Array, - choices: Array, + role_choices: Array, + status_choices: Array, }, data: function () { @@ -90,8 +93,9 @@ export default { return { searchValue: '', status: '', + statusesByDisplayName: indexBy(prop('display_name'), this.status_choices), role: '', - rolesByDisplayName: indexBy(prop('display_name'), this.choices), + rolesByDisplayName: indexBy(prop('display_name'), this.role_choices), sortInfo: { columnName: '', isAscending: true, @@ -104,7 +108,7 @@ export default { searchedList: function () { return pipe( partial(search, [this.searchValue]), - partial(filterByStatus, [this.status]), + partial(filterByStatus, [this.status, this.statusesByDisplayName]), partial(filterByRole, [this.role, this.rolesByDisplayName]), partial(sort, [this.sortInfo]) )(this.members) diff --git a/styles/components/_search_bar.scss b/styles/components/_search_bar.scss index 715c982c..28b536c5 100644 --- a/styles/components/_search_bar.scss +++ b/styles/components/_search_bar.scss @@ -27,6 +27,8 @@ flex-basis: 100%; .usa-input { + flex-basis: 100%; + @media (min-width:1000px) { margin-top: 0; } diff --git a/templates/workspaces/members/index.html b/templates/workspaces/members/index.html index ef932607..9b0e1e5f 100644 --- a/templates/workspaces/members/index.html +++ b/templates/workspaces/members/index.html @@ -47,7 +47,12 @@ {% endif %} - +