fcr-ui-scene 3.7.6 → 3.7.7-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/lib/creator/index.js +12 -6
  2. package/lib/creator/provider-initializer.browser.js +0 -3
  3. package/lib/creator/provider-initializer.electron.js +0 -4
  4. package/lib/electron/bootstrap-sdk.js +70 -20
  5. package/lib/electron/struct.d.ts +7 -1
  6. package/lib/electron/struct.js +8 -1
  7. package/lib/electron/until.d.ts +3 -1
  8. package/lib/electron/until.js +7 -2
  9. package/lib/modules/action-bar/components/item/index.js +1 -0
  10. package/lib/modules/action-bar/components/screen-share/submenu.js +1 -1
  11. package/lib/modules/chat/index.css +5 -1
  12. package/lib/modules/chat/view.js +6 -1
  13. package/lib/modules/components/control-bar/components/switch-theme/index.css +2 -0
  14. package/lib/modules/components/control-bar/components/switch-theme/index.js +5 -7
  15. package/lib/modules/components/control-bar/index.js +26 -7
  16. package/lib/modules/components/toolbar/components/capture-tool/index.d.ts +0 -1
  17. package/lib/modules/components/toolbar/components/capture-tool/index.js +1 -2
  18. package/lib/modules/components/toolbar/components/vertical-frame/index.js +2 -2
  19. package/lib/modules/components/toolbar/hooks/use-resize-visible.js +43 -42
  20. package/lib/modules/components/toolbar/index.js +6 -24
  21. package/lib/modules/control-bar/components/cloud-recording-buttons.d.ts +3 -0
  22. package/lib/modules/control-bar/components/cloud-recording-buttons.js +65 -3
  23. package/lib/modules/control-bar/store.js +11 -6
  24. package/lib/modules/dialog/components/dialog-container/component/body.d.ts +1 -0
  25. package/lib/modules/dialog/components/dialog-container/component/body.js +3 -2
  26. package/lib/modules/dialog/components/dialog-container/index.css +1 -1
  27. package/lib/modules/dialog/components/dialog-container/index.d.ts +1 -0
  28. package/lib/modules/dialog/components/dialog-container/index.js +4 -1
  29. package/lib/modules/dialog/components/normal-window/index.d.ts +1 -0
  30. package/lib/modules/dialog/components/normal-window/index.js +3 -1
  31. package/lib/modules/dialog/dialogs/chat/index.js +2 -1
  32. package/lib/modules/dialog/dialogs/control-bar-leave-meeting/index.js +0 -1
  33. package/lib/modules/dialog/dialogs/end-meeting/index.d.ts +1 -0
  34. package/lib/modules/dialog/dialogs/end-meeting/index.js +2 -1
  35. package/lib/modules/dialog/dialogs/participant/index.js +2 -1
  36. package/lib/modules/layout/store.electron.js +1 -1
  37. package/lib/modules/secondary-window/store.d.ts +0 -1
  38. package/lib/modules/secondary-window/store.js +9 -22
  39. package/lib/modules/secondary-window/view.js +6 -5
  40. package/lib/modules/setting/index.css +0 -1
  41. package/lib/modules/setting/store.base.js +6 -0
  42. package/lib/modules/setting/view.js +0 -3
  43. package/lib/modules/share-screen/store.electron.js +1 -1
  44. package/lib/modules/state-bar/layout-config.js +6 -0
  45. package/lib/modules/state-bar/main-scene/store.base.d.ts +2 -0
  46. package/lib/modules/state-bar/main-scene/store.base.js +6 -0
  47. package/lib/modules/video-window/index.css +6 -0
  48. package/lib/modules/video-window/popover-watcher.d.ts +4 -1
  49. package/lib/modules/video-window/popover-watcher.js +15 -2
  50. package/lib/modules/video-window/store.d.ts +18 -1
  51. package/lib/modules/video-window/store.js +55 -7
  52. package/lib/modules/whiteboard/store.js +20 -2
  53. package/lib/object-manager.d.ts +0 -1
  54. package/lib/object-manager.js +0 -1
  55. package/lib/providers/board-share/bar-control/base.d.ts +1 -1
  56. package/lib/providers/board-share/bar-control/base.js +37 -28
  57. package/lib/providers/board-share/bar-control/electron.d.ts +1 -1
  58. package/lib/providers/board-share/bar-control/electron.js +19 -16
  59. package/lib/providers/board-share/provider.browser.d.ts +3 -0
  60. package/lib/providers/board-share/provider.browser.js +21 -3
  61. package/lib/providers/device-provider.js +5 -1
  62. package/lib/providers/dialog/provider.electron.js +6 -0
  63. package/lib/providers/mouse-detect/provider.d.ts +5 -0
  64. package/lib/providers/mouse-detect/provider.js +74 -49
  65. package/lib/providers/multi-display-provider.d.ts +3 -5
  66. package/lib/providers/multi-display-provider.js +0 -9
  67. package/lib/providers/room-provider/room-provider.d.ts +3 -14
  68. package/lib/providers/room-provider/room-provider.js +5 -26
  69. package/lib/providers/screen-share/stream-state-sync.js +19 -12
  70. package/lib/providers/window/main-window.d.ts +0 -5
  71. package/lib/providers/window/main-window.js +0 -44
  72. package/lib/providers/window/renderer-window.d.ts +1 -0
  73. package/lib/providers/window/renderer-window.js +9 -1
  74. package/lib/scenes/main-scene.js +0 -2
  75. package/lib/ui-scene.js +4 -2
  76. package/package.json +5 -5
  77. package/public/index.html +22 -1
  78. package/lib/providers/board-share/bar-control.d.ts +0 -51
  79. package/lib/providers/board-share/bar-control.js +0 -390
@@ -113,7 +113,7 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
113
113
  (0, _defineProperty2["default"])(this, "_registeredWidgetConfigs", new Map([]));
114
114
  (0, _defineProperty2["default"])(this, "_released", false);
115
115
  (0, _defineProperty2["default"])(this, "_scene", null);
116
- (0, _defineProperty2["default"])(this, "_microphoneKeepRecording", false);
116
+ (0, _defineProperty2["default"])(this, "_microphoneKeepRecording", true);
117
117
  (0, _defineProperty2["default"])(this, "_sceneObserver", null);
118
118
  (0, _defineProperty2["default"])(this, "_settingModule", null);
119
119
  (0, _defineProperty2["default"])(this, "_eventToastModule", null);
@@ -183,11 +183,17 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
183
183
  type: _type.FcrUIGlobalNodeEventType.LAUNCH_SUCCESS,
184
184
  data: args
185
185
  });
186
- if ((0, _env.isElectron)()) {
187
- var windowProvider = _this._objectManager.getObject(_objectManager.FcrUIObjectKeys.P_WINDOW_PROVIDER);
188
- var mainWindow = windowProvider.getCurrentWindow();
189
- (0, _focusHelper.focusWindow)(mainWindow);
190
- }
186
+
187
+ // if (isElectron()) {
188
+ // const windowProvider = this._objectManager.getObject<FcrUIWindowProvider>(
189
+ // FcrUIObjectKeys.P_WINDOW_PROVIDER,
190
+ // );
191
+
192
+ // const mainWindow = windowProvider.getCurrentWindow();
193
+
194
+ // focusWindow(mainWindow);
195
+ // }
196
+
191
197
  onSuccess.apply(void 0, args);
192
198
  },
193
199
  onLaunchFailure: function onLaunchFailure() {
@@ -176,8 +176,6 @@ var FcrUIBrowserProviderInitializer = exports.FcrUIBrowserProviderInitializer =
176
176
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_INTERPRETER_PROVIDER, interpreterProvider);
177
177
  var currentRoomControlProvider = new _roomProvider.FcrUICurrentRoomControlProviderImpl(mainRoomControl);
178
178
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_CURRENT_ROOM_CONTROL_PROVIDER, currentRoomControlProvider);
179
- var connectionProvider = new _roomProvider.FcrUIConnectionProviderImpl(engine);
180
- objectManager.setObject(_objectManager.FcrUIObjectKeys.P_CONNECTION_PROVIDER, connectionProvider);
181
179
  var sessionProvider = new _sessionProvider.FcrUISessionProviderImpl(engine);
182
180
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SESSION_PROVIDER, sessionProvider);
183
181
  var sharedDevicePrivilegeDataSource = new _devicePrivilegeData.FcrUISharedDevicePrivilegeDataSourceImpl();
@@ -236,7 +234,6 @@ var FcrUIBrowserProviderInitializer = exports.FcrUIBrowserProviderInitializer =
236
234
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_PRIVILEGE_PROVIDER);
237
235
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_INTERPRETER_PROVIDER);
238
236
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_CURRENT_ROOM_CONTROL_PROVIDER);
239
- objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_CONNECTION_PROVIDER);
240
237
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_SESSION_PROVIDER);
241
238
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_DEVICE_STREAM_PROVIDER);
242
239
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_WAITING_ROOM_CONTROL_PROVIDER);
@@ -203,8 +203,6 @@ var FcrUIElectronProviderInitializer = exports.FcrUIElectronProviderInitializer
203
203
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_INTERPRETER_PROVIDER, interpreterProvider);
204
204
  var currentRoomControlProvider = new _roomProvider.FcrUICurrentRoomControlProviderImpl(mainRoomControl);
205
205
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_CURRENT_ROOM_CONTROL_PROVIDER, currentRoomControlProvider);
206
- var connectionProvider = new _roomProvider.FcrUIConnectionProviderImpl(engine);
207
- objectManager.setObject(_objectManager.FcrUIObjectKeys.P_CONNECTION_PROVIDER, connectionProvider);
208
206
  var sessionProvider = new _sessionProvider.FcrUISessionProviderImpl(engine);
209
207
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SESSION_PROVIDER, sessionProvider);
210
208
  var sharedDevicePrivilegeDataSource = new _devicePrivilegeData.FcrUISharedDevicePrivilegeDataSourceImpl();
@@ -256,7 +254,6 @@ var FcrUIElectronProviderInitializer = exports.FcrUIElectronProviderInitializer
256
254
  windowProvider: windowProvider,
257
255
  sharingControl: sharingControl,
258
256
  whiteboardProvider: whiteboardProvider,
259
- fcrUIMainWindowRenderer: fcrUIMainWindowRenderer,
260
257
  screenShareProvider: screenShareProvider
261
258
  });
262
259
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_MULTI_DISPLAY_PROVIDER, multiDisplayProvider);
@@ -277,7 +274,6 @@ var FcrUIElectronProviderInitializer = exports.FcrUIElectronProviderInitializer
277
274
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_PRIVILEGE_PROVIDER);
278
275
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_INTERPRETER_PROVIDER);
279
276
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_CURRENT_ROOM_CONTROL_PROVIDER);
280
- objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_CONNECTION_PROVIDER);
281
277
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_SESSION_PROVIDER);
282
278
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_DEVICE_STREAM_PROVIDER);
283
279
  objectManager.deleteObject(_objectManager.FcrUIObjectKeys.P_WAITING_ROOM_CONTROL_PROVIDER);
@@ -49,6 +49,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
49
49
  var mainWindow;
50
50
  var mainWindowReady = false;
51
51
  var userMinimize = false;
52
+ var mainWindowDisplayState = _struct.DisplayState.HIDE;
52
53
  (0, _main.initialize)();
53
54
  var port = (_process$argv$find = process.argv.find(function (arg) {
54
55
  return arg.startsWith('--port=');
@@ -103,15 +104,17 @@ ipcClient.addObserver({
103
104
  mainWindow.moveTop();
104
105
  var platform = _os["default"].platform();
105
106
  if (platform === 'win32') {
106
- // getLogger().info('windows_index setAlwaysOnTop in bootstrap-sdk');
107
- // mainWindow.setAlwaysOnTop(true, 'pop-up-menu');
107
+ (0, _logger.getLogger)().info('windows_index setAlwaysOnTop in bootstrap-sdk');
108
+ mainWindow.setAlwaysOnTop(true, 'pop-up-menu');
108
109
  setTimeout(function () {
109
- // getLogger().info('windows_index setAlwaysOnTop in bootstrap-sdk');
110
- // mainWindow.setAlwaysOnTop(false, 'pop-up-menu');
111
- mainWindow.moveTop();
112
- mainWindow.show();
113
- mainWindow.focus();
110
+ (0, _logger.getLogger)().info("windows_index set main window in bootstrap-sdk,current display state: ".concat(mainWindowDisplayState));
111
+ if (mainWindowDisplayState === _struct.DisplayState.SHOW) {
112
+ mainWindow.moveTop();
113
+ mainWindow.show();
114
+ mainWindow.focus();
115
+ }
114
116
  }, 300);
117
+ mainWindow.setAlwaysOnTop(false, 'pop-up-menu');
115
118
  }
116
119
  }
117
120
  break;
@@ -272,10 +275,12 @@ _electron.app.addListener('ready', function () {
272
275
  });
273
276
  mainWindow.addListener('minimize', function () {
274
277
  (0, _logger.getLogger)().info('windows_release main window minimized');
278
+ mainWindowDisplayState = _struct.DisplayState.MINIMIZE;
275
279
  userMinimize = true;
276
280
  });
277
281
  mainWindow.addListener('show', function () {
278
282
  (0, _logger.getLogger)().info('windows_release main window show');
283
+ mainWindowDisplayState = _struct.DisplayState.SHOW;
279
284
  mainWindow.focus();
280
285
  userMinimize = false;
281
286
  });
@@ -284,22 +289,31 @@ _electron.app.addListener('ready', function () {
284
289
  });
285
290
  mainWindow.addListener('hide', function () {
286
291
  (0, _logger.getLogger)().info("windows_release main window hidden, current launch state: ".concat(_struct.FcrUISceneLaunchState[_eventManager.eventManager.launchState]));
292
+ mainWindowDisplayState = _struct.DisplayState.HIDE;
287
293
  if (userMinimize) {
288
294
  (0, _logger.getLogger)().info('windows_release main window hidden, but user minimize, ignore this event');
289
295
  return;
290
296
  }
291
- if (_eventManager.eventManager.launchState === _struct.FcrUISceneLaunchState.END && _eventManager.eventManager.endReason === _struct.FcrUISceneLaunchEndReason.LAUNCH_SUCCESS) {
292
- (0, _logger.getLogger)().info('windows_release main window hidden, but launch state is END, send error Event');
293
- ipcClient.sendMessage({
294
- cmd: _type.IPCMessageCMD.Error,
295
- data: {
296
- roomId: _eventManager.eventManager.roomId,
297
- errorCode: _until.mainWindowHiddenOnLaunchSuccessErrorCode,
298
- message: 'main window hidden on launch success'
299
- }
300
- });
301
- return;
302
- }
297
+
298
+ // if (
299
+ // eventManager.launchState === LaunchState.END &&
300
+ // eventManager.endReason === FcrUISceneLaunchEndReason.LAUNCH_SUCCESS
301
+ // ) {
302
+ // getLogger().info(
303
+ // 'windows_release main window hidden, but launch state is END, send error Event',
304
+ // );
305
+
306
+ // ipcClient.sendMessage({
307
+ // cmd: IPCMessageCMD.Error,
308
+ // data: {
309
+ // roomId: eventManager.roomId,
310
+ // errorCode: mainWindowHiddenOnLaunchSuccessErrorCode,
311
+ // message: 'main window hidden on launch success',
312
+ // },
313
+ // });
314
+ // return;
315
+ // }
316
+
303
317
  if (_eventManager.eventManager.launchState !== _struct.FcrUISceneLaunchState.PROCESSING) {
304
318
  return;
305
319
  }
@@ -319,6 +333,7 @@ _electron.app.addListener('ready', function () {
319
333
  _electron.app.exit(_exitCodes.AppExitCode.NORMAL_EXIT);
320
334
  });
321
335
  mainWindow.addListener('close', function (e) {
336
+ mainWindowDisplayState = _struct.DisplayState.HIDE;
322
337
  var closeListenerCount = mainWindow.listenerCount('close');
323
338
  (0, _logger.getLogger)().info("windows_release main window close listener count: ".concat(closeListenerCount, ", isInMeeting: ").concat(_meetingState.isInMeeting));
324
339
  if (_meetingState.isInMeeting === 0) {
@@ -344,6 +359,14 @@ _electron.app.addListener('ready', function () {
344
359
  }, 300);
345
360
  }
346
361
  });
362
+ mainWindow.addListener('unresponsive', function () {
363
+ (0, _logger.getLogger)().warn("main window unresponsive in bootstrap-sdk");
364
+ handleUnresponsive();
365
+ });
366
+ mainWindow.addListener('responsive', function () {
367
+ (0, _logger.getLogger)().warn("main window responsive in bootstrap-sdk");
368
+ handleResponsive();
369
+ });
347
370
  if (_env.isDev) {
348
371
  mainWindow.webContents.openDevTools({
349
372
  mode: 'detach'
@@ -370,4 +393,31 @@ _electron.app.addListener('quit', function (event, exitCode) {
370
393
  (0, _logger.getLogger)().info("app quit event triggered with exit code: ".concat(exitCode));
371
394
  // 清理 EventManager 资源
372
395
  _eventManager.eventManager.dispose();
373
- });
396
+ });
397
+ var HANG_DETECTION_TIMEOUT = 60 * 1000; // 1分钟(毫s秒)
398
+ var hangDetectionTimer = null;
399
+ function handleUnresponsive() {
400
+ (0, _logger.getLogger)().warn('Window became unresponsive, starting hang detection timer');
401
+ clearHangDetectionTimer();
402
+ hangDetectionTimer = setTimeout(function () {
403
+ (0, _logger.getLogger)().error('Window has been unresponsive for 1 minute, forcing application exit');
404
+ _eventManager.eventManager.onExitedMeeting(_eventManager.eventManager.roomId, _struct.FcrUISceneLaunchEndReason.HANG_DETECTION);
405
+ ipcClient.sendMessage({
406
+ cmd: _type.IPCMessageCMD.ExitedMeeting,
407
+ data: {
408
+ roomId: _eventManager.eventManager.roomId,
409
+ reason: _until.hangDetectionErrorCode
410
+ }
411
+ });
412
+ }, HANG_DETECTION_TIMEOUT);
413
+ }
414
+ function handleResponsive() {
415
+ (0, _logger.getLogger)().info('Window became responsive again, clearing hang detection timer');
416
+ clearHangDetectionTimer();
417
+ }
418
+ function clearHangDetectionTimer() {
419
+ if (hangDetectionTimer) {
420
+ clearTimeout(hangDetectionTimer);
421
+ hangDetectionTimer = null;
422
+ }
423
+ }
@@ -8,5 +8,11 @@ export declare enum FcrUISceneLaunchEndReason {
8
8
  LAUNCH_FAILURE = "launchFailure",
9
9
  CLOSE_WINDOW = "closeWindow",
10
10
  EXITED = "exited",
11
- CRASHED = "crashed"
11
+ CRASHED = "crashed",
12
+ HANG_DETECTION = "hangDetection"
13
+ }
14
+ export declare enum DisplayState {
15
+ SHOW = "show",
16
+ HIDE = "hide",
17
+ MINIMIZE = "minimize"
12
18
  }
@@ -4,7 +4,7 @@ require("core-js/modules/es.object.define-property.js");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.FcrUISceneLaunchState = exports.FcrUISceneLaunchEndReason = void 0;
7
+ exports.FcrUISceneLaunchState = exports.FcrUISceneLaunchEndReason = exports.DisplayState = void 0;
8
8
  var FcrUISceneLaunchState = exports.FcrUISceneLaunchState = /*#__PURE__*/function (FcrUISceneLaunchState) {
9
9
  FcrUISceneLaunchState[FcrUISceneLaunchState["DEFAULT"] = 0] = "DEFAULT";
10
10
  FcrUISceneLaunchState[FcrUISceneLaunchState["PROCESSING"] = 1] = "PROCESSING";
@@ -17,5 +17,12 @@ var FcrUISceneLaunchEndReason = exports.FcrUISceneLaunchEndReason = /*#__PURE__*
17
17
  FcrUISceneLaunchEndReason["CLOSE_WINDOW"] = "closeWindow";
18
18
  FcrUISceneLaunchEndReason["EXITED"] = "exited";
19
19
  FcrUISceneLaunchEndReason["CRASHED"] = "crashed";
20
+ FcrUISceneLaunchEndReason["HANG_DETECTION"] = "hangDetection";
20
21
  return FcrUISceneLaunchEndReason;
22
+ }({});
23
+ var DisplayState = exports.DisplayState = /*#__PURE__*/function (DisplayState) {
24
+ DisplayState["SHOW"] = "show";
25
+ DisplayState["HIDE"] = "hide";
26
+ DisplayState["MINIMIZE"] = "minimize";
27
+ return DisplayState;
21
28
  }({});
@@ -21,7 +21,8 @@ declare enum DetailErrorCode {
21
21
  closeWindowBeforeLaunchSuccess = 83,
22
22
  meetingLaunchProcessing = 84,
23
23
  mainWindowHiddenAfterLaunchSuccess = 85,
24
- crashed = 86
24
+ crashed = 86,
25
+ hangDetection = 87
25
26
  }
26
27
  export declare const generaErrorCode: (serviceCode: ServiceErrorCode, uiSceneCode: UISceneErrorCode, detailCode: DetailErrorCode) => number;
27
28
  export declare const windowHideErrorCode: number;
@@ -29,4 +30,5 @@ export declare const closeWindowBeforeLaunchSuccessErrorCode: number;
29
30
  export declare const meetingLaunchProcessingErrorCode: number;
30
31
  export declare const mainWindowHiddenOnLaunchSuccessErrorCode: number;
31
32
  export declare const crashedErrorCode: number;
33
+ export declare const hangDetectionErrorCode: number;
32
34
  export {};
@@ -4,7 +4,7 @@ require("core-js/modules/es.object.define-property.js");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.windowHideErrorCode = exports.meetingLaunchProcessingErrorCode = exports.mainWindowHiddenOnLaunchSuccessErrorCode = exports.generaErrorCode = exports.crashedErrorCode = exports.closeWindowBeforeLaunchSuccessErrorCode = void 0;
7
+ exports.windowHideErrorCode = exports.meetingLaunchProcessingErrorCode = exports.mainWindowHiddenOnLaunchSuccessErrorCode = exports.hangDetectionErrorCode = exports.generaErrorCode = exports.crashedErrorCode = exports.closeWindowBeforeLaunchSuccessErrorCode = void 0;
8
8
  // 错误代码枚举定义
9
9
  var ServiceErrorCode = /*#__PURE__*/function (ServiceErrorCode) {
10
10
  ServiceErrorCode[ServiceErrorCode["FcrUIScene"] = 800] = "FcrUIScene";
@@ -44,8 +44,12 @@ var DetailErrorCode = /*#__PURE__*/function (DetailErrorCode) {
44
44
  DetailErrorCode[DetailErrorCode["closeWindowBeforeLaunchSuccess"] = 83] = "closeWindowBeforeLaunchSuccess";
45
45
  // 会议启动中
46
46
  DetailErrorCode[DetailErrorCode["meetingLaunchProcessing"] = 84] = "meetingLaunchProcessing";
47
+ // 窗口在会议启动后隐藏
47
48
  DetailErrorCode[DetailErrorCode["mainWindowHiddenAfterLaunchSuccess"] = 85] = "mainWindowHiddenAfterLaunchSuccess";
49
+ // 窗口崩溃
48
50
  DetailErrorCode[DetailErrorCode["crashed"] = 86] = "crashed";
51
+ // 窗口无响应
52
+ DetailErrorCode[DetailErrorCode["hangDetection"] = 87] = "hangDetection";
49
53
  return DetailErrorCode;
50
54
  }(DetailErrorCode || {}); // 格式:ServiceErrorCode(3位) + UISceneErrorCode(3位) + DetailErrorCode(3位)
51
55
  var generaErrorCode = exports.generaErrorCode = function generaErrorCode(serviceCode, uiSceneCode, detailCode) {
@@ -55,4 +59,5 @@ var windowHideErrorCode = exports.windowHideErrorCode = generaErrorCode(ServiceE
55
59
  var closeWindowBeforeLaunchSuccessErrorCode = exports.closeWindowBeforeLaunchSuccessErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.closeWindowBeforeLaunchSuccess);
56
60
  var meetingLaunchProcessingErrorCode = exports.meetingLaunchProcessingErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.meetingLaunchProcessing);
57
61
  var mainWindowHiddenOnLaunchSuccessErrorCode = exports.mainWindowHiddenOnLaunchSuccessErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.mainWindowHiddenAfterLaunchSuccess);
58
- var crashedErrorCode = exports.crashedErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.crashed);
62
+ var crashedErrorCode = exports.crashedErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.crashed);
63
+ var hangDetectionErrorCode = exports.hangDetectionErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.hangDetection);
@@ -108,6 +108,7 @@ var ActionBarItem = exports.ActionBarItem = function ActionBarItem(props) {
108
108
  }), props.submenu && /*#__PURE__*/(0, _jsxRuntime.jsx)(_popover.FcrPopover, {
109
109
  showArrow: false,
110
110
  overlayClassName: "fcr-action-bar--popover",
111
+ visible: props.submenu.active,
111
112
  onVisibleChange: props.submenu.onVisibleChange,
112
113
  trigger: "click",
113
114
  content: props.submenu.children,
@@ -165,8 +165,8 @@ var SubMenu = exports.SubMenu = (0, _mobxReact.observer)(function (_ref) {
165
165
  key: 'enable_whiteboard',
166
166
  classNames: 'fcr-drop-menu-option-primary-no-hover',
167
167
  onButtonClick: function onButtonClick() {
168
- // TODO: 主持人停用别人的共享后,应该把菜单关闭或者是更新菜单项
169
168
  closeWhiteboard();
169
+ setMenuVisible(false);
170
170
  }
171
171
  }];
172
172
  var shareScreenControlMenus = [{
@@ -108,6 +108,10 @@
108
108
  width: 100%;
109
109
  }
110
110
 
111
- .fcr-chat-container-box {
111
+ .fcr-chat-container-box-web {
112
+ height: 100%;
113
+ }
114
+
115
+ .fcr-chat-container-box-electron {
112
116
  height: calc(100% - 46px);
113
117
  }
@@ -50,6 +50,8 @@ var _fcrCore = require("fcr-core");
50
50
  var _types = require("./types");
51
51
  var _chatTabs = _interopRequireDefault(require("./components/chat-tabs"));
52
52
  var _browserApi = require("../../utilities/browser-api");
53
+ var _classnames = _interopRequireDefault(require("classnames"));
54
+ var _env = require("agora-foundation/lib/utilities/env");
53
55
  var _jsxRuntime = require("react/jsx-runtime");
54
56
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
55
57
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -195,7 +197,10 @@ var Chat = exports.Chat = (0, _mobxReact.observer)(function (_ref) {
195
197
  });
196
198
  };
197
199
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
198
- className: "fcr-chat-container-box",
200
+ className: (0, _classnames["default"])({
201
+ 'fcr-chat-container-box-web': !(0, _env.isElectron)(),
202
+ 'fcr-chat-container-box-electron': (0, _env.isElectron)()
203
+ }),
199
204
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_chatTabs["default"], {}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
200
205
  style: _objectSpread({}, styles),
201
206
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_chatWrapper.ChatWrapper, {
@@ -11,6 +11,8 @@
11
11
  .fcr-whiteboard-switch-theme-popover {
12
12
  max-width: 100%;
13
13
  width: 100%;
14
+ z-index: 1;
15
+ padding: 0;
14
16
  }
15
17
  .fcr-whiteboard-switch-theme-popover .fcr-tooltip-inner {
16
18
  border-radius: 0 !important;
@@ -38,13 +38,11 @@ var WhiteboardSwitchTheme = function WhiteboardSwitchTheme(props) {
38
38
  width: '100%'
39
39
  },
40
40
  overlayOffset: 4,
41
- showArrow: false
42
- // getTooltipContainer={() => {
43
- // const target = document.getElementById('fcr-whiteboard-controlbar') as HTMLElement;
44
- // console.log({ target });
45
- // return target;
46
- // }}
47
- ,
41
+ showArrow: false,
42
+ getTooltipContainer: function getTooltipContainer() {
43
+ var target = document.getElementById('fcr-whiteboard-controlbar');
44
+ return target;
45
+ },
48
46
  visible: whiteboardVisible,
49
47
  content: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
50
48
  className: "fcr-whiteboard-switch-theme",
@@ -90,6 +90,10 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
90
90
  setContianHeight(height);
91
91
  }, []);
92
92
  var resetHeightDebounce = (0, _react.useCallback)((0, _debounce["default"])(resetHeight, 100), []);
93
+ var ratio = (0, _react.useMemo)(function () {
94
+ var ratio = contianHeight / initHeight;
95
+ return ratio;
96
+ }, [contianHeight, initHeight]);
93
97
  (0, _react.useEffect)(function () {
94
98
  window.addEventListener('resize', resetHeightDebounce);
95
99
  return function () {
@@ -117,16 +121,18 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
117
121
  setIsMaxmum(false);
118
122
  setIsAdaptived(false);
119
123
  setIsOriginal(false);
120
- var step = 3;
124
+ var max = 3;
125
+ var step = 0.5;
121
126
  if (oprate === _type2.WhiteboardControlbarEvents.ZOOMIN) {
122
127
  if (onZoomIn) {
123
128
  var result = onZoomIn();
124
129
  setIsMaxmum(!result);
125
130
  return;
126
131
  }
127
- if (scaleValue < step) {
132
+ if (scaleValue < max) {
128
133
  setIsMaxmum(false);
129
- setScaleValue(scaleValue + 1);
134
+ var zoomIn = scaleValue + step;
135
+ setScaleValue(zoomIn);
130
136
  } else {
131
137
  setIsMaxmum(true);
132
138
  }
@@ -138,7 +144,9 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
138
144
  return;
139
145
  }
140
146
  if (scaleValue > 1) {
141
- setScaleValue(scaleValue - 1);
147
+ var zoomOut = scaleValue - step;
148
+ var diff = zoomOut % step;
149
+ setScaleValue(diff === 0 ? zoomOut : zoomOut - diff);
142
150
  } else {
143
151
  setIsMinimum(true);
144
152
  }
@@ -149,8 +157,11 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
149
157
  setIsOriginal(!_result2);
150
158
  return;
151
159
  }
160
+ // 如果容器高和画布原始高度的比值小于1,代表画布原始高比容器大,则设置放大倍率用 1 + 比率
161
+ // 如果容器高和画布原始告诉的比值大于1,代表容器比画布原始高度大,则设置放大倍率为原始高度和容器高度的比率
162
+ var origin = ratio < 1 ? 1 + ratio : initHeight / contianHeight;
152
163
  setIsOriginal(true);
153
- setScaleValue(1);
164
+ setScaleValue(origin);
154
165
  }
155
166
  if (oprate === _type2.WhiteboardControlbarEvents.ADAPTIVE) {
156
167
  if (onAdaptive) {
@@ -159,15 +170,23 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
159
170
  return;
160
171
  }
161
172
  setIsAdaptived(true);
162
- setScaleValue(2);
173
+ setScaleValue(1);
163
174
  }
164
175
  }
165
176
  var width = (0, _react.useMemo)(function () {
177
+ if (scaleValue === ratio) return initWidth;
166
178
  return initWidth * (contianHeight / initHeight) * scaleValue;
167
179
  }, [contianHeight, scaleValue]);
168
180
  var height = (0, _react.useMemo)(function () {
181
+ if (scaleValue === ratio) return initHeight;
169
182
  return initHeight * (contianHeight / initHeight) * scaleValue;
170
183
  }, [contianHeight, scaleValue]);
184
+ var top = (0, _react.useMemo)(function () {
185
+ if (contianHeight > height) return (contianHeight - height) / 2;
186
+ if (height === contianHeight) return 0;
187
+ if (scaleValue === 1) return 0;
188
+ return "-".concat((height - contianHeight) / 2, "px");
189
+ }, [height, contianHeight, scaleValue]);
171
190
  var preventAction = (0, _react.useMemo)(function () {
172
191
  var prevent = true;
173
192
 
@@ -334,7 +353,7 @@ var WhiteboardControlbar = exports.WhiteboardControlbar = function WhiteboardCon
334
353
  position: 'absolute',
335
354
  left: "-".concat(width / 2, "px"),
336
355
  marginLeft: '50%',
337
- top: "-".concat(height === contianHeight ? 0 : (height - contianHeight) / 2, "px")
356
+ top: top
338
357
  },
339
358
  children: [onBoardDomLoaded && preventAction && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
340
359
  className: "whiteboard-action-prevent"
@@ -1,6 +1,5 @@
1
1
  import { ToolTipProps } from 'agora-ui-foundation/lib/components/tooltip';
2
2
  export declare const AnnotationCaptureTool: (props: {
3
- popoverVisible?: boolean;
4
3
  placement: ToolTipProps["placement"];
5
4
  size?: number;
6
5
  hideTitle?: boolean;
@@ -17,7 +17,6 @@ var AnnotationCaptureTool = exports.AnnotationCaptureTool = function AnnotationC
17
17
  var t = (0, _i18n.useI18n)();
18
18
  var size = props.size,
19
19
  hideTitle = props.hideTitle,
20
- popoverVisible = props.popoverVisible,
21
20
  placement = props.placement,
22
21
  direction = props.direction,
23
22
  setPopoverVisible = props.setPopoverVisible,
@@ -43,7 +42,7 @@ var AnnotationCaptureTool = exports.AnnotationCaptureTool = function AnnotationC
43
42
  iconType: _type.FcrIconType.FCR_WHITEBOARD_SLICE,
44
43
  title: t('fmt_screenshare_whiteboard_button_cutting'),
45
44
  lineColor: "transparent",
46
- visible: visible && popoverVisible,
45
+ visible: visible,
47
46
  onVisibleChange: handleVisibleChange,
48
47
  showArrow: true,
49
48
  content: /*#__PURE__*/(0, _jsxRuntime.jsx)(_panel.AnnotationToolPanel, {
@@ -126,7 +126,7 @@ function VerticalBar(props) {
126
126
  api.start(_position);
127
127
  }
128
128
  }, []);
129
- var handleRefMount = function handleRefMount(dom) {
129
+ var handleRefMount = (0, _react2.useCallback)(function (dom) {
130
130
  if (dom) {
131
131
  var top = dom.getBoundingClientRect().top;
132
132
  if (topTemp !== top) {
@@ -135,7 +135,7 @@ function VerticalBar(props) {
135
135
  toolbarDom.current = dom;
136
136
  }
137
137
  }
138
- };
138
+ }, []);
139
139
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
140
140
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
141
141
  onClick: function onClick() {
@@ -6,62 +6,63 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.useResizeVisible = void 0;
9
- require("core-js/modules/web.timers.js");
10
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
10
  var _react = require("react");
12
11
  var _item = require("../components/item");
13
- var _constants = require("../../../action-bar/constants");
12
+ var _lodash = require("lodash");
14
13
  var useResizeVisible = exports.useResizeVisible = function useResizeVisible() {
15
- var toolbar = (0, _react.useRef)();
16
- var _useState = (0, _react.useState)(0),
14
+ var _useState = (0, _react.useState)(-1),
17
15
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
18
- threshold = _useState2[0],
19
- setThreshold = _useState2[1];
20
- var _useState3 = (0, _react.useState)(-1),
21
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
22
- coverCount = _useState4[0],
23
- setCoverCount = _useState4[1];
24
- var _useState5 = (0, _react.useState)(0),
25
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
26
- itemHeight = _useState6[0],
27
- setItemHeight = _useState6[1];
28
- var actionbar = document.querySelector(".".concat(_constants.actionBarClassName));
29
- var actionBarHeight = (actionbar === null || actionbar === void 0 ? void 0 : actionbar.getBoundingClientRect().height) || 0;
16
+ coverCount = _useState2[0],
17
+ setCoverCount = _useState2[1];
30
18
  var bottomHeight = 20;
31
- var timer = (0, _react.useRef)(null);
19
+ var toolbarRef = (0, _react.useRef)();
20
+ var containerRef = (0, _react.useRef)(null);
21
+ var thresholdRef = (0, _react.useRef)(0);
22
+ var itemHeightRef = (0, _react.useRef)(0);
32
23
  var handleResize = (0, _react.useCallback)(function () {
33
- var _document$documentEle = document.documentElement.getBoundingClientRect(),
34
- height = _document$documentEle.height;
35
- var coverSize = threshold - height;
36
- var coverCount = Math.floor(coverSize / itemHeight);
37
- setCoverCount(coverCount);
38
- }, [threshold]);
24
+ var container = containerRef.current;
25
+ var _ref = (container === null || container === void 0 ? void 0 : container.getBoundingClientRect()) || document.documentElement.getBoundingClientRect(),
26
+ height = _ref.height;
27
+ var threshold = thresholdRef.current;
28
+ var itemHeight = itemHeightRef.current;
29
+ var coverSize = 0;
30
+ var coverCountTemp = -1;
31
+ coverSize = threshold - height;
32
+ coverCountTemp = Math.round(coverSize / itemHeight);
33
+ setCoverCount(coverCountTemp);
34
+ }, []);
35
+ (0, _react.useEffect)(function () {
36
+ handleResize();
37
+ }, []);
38
+ var handleResizeDebounce = (0, _react.useCallback)((0, _lodash.debounce)(handleResize, 200), []);
39
39
  (0, _react.useEffect)(function () {
40
- window.addEventListener('resize', handleResize);
41
- window.addEventListener('animationend', handleResize);
42
- if (timer.current) {
43
- window.clearTimeout(timer.current);
40
+ var container = containerRef.current;
41
+ if (container) {
42
+ container.addEventListener('transitionend', handleResizeDebounce);
44
43
  }
45
- timer.current = window.setTimeout(handleResize);
46
44
  return function () {
47
- window.removeEventListener('resize', handleResize);
48
- window.removeEventListener('animationend', handleResize);
49
- if (timer.current) {
50
- window.clearTimeout(timer.current);
45
+ if (container) {
46
+ container.removeEventListener('transitionend', handleResizeDebounce);
51
47
  }
52
48
  };
53
- }, [threshold]);
49
+ }, []);
50
+ var reCalcThreshold = (0, _react.useCallback)(function () {
51
+ var toolbar = toolbarRef.current;
52
+ if (toolbar) {
53
+ var _toolbar$getBoundingC = toolbar.getBoundingClientRect(),
54
+ height = _toolbar$getBoundingC.height;
55
+ var items = toolbar.querySelectorAll(".".concat(_item.toolBarItemClassName));
56
+ itemHeightRef.current = items[0].getBoundingClientRect().height;
57
+ var threshold = height + bottomHeight;
58
+ thresholdRef.current = threshold;
59
+ }
60
+ }, []);
54
61
  var setToolbarDom = (0, _react.useCallback)(function (dom) {
55
62
  if (dom) {
56
- var _items$;
57
- toolbar.current = dom;
58
- var _dom$getBoundingClien = dom.getBoundingClientRect(),
59
- top = _dom$getBoundingClien.top,
60
- height = _dom$getBoundingClien.height;
61
- var items = dom.querySelectorAll(".".concat(_item.toolBarItemClassName));
62
- setItemHeight((_items$ = items[0]) === null || _items$ === void 0 ? void 0 : _items$.getBoundingClientRect().height);
63
- var _threshold = height + top + actionBarHeight + bottomHeight;
64
- setThreshold(_threshold);
63
+ toolbarRef.current = dom;
64
+ containerRef.current = document.querySelector('.fcr-whiteboard-controlbar-body-content');
65
+ reCalcThreshold();
65
66
  }
66
67
  }, []);
67
68
  return {