RevisionCompareContainer.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import { toastError } from '../util/apiNotification';
  4. const logger = loggerFactory('growi:PageHistoryContainer');
  5. /**
  6. * Service container for personal settings page (RevisionCompare.jsx)
  7. * @extends {Container} unstated Container
  8. */
  9. export default class RevisionCompareContainer extends Container {
  10. constructor(appContainer, pageContainer) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.pageContainer = pageContainer;
  14. this.state = {
  15. errMessage: null,
  16. fromRevision: null,
  17. toRevision: null,
  18. };
  19. this.handleFromRevisionChange = this.handleFromRevisionChange.bind(this);
  20. this.handleToRevisionChange = this.handleToRevisionChange.bind(this);
  21. }
  22. /**
  23. * Workaround for the mangling in production build to break constructor.name
  24. */
  25. static getClassName() {
  26. return 'RevisionCompareContainer';
  27. }
  28. async handleFromRevisionChange(revision) {
  29. this.setState({ fromRevision: revision });
  30. }
  31. async handleToRevisionChange(revision) {
  32. this.setState({ toRevision: revision });
  33. }
  34. get compareRevisionIds() {
  35. const searchParams = {};
  36. for (const param of window.location.search?.substr(1)?.split('&')) {
  37. const [k,v] = param.split('=');
  38. searchParams[k] = v;
  39. }
  40. if (!searchParams['compare']) {
  41. return [];
  42. }
  43. return searchParams['compare'].split('...') || [];
  44. }
  45. }