From c37852c0e2cc20b0cea73bf6769c21439a2768ed Mon Sep 17 00:00:00 2001 From: alihadi-mazeh <113048174+alihadi-mazeh@users.noreply.github.com> Date: Wed, 8 Feb 2023 20:33:00 +0000 Subject: [PATCH] Localized Time and Date to more Manage Users tabs (#4775) * Localized Time and Date to more Manage Users tabs * fixed date & time localization in Banned and Pending rows to current user * Fixed bug from previous commit --- .../components/admin/manage_users/BannedPendingRow.jsx | 8 ++++++-- .../admin/manage_users/BannedPendingUsersTable.jsx | 1 - .../components/admin/manage_users/InvitedUsers.jsx | 5 ++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/javascript/components/admin/manage_users/BannedPendingRow.jsx b/app/javascript/components/admin/manage_users/BannedPendingRow.jsx index 4c0b8d66..f5e515fb 100644 --- a/app/javascript/components/admin/manage_users/BannedPendingRow.jsx +++ b/app/javascript/components/admin/manage_users/BannedPendingRow.jsx @@ -12,10 +12,14 @@ import { } from '@heroicons/react/24/outline'; import Avatar from '../../users/user/Avatar'; import useUpdateUserStatus from '../../../hooks/mutations/admin/manage_users/useUpdateUserStatus'; +import { localizeDateTimeString } from '../../../helpers/DateTimeHelper'; +import { useAuth } from '../../../contexts/auth/AuthProvider'; export default function BannedPendingRow({ user, pendingTable }) { const { t } = useTranslation(); const updateUserStatus = useUpdateUserStatus(); + const currentUser = useAuth(); + const localizedTime = localizeDateTimeString(user?.created_at, currentUser?.language); return ( <tr key={user.id} className="align-middle text-muted border border-2"> @@ -26,13 +30,12 @@ export default function BannedPendingRow({ user, pendingTable }) { </div> <Stack> <span className="text-dark fw-bold"> {user.name} </span> - <span className="small"> { t('admin.manage_users.user_created_at', { user }) }</span> + <span className="small"> { localizedTime }</span> </Stack> </Stack> </td> <td className="border-0"> {user.email} </td> - <td className="border-0"> {user.created_at} </td> <td className="border-start-0"> <Dropdown className="float-end cursor-pointer"> <Dropdown.Toggle className="hi-s" as={EllipsisVerticalIcon} /> @@ -68,6 +71,7 @@ BannedPendingRow.propTypes = { name: PropTypes.string.isRequired, email: PropTypes.string.isRequired, created_at: PropTypes.string.isRequired, + language: PropTypes.string.isRequired, }).isRequired, pendingTable: PropTypes.bool.isRequired, }; diff --git a/app/javascript/components/admin/manage_users/BannedPendingUsersTable.jsx b/app/javascript/components/admin/manage_users/BannedPendingUsersTable.jsx index 9c1da060..a598f9d9 100644 --- a/app/javascript/components/admin/manage_users/BannedPendingUsersTable.jsx +++ b/app/javascript/components/admin/manage_users/BannedPendingUsersTable.jsx @@ -23,7 +23,6 @@ export default function BannedPendingUsersTable({ users, pendingTable }) { <tr className="text-muted small"> <th className="fw-normal border-end-0">{ t('user.name') } </th> <th className="fw-normal border-0">{ t('user.email_address') } </th> - <th className="fw-normal border-0">{ t('created_at') } </th> </tr> </thead> <tbody className="border-top-0"> diff --git a/app/javascript/components/admin/manage_users/InvitedUsers.jsx b/app/javascript/components/admin/manage_users/InvitedUsers.jsx index fa476d8d..688f9124 100644 --- a/app/javascript/components/admin/manage_users/InvitedUsers.jsx +++ b/app/javascript/components/admin/manage_users/InvitedUsers.jsx @@ -8,11 +8,14 @@ import useInvitations from '../../../hooks/queries/admin/manage_users/useInvitat import Pagination from '../../shared_components/Pagination'; import NoSearchResults from '../../shared_components/search/NoSearchResults'; import EmptyUsersList from './EmptyUsersList'; +import { localizeDateTimeString } from '../../../helpers/DateTimeHelper'; +import { useAuth } from '../../../contexts/auth/AuthProvider'; export default function InvitedUsers({ searchInput }) { const { t } = useTranslation(); const [page, setPage] = useState(); const { data: invitations } = useInvitations(searchInput, page); + const currentUser = useAuth(); if (!searchInput && invitations?.data?.length === 0) { return <EmptyUsersList text={t('admin.manage_users.empty_invited_users')} subtext={t('admin.manage_users.empty_invited_users_subtext')} />; @@ -42,7 +45,7 @@ export default function InvitedUsers({ searchInput }) { invitations?.data?.map((invitation) => ( <tr key={invitation.email} className="align-middle text-muted"> <td className="text-dark border-0">{invitation.email}</td> - <td className="text-dark border-0">{invitation.updated_at}</td> + <td className="text-dark border-0">{localizeDateTimeString(invitation.updated_at, currentUser?.language)}</td> <td className="text-dark border-0"> { invitation.valid ? <CheckIcon className="text-success hi-s" /> : <XMarkIcon className="text-danger hi-s" />} </td> -- GitLab