Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

middleware.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { NativeModules } from 'react-native';
  2. import { getAppProp } from '../../base/app/functions';
  3. import {
  4. AUDIO_MUTED_CHANGED,
  5. CONFERENCE_BLURRED,
  6. CONFERENCE_FOCUSED,
  7. CONFERENCE_JOINED,
  8. CONFERENCE_LEFT,
  9. CONFERENCE_WILL_JOIN,
  10. VIDEO_MUTED_CHANGED
  11. } from '../../base/conference/actionTypes';
  12. import { PARTICIPANT_JOINED } from '../../base/participants/actionTypes';
  13. import MiddlewareRegistry from '../../base/redux/MiddlewareRegistry';
  14. import StateListenerRegistry from '../../base/redux/StateListenerRegistry';
  15. import { READY_TO_CLOSE } from '../external-api/actionTypes';
  16. import { participantToParticipantInfo } from '../external-api/functions';
  17. import { ENTER_PICTURE_IN_PICTURE } from '../picture-in-picture/actionTypes';
  18. import { isExternalAPIAvailable } from './functions';
  19. const externalAPIEnabled = isExternalAPIAvailable();
  20. const { JMOngoingConference } = NativeModules;
  21. /**
  22. * Check if native modules are being used or not.
  23. * If not, then the init of middleware doesn't happen.
  24. */
  25. !externalAPIEnabled && MiddlewareRegistry.register(store => next => action => {
  26. const result = next(action);
  27. const { type } = action;
  28. const rnSdkHandlers = getAppProp(store, 'rnSdkHandlers');
  29. switch (type) {
  30. case AUDIO_MUTED_CHANGED:
  31. rnSdkHandlers?.onAudioMutedChanged && rnSdkHandlers?.onAudioMutedChanged(action.muted);
  32. break;
  33. case VIDEO_MUTED_CHANGED:
  34. rnSdkHandlers?.onVideoMutedChanged && rnSdkHandlers?.onVideoMutedChanged(action.muted);
  35. break;
  36. case CONFERENCE_BLURRED:
  37. rnSdkHandlers?.onConferenceBlurred && rnSdkHandlers?.onConferenceBlurred();
  38. break;
  39. case CONFERENCE_FOCUSED:
  40. rnSdkHandlers?.onConferenceFocused && rnSdkHandlers?.onConferenceFocused();
  41. break;
  42. case CONFERENCE_JOINED:
  43. rnSdkHandlers?.onConferenceJoined && rnSdkHandlers?.onConferenceJoined();
  44. break;
  45. case CONFERENCE_LEFT:
  46. // Props are torn down at this point, perhaps need to leave this one out
  47. break;
  48. case CONFERENCE_WILL_JOIN:
  49. rnSdkHandlers?.onConferenceWillJoin && rnSdkHandlers?.onConferenceWillJoin();
  50. break;
  51. case ENTER_PICTURE_IN_PICTURE:
  52. rnSdkHandlers?.onEnterPictureInPicture && rnSdkHandlers?.onEnterPictureInPicture();
  53. break;
  54. case PARTICIPANT_JOINED: {
  55. const { participant } = action;
  56. const participantInfo = participantToParticipantInfo(participant);
  57. rnSdkHandlers?.onParticipantJoined && rnSdkHandlers?.onParticipantJoined(participantInfo);
  58. break;
  59. }
  60. case READY_TO_CLOSE:
  61. rnSdkHandlers?.onReadyToClose && rnSdkHandlers?.onReadyToClose();
  62. break;
  63. }
  64. return result;
  65. });
  66. /**
  67. * Check if native modules are being used or not.
  68. */
  69. !externalAPIEnabled && StateListenerRegistry.register(
  70. state => state['features/base/conference'].conference,
  71. (conference, previousConference) => {
  72. if (!conference) {
  73. JMOngoingConference.abort();
  74. } else if (conference && !previousConference) {
  75. JMOngoingConference.launch();
  76. } else if (conference !== previousConference) {
  77. JMOngoingConference.abort();
  78. JMOngoingConference.launch();
  79. }
  80. }
  81. );