AdminExternalAccountsContainer.js 1.9 KB

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