AdminExternalAccountsContainer.js 2.0 KB

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