AdminExternalAccountsContainer.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { isServer } from '@growi/core/dist/utils';
  2. import { Container } from 'unstated';
  3. import loggerFactory from '~/utils/logger';
  4. import { apiv3Delete, apiv3Get } from '../util/apiv3-client';
  5. const _logger = loggerFactory('growi:services:AdminexternalaccountsContainer');
  6. /**
  7. * Service container for admin external-accounts page (ManageExternalAccountsContainer.jsx)
  8. * @extends {Container} unstated Container
  9. */
  10. export default class AdminExternalAccountsContainer extends Container {
  11. constructor() {
  12. super();
  13. if (isServer()) {
  14. return;
  15. }
  16. this.state = {
  17. externalAccounts: [],
  18. totalAccounts: 0,
  19. activePage: 1,
  20. pagingLimit: Infinity,
  21. };
  22. }
  23. /**
  24. * Workaround for the mangling in production build to break constructor.name
  25. */
  26. static getClassName() {
  27. return 'AdminExternalAccountsContainer';
  28. }
  29. /**
  30. * syncExternalAccounts of selectedPage
  31. * @memberOf AdminExternalAccountsContainer
  32. * @param {number} selectedPage
  33. */
  34. async retrieveExternalAccountsByPagingNum(selectedPage) {
  35. const params = { page: selectedPage };
  36. const { data } = await apiv3Get('/users/external-accounts', params);
  37. if (data.paginateResult == null) {
  38. throw new Error("data must conclude 'paginateResult' property.");
  39. }
  40. const {
  41. docs: externalAccounts,
  42. totalDocs: totalAccounts,
  43. limit: pagingLimit,
  44. } = data.paginateResult;
  45. this.setState({
  46. externalAccounts,
  47. totalAccounts,
  48. pagingLimit,
  49. activePage: selectedPage,
  50. });
  51. }
  52. /**
  53. * remove external account
  54. *
  55. * @memberOf AdminExternalAccountsContainer
  56. * @param {string} externalAccountId id of the External Account to be removed
  57. */
  58. async removeExternalAccountById(externalAccountId) {
  59. const res = await apiv3Delete(
  60. `/users/external-accounts/${externalAccountId}/remove`,
  61. );
  62. const deletedUserData = res.data.externalAccount;
  63. await this.retrieveExternalAccountsByPagingNum(this.state.activePage);
  64. return deletedUserData.accountId;
  65. }
  66. }