From faf295d7f28227b644cc67390c33df4b1a9f583c Mon Sep 17 00:00:00 2001 From: nixocio Date: Mon, 12 Jul 2021 10:36:30 -0400 Subject: [PATCH] Update User screens * Add `modified` field to user endpoints. The API returns the last login date as the `modified` field to the users. * Add modified to user details. * Modify user form layout to be as per mockups. * Remove `last name` and `first name` from user row, since it is already on the column title. closes: https://github.com/ansible/awx/issues/5687 closes: https://github.com/ansible/awx/issues/9564 --- awx/api/serializers.py | 1 - .../screens/User/UserDetail/UserDetail.jsx | 10 ++-- .../User/UserDetail/UserDetail.test.jsx | 1 + .../screens/User/UserList/UserListItem.jsx | 14 +---- awx/ui_next/src/screens/User/data.user.json | 1 + .../src/screens/User/shared/UserForm.jsx | 52 ++++++++++--------- 6 files changed, 38 insertions(+), 41 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index ab91385d44..693faa3cbc 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -948,7 +948,6 @@ class UserSerializer(BaseSerializer): '*', '-name', '-description', - '-modified', 'username', 'first_name', 'last_name', diff --git a/awx/ui_next/src/screens/User/UserDetail/UserDetail.jsx b/awx/ui_next/src/screens/User/UserDetail/UserDetail.jsx index 46dff656f3..546fdee97b 100644 --- a/awx/ui_next/src/screens/User/UserDetail/UserDetail.jsx +++ b/awx/ui_next/src/screens/User/UserDetail/UserDetail.jsx @@ -22,6 +22,7 @@ function UserDetail({ user }) { last_name, last_login, created, + modified, is_superuser, is_system_auditor, summary_fields, @@ -56,14 +57,14 @@ function UserDetail({ user }) { return ( + + + - - - {userAuthType && ( )} + {modified && ( + + )} {summary_fields.user_capabilities && diff --git a/awx/ui_next/src/screens/User/UserDetail/UserDetail.test.jsx b/awx/ui_next/src/screens/User/UserDetail/UserDetail.test.jsx index 73389dd726..bee41eb8bd 100644 --- a/awx/ui_next/src/screens/User/UserDetail/UserDetail.test.jsx +++ b/awx/ui_next/src/screens/User/UserDetail/UserDetail.test.jsx @@ -30,6 +30,7 @@ describe('', () => { assertDetail('User Type', 'System Administrator'); assertDetail('Last Login', `11/4/2019, 11:12:36 PM`); assertDetail('Created', `10/28/2019, 3:01:07 PM`); + assertDetail('Last Modified', `7/12/2021, 7:08:33 PM`); assertDetail('Type', `SOCIAL`); }); diff --git a/awx/ui_next/src/screens/User/UserList/UserListItem.jsx b/awx/ui_next/src/screens/User/UserList/UserListItem.jsx index 9c0eb312ae..d478f1a5c7 100644 --- a/awx/ui_next/src/screens/User/UserList/UserListItem.jsx +++ b/awx/ui_next/src/screens/User/UserList/UserListItem.jsx @@ -51,20 +51,10 @@ function UserListItem({ user, isSelected, onSelect, detailUrl, rowIndex }) { )} - {user.first_name && ( - - {t`First Name`} - {user.first_name} - - )} + {user.first_name && {user.first_name}} - {user.last_name && ( - - {t`Last Name`} - {user.last_name} - - )} + {user.last_name && {user.last_name}} {user_type} diff --git a/awx/ui_next/src/screens/User/data.user.json b/awx/ui_next/src/screens/User/data.user.json index c9d598f47c..fe68338444 100644 --- a/awx/ui_next/src/screens/User/data.user.json +++ b/awx/ui_next/src/screens/User/data.user.json @@ -22,6 +22,7 @@ } }, "created": "2019-10-28T15:01:07.218634Z", + "modified": "2021-07-12T19:08:33.947072Z", "username": "admin", "first_name": "Admin", "last_name": "User", diff --git a/awx/ui_next/src/screens/User/shared/UserForm.jsx b/awx/ui_next/src/screens/User/shared/UserForm.jsx index 60ffd35d36..994f780862 100644 --- a/awx/ui_next/src/screens/User/shared/UserForm.jsx +++ b/awx/ui_next/src/screens/User/shared/UserForm.jsx @@ -59,6 +59,19 @@ function UserFormFields({ user }) { return ( <> + + + - {!ldapUser && !(socialAuthUser && externalAccount) && ( <> )} - - - {!user.id && ( - organizationHelpers.setTouched()} - onChange={handleOrganizationUpdate} - value={organizationField.value} - required - autoPopulate={!user?.id} - validate={required(t`Select a value for this field`)} - /> - )} + {me.is_superuser && ( )} + + {!user.id && ( + organizationHelpers.setTouched()} + onChange={handleOrganizationUpdate} + value={organizationField.value} + required + autoPopulate={!user?.id} + validate={required(t`Select a value for this field`)} + /> + )} ); }