diff --git a/app/javascript/components/admin/manage_users/ManageUserRow.jsx b/app/javascript/components/admin/manage_users/ManageUserRow.jsx index 8b036cbaf76149cf32c0e6cdec4d38dfba65ec24..129bcaed37fc5ac44b64f2fac4f78496e01d14c4 100644 --- a/app/javascript/components/admin/manage_users/ManageUserRow.jsx +++ b/app/javascript/components/admin/manage_users/ManageUserRow.jsx @@ -17,12 +17,15 @@ import useCreateServerRoom from '../../../hooks/mutations/admin/manage_users/use import DeleteUserForm from './forms/DeleteUserForm'; import useUpdateUserStatus from '../../../hooks/mutations/admin/manage_users/useUpdateUserStatus'; import RoleBadge from '../roles/RoleBadge'; +import { useAuth } from '../../../contexts/auth/AuthProvider'; export default function ManageUserRow({ user }) { const { t } = useTranslation(); + const currentUser = useAuth(); + const mutationWrapper = (args) => useCreateServerRoom({ userId: user.id, ...args }); const updateUserStatus = useUpdateUserStatus(); - const localizedTime = localizeDateTimeString(user?.created_at, user?.language); + const localizedTime = localizeDateTimeString(user?.created_at, currentUser?.language); return ( <tr key={user.id} className="align-middle text-muted border border-2"> diff --git a/app/javascript/components/admin/site_settings/settings/SettingSelect.jsx b/app/javascript/components/admin/site_settings/settings/SettingSelect.jsx index c41c0879554412685a4ac123dc1b51ce7499e794..45dbb34ae95b4fab785f15f35113a2c9c2f3240d 100644 --- a/app/javascript/components/admin/site_settings/settings/SettingSelect.jsx +++ b/app/javascript/components/admin/site_settings/settings/SettingSelect.jsx @@ -32,11 +32,12 @@ export default function SettingSelect({ SettingSelect.defaultProps = { defaultValue: '', + children: undefined, }; SettingSelect.propTypes = { defaultValue: PropTypes.string, title: PropTypes.string.isRequired, description: PropTypes.string.isRequired, - children: PropTypes.arrayOf(PropTypes.element).isRequired, + children: PropTypes.arrayOf(PropTypes.element), }; diff --git a/app/javascript/components/home/HomePage.jsx b/app/javascript/components/home/HomePage.jsx index d7bc131dca78836c539bf51cba1389b353efd100..a33417b617397591e29e8ee8ad804d65ac2b96b2 100644 --- a/app/javascript/components/home/HomePage.jsx +++ b/app/javascript/components/home/HomePage.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo } from 'react'; +import React, { useEffect } from 'react'; import { Col, Row, } from 'react-bootstrap'; @@ -31,10 +31,9 @@ export default function HomePage() { [currentUser.signed_in], ); - // hack to deal with the fact that useEffect and toast dont work together very well - useMemo(() => { + useEffect(() => { switch (error) { - case 'InviteInvald': + case 'InviteInvalid': toast.error(t('toast.error.users.invalid_invite')); break; case 'SignupError': @@ -42,8 +41,7 @@ export default function HomePage() { break; default: } - // Remove the error - setSearchParams(searchParams.delete('error')); + if (error) { setSearchParams(searchParams.delete('error')); } }, [error]); return ( diff --git a/app/javascript/components/recordings/RecordingRow.jsx b/app/javascript/components/recordings/RecordingRow.jsx index 97b37d805fa1b30a856b3127f118aa7741631395..9db4089dbd647bb05b3a527d63da2cf3f8af80db 100644 --- a/app/javascript/components/recordings/RecordingRow.jsx +++ b/app/javascript/components/recordings/RecordingRow.jsx @@ -97,7 +97,7 @@ export default function RecordingRow({ <Button onClick={() => window.open(format.url, '_blank')} className={`btn-sm rounded-pill me-1 mt-1 border-0 btn-format-${format.recording_type.toLowerCase()}`} - key={format.id} + key={`${format.recording_type}-${format.url}`} > {format.recording_type} </Button> diff --git a/app/javascript/components/recordings/RecordingsList.jsx b/app/javascript/components/recordings/RecordingsList.jsx index 6c098dd5ecb3b32a3e7802afc5a8c02bc51edb29..9a39a962b181d1977661d455f091f0858f7db93d 100644 --- a/app/javascript/components/recordings/RecordingsList.jsx +++ b/app/javascript/components/recordings/RecordingsList.jsx @@ -90,7 +90,10 @@ RecordingsList.propTypes = { name: PropTypes.string, length: PropTypes.number, visibility: PropTypes.string, - formats: PropTypes.arrayOf(PropTypes.string), + formats: PropTypes.arrayOf(PropTypes.shape({ + recording_type: PropTypes.string, + url: PropTypes.string, + })), users: PropTypes.arrayOf(PropTypes.shape({ id: PropTypes.number, name: PropTypes.string,