Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import { ReducerRegistry } from '../base/redux';
  2. import {
  3. ADD_PREJOIN_AUDIO_TRACK,
  4. ADD_PREJOIN_CONTENT_SHARING_TRACK,
  5. ADD_PREJOIN_VIDEO_TRACK,
  6. SET_DEVICE_STATUS,
  7. SET_DIALOUT_NUMBER,
  8. SET_DIALOUT_COUNTRY,
  9. SET_DIALOUT_STATUS,
  10. SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,
  11. SET_SKIP_PREJOIN,
  12. SET_PREJOIN_AUDIO_DISABLED,
  13. SET_PREJOIN_AUDIO_MUTED,
  14. SET_PREJOIN_DEVICE_ERRORS,
  15. SET_PREJOIN_PAGE_VISIBILITY,
  16. SET_PREJOIN_VIDEO_DISABLED,
  17. SET_PREJOIN_VIDEO_MUTED
  18. } from './actionTypes';
  19. const DEFAULT_STATE = {
  20. audioDisabled: false,
  21. audioMuted: false,
  22. audioTrack: null,
  23. contentSharingTrack: null,
  24. country: '',
  25. deviceStatusText: 'prejoin.configuringDevices',
  26. deviceStatusType: 'ok',
  27. dialOutCountry: {
  28. name: 'United States',
  29. dialCode: '1',
  30. code: 'us'
  31. },
  32. dialOutNumber: '',
  33. dialOutStatus: 'prejoin.dialing',
  34. name: '',
  35. rawError: '',
  36. showPrejoin: true,
  37. showJoinByPhoneDialog: false,
  38. userSelectedSkipPrejoin: false,
  39. videoTrack: null,
  40. videoDisabled: false,
  41. videoMuted: false
  42. };
  43. /**
  44. * Listen for actions that mutate the prejoin state
  45. */
  46. ReducerRegistry.register(
  47. 'features/prejoin', (state = DEFAULT_STATE, action) => {
  48. switch (action.type) {
  49. case ADD_PREJOIN_AUDIO_TRACK: {
  50. return {
  51. ...state,
  52. audioTrack: action.value
  53. };
  54. }
  55. case ADD_PREJOIN_CONTENT_SHARING_TRACK: {
  56. return {
  57. ...state,
  58. contentSharingTrack: action.value
  59. };
  60. }
  61. case ADD_PREJOIN_VIDEO_TRACK: {
  62. return {
  63. ...state,
  64. videoTrack: action.value
  65. };
  66. }
  67. case SET_SKIP_PREJOIN: {
  68. return {
  69. ...state,
  70. userSelectedSkipPrejoin: action.value
  71. };
  72. }
  73. case SET_PREJOIN_PAGE_VISIBILITY:
  74. return {
  75. ...state,
  76. showPrejoin: action.value
  77. };
  78. case SET_PREJOIN_VIDEO_DISABLED: {
  79. return {
  80. ...state,
  81. videoDisabled: action.value
  82. };
  83. }
  84. case SET_PREJOIN_VIDEO_MUTED:
  85. return {
  86. ...state,
  87. videoMuted: action.value
  88. };
  89. case SET_PREJOIN_AUDIO_MUTED:
  90. return {
  91. ...state,
  92. audioMuted: action.value
  93. };
  94. case SET_PREJOIN_DEVICE_ERRORS: {
  95. const status = getStatusFromErrors(action.value);
  96. return {
  97. ...state,
  98. ...status
  99. };
  100. }
  101. case SET_DEVICE_STATUS: {
  102. return {
  103. ...state,
  104. deviceStatusText: action.text,
  105. deviceStatusType: action.type
  106. };
  107. }
  108. case SET_PREJOIN_AUDIO_DISABLED: {
  109. return {
  110. ...state,
  111. audioDisabled: true
  112. };
  113. }
  114. case SET_DIALOUT_NUMBER: {
  115. return {
  116. ...state,
  117. dialOutNumber: action.value
  118. };
  119. }
  120. case SET_DIALOUT_COUNTRY: {
  121. return {
  122. ...state,
  123. dialOutCountry: action.value
  124. };
  125. }
  126. case SET_DIALOUT_STATUS: {
  127. return {
  128. ...state,
  129. dialOutStatus: action.value
  130. };
  131. }
  132. case SET_JOIN_BY_PHONE_DIALOG_VISIBLITY: {
  133. return {
  134. ...state,
  135. showJoinByPhoneDialog: action.value
  136. };
  137. }
  138. default:
  139. return state;
  140. }
  141. },
  142. );
  143. /**
  144. * Returns a suitable error object based on the track errors.
  145. *
  146. * @param {Object} errors - The errors got while creating local tracks.
  147. * @returns {Object}
  148. */
  149. function getStatusFromErrors(errors) {
  150. const { audioOnlyError, videoOnlyError, audioAndVideoError } = errors;
  151. if (audioAndVideoError) {
  152. if (audioOnlyError) {
  153. if (videoOnlyError) {
  154. return {
  155. deviceStatusType: 'warning',
  156. deviceStatusText: 'prejoin.audioAndVideoError',
  157. rawError: audioAndVideoError.message
  158. };
  159. }
  160. return {
  161. deviceStatusType: 'warning',
  162. deviceStatusText: 'prejoin.audioOnlyError',
  163. rawError: audioOnlyError.message
  164. };
  165. }
  166. return {
  167. deviceStatusType: 'warning',
  168. deviceStatusText: 'prejoin.videoOnlyError',
  169. rawError: audioAndVideoError.message
  170. };
  171. }
  172. return {
  173. deviceStatusType: 'ok',
  174. deviceStatusText: 'prejoin.lookGood',
  175. rawError: ''
  176. };
  177. }