ManageExternalAccount.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React, { type JSX, useCallback, useEffect } from 'react';
  2. import Link from 'next/link';
  3. import { useTranslation } from 'next-i18next';
  4. import AdminExternalAccountsContainer from '~/client/services/AdminExternalAccountsContainer';
  5. import { toastError } from '~/client/util/toastr';
  6. import PaginationWrapper from '../PaginationWrapper';
  7. import { withUnstatedContainers } from '../UnstatedUtils';
  8. import ExternalAccountTable from './Users/ExternalAccountTable';
  9. type ManageExternalAccountProps = {
  10. adminExternalAccountsContainer: AdminExternalAccountsContainer;
  11. };
  12. const ManageExternalAccount = (
  13. props: ManageExternalAccountProps,
  14. ): JSX.Element => {
  15. const { t } = useTranslation();
  16. const { adminExternalAccountsContainer } = props;
  17. const { activePage, totalAccounts, pagingLimit } =
  18. adminExternalAccountsContainer.state;
  19. const externalAccountPageHandler = useCallback(
  20. async (selectedPage) => {
  21. try {
  22. await adminExternalAccountsContainer.retrieveExternalAccountsByPagingNum(
  23. selectedPage,
  24. );
  25. } catch (err) {
  26. toastError(err);
  27. }
  28. },
  29. [adminExternalAccountsContainer],
  30. );
  31. // for Next routing
  32. useEffect(() => {
  33. externalAccountPageHandler(1);
  34. }, [externalAccountPageHandler]);
  35. const pager = (
  36. <PaginationWrapper
  37. activePage={activePage}
  38. changePage={externalAccountPageHandler}
  39. totalItemsCount={totalAccounts}
  40. pagingLimit={pagingLimit}
  41. align="center"
  42. size="sm"
  43. />
  44. );
  45. return (
  46. <>
  47. <p>
  48. <Link
  49. href="/admin/users"
  50. prefetch={false}
  51. className="btn btn-outline-secondary"
  52. >
  53. <span className="material-symbols-outlined" aria-hidden="true">
  54. arrow_back
  55. </span>
  56. {t('admin:user_management.back_to_user_management')}
  57. </Link>
  58. </p>
  59. <h2>{t('admin:user_management.external_account_list')}</h2>
  60. {totalAccounts !== 0 ? (
  61. <>
  62. {pager}
  63. <ExternalAccountTable />
  64. {pager}
  65. </>
  66. ) : (
  67. <>{t('admin:user_management.external_account_none')}</>
  68. )}
  69. </>
  70. );
  71. };
  72. const ManageExternalAccountWrapper = withUnstatedContainers(
  73. ManageExternalAccount,
  74. [AdminExternalAccountsContainer],
  75. );
  76. export default ManageExternalAccountWrapper;