fcr-ui-scene 3.1.1 → 3.3.0
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.
- package/installer/icons/favicon.ico +0 -0
- package/installer/icons/favicon.png +0 -0
- package/installer/mac/entitlements.mac.plist +16 -0
- package/lib/base.d.ts +0 -1
- package/lib/base.js +16 -0
- package/lib/common/device-store.d.ts +4 -5
- package/lib/common/device-store.js +178 -86
- package/lib/common/device-stream-store.d.ts +3 -2
- package/lib/common/device-stream-store.js +94 -72
- package/lib/common/event-store.d.ts +20 -3
- package/lib/common/event-store.js +43 -5
- package/lib/common/security-store.d.ts +16 -16
- package/lib/common/security-store.js +278 -124
- package/lib/electron/app.js +13 -5
- package/lib/electron/bootstrap-dev.d.ts +1 -0
- package/lib/electron/bootstrap-dev.js +51 -0
- package/lib/electron/bootstrap-sdk.d.ts +1 -0
- package/lib/electron/bootstrap-sdk.js +56 -0
- package/lib/electron/bootstrap.d.ts +1 -0
- package/lib/electron/bootstrap.js +56 -0
- package/lib/electron/default-options.js +1 -1
- package/lib/electron/dev.d.ts +1 -0
- package/lib/electron/dev.js +51 -0
- package/lib/electron/injections.d.ts +3 -4
- package/lib/electron/injections.js +46 -33
- package/lib/electron/logger.d.ts +6 -0
- package/lib/electron/logger.js +66 -0
- package/lib/electron/main.js +15 -11
- package/lib/electron/plugins/meeting-state.d.ts +2 -0
- package/lib/electron/plugins/meeting-state.js +39 -0
- package/lib/electron/preload.js +2 -1
- package/lib/electron/tools.js +9 -0
- package/lib/electron/window.d.ts +1 -1
- package/lib/electron/window.js +14 -2
- package/lib/fragments/control-bar/context.d.ts +0 -1
- package/lib/fragments/control-bar/control-bar-store.d.ts +34 -1
- package/lib/fragments/control-bar/control-bar-store.js +394 -81
- package/lib/fragments/control-bar/device/index.js +12 -3
- package/lib/fragments/control-bar/index.css +15 -10
- package/lib/fragments/control-bar/index.js +19 -1
- package/lib/fragments/control-bar/meeting-details/meeting-detail.css +109 -0
- package/lib/fragments/control-bar/meeting-details/meeting-details-portal.d.ts +3 -0
- package/lib/fragments/control-bar/meeting-details/meeting-details-portal.js +60 -0
- package/lib/fragments/control-bar/meeting-details/meeting-details.d.ts +2 -0
- package/lib/fragments/control-bar/meeting-details/meeting-details.js +179 -0
- package/lib/fragments/control-bar/more-actions/index.css +53 -0
- package/lib/fragments/control-bar/more-actions/index.js +77 -37
- package/lib/fragments/control-bar/security-content/index.css +10 -0
- package/lib/fragments/control-bar/security-content/index.js +43 -18
- package/lib/fragments/control-bar/view.js +8 -2
- package/lib/fragments/live-streaming/context.d.ts +0 -1
- package/lib/fragments/live-streaming/store.js +27 -17
- package/lib/fragments/share-screen-selection/context.d.ts +0 -1
- package/lib/fragments/share-screen-selection/selection-store.d.ts +0 -1
- package/lib/fragments/share-screen-selection/selection-store.js +34 -33
- package/lib/fragments/share-screen-selection/view.js +7 -0
- package/lib/fragments/toolbar/components/color-picker/components/color.js +2 -0
- package/lib/fragments/toolbar/components/color-picker/components/panel.js +4 -0
- package/lib/fragments/toolbar/components/color-picker/components/picker.js +2 -0
- package/lib/fragments/toolbar/components/color-picker/index.js +5 -1
- package/lib/fragments/toolbar/components/color-picker.js +3 -1
- package/lib/fragments/toolbar/components/eraser-picker.js +4 -13
- package/lib/fragments/toolbar/components/extension-toolbar-item.js +5 -0
- package/lib/fragments/toolbar/components/extra-tool-picker.js +4 -0
- package/lib/fragments/toolbar/components/pen-picker.js +2 -0
- package/lib/fragments/toolbar/components/screen-capture-picker.js +2 -0
- package/lib/fragments/toolbar/components/shape-picker.js +2 -0
- package/lib/fragments/toolbar/hooks.d.ts +1 -1
- package/lib/fragments/toolbar/hooks.js +13 -8
- package/lib/fragments/toolbar/store.d.ts +4 -4
- package/lib/fragments/toolbar/store.js +20 -2
- package/lib/fragments/toolbar/view.js +2 -0
- package/lib/global.d.ts +1 -0
- package/lib/hooks/meeting-time.d.ts +2 -2
- package/lib/login-confirm-dialog.d.ts +12 -0
- package/lib/login-confirm-dialog.js +80 -0
- package/lib/modules/action-bar/action-bar-collapes-items.js +14 -5
- package/lib/modules/action-bar/chat/index.js +6 -6
- package/lib/modules/action-bar/context.d.ts +0 -1
- package/lib/modules/action-bar/device/index.css +7 -2
- package/lib/modules/action-bar/device/index.d.ts +2 -2
- package/lib/modules/action-bar/device/index.js +6 -4
- package/lib/modules/action-bar/index.css +63 -12
- package/lib/modules/action-bar/index.d.ts +3 -2
- package/lib/modules/action-bar/index.dev.js +8 -7
- package/lib/modules/action-bar/index.js +21 -0
- package/lib/modules/action-bar/item-placement.d.ts +1 -2
- package/lib/modules/action-bar/item.js +5 -0
- package/lib/modules/action-bar/leave/assign-host.d.ts +3 -1
- package/lib/modules/action-bar/leave/assign-host.js +7 -7
- package/lib/modules/action-bar/leave/index.js +35 -7
- package/lib/modules/action-bar/leave/leave-meeting.d.ts +11 -1
- package/lib/modules/action-bar/leave/leave-meeting.js +25 -16
- package/lib/modules/action-bar/more/poppover-content.d.ts +0 -1
- package/lib/modules/action-bar/more/poppover-content.js +14 -4
- package/lib/modules/action-bar/participants/index.css +12 -0
- package/lib/modules/action-bar/participants/index.js +21 -14
- package/lib/modules/action-bar/screen-share/index.js +5 -1
- package/lib/modules/action-bar/screen-share/submenu.js +17 -22
- package/lib/modules/action-bar/security/drop-menu.js +124 -14
- package/lib/modules/action-bar/security/index.js +1 -1
- package/lib/modules/action-bar/settings/index.js +1 -1
- package/lib/modules/action-bar/store.d.ts +45 -21
- package/lib/modules/action-bar/store.js +544 -134
- package/lib/modules/action-bar/view.js +65 -42
- package/lib/modules/audio-stream/index.js +12 -6
- package/lib/modules/chat/chat-bar/index.js +46 -27
- package/lib/modules/chat/chat-select/index.css +19 -4
- package/lib/modules/chat/chat-select/index.d.ts +0 -1
- package/lib/modules/chat/chat-select/index.js +29 -3
- package/lib/modules/chat/chat.d.ts +2 -3
- package/lib/modules/chat/chat.js +210 -107
- package/lib/modules/chat/contex.d.ts +0 -1
- package/lib/modules/chat/demo-wrapper.d.ts +0 -1
- package/lib/modules/chat/index.css +49 -0
- package/lib/modules/chat/index.d.ts +3 -3
- package/lib/modules/chat/index.dev.js +4 -4
- package/lib/modules/chat/index.js +32 -11
- package/lib/modules/chat/message-list.js +81 -49
- package/lib/modules/chat/store.d.ts +50 -4
- package/lib/modules/chat/store.js +303 -124
- package/lib/modules/chat/util.js +1 -1
- package/lib/modules/connection-gateway/components/phone/components/callinfo/index.js +2 -0
- package/lib/modules/connection-gateway/components/phone/index.js +2 -0
- package/lib/modules/connection-gateway/index.d.ts +3 -2
- package/lib/modules/connection-gateway/index.js +2 -0
- package/lib/modules/connection-gateway/store.d.ts +6 -4
- package/lib/modules/connection-gateway/store.js +46 -15
- package/lib/modules/device-pretest/audio-preview/microphone-detection.d.ts +1 -0
- package/lib/modules/device-pretest/audio-preview/microphone-detection.js +3 -2
- package/lib/modules/device-pretest/audio-preview/speaker-control.d.ts +0 -1
- package/lib/modules/device-pretest/audio-preview/speaker-control.js +1 -1
- package/lib/modules/device-pretest/context.d.ts +0 -1
- package/lib/modules/device-pretest/index.css +0 -4
- package/lib/modules/device-pretest/index.d.ts +0 -1
- package/lib/modules/device-pretest/index.js +2 -1
- package/lib/modules/device-pretest/settings/beauty.js +19 -6
- package/lib/modules/device-pretest/settings/video-effect.d.ts +0 -1
- package/lib/modules/device-pretest/settings/video-settings-basic.js +1 -0
- package/lib/modules/device-pretest/settings/virtual-background-setting.js +2 -0
- package/lib/modules/device-pretest/store.js +34 -19
- package/lib/modules/dialog/components/chat/electron.js +3 -2
- package/lib/modules/dialog/components/chat/index.js +1 -1
- package/lib/modules/dialog/components/confirm/electron.js +7 -5
- package/lib/modules/dialog/components/confirm/index.js +16 -2
- package/lib/modules/dialog/components/connection-gateway/electron.js +4 -2
- package/lib/modules/dialog/components/connection-gateway/index.css +0 -2
- package/lib/modules/dialog/components/device-setting/electron.d.ts +2 -0
- package/lib/modules/dialog/components/device-setting/electron.js +74 -0
- package/lib/modules/dialog/components/device-setting/index.css +26 -0
- package/lib/modules/dialog/components/device-setting/index.d.ts +4 -0
- package/lib/modules/dialog/components/device-setting/index.js +60 -0
- package/lib/modules/dialog/components/operation-waiting-room/electron.d.ts +5 -0
- package/lib/modules/dialog/components/operation-waiting-room/electron.js +89 -0
- package/lib/modules/dialog/components/operation-waiting-room/index.css +44 -0
- package/lib/modules/dialog/components/operation-waiting-room/index.d.ts +5 -0
- package/lib/modules/dialog/components/operation-waiting-room/index.js +156 -0
- package/lib/modules/dialog/components/participant/electron.js +8 -2
- package/lib/modules/dialog/components/remove-admit-waiting-room/electron.d.ts +5 -0
- package/lib/modules/dialog/components/remove-admit-waiting-room/electron.js +89 -0
- package/lib/modules/dialog/components/remove-admit-waiting-room/index.css +50 -0
- package/lib/modules/dialog/components/remove-admit-waiting-room/index.d.ts +5 -0
- package/lib/modules/dialog/components/remove-admit-waiting-room/index.js +90 -0
- package/lib/modules/dialog/components/share-screen-selection/index.js +1 -1
- package/lib/modules/dialog/components/whiteboard/index.js +2 -1
- package/lib/modules/dialog/context.d.ts +0 -1
- package/lib/modules/dialog/dialogs.d.ts +0 -2
- package/lib/modules/dialog/dialogs.js +62 -103
- package/lib/modules/dialog/index.css +7 -6
- package/lib/modules/dialog/index.d.ts +1 -1
- package/lib/modules/dialog/index.js +17 -0
- package/lib/modules/dialog/store.d.ts +6 -2
- package/lib/modules/dialog/store.js +52 -9
- package/lib/modules/dialog/view.js +2 -0
- package/lib/modules/event-notification/context.d.ts +2 -0
- package/lib/modules/event-notification/context.js +9 -0
- package/lib/modules/event-notification/index.css +58 -0
- package/lib/modules/event-notification/index.d.ts +13 -0
- package/lib/modules/event-notification/index.js +48 -0
- package/lib/modules/event-notification/store.d.ts +17 -0
- package/lib/modules/event-notification/store.js +133 -0
- package/lib/modules/event-notification/view.d.ts +5 -0
- package/lib/modules/event-notification/view.js +114 -0
- package/lib/modules/event-toast/context.d.ts +0 -1
- package/lib/modules/event-toast/store.js +16 -0
- package/lib/modules/invite/context.d.ts +0 -1
- package/lib/modules/invite/index.css +4 -4
- package/lib/modules/invite/index.d.ts +2 -2
- package/lib/modules/invite/pstn-invite.js +4 -1
- package/lib/modules/invite/store.d.ts +2 -2
- package/lib/modules/invite/store.js +27 -7
- package/lib/modules/invite/voip-invite.d.ts +0 -1
- package/lib/modules/invite/voip-invite.js +1 -1
- package/lib/modules/layout/components/Aside.d.ts +0 -1
- package/lib/modules/layout/components/Aside.js +4 -1
- package/lib/modules/layout/components/Carousel.js +6 -5
- package/lib/modules/layout/components/Gallery.js +16 -9
- package/lib/modules/layout/components/Layout.js +82 -57
- package/lib/modules/layout/components/index.css +42 -5
- package/lib/modules/layout/components/index.js +3 -0
- package/lib/modules/layout/context.d.ts +0 -1
- package/lib/modules/layout/index.css +30 -0
- package/lib/modules/layout/index.dev.js +11 -11
- package/lib/modules/layout/index.js +0 -6
- package/lib/modules/layout/member-window/index.css +5 -5
- package/lib/modules/layout/member-window/index.d.ts +7 -7
- package/lib/modules/layout/member-window/index.js +59 -13
- package/lib/modules/layout/store.d.ts +61 -50
- package/lib/modules/layout/store.js +517 -342
- package/lib/modules/layout/type.d.ts +2 -1
- package/lib/modules/layout/video-window-datasource.d.ts +14 -8
- package/lib/modules/layout/video-window-datasource.js +129 -78
- package/lib/modules/live-streaming/context.d.ts +0 -1
- package/lib/modules/live-streaming/index.d.ts +2 -2
- package/lib/modules/live-streaming/index.dev.js +5 -4
- package/lib/modules/live-streaming/store.d.ts +2 -2
- package/lib/modules/live-streaming/store.js +32 -11
- package/lib/modules/participant/attendee/index.d.ts +12 -3
- package/lib/modules/participant/attendee/index.js +142 -30
- package/lib/modules/participant/context.d.ts +0 -1
- package/lib/modules/participant/index.css +20 -0
- package/lib/modules/participant/index.d.ts +5 -2
- package/lib/modules/participant/index.dev.js +14 -12
- package/lib/modules/participant/index.js +27 -0
- package/lib/modules/participant/member-list-data-source.d.ts +3 -3
- package/lib/modules/participant/member-list-data-source.js +29 -3
- package/lib/modules/participant/room-control-drop-menu/index.css +37 -0
- package/lib/modules/participant/room-control-drop-menu/index.js +35 -1
- package/lib/modules/participant/store.d.ts +59 -34
- package/lib/modules/participant/store.js +541 -222
- package/lib/modules/participant/view.d.ts +6 -6
- package/lib/modules/participant/view.js +138 -34
- package/lib/modules/setting/audio-settings/audio-settings.js +16 -12
- package/lib/modules/setting/audio-settings/index.css +2 -2
- package/lib/modules/setting/context.d.ts +0 -1
- package/lib/modules/setting/general-settings/general-settings.js +2 -1
- package/lib/modules/setting/general-settings/index.css +2 -2
- package/lib/modules/setting/index.css +1 -5
- package/lib/modules/setting/index.d.ts +2 -2
- package/lib/modules/setting/index.dev.js +14 -12
- package/lib/modules/setting/index.js +16 -0
- package/lib/modules/setting/minutes-settings/index.css +65 -0
- package/lib/modules/setting/minutes-settings/minutes-settings.d.ts +4 -0
- package/lib/modules/setting/minutes-settings/minutes-settings.js +159 -0
- package/lib/modules/setting/state/index.css +0 -4
- package/lib/modules/setting/state/index.js +11 -1
- package/lib/modules/setting/storage-settings/storage-settings.js +1 -1
- package/lib/modules/setting/store.d.ts +7 -5
- package/lib/modules/setting/store.js +69 -46
- package/lib/modules/setting/translate-settings/index.css +45 -0
- package/lib/modules/setting/translate-settings/language-select.d.ts +12 -0
- package/lib/modules/setting/translate-settings/language-select.js +50 -0
- package/lib/modules/setting/translate-settings/translate-settings.d.ts +4 -0
- package/lib/modules/setting/translate-settings/translate-settings.js +139 -0
- package/lib/modules/setting/video-settings/index.css +15 -6
- package/lib/modules/setting/video-settings/video-settings-basic.js +3 -2
- package/lib/modules/setting/video-settings/video-settings.js +5 -1
- package/lib/modules/setting/view.js +34 -2
- package/lib/modules/share-screen/index.d.ts +4 -2
- package/lib/modules/share-screen/index.dev.js +17 -14
- package/lib/modules/share-screen/index.js +2 -0
- package/lib/modules/share-screen/selection/index.css +2 -0
- package/lib/modules/share-screen/selection/index.js +44 -6
- package/lib/modules/share-screen/share-state-bar/index.css +49 -11
- package/lib/modules/share-screen/share-state-bar/index.d.ts +0 -1
- package/lib/modules/share-screen/share-state-bar/index.js +51 -20
- package/lib/modules/share-screen/store.d.ts +23 -13
- package/lib/modules/share-screen/store.js +733 -606
- package/lib/modules/state-bar/context.d.ts +0 -1
- package/lib/modules/state-bar/index.css +2 -2
- package/lib/modules/state-bar/index.d.ts +2 -2
- package/lib/modules/state-bar/index.dev.js +12 -10
- package/lib/modules/state-bar/layout-config.js +2 -0
- package/lib/modules/state-bar/live-streaming-state.js +3 -0
- package/lib/modules/state-bar/meeting-detail.css +6 -4
- package/lib/modules/state-bar/meeting-details.js +29 -3
- package/lib/modules/state-bar/meeting-network-state.css +14 -3
- package/lib/modules/state-bar/meeting-network-state.js +10 -4
- package/lib/modules/state-bar/recording.js +9 -11
- package/lib/modules/state-bar/store.d.ts +7 -5
- package/lib/modules/state-bar/store.js +68 -8
- package/lib/modules/state-bar/view.js +4 -8
- package/lib/modules/video-window/context.d.ts +0 -1
- package/lib/modules/video-window/deviceState/index.d.ts +3 -3
- package/lib/modules/video-window/index.css +1 -0
- package/lib/modules/video-window/members/index.js +7 -4
- package/lib/modules/video-window/store.d.ts +5 -4
- package/lib/modules/video-window/store.js +49 -17
- package/lib/modules/video-window/topControl/index.js +7 -0
- package/lib/modules/video-window/view.js +2 -0
- package/lib/modules/waiting-room-layout/context.d.ts +2 -0
- package/lib/modules/waiting-room-layout/context.js +9 -0
- package/lib/modules/waiting-room-layout/index.css +71 -0
- package/lib/modules/waiting-room-layout/index.d.ts +8 -0
- package/lib/modules/waiting-room-layout/index.js +47 -0
- package/lib/modules/waiting-room-layout/store.d.ts +30 -0
- package/lib/modules/waiting-room-layout/store.js +189 -0
- package/lib/modules/waiting-room-layout/type.d.ts +0 -0
- package/lib/modules/waiting-room-layout/type.js +1 -0
- package/lib/modules/waiting-room-layout/view.d.ts +3 -0
- package/lib/modules/waiting-room-layout/view.js +67 -0
- package/lib/modules/whiteboard/app.js +2 -8
- package/lib/modules/whiteboard/components/control-bar/index.css +3 -0
- package/lib/modules/whiteboard/components/control-bar/store.d.ts +0 -1
- package/lib/modules/whiteboard/components/control-bar/store.js +29 -29
- package/lib/modules/whiteboard/components/loading/index.js +2 -2
- package/lib/modules/whiteboard/components/multi-window/index.js +8 -3
- package/lib/modules/whiteboard/components/pagination/store.d.ts +0 -1
- package/lib/modules/whiteboard/components/progress/electron.js +3 -2
- package/lib/modules/whiteboard/components/progress/style.css +4 -3
- package/lib/modules/whiteboard/components/switch-theme/index.css +4 -0
- package/lib/modules/whiteboard/components/switch-theme/index.d.ts +2 -1
- package/lib/modules/whiteboard/components/switch-theme/index.js +29 -17
- package/lib/modules/whiteboard/components/switch-theme/item.d.ts +1 -0
- package/lib/modules/whiteboard/components/switch-theme/item.js +11 -2
- package/lib/modules/whiteboard/components/switch-theme/libs.d.ts +2 -1
- package/lib/modules/whiteboard/components/switch-theme/libs.js +21 -20
- package/lib/modules/whiteboard/components/toolbar/components/color-picker/components/panel.js +2 -0
- package/lib/modules/whiteboard/components/toolbar/components/color-picker/index.js +3 -1
- package/lib/modules/whiteboard/components/toolbar/components/eraser-picker.js +11 -9
- package/lib/modules/whiteboard/components/toolbar/components/extra-tool-picker.js +4 -0
- package/lib/modules/whiteboard/components/toolbar/components/move-handle.js +5 -0
- package/lib/modules/whiteboard/components/toolbar/components/pen-picker.js +2 -0
- package/lib/modules/whiteboard/components/toolbar/components/shape-picker.js +18 -12
- package/lib/modules/whiteboard/components/toolbar/hooks/index.d.ts +3 -3
- package/lib/modules/whiteboard/components/toolbar/hooks/index.js +16 -11
- package/lib/modules/whiteboard/components/toolbar/index.js +9 -0
- package/lib/modules/whiteboard/components/toolbar/store.d.ts +8 -7
- package/lib/modules/whiteboard/components/toolbar/store.js +25 -4
- package/lib/modules/whiteboard/context.d.ts +7 -3
- package/lib/modules/whiteboard/context.js +6 -4
- package/lib/modules/whiteboard/index.d.ts +6 -8
- package/lib/modules/whiteboard/index.js +310 -255
- package/lib/modules/whiteboard/type.d.ts +4 -12
- package/lib/modules/whiteboard/type.js +6 -16
- package/lib/modules/whiteboard/utils.d.ts +1 -0
- package/lib/modules/whiteboard/utils.js +12 -1
- package/lib/plugins/browser-runtime-plugin.js +2 -1
- package/lib/plugins/module-dev-plugin.js +12 -10
- package/lib/plugins/multi-lang-plugin.d.ts +1 -5
- package/lib/plugins/multi-lang-plugin.js +2 -0
- package/lib/runtime.d.ts +3 -5
- package/lib/translations/enUS.d.ts +590 -0
- package/lib/translations/enUS.js +608 -6
- package/lib/translations/zhCN.d.ts +588 -0
- package/lib/translations/zhCN.js +604 -4
- package/lib/type.d.ts +6 -2
- package/lib/ui-manager.d.ts +7 -3
- package/lib/ui-manager.js +597 -143
- package/lib/ui-scene.d.ts +1 -0
- package/lib/ui-scene.js +32 -22
- package/lib/utilities/board-context.d.ts +0 -1
- package/lib/utilities/constant.d.ts +47 -5
- package/lib/utilities/constant.js +44 -1
- package/lib/utilities/copyText.js +1 -1
- package/lib/utilities/extract.js +26 -3
- package/lib/utilities/hooks.js +2 -0
- package/lib/utilities/parameters.js +2 -2
- package/lib/utilities/renderer-event.js +28 -0
- package/lib/utilities/renderer.d.ts +1 -0
- package/lib/utilities/renderer.js +15 -6
- package/lib/utilities/tools.js +5 -2
- package/lib/utilities/ui-resources.d.ts +2 -2
- package/lib/utilities/ui-resources.js +20 -3
- package/lib/utilities/video-track-render-context.d.ts +0 -1
- package/package.json +17 -16
- package/public/assets/fcr_defaultpage.png +0 -0
- package/public/assets/login_confirm.png +0 -0
- package/public/index.html +29 -11
- package/lib/modules/device-pretest/settings/index.css +0 -15
- package/lib/modules/participant/attendee/participants-more-action.d.ts +0 -18
- package/lib/modules/participant/attendee/participants-more-action.js +0 -275
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FcrRoomControl } from 'agora-edu-core/lib/room-control';
|
|
2
1
|
import { FcrLiveStreamingState } from 'agora-edu-core/lib/type';
|
|
3
2
|
import { FcrUIEventStore } from '../../common/event-store';
|
|
3
|
+
import { FcrBaseRoomControl } from 'agora-edu-core/lib/room-control/type';
|
|
4
4
|
export default class LiveStreamingStore {
|
|
5
5
|
protected logger: import("agora-foundation/lib/logger").Logger;
|
|
6
6
|
accessor videoSteamingUrl: string;
|
|
@@ -18,7 +18,7 @@ export default class LiveStreamingStore {
|
|
|
18
18
|
private _userObserver;
|
|
19
19
|
private _roomObserver;
|
|
20
20
|
constructor({ roomControl, uiEventStore, }: {
|
|
21
|
-
roomControl:
|
|
21
|
+
roomControl: FcrBaseRoomControl;
|
|
22
22
|
uiEventStore: FcrUIEventStore;
|
|
23
23
|
});
|
|
24
24
|
release(): void;
|
|
@@ -14,6 +14,22 @@ require("core-js/modules/es.number.constructor.js");
|
|
|
14
14
|
require("core-js/modules/es.object.create.js");
|
|
15
15
|
require("core-js/modules/es.object.define-property.js");
|
|
16
16
|
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
17
|
+
require("core-js/modules/esnext.function.metadata.js");
|
|
18
|
+
require("core-js/modules/esnext.map.delete-all.js");
|
|
19
|
+
require("core-js/modules/esnext.map.emplace.js");
|
|
20
|
+
require("core-js/modules/esnext.map.every.js");
|
|
21
|
+
require("core-js/modules/esnext.map.filter.js");
|
|
22
|
+
require("core-js/modules/esnext.map.find.js");
|
|
23
|
+
require("core-js/modules/esnext.map.find-key.js");
|
|
24
|
+
require("core-js/modules/esnext.map.includes.js");
|
|
25
|
+
require("core-js/modules/esnext.map.key-of.js");
|
|
26
|
+
require("core-js/modules/esnext.map.map-keys.js");
|
|
27
|
+
require("core-js/modules/esnext.map.map-values.js");
|
|
28
|
+
require("core-js/modules/esnext.map.merge.js");
|
|
29
|
+
require("core-js/modules/esnext.map.reduce.js");
|
|
30
|
+
require("core-js/modules/esnext.map.some.js");
|
|
31
|
+
require("core-js/modules/esnext.map.update.js");
|
|
32
|
+
require("core-js/modules/esnext.symbol.metadata.js");
|
|
17
33
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
18
34
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
19
35
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -27,6 +43,11 @@ require("core-js/modules/es.array.push.js");
|
|
|
27
43
|
require("core-js/modules/es.object.to-string.js");
|
|
28
44
|
require("core-js/modules/es.string.iterator.js");
|
|
29
45
|
require("core-js/modules/es.weak-map.js");
|
|
46
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
47
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
48
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
49
|
+
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
50
|
+
require("core-js/modules/esnext.weak-map.emplace.js");
|
|
30
51
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
31
52
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
32
53
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -43,8 +64,8 @@ var _logger = require("agora-foundation/lib/logger");
|
|
|
43
64
|
var _i18n = require("agora-ui-foundation/lib/i18n");
|
|
44
65
|
var _LiveStreamingStore;
|
|
45
66
|
var _initProto, _init_videoSteamingUrl, _init_videoStreamingKey, _init_playUrl, _init_liveStreamingState, _init_isStartError, _onLiveButtonClickDecs, _startLiveStreamingDecs, _handleLiveStreamingStateUpdatedDecs, _handleEventDecs, _ref;
|
|
46
|
-
function _classPrivateFieldInitSpec(
|
|
47
|
-
function _checkPrivateRedeclaration(
|
|
67
|
+
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
|
68
|
+
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
|
48
69
|
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
|
49
70
|
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
|
50
71
|
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
|
@@ -90,9 +111,9 @@ var LiveStreamingStore = exports["default"] = /*#__PURE__*/function () {
|
|
|
90
111
|
this._uiEventStore.addObserver(this._uiEventObserver);
|
|
91
112
|
this.liveStreamingState = roomControl.getLiveStreamingState();
|
|
92
113
|
var liveStreamingConfig = roomControl.getLiveStreamingConfig();
|
|
93
|
-
this.videoSteamingUrl = liveStreamingConfig.pushStreamingUrl;
|
|
94
|
-
this.videoStreamingKey = liveStreamingConfig.pushStreamingKey;
|
|
95
|
-
this.playUrl = liveStreamingConfig.pullStreamingUrl;
|
|
114
|
+
this.videoSteamingUrl = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pushStreamingUrl) || '';
|
|
115
|
+
this.videoStreamingKey = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pushStreamingKey) || '';
|
|
116
|
+
this.playUrl = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pullStreamingUrl) || '';
|
|
96
117
|
}
|
|
97
118
|
return (0, _createClass2["default"])(LiveStreamingStore, [{
|
|
98
119
|
key: "videoSteamingUrl",
|
|
@@ -172,7 +193,7 @@ var LiveStreamingStore = exports["default"] = /*#__PURE__*/function () {
|
|
|
172
193
|
}, {
|
|
173
194
|
key: "onLiveButtonClick",
|
|
174
195
|
value: function () {
|
|
175
|
-
var _onLiveButtonClick = (0, _asyncToGenerator2["default"])(
|
|
196
|
+
var _onLiveButtonClick = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(videoSteamingUrl, videoStreamingKey, playUrl) {
|
|
176
197
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
177
198
|
while (1) switch (_context.prev = _context.next) {
|
|
178
199
|
case 0:
|
|
@@ -201,7 +222,7 @@ var LiveStreamingStore = exports["default"] = /*#__PURE__*/function () {
|
|
|
201
222
|
}, {
|
|
202
223
|
key: "_startLiveStreaming",
|
|
203
224
|
value: function () {
|
|
204
|
-
var _startLiveStreaming2 = (0, _asyncToGenerator2["default"])(
|
|
225
|
+
var _startLiveStreaming2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(videoSteamingUrl, videoStreamingKey, playUrl) {
|
|
205
226
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
206
227
|
while (1) switch (_context2.prev = _context2.next) {
|
|
207
228
|
case 0:
|
|
@@ -281,9 +302,9 @@ var LiveStreamingStore = exports["default"] = /*#__PURE__*/function () {
|
|
|
281
302
|
value: function _handleLiveStreamingStateUpdated(_roomId, state) {
|
|
282
303
|
this.liveStreamingState = state;
|
|
283
304
|
var liveStreamingConfig = this._roomControl.getLiveStreamingConfig();
|
|
284
|
-
this.videoSteamingUrl = liveStreamingConfig.pushStreamingUrl;
|
|
285
|
-
this.videoStreamingKey = liveStreamingConfig.pushStreamingKey;
|
|
286
|
-
this.playUrl = liveStreamingConfig.pullStreamingUrl;
|
|
305
|
+
this.videoSteamingUrl = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pushStreamingUrl) || '';
|
|
306
|
+
this.videoStreamingKey = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pushStreamingKey) || '';
|
|
307
|
+
this.playUrl = (liveStreamingConfig === null || liveStreamingConfig === void 0 ? void 0 : liveStreamingConfig.pullStreamingUrl) || '';
|
|
287
308
|
}
|
|
288
309
|
}, {
|
|
289
310
|
key: "_handleEvent",
|
|
@@ -302,7 +323,7 @@ var LiveStreamingStore = exports["default"] = /*#__PURE__*/function () {
|
|
|
302
323
|
}, {
|
|
303
324
|
key: "_stopLiveStreaming",
|
|
304
325
|
value: function () {
|
|
305
|
-
var _stopLiveStreaming2 = (0, _asyncToGenerator2["default"])(
|
|
326
|
+
var _stopLiveStreaming2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
306
327
|
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
307
328
|
while (1) switch (_context3.prev = _context3.next) {
|
|
308
329
|
case 0:
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { User } from 'agora-ui-foundation/lib/components/participants/attendee';
|
|
2
|
-
import { ParticipantType } from '../../../utilities/constant';
|
|
1
|
+
import { ParticipantActionType, User } from 'agora-ui-foundation/lib/components/participants/attendee';
|
|
3
2
|
import { FcrUserRole } from '../../../type';
|
|
4
3
|
import './index.css';
|
|
5
4
|
import { FcrPrivilegeUserRole } from 'agora-edu-core';
|
|
5
|
+
import { FcrUserKickOutType } from 'agora-edu-core/lib/room-control/type';
|
|
6
|
+
export type OperateWaitingRoomMemberDialogProps = {
|
|
7
|
+
type: 'remove' | 'removeAll' | 'admitAll';
|
|
8
|
+
tooltip: string;
|
|
9
|
+
title: string;
|
|
10
|
+
userId?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const OperateWaitingRoomMemberDialog: ({ type, tooltip, title, userId, }: OperateWaitingRoomMemberDialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
13
|
interface ParticipantAttendeeProps extends User {
|
|
7
|
-
onParticipantsButtonClick: (action:
|
|
14
|
+
onParticipantsButtonClick: (action: ParticipantActionType, userId: string, type?: FcrUserKickOutType | undefined) => void;
|
|
8
15
|
currentPerspectiveType?: 'host' | 'attendee' | 'cohost';
|
|
9
16
|
isPin: boolean;
|
|
10
17
|
hasPinnedStream: boolean;
|
|
@@ -14,6 +21,8 @@ interface ParticipantAttendeeProps extends User {
|
|
|
14
21
|
hasMutePermission: (role: FcrPrivilegeUserRole | FcrUserRole) => boolean;
|
|
15
22
|
hasUnmutePermission: (role: FcrPrivilegeUserRole | FcrUserRole) => boolean;
|
|
16
23
|
hasRequestStartAudioPermission: (role: FcrPrivilegeUserRole | FcrUserRole) => boolean;
|
|
24
|
+
activeTab: string;
|
|
25
|
+
moveToMainRoomByUserIds: (userId: string[]) => void;
|
|
17
26
|
}
|
|
18
27
|
export declare const ParticipantAttendee: (props: ParticipantAttendeeProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
28
|
export {};
|
|
@@ -10,12 +10,17 @@ require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
|
10
10
|
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
11
11
|
require("core-js/modules/es.object.keys.js");
|
|
12
12
|
require("core-js/modules/es.object.to-string.js");
|
|
13
|
+
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
14
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
15
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
16
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
17
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
13
18
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
14
19
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
20
|
Object.defineProperty(exports, "__esModule", {
|
|
16
21
|
value: true
|
|
17
22
|
});
|
|
18
|
-
exports.ParticipantAttendee = void 0;
|
|
23
|
+
exports.ParticipantAttendee = exports.OperateWaitingRoomMemberDialog = void 0;
|
|
19
24
|
require("core-js/modules/web.timers.js");
|
|
20
25
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
26
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -23,28 +28,112 @@ var _avatar = require("agora-ui-foundation/lib/components/avatar");
|
|
|
23
28
|
var _action = require("agora-ui-foundation/lib/components/button/action");
|
|
24
29
|
var _icon = require("agora-ui-foundation/lib/components/icon");
|
|
25
30
|
var _type = require("agora-ui-foundation/lib/components/icon/type");
|
|
31
|
+
var _attendee = require("agora-ui-foundation/lib/components/participants/attendee");
|
|
26
32
|
var _popover = require("agora-ui-foundation/lib/components/popover");
|
|
27
33
|
var _cameraState = require("agora-ui-foundation/lib/components/room-screen-share-state-bar/camera-state");
|
|
28
34
|
var _microphoneState = require("agora-ui-foundation/lib/components/room-screen-share-state-bar/microphone-state");
|
|
29
35
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
30
36
|
var _mobxReact = require("mobx-react");
|
|
31
37
|
var _react = require("react");
|
|
32
|
-
var _constant = require("../../../utilities/constant");
|
|
33
|
-
var _participantsMoreAction = require("./participants-more-action");
|
|
34
38
|
var _context = require("../context");
|
|
35
39
|
var _type2 = require("../../../type");
|
|
36
40
|
var _i18n = require("agora-ui-foundation/lib/i18n");
|
|
37
41
|
var _muteAction = require("../../../utilities/mute-action");
|
|
38
42
|
require("./index.css");
|
|
43
|
+
var _helper = require("agora-ui-foundation/lib/components/avatar/helper");
|
|
39
44
|
var _agoraEduCore = require("agora-edu-core");
|
|
45
|
+
var _participantsMore = require("agora-ui-foundation/lib/components/participants/participants-more");
|
|
46
|
+
var _type3 = require("agora-edu-core/lib/room-control/type");
|
|
47
|
+
var _constant = require("../../../utilities/constant");
|
|
48
|
+
var _checkbox = require("agora-ui-foundation/lib/components/checkbox");
|
|
49
|
+
var _button = require("agora-ui-foundation/lib/components/button");
|
|
40
50
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
41
51
|
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; }
|
|
42
52
|
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; }
|
|
43
|
-
var
|
|
53
|
+
var OperateWaitingRoomMemberDialog = exports.OperateWaitingRoomMemberDialog = function OperateWaitingRoomMemberDialog(_ref) {
|
|
54
|
+
var type = _ref.type,
|
|
55
|
+
tooltip = _ref.tooltip,
|
|
56
|
+
title = _ref.title,
|
|
57
|
+
userId = _ref.userId;
|
|
58
|
+
var t = (0, _i18n.useI18n)();
|
|
44
59
|
var _useState = (0, _react.useState)(false),
|
|
45
60
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
46
|
-
|
|
47
|
-
|
|
61
|
+
isChecked = _useState2[0],
|
|
62
|
+
setIsChecked = _useState2[1];
|
|
63
|
+
var _useContext = (0, _react.useContext)(_context.StoreContext),
|
|
64
|
+
removeWaitingRoomUser = _useContext.removeWaitingRoomUser,
|
|
65
|
+
moveToMainRoomAllMember = _useContext.moveToMainRoomAllMember,
|
|
66
|
+
kickOutWaitingRoomAllMember = _useContext.kickOutWaitingRoomAllMember,
|
|
67
|
+
closeRemoveAdmitWaitingRoomDialog = _useContext.closeRemoveAdmitWaitingRoomDialog;
|
|
68
|
+
var DialogKeyMap = {
|
|
69
|
+
remove: _constant.DialogKey.WAITING_ROOM_SINGLE_REMOVE,
|
|
70
|
+
removeAll: _constant.DialogKey.WAITING_ROOM_ALL_REMOVE,
|
|
71
|
+
admitAll: _constant.DialogKey.WAITING_ROOM_ALL_ADMIT
|
|
72
|
+
};
|
|
73
|
+
var buttonTextMap = {
|
|
74
|
+
removeAll: t('fmt_waitingroom_sidebar_button_removeall'),
|
|
75
|
+
admitAll: t('fmt_waitingroom_sidebar_button_admitall'),
|
|
76
|
+
remove: t('fmt_waitingroom_sidebar_popup_button_remove')
|
|
77
|
+
};
|
|
78
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
79
|
+
className: "operate-waiting-room-dialog-content",
|
|
80
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
81
|
+
className: "operate-waiting-room-dialog-title",
|
|
82
|
+
children: title
|
|
83
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
84
|
+
className: "operate-waiting-room-dialog-tooltip",
|
|
85
|
+
children: tooltip
|
|
86
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
87
|
+
className: "operate-waiting-room-dialog-confirm",
|
|
88
|
+
children: type === 'admitAll' ? null : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
89
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_checkbox.FcrCheckbox, {
|
|
90
|
+
checked: isChecked,
|
|
91
|
+
onChange: setIsChecked,
|
|
92
|
+
size: "small",
|
|
93
|
+
styleType: "white"
|
|
94
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
95
|
+
style: {
|
|
96
|
+
marginLeft: '10px'
|
|
97
|
+
},
|
|
98
|
+
children: t('fmt_waitingroom_sidebar_popup_option_notagain')
|
|
99
|
+
})]
|
|
100
|
+
})
|
|
101
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
102
|
+
className: "operate-waiting-room-dialog-btns",
|
|
103
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_button.FcrButton, {
|
|
104
|
+
size: "S",
|
|
105
|
+
shape: "rounded",
|
|
106
|
+
styleType: "white",
|
|
107
|
+
onClick: function onClick() {
|
|
108
|
+
closeRemoveAdmitWaitingRoomDialog(DialogKeyMap[type]);
|
|
109
|
+
},
|
|
110
|
+
children: t('fmt_waitingroom_sidebar_popup_button_cancel')
|
|
111
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.FcrButton, {
|
|
112
|
+
size: "S",
|
|
113
|
+
shape: "rounded",
|
|
114
|
+
styleType: type === 'admitAll' ? 'normal' : 'danger',
|
|
115
|
+
onClick: function onClick() {
|
|
116
|
+
if (type === 'remove') {
|
|
117
|
+
removeWaitingRoomUser(userId, isChecked ? _type3.FcrUserKickOutType.Forever : _type3.FcrUserKickOutType.Once);
|
|
118
|
+
}
|
|
119
|
+
if (type === 'removeAll') {
|
|
120
|
+
kickOutWaitingRoomAllMember(isChecked ? _type3.FcrUserKickOutType.Forever : _type3.FcrUserKickOutType.Once);
|
|
121
|
+
}
|
|
122
|
+
if (type === 'admitAll') {
|
|
123
|
+
moveToMainRoomAllMember();
|
|
124
|
+
}
|
|
125
|
+
closeRemoveAdmitWaitingRoomDialog(DialogKeyMap[type]);
|
|
126
|
+
},
|
|
127
|
+
children: buttonTextMap[type]
|
|
128
|
+
})]
|
|
129
|
+
})]
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)(function (props) {
|
|
133
|
+
var _useState3 = (0, _react.useState)(false),
|
|
134
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
135
|
+
isShowDropMenu = _useState4[0],
|
|
136
|
+
setIsShowDropMenu = _useState4[1];
|
|
48
137
|
var userId = props.userId,
|
|
49
138
|
userName = props.userName,
|
|
50
139
|
isMe = props.isMe,
|
|
@@ -68,16 +157,19 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
68
157
|
allowedOperations = props.allowedOperations,
|
|
69
158
|
hasMutePermission = props.hasMutePermission,
|
|
70
159
|
hasUnmutePermission = props.hasUnmutePermission,
|
|
71
|
-
hasRequestStartAudioPermission = props.hasRequestStartAudioPermission
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
setDisableHover = _useState4[1];
|
|
76
|
-
var volumeTimer = undefined;
|
|
77
|
-
var _useState5 = (0, _react.useState)(0),
|
|
160
|
+
hasRequestStartAudioPermission = props.hasRequestStartAudioPermission,
|
|
161
|
+
activeTab = props.activeTab,
|
|
162
|
+
moveToMainRoomByUserIds = props.moveToMainRoomByUserIds;
|
|
163
|
+
var _useState5 = (0, _react.useState)(false),
|
|
78
164
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
79
|
-
|
|
80
|
-
|
|
165
|
+
disableHover = _useState6[0],
|
|
166
|
+
setDisableHover = _useState6[1];
|
|
167
|
+
var nameColor = (0, _helper.getNameColor)(userName);
|
|
168
|
+
var volumeTimer = undefined;
|
|
169
|
+
var _useState7 = (0, _react.useState)(0),
|
|
170
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
171
|
+
phoneCallFrame = _useState8[0],
|
|
172
|
+
setPhoneCallFrame = _useState8[1];
|
|
81
173
|
var percentPhone = function percentPhone(phoneCallFrame) {
|
|
82
174
|
switch (phoneCallFrame) {
|
|
83
175
|
case '0':
|
|
@@ -139,11 +231,11 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
139
231
|
}, [audioDeviceType]);
|
|
140
232
|
var userActions = function userActions() {
|
|
141
233
|
var handleAudioButtonClick = function handleAudioButtonClick() {
|
|
142
|
-
var action = hasAudio ?
|
|
234
|
+
var action = hasAudio ? _attendee.ParticipantActionType.MUTE_AUDIO : _attendee.ParticipantActionType.UNMUTE_AUDIO;
|
|
143
235
|
onParticipantsButtonClick(action, userId);
|
|
144
236
|
};
|
|
145
237
|
var handlePrivateChatButtonClick = function handlePrivateChatButtonClick() {
|
|
146
|
-
onParticipantsButtonClick(
|
|
238
|
+
onParticipantsButtonClick(_attendee.ParticipantActionType.PRIVATE_CHAT, userId);
|
|
147
239
|
};
|
|
148
240
|
var handleMoreActionsClick = function handleMoreActionsClick(action, userId) {
|
|
149
241
|
onParticipantsButtonClick(action, userId);
|
|
@@ -155,15 +247,26 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
155
247
|
var _actionMute = (0, _muteAction.actionMute)(!!isMe, hasAudio, muteAudioPermission, startAudioPermission, requestStartAudioPermission),
|
|
156
248
|
isShowActionAudio = _actionMute.isShowActionAudio,
|
|
157
249
|
actionAudioTag = _actionMute.actionAudioTag;
|
|
250
|
+
var waitingRoomParticipateActionsNeedHiden = ['start_video', 'request_start_video', 'stop_video', 'pin', 'set_as_host', 'set_as_co_host', 'revoke_co_host', 'merge_video', 'put_into_waiting_room'];
|
|
251
|
+
var mainRoomParticipateActionsNeedHiden = [];
|
|
158
252
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
159
253
|
className: "attendee__user-action attendee__user-action-host ".concat(isShowDropMenu ? 'attendee__user-action-hovered' : ''),
|
|
160
|
-
children: [isShowActionAudio && /*#__PURE__*/(0, _jsxRuntime.jsx)(_action.FcrActionButton, {
|
|
254
|
+
children: [isShowActionAudio && activeTab === _constant.RoomType.MAIN_ROOM && /*#__PURE__*/(0, _jsxRuntime.jsx)(_action.FcrActionButton, {
|
|
161
255
|
size: "small",
|
|
162
256
|
onClick: handleAudioButtonClick,
|
|
163
257
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
164
258
|
className: hasAudio ? 'attendee__danger-operate' : 'attendee__normal-operate',
|
|
165
259
|
children: t(actionAudioTag)
|
|
166
260
|
})
|
|
261
|
+
}), activeTab === _constant.RoomType.WAITING_ROOM && /*#__PURE__*/(0, _jsxRuntime.jsx)(_action.FcrActionButton, {
|
|
262
|
+
size: "small",
|
|
263
|
+
onClick: function onClick() {
|
|
264
|
+
return moveToMainRoomByUserIds([userId]);
|
|
265
|
+
},
|
|
266
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
267
|
+
className: 'attendee__normal-operate',
|
|
268
|
+
children: t('fmt_waitingroom_sidebar_button_admit')
|
|
269
|
+
})
|
|
167
270
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_popover.FcrPopover, {
|
|
168
271
|
visible: isShowDropMenu,
|
|
169
272
|
overlayInnerStyle: {
|
|
@@ -180,13 +283,19 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
180
283
|
onMouseLeave: function onMouseLeave() {
|
|
181
284
|
return setIsShowDropMenu(false);
|
|
182
285
|
},
|
|
183
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
286
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_participantsMore.FcrParticipantsMoreActions, _objectSpread(_objectSpread({}, props), {}, {
|
|
184
287
|
onParticipantsButtonClick: handleMoreActionsClick,
|
|
185
288
|
userRole: userRole,
|
|
186
289
|
isPin: isPin,
|
|
187
290
|
hasPinnedStream: hasPinnedStream,
|
|
188
291
|
allowedOperations: allowedOperations,
|
|
189
|
-
userType: userType
|
|
292
|
+
userType: userType,
|
|
293
|
+
userId: userId,
|
|
294
|
+
hasVideo: hasVideo,
|
|
295
|
+
hasAudio: hasAudio,
|
|
296
|
+
userName: userName,
|
|
297
|
+
audioDeviceType: audioDeviceType,
|
|
298
|
+
hideActions: activeTab === _constant.RoomType.MAIN_ROOM ? mainRoomParticipateActionsNeedHiden : waitingRoomParticipateActionsNeedHiden
|
|
190
299
|
}))
|
|
191
300
|
}),
|
|
192
301
|
placement: "bottomRight",
|
|
@@ -224,6 +333,9 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
224
333
|
className: "attendee__user-info-identity",
|
|
225
334
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
226
335
|
className: "attendee__name",
|
|
336
|
+
style: {
|
|
337
|
+
color: nameColor
|
|
338
|
+
},
|
|
227
339
|
children: [userName, isMe && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
228
340
|
className: "attendee__me-badge",
|
|
229
341
|
children: "(Me)"
|
|
@@ -250,26 +362,26 @@ var ParticipantAttendee = exports.ParticipantAttendee = (0, _mobxReact.observer)
|
|
|
250
362
|
colors: {
|
|
251
363
|
iconPrimary: 'var(--fcr_ui_scene_ramp_green6)'
|
|
252
364
|
}
|
|
253
|
-
}), audioDeviceType !== 'none' && /*#__PURE__*/(0, _jsxRuntime.jsx)(MicrophoneIndicator, {
|
|
365
|
+
}), audioDeviceType !== 'none' && activeTab === _constant.RoomType.MAIN_ROOM && /*#__PURE__*/(0, _jsxRuntime.jsx)(MicrophoneIndicator, {
|
|
254
366
|
audioDeviceType: audioDeviceType,
|
|
255
367
|
hasAudio: hasAudio,
|
|
256
368
|
isLocal: !!isMe,
|
|
257
369
|
userId: userId
|
|
258
|
-
}), videoDeviceType !== 'none' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_cameraState.CameraState, {
|
|
370
|
+
}), videoDeviceType !== 'none' && activeTab === _constant.RoomType.MAIN_ROOM && /*#__PURE__*/(0, _jsxRuntime.jsx)(_cameraState.CameraState, {
|
|
259
371
|
isCameraMuted: !hasVideo,
|
|
260
372
|
size: 28
|
|
261
373
|
})]
|
|
262
374
|
}), userActions()]
|
|
263
375
|
}, userId);
|
|
264
376
|
});
|
|
265
|
-
var MicrophoneIndicator = (0, _mobxReact.observer)(function (
|
|
266
|
-
var audioDeviceType =
|
|
267
|
-
hasAudio =
|
|
268
|
-
isLocal =
|
|
269
|
-
userId =
|
|
270
|
-
var
|
|
271
|
-
audioVolumeMap =
|
|
272
|
-
localMicVolume =
|
|
377
|
+
var MicrophoneIndicator = (0, _mobxReact.observer)(function (_ref2) {
|
|
378
|
+
var audioDeviceType = _ref2.audioDeviceType,
|
|
379
|
+
hasAudio = _ref2.hasAudio,
|
|
380
|
+
isLocal = _ref2.isLocal,
|
|
381
|
+
userId = _ref2.userId;
|
|
382
|
+
var _useContext2 = (0, _react.useContext)(_context.StoreContext),
|
|
383
|
+
audioVolumeMap = _useContext2.audioVolumeMap,
|
|
384
|
+
localMicVolume = _useContext2.localMicVolume;
|
|
273
385
|
var volume = isLocal ? localMicVolume : audioVolumeMap.get(userId);
|
|
274
386
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_microphoneState.MicrophoneState, {
|
|
275
387
|
isMicrophoneMuted: !hasAudio,
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
width: 100%;
|
|
6
6
|
min-width: 320px;
|
|
7
7
|
flex: 1;
|
|
8
|
+
position: relative;
|
|
8
9
|
}
|
|
9
10
|
.participants-container-merge-content {
|
|
10
11
|
display: flex;
|
|
@@ -56,3 +57,22 @@
|
|
|
56
57
|
.fcr-participant .fcr-avatar {
|
|
57
58
|
border-radius: var(--fcr_cornerradius_m);
|
|
58
59
|
}
|
|
60
|
+
|
|
61
|
+
.fcr-participant__footer_waiting_room button {
|
|
62
|
+
flex: 1 !important;
|
|
63
|
+
padding: 0 !important;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.participants-container-icon {
|
|
67
|
+
position: relative;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.participants-container-red {
|
|
71
|
+
width: 8px;
|
|
72
|
+
height: 8px;
|
|
73
|
+
border-radius: 50%;
|
|
74
|
+
background: var(--fcr_ui_scene_ramp_red6);
|
|
75
|
+
position: absolute;
|
|
76
|
+
right: -5px;
|
|
77
|
+
top: -5px;
|
|
78
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { FcrCoreEngine
|
|
2
|
-
import { FcrPeerSessionControl } from 'agora-edu-core/lib/peer-session';
|
|
1
|
+
import { FcrCoreEngine } from 'agora-edu-core';
|
|
3
2
|
import { UIModule } from '../../base';
|
|
4
3
|
import { FcrSecurityStore } from '../../common/security-store';
|
|
5
4
|
import './index.css';
|
|
6
5
|
import { FcrUIEventStore } from '../../common/event-store';
|
|
7
6
|
import { FcrDeviceStore } from '../../common/device-store';
|
|
8
7
|
import { FcrDeviceStreamStore } from '../../common/device-stream-store';
|
|
8
|
+
import { FcrPeerSessionControl } from 'agora-edu-core/lib/peer-session/type';
|
|
9
|
+
import { FcrMainRoomControl } from 'agora-edu-core/lib/room-control/type';
|
|
10
|
+
import { OperateWaitingRoomMemberDialogProps } from './attendee';
|
|
9
11
|
export declare class ParticipantUIModule extends UIModule {
|
|
10
12
|
private _store;
|
|
11
13
|
constructor(args: {
|
|
@@ -18,6 +20,7 @@ export declare class ParticipantUIModule extends UIModule {
|
|
|
18
20
|
deviceStreamStore: FcrDeviceStreamStore;
|
|
19
21
|
});
|
|
20
22
|
getComponent(): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
getWaitingRoomDialog(params: OperateWaitingRoomMemberDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
21
24
|
openDialog(): void;
|
|
22
25
|
onProcessEvent(event: RendererCustomEvent): void;
|
|
23
26
|
protected onUnload(): void;
|
|
@@ -28,9 +28,9 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
28
28
|
var App = (0, _root.hot)(function () {
|
|
29
29
|
return null;
|
|
30
30
|
});
|
|
31
|
-
_reactDom["default"].render(
|
|
32
|
-
window.__DEV_ENGINE_IS_READY__.then(
|
|
33
|
-
var engine, urlParams, isAssistant, roomId, roomControl, userName, deviceStore, uiEventStore, securityStore, dialogModule, deviceStreamStore, uiModule, App;
|
|
31
|
+
_reactDom["default"].render(/*#__PURE__*/(0, _jsxRuntime.jsx)(App, {}), document.querySelector('#root'));
|
|
32
|
+
window.__DEV_ENGINE_IS_READY__.then(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
33
|
+
var engine, urlParams, isAssistant, roomId, token, roomControl, userName, deviceStore, uiEventStore, securityStore, dialogModule, deviceStreamStore, uiModule, App;
|
|
34
34
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
35
35
|
while (1) switch (_context.prev = _context.next) {
|
|
36
36
|
case 0:
|
|
@@ -38,20 +38,22 @@ window.__DEV_ENGINE_IS_READY__.then( /*#__PURE__*/(0, _asyncToGenerator2["defaul
|
|
|
38
38
|
urlParams = new URLSearchParams(window.location.search);
|
|
39
39
|
isAssistant = urlParams.get('roomId');
|
|
40
40
|
roomId = isAssistant || window.__DEV_ROOM_ID__;
|
|
41
|
-
|
|
41
|
+
token = window.__DEV_USER_TOKEN__;
|
|
42
|
+
_context.next = 7;
|
|
42
43
|
return engine.login();
|
|
43
|
-
case
|
|
44
|
-
roomControl = engine.
|
|
44
|
+
case 7:
|
|
45
|
+
roomControl = engine.createMainRoomControl(roomId);
|
|
45
46
|
userName = isAssistant ? 'assistants' : 'test-user';
|
|
46
|
-
deviceStore = new _deviceStore.FcrDeviceStore(userName, engine.
|
|
47
|
-
_context.next =
|
|
47
|
+
deviceStore = new _deviceStore.FcrDeviceStore(userName, engine.getDesktopMediaControl());
|
|
48
|
+
_context.next = 12;
|
|
48
49
|
return roomControl.join({
|
|
49
50
|
userRole: isAssistant ? _type.FcrUserRole.PARTICIPANT : _type.FcrUserRole.HOST,
|
|
50
51
|
userName: userName,
|
|
52
|
+
roomToken: token,
|
|
51
53
|
streamLatency: _type.FcrStreamLatencyLevel.ULTRA_LOW,
|
|
52
54
|
createStreamConfigs: []
|
|
53
55
|
});
|
|
54
|
-
case
|
|
56
|
+
case 12:
|
|
55
57
|
uiEventStore = new _eventStore.FcrUIEventStore();
|
|
56
58
|
securityStore = new _securityStore.FcrSecurityStore(roomControl.getPrivilegeControl(), roomControl.getUserControl(), roomControl.getStreamControl(), roomControl.getRoomSessionControl(), uiEventStore);
|
|
57
59
|
dialogModule = new _dialog.DialogUIModule({
|
|
@@ -64,7 +66,7 @@ window.__DEV_ENGINE_IS_READY__.then( /*#__PURE__*/(0, _asyncToGenerator2["defaul
|
|
|
64
66
|
streamControl: roomControl.getStreamControl()
|
|
65
67
|
});
|
|
66
68
|
deviceStreamStore = new _deviceStreamStore.FcrDeviceStreamStore({
|
|
67
|
-
mediaControl: engine.
|
|
69
|
+
mediaControl: engine.getDesktopMediaControl(),
|
|
68
70
|
roomControl: roomControl,
|
|
69
71
|
securityStore: securityStore,
|
|
70
72
|
deviceStore: deviceStore,
|
|
@@ -89,8 +91,8 @@ window.__DEV_ENGINE_IS_READY__.then( /*#__PURE__*/(0, _asyncToGenerator2["defaul
|
|
|
89
91
|
children: [uiModule.getComponent(), dialogModule.getComponent()]
|
|
90
92
|
});
|
|
91
93
|
});
|
|
92
|
-
_reactDom["default"].render(
|
|
93
|
-
case
|
|
94
|
+
_reactDom["default"].render(/*#__PURE__*/(0, _jsxRuntime.jsx)(App, {}), document.querySelector('#root'));
|
|
95
|
+
case 19:
|
|
94
96
|
case "end":
|
|
95
97
|
return _context.stop();
|
|
96
98
|
}
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.array.filter.js");
|
|
5
|
+
require("core-js/modules/es.array.for-each.js");
|
|
6
|
+
require("core-js/modules/es.array.push.js");
|
|
7
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
3
8
|
require("core-js/modules/es.object.define-property.js");
|
|
9
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
10
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
11
|
+
require("core-js/modules/es.object.keys.js");
|
|
12
|
+
require("core-js/modules/es.object.to-string.js");
|
|
4
13
|
require("core-js/modules/es.reflect.construct.js");
|
|
14
|
+
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
15
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
16
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
17
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
18
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
19
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
5
20
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
21
|
Object.defineProperty(exports, "__esModule", {
|
|
7
22
|
value: true
|
|
8
23
|
});
|
|
9
24
|
exports.ParticipantUIModule = void 0;
|
|
10
25
|
require("core-js/modules/es.function.bind.js");
|
|
26
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
27
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
28
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
29
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
@@ -19,7 +35,10 @@ var _context = require("./context");
|
|
|
19
35
|
require("./index.css");
|
|
20
36
|
var _store = _interopRequireDefault(require("./store"));
|
|
21
37
|
var _view = require("./view");
|
|
38
|
+
var _attendee = require("./attendee");
|
|
22
39
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
40
|
+
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; }
|
|
41
|
+
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; }
|
|
23
42
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
24
43
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
25
44
|
var ParticipantUIModule = exports.ParticipantUIModule = /*#__PURE__*/function (_UIModule) {
|
|
@@ -42,6 +61,14 @@ var ParticipantUIModule = exports.ParticipantUIModule = /*#__PURE__*/function (_
|
|
|
42
61
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_view.View, {})
|
|
43
62
|
});
|
|
44
63
|
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "getWaitingRoomDialog",
|
|
66
|
+
value: function getWaitingRoomDialog(params) {
|
|
67
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.StoreContext.Provider, {
|
|
68
|
+
value: this._store,
|
|
69
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_attendee.OperateWaitingRoomMemberDialog, _objectSpread({}, params))
|
|
70
|
+
});
|
|
71
|
+
}
|
|
45
72
|
}, {
|
|
46
73
|
key: "openDialog",
|
|
47
74
|
value: function openDialog() {
|
|
@@ -10,15 +10,15 @@ export declare class FcrUIMemberDataImpl implements FcrUIMemberData {
|
|
|
10
10
|
updateStream(stream: FcrStreamInfo): void;
|
|
11
11
|
addStream(stream: FcrStreamInfo): void;
|
|
12
12
|
removeStream(streamId: string): void;
|
|
13
|
-
constructor(userInfo: FcrUserInfo, streams: FcrStreamInfo[]
|
|
13
|
+
constructor(userInfo: FcrUserInfo, streams: Readonly<FcrStreamInfo[]>, _isMySelf: boolean);
|
|
14
14
|
get userId(): string;
|
|
15
15
|
get sortingPriority(): FcrUIMemberSortingPriority;
|
|
16
16
|
}
|
|
17
17
|
export declare class FcrUIMemberListDataSourceImpl implements FcrUIMemberListDataSource {
|
|
18
18
|
accessor list: FcrUIMemberDataImpl[];
|
|
19
19
|
resetList(users: FcrUserInfo[], streams: Record<string, FcrStreamInfo[]>): boolean;
|
|
20
|
-
add(user: FcrUserInfo, streams: FcrStreamInfo[]
|
|
21
|
-
update(param: FcrStreamInfo | FcrUserInfo, isBoardActive?: boolean): boolean;
|
|
20
|
+
add(user: FcrUserInfo, streams: Readonly<FcrStreamInfo[]>, isMySelf: boolean): boolean;
|
|
21
|
+
update(param: FcrStreamInfo | FcrUserInfo | undefined, isBoardActive?: boolean): boolean;
|
|
22
22
|
updateWithStreamAdd(stream: FcrStreamInfo): boolean;
|
|
23
23
|
updateWithStreamRemove(stream: FcrStreamInfo): boolean;
|
|
24
24
|
delete(user: FcrUserInfo): boolean;
|