Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

middleware.ts 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { CONFERENCE_JOIN_IN_PROGRESS } from '../base/conference/actionTypes';
  2. import { getCurrentConference } from '../base/conference/functions';
  3. import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
  4. import StateListenerRegistry from '../base/redux/StateListenerRegistry';
  5. import { sanitizeUrl } from '../base/util/uri';
  6. import { TOGGLE_DOCUMENT_EDITING } from './actionTypes';
  7. import { setDocumentUrl } from './actions';
  8. const ETHERPAD_COMMAND = 'etherpad';
  9. /**
  10. * Middleware that captures actions related to collaborative document editing
  11. * and notifies components not hooked into redux.
  12. *
  13. * @param {Store} store - The redux store.
  14. * @returns {Function}
  15. */
  16. // eslint-disable-next-line no-unused-vars
  17. MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
  18. switch (action.type) {
  19. case CONFERENCE_JOIN_IN_PROGRESS: {
  20. const { conference } = action;
  21. conference.addCommandListener(ETHERPAD_COMMAND,
  22. ({ value }: { value: string; }) => {
  23. let url;
  24. const { etherpad_base: etherpadBase } = getState()['features/base/config'];
  25. const etherpadBaseUrl = sanitizeUrl(etherpadBase);
  26. if (etherpadBaseUrl) {
  27. url = new URL(value, etherpadBaseUrl.toString()).toString();
  28. }
  29. dispatch(setDocumentUrl(url));
  30. }
  31. );
  32. break;
  33. }
  34. case TOGGLE_DOCUMENT_EDITING: {
  35. if (typeof APP !== 'undefined') {
  36. APP.UI.onEtherpadClicked();
  37. }
  38. break;
  39. }
  40. }
  41. return next(action);
  42. });
  43. /**
  44. * Set up state change listener to perform maintenance tasks when the conference
  45. * is left or failed, e.g. Clear messages or close the chat modal if it's left
  46. * open.
  47. */
  48. StateListenerRegistry.register(
  49. state => getCurrentConference(state),
  50. (conference, { dispatch }, previousConference) => {
  51. if (previousConference) {
  52. dispatch(setDocumentUrl(undefined));
  53. }
  54. });