Browse Source

feat: Drops filmStripOnly mode. (#8074)

* feat: Drops filmStripOnly mode.

* squash: Let's make lint happy again.

* squash: Drop some css.
master
Дамян Минков 4 years ago
parent
commit
12c835dd91
No account linked to committer's email address
31 changed files with 45 additions and 713 deletions
  1. 0
    13
      css/_base.scss
  2. 0
    80
      css/_inlay.scss
  3. 0
    14
      css/filmstrip/_horizontal_filmstrip.scss
  4. 0
    20
      css/filmstrip/_vertical_filmstrip.scss
  5. 0
    11
      css/overlay/_overlay.scss
  6. 0
    5
      css/themes/_light.scss
  7. 1
    3
      doc/examples/api.html
  8. 0
    5
      interface_config.js
  9. 3
    8
      modules/UI/UI.js
  10. 0
    4
      modules/UI/videolayout/RemoteVideo.js
  11. 1
    1
      modules/UI/videolayout/SmallVideo.js
  12. 1
    5
      modules/UI/videolayout/VideoLayout.js
  13. 7
    9
      modules/keyboardshortcut/keyboardshortcut.js
  14. 1
    2
      react/features/base/config/interfaceConfigWhitelist.js
  15. 5
    12
      react/features/base/react/components/web/Watermarks.js
  16. 2
    4
      react/features/chat/middleware.js
  17. 6
    15
      react/features/conference/components/web/Conference.js
  18. 1
    1
      react/features/feedback/actions.js
  19. 9
    22
      react/features/filmstrip/components/web/Filmstrip.js
  20. 0
    101
      react/features/filmstrip/components/web/Toolbar.js
  21. 0
    3
      react/features/filmstrip/functions.web.js
  22. 0
    112
      react/features/overlay/components/web/FilmstripOnlyOverlayFrame.js
  23. 3
    46
      react/features/overlay/components/web/OverlayFrame.js
  24. 0
    50
      react/features/overlay/components/web/PageReloadFilmstripOnlyOverlay.js
  25. 0
    41
      react/features/overlay/components/web/SuspendedFilmstripOnlyOverlay.js
  26. 0
    54
      react/features/overlay/components/web/UserMediaPermissionsFilmstripOnlyOverlay.js
  27. 1
    13
      react/features/overlay/components/web/index.js
  28. 2
    18
      react/features/overlay/overlays.web.js
  29. 2
    34
      react/features/settings/components/web/SettingsButton.js
  30. 0
    4
      react/features/toolbox/actions.web.js
  31. 0
    3
      react/features/video-layout/functions.js

+ 0
- 13
css/_base.scss View File

@@ -28,9 +28,6 @@ body {
28 28
     overflow: hidden;
29 29
     color: $defaultColor;
30 30
     background: $defaultBackground;
31
-    &.filmstrip-only {
32
-        background: transparent;
33
-    }
34 31
 }
35 32
 
36 33
 /**
@@ -70,16 +67,6 @@ body {
70 67
     cursor: pointer;
71 68
 }
72 69
 
73
-/**
74
- * AtlasKitThemeProvider sets a background color on an app-wrapping div, thereby
75
- * preventing transparency in filmstrip-only mode. The selector chosen to
76
- * override this behavior is specific to where the AtlasKitThemeProvider might
77
- * be placed within the app hierarchy.
78
- */
79
-.filmstrip-only #react > .ckAJgx {
80
-    background: transparent;
81
-}
82
-
83 70
 p {
84 71
     margin: 0;
85 72
 }

+ 0
- 80
css/_inlay.scss View File

@@ -27,84 +27,4 @@
27 27
         font-size: 50px;
28 28
     }
29 29
 
30
-    &-filmstrip-only {
31
-        background-color: $inlayFilmstripOnlyBg;
32
-        color: $inlayFilmstripOnlyColor;
33
-        margin-left: 20px;
34
-        margin-right: 20px;
35
-        margin-top: 20px;
36
-        bottom: 30px;
37
-        position: absolute;
38
-        display: flex;
39
-        max-height: 120px;
40
-        height: 80%;
41
-        right: 0px;
42
-        border-radius: 4px;
43
-        overflow: hidden;
44
-        &__content {
45
-            padding: 20px;
46
-            display: flex;
47
-            justify-content: center;
48
-            position: relative;
49
-            > .button-control {
50
-                align-self: center;
51
-            }
52
-            > #reloadProgressBar {
53
-                position: absolute;
54
-                left: 0px;
55
-                bottom: 0px;
56
-                margin-bottom: 0px;
57
-                width: 100%;
58
-                border-radius: 0px;
59
-            }
60
-        }
61
-        &__title {
62
-            font-size: 18px;
63
-            font-weight: 600;
64
-        }
65
-
66
-        &__container {
67
-            align-self: center;
68
-        }
69
-
70
-        &__text {
71
-            margin-top: 10px;
72
-            font-size: 14px;
73
-            font-weight: 600;
74
-        }
75
-
76
-        &__icon {
77
-            font-size: 50px;
78
-            align-self: center;
79
-            color: $inlayIconColor;
80
-            opacity: 0.6;
81
-        }
82
-        &__icon-container {
83
-            text-align: center;
84
-            display: flex;
85
-            justify-content: center;
86
-            position: absolute;
87
-            width: 100%;
88
-            height: 100%;
89
-            top: 0px;
90
-        }
91
-
92
-        &__avatar-container {
93
-            height: 100%;
94
-            position: relative;
95
-            > img {
96
-                height: 100%;
97
-            }
98
-        }
99
-
100
-        &__icon-background {
101
-            background: $inlayIconBg;
102
-            opacity: 0.6;
103
-            position: absolute;
104
-            width: 100%;
105
-            height: 100%;
106
-            top: 0px;
107
-        }
108
-    }
109
-
110 30
 }

+ 0
- 14
css/filmstrip/_horizontal_filmstrip.scss View File

@@ -67,20 +67,6 @@
67 67
         }
68 68
     }
69 69
 
70
-    /**
71
-     * Style the filmstrip videos in filmstrip-only mode.
72
-     */
73
-    &__videos-filmstripOnly {
74
-        margin-top: auto;
75
-        margin-bottom: auto;
76
-
77
-        .filmstrip__videos {
78
-            &#filmstripLocalVideo {
79
-                bottom: 0px;
80
-            }
81
-        }
82
-    }
83
-
84 70
     .remote-videos-container {
85 71
         transition: opacity 1s;
86 72
     }

+ 0
- 20
css/filmstrip/_vertical_filmstrip.scss View File

@@ -145,26 +145,6 @@
145 145
     }
146 146
 }
147 147
 
148
-/**
149
- * Override other styles to support vertical filmstrip mode.
150
- */
151
-.filmstrip-only .vertical-filmstrip {
152
-    .filmstrip {
153
-        flex-direction: row-reverse;
154
-    }
155
-    .filmstrip__videos-filmstripOnly {
156
-        margin-top: auto;
157
-        margin-bottom: auto;
158
-        height: 100%;
159
-    }
160
-
161
-    .filmstrip__videos {
162
-        &#filmstripLocalVideo {
163
-            bottom: 0px;
164
-        }
165
-    }
166
-}
167
-
168 148
 /**
169 149
  * Workarounds for Edge and Firefox not handling scrolling properly with
170 150
  * flex-direction: column-reverse. The remove videos in filmstrip should

+ 0
- 11
css/overlay/_overlay.scss View File

@@ -8,16 +8,10 @@
8 8
         position: fixed;
9 9
         z-index: $overlayZ;
10 10
         background: $defaultBackground;
11
-        &.filmstrip-only {
12
-            @include transparentBg($filmstripOnlyOverlayBg, 0.8);
13
-        }
14 11
     }
15 12
 
16 13
     &__container-light {
17 14
         @include transparentBg($defaultBackground, 0.7);
18
-        &.filmstrip-only {
19
-            @include transparentBg($filmstripOnlyOverlayBg, 0.2);
20
-        }
21 15
     }
22 16
 
23 17
     &__content {
@@ -27,11 +21,6 @@
27 21
         width: 56%;
28 22
         left: 50%;
29 23
         @include transform(translateX(-50%));
30
-        &.filmstrip-only {
31
-            left: 0px;
32
-            width: 100%;
33
-            @include transform(none);
34
-        }
35 24
 
36 25
         &_bottom {
37 26
             position: absolute;

+ 0
- 5
css/themes/_light.scss View File

@@ -41,7 +41,6 @@ $overlayButtonBg: #0074E0;
41 41
 * Color variables
42 42
 **/
43 43
 $defaultBackground: #474747;
44
-$filmstripOnlyOverlayBg: #000;
45 44
 $reloadProgressBarBg: #0074E0;
46 45
 
47 46
 /**
@@ -59,10 +58,6 @@ $dialogErrorText: #344563;
59 58
 **/
60 59
 $inlayColorBg: lighten($defaultBackground, 20%);
61 60
 $inlayBorderColor: lighten($baseLight, 10%);
62
-$inlayIconBg: #000;
63
-$inlayIconColor: #fff;
64
-$inlayFilmstripOnlyColor: #474747;
65
-$inlayFilmstripOnlyBg: #fff;
66 61
 
67 62
 // Main controls
68 63
 $placeHolderColor: #a7a7a7;

+ 1
- 3
doc/examples/api.html View File

@@ -13,9 +13,7 @@
13 13
                 height: 180,
14 14
                 parentNode: undefined,
15 15
                 configOverwrite: {},
16
-                interfaceConfigOverwrite: {
17
-                    filmStripOnly: true
18
-                }
16
+                interfaceConfigOverwrite: {}
19 17
             }
20 18
             var api = new JitsiMeetExternalAPI(domain, options);
21 19
         </script>

+ 0
- 5
interface_config.js View File

@@ -97,11 +97,6 @@ var interfaceConfig = {
97 97
 
98 98
     FILM_STRIP_MAX_HEIGHT: 120,
99 99
 
100
-    /**
101
-     * Whether to only show the filmstrip (and hide the toolbar).
102
-     */
103
-    filmStripOnly: false,
104
-
105 100
     GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
106 101
 
107 102
     /**

+ 3
- 8
modules/UI/UI.js View File

@@ -1,4 +1,4 @@
1
-/* global APP, $, config, interfaceConfig */
1
+/* global APP, $, config */
2 2
 
3 3
 
4 4
 const UI = {};
@@ -143,9 +143,7 @@ UI.start = function() {
143 143
     $.prompt.setDefaults({ persistent: false });
144 144
 
145 145
     VideoLayout.init(eventEmitter);
146
-    if (!interfaceConfig.filmStripOnly) {
147
-        VideoLayout.initLargeVideo();
148
-    }
146
+    VideoLayout.initLargeVideo();
149 147
 
150 148
     // Do not animate the video area on UI start (second argument passed into
151 149
     // resizeVideoArea) because the animation is not visible anyway. Plus with
@@ -161,10 +159,7 @@ UI.start = function() {
161 159
         $('body').addClass('desktop-browser');
162 160
     }
163 161
 
164
-    if (interfaceConfig.filmStripOnly) {
165
-        $('body').addClass('filmstrip-only');
166
-        APP.store.dispatch(setNotificationsEnabled(false));
167
-    } else if (config.iAmRecorder) {
162
+    if (config.iAmRecorder) {
168 163
         // in case of iAmSipGateway keep local video visible
169 164
         if (!config.iAmSipGateway) {
170 165
             VideoLayout.setLocalVideoVisible(false);

+ 0
- 4
modules/UI/videolayout/RemoteVideo.js View File

@@ -135,10 +135,6 @@ export default class RemoteVideo extends SmallVideo {
135 135
      * @private
136 136
      */
137 137
     _generatePopupContent() {
138
-        if (interfaceConfig.filmStripOnly) {
139
-            return;
140
-        }
141
-
142 138
         const remoteVideoMenuContainer
143 139
             = this.container.querySelector('.remotevideomenu');
144 140
 

+ 1
- 1
modules/UI/videolayout/SmallVideo.js View File

@@ -699,7 +699,7 @@ export default class SmallVideo {
699 699
                                     alwaysVisible = { showConnectionIndicator }
700 700
                                     iconSize = { iconSize }
701 701
                                     isLocalVideo = { this.isLocal }
702
-                                    enableStatsDisplay = { !interfaceConfig.filmStripOnly }
702
+                                    enableStatsDisplay = { true }
703 703
                                     participantId = { this.id }
704 704
                                     statsPopoverPosition = { statsPopoverPosition } />
705 705
                                 : null }

+ 1
- 5
modules/UI/videolayout/VideoLayout.js View File

@@ -1,4 +1,4 @@
1
-/* global APP, $, interfaceConfig  */
1
+/* global APP, $  */
2 2
 
3 3
 import Logger from 'jitsi-meet-logger';
4 4
 
@@ -264,10 +264,6 @@ const VideoLayout = {
264 264
      * @returns {void}
265 265
      */
266 266
     onPinChange(pinnedParticipantID) {
267
-        if (interfaceConfig.filmStripOnly) {
268
-            return;
269
-        }
270
-
271 267
         getAllThumbnails().forEach(thumbnail =>
272 268
             thumbnail.focus(pinnedParticipantID === thumbnail.getId()));
273 269
     },

+ 7
- 9
modules/keyboardshortcut/keyboardshortcut.js View File

@@ -1,4 +1,4 @@
1
-/* global APP, $, interfaceConfig */
1
+/* global APP, $ */
2 2
 
3 3
 import Logger from 'jitsi-meet-logger';
4 4
 
@@ -203,14 +203,12 @@ const KeyboardShortcut = {
203 203
         });
204 204
         this._addShortcutToHelp('SPACE', 'keyboardShortcuts.pushToTalk');
205 205
 
206
-        if (!interfaceConfig.filmStripOnly) {
207
-            this.registerShortcut('T', null, () => {
208
-                sendAnalytics(createShortcutEvent('speaker.stats'));
209
-                APP.store.dispatch(toggleDialog(SpeakerStats, {
210
-                    conference: APP.conference
211
-                }));
212
-            }, 'keyboardShortcuts.showSpeakerStats');
213
-        }
206
+        this.registerShortcut('T', null, () => {
207
+            sendAnalytics(createShortcutEvent('speaker.stats'));
208
+            APP.store.dispatch(toggleDialog(SpeakerStats, {
209
+                conference: APP.conference
210
+            }));
211
+        }, 'keyboardShortcuts.showSpeakerStats');
214 212
 
215 213
         /**
216 214
          * FIXME: Currently focus keys are directly implemented below in

+ 1
- 2
react/features/base/config/interfaceConfigWhitelist.js View File

@@ -54,6 +54,5 @@ export default [
54 54
     'UNSUPPORTED_BROWSERS',
55 55
     'VERTICAL_FILMSTRIP',
56 56
     'VIDEO_LAYOUT_FIT',
57
-    'VIDEO_QUALITY_LABEL_DISABLED',
58
-    'filmStripOnly'
57
+    'VIDEO_QUALITY_LABEL_DISABLED'
59 58
 ];

+ 5
- 12
react/features/base/react/components/web/Watermarks.js View File

@@ -84,13 +84,7 @@ class Watermarks extends Component<Props, State> {
84 84
     constructor(props: Props) {
85 85
         super(props);
86 86
 
87
-        let showBrandWatermark;
88
-
89
-        if (interfaceConfig.filmStripOnly) {
90
-            showBrandWatermark = false;
91
-        } else {
92
-            showBrandWatermark = interfaceConfig.SHOW_BRAND_WATERMARK;
93
-        }
87
+        const showBrandWatermark = interfaceConfig.SHOW_BRAND_WATERMARK;
94 88
 
95 89
         this.state = {
96 90
             brandWatermarkLink:
@@ -237,12 +231,11 @@ function _mapStateToProps(state, ownProps) {
237 231
     const {
238 232
         DEFAULT_LOGO_URL,
239 233
         JITSI_WATERMARK_LINK,
240
-        SHOW_JITSI_WATERMARK,
241
-        filmStripOnly
234
+        SHOW_JITSI_WATERMARK
242 235
     } = interfaceConfig;
243
-    let _showJitsiWatermark = (!filmStripOnly
244
-          && (customizationReady && !customizationFailed)
245
-          && SHOW_JITSI_WATERMARK)
236
+    let _showJitsiWatermark = (
237
+        customizationReady && !customizationFailed
238
+        && SHOW_JITSI_WATERMARK)
246 239
     || !isValidRoom;
247 240
     let _logoUrl = logoImageUrl;
248 241
     let _logoLink = logoClickUrl;

+ 2
- 4
react/features/chat/middleware.js View File

@@ -152,11 +152,9 @@ StateListenerRegistry.register(
152 152
  * @returns {void}
153 153
  */
154 154
 function _addChatMsgListener(conference, store) {
155
-    if ((typeof interfaceConfig === 'object' && interfaceConfig.filmStripOnly)
156
-        || (typeof APP !== 'undefined' && !isButtonEnabled('chat'))
155
+    if ((typeof APP !== 'undefined' && !isButtonEnabled('chat'))
157 156
         || store.getState()['features/base/config'].iAmRecorder) {
158
-        // We don't register anything on web if we're in filmStripOnly mode, or
159
-        // the chat button is not enabled in interfaceConfig.
157
+        // We don't register anything on web if the chat button is not enabled in interfaceConfig
160 158
         // or we are in iAmRecorder mode
161 159
         return;
162 160
     }

+ 6
- 15
react/features/conference/components/web/Conference.js View File

@@ -14,7 +14,7 @@ import { CalleeInfoContainer } from '../../../invite';
14 14
 import { LargeVideo } from '../../../large-video';
15 15
 import { KnockingParticipantList, LobbyScreen } from '../../../lobby';
16 16
 import { Prejoin, isPrejoinPageVisible } from '../../../prejoin';
17
-import { fullScreenChanged, setToolboxAlwaysVisible, showToolbox } from '../../../toolbox/actions.web';
17
+import { fullScreenChanged, showToolbox } from '../../../toolbox/actions.web';
18 18
 import { Toolbox } from '../../../toolbox/components/web';
19 19
 import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
20 20
 import { maybeShowSuboptimalExperienceNotification } from '../../functions';
@@ -28,7 +28,6 @@ import Labels from './Labels';
28 28
 import { default as Notice } from './Notice';
29 29
 
30 30
 declare var APP: Object;
31
-declare var config: Object;
32 31
 declare var interfaceConfig: Object;
33 32
 
34 33
 /**
@@ -175,18 +174,13 @@ class Conference extends AbstractConference<Props, *> {
175 174
      * @returns {ReactElement}
176 175
      */
177 176
     render() {
178
-        const {
179
-            // XXX The character casing of the name filmStripOnly utilized by
180
-            // interfaceConfig is obsolete but legacy support is required.
181
-            filmStripOnly: filmstripOnly
182
-        } = interfaceConfig;
183 177
         const {
184 178
             _iAmRecorder,
185 179
             _isLobbyScreenVisible,
186 180
             _layoutClassName,
187 181
             _showPrejoin
188 182
         } = this.props;
189
-        const hideLabels = filmstripOnly || _iAmRecorder;
183
+        const hideLabels = _iAmRecorder;
190 184
 
191 185
         return (
192 186
             <div
@@ -198,18 +192,18 @@ class Conference extends AbstractConference<Props, *> {
198 192
                 <div id = 'videospace'>
199 193
                     <LargeVideo />
200 194
                     <KnockingParticipantList />
201
-                    <Filmstrip filmstripOnly = { filmstripOnly } />
195
+                    <Filmstrip />
202 196
                     { hideLabels || <Labels /> }
203 197
                 </div>
204 198
 
205
-                { filmstripOnly || _showPrejoin || _isLobbyScreenVisible || <Toolbox /> }
206
-                { filmstripOnly || <Chat /> }
199
+                { _showPrejoin || _isLobbyScreenVisible || <Toolbox /> }
200
+                <Chat />
207 201
 
208 202
                 { this.renderNotificationsContainer() }
209 203
 
210 204
                 <CalleeInfoContainer />
211 205
 
212
-                { !filmstripOnly && _showPrejoin && <Prejoin />}
206
+                { _showPrejoin && <Prejoin />}
213 207
             </div>
214 208
         );
215 209
     }
@@ -256,9 +250,6 @@ class Conference extends AbstractConference<Props, *> {
256 250
         dispatch(connect());
257 251
 
258 252
         maybeShowSuboptimalExperienceNotification(dispatch, t);
259
-
260
-        interfaceConfig.filmStripOnly
261
-            && dispatch(setToolboxAlwaysVisible(true));
262 253
     }
263 254
 }
264 255
 

+ 1
- 1
react/features/feedback/actions.js View File

@@ -56,7 +56,7 @@ export function maybeOpenFeedbackDialog(conference: Object) {
56 56
         const state = getState();
57 57
         const { feedbackPercentage = 100 } = state['features/base/config'];
58 58
 
59
-        if (interfaceConfig.filmStripOnly || config.iAmRecorder) {
59
+        if (config.iAmRecorder) {
60 60
             // Intentionally fall through the if chain to prevent further action
61 61
             // from being taken with regards to showing feedback.
62 62
         } else if (state['features/base/dialog'].component === FeedbackDialog) {

+ 9
- 22
react/features/filmstrip/components/web/Filmstrip.js View File

@@ -17,8 +17,6 @@ import { getCurrentLayout, LAYOUTS } from '../../../video-layout';
17 17
 import { setFilmstripHovered, setFilmstripVisible } from '../../actions';
18 18
 import { shouldRemoteVideosBeVisible } from '../../functions';
19 19
 
20
-import Toolbar from './Toolbar';
21
-
22 20
 declare var APP: Object;
23 21
 declare var interfaceConfig: Object;
24 22
 
@@ -42,11 +40,6 @@ type Props = {
42 40
      */
43 41
     _columns: number,
44 42
 
45
-    /**
46
-     * Whether the UI/UX is filmstrip-only.
47
-     */
48
-    _filmstripOnly: boolean,
49
-
50 43
     /**
51 44
      * The width of the filmstrip.
52 45
      */
@@ -142,14 +135,12 @@ class Filmstrip extends Component <Props> {
142 135
      * @inheritdoc
143 136
      */
144 137
     componentDidMount() {
145
-        if (!this.props._filmstripOnly) {
146
-            APP.keyboardshortcut.registerShortcut(
147
-                'F',
148
-                'filmstripPopover',
149
-                this._onShortcutToggleFilmstrip,
150
-                'keyboardShortcuts.toggleFilmstrip'
151
-            );
152
-        }
138
+        APP.keyboardshortcut.registerShortcut(
139
+            'F',
140
+            'filmstripPopover',
141
+            this._onShortcutToggleFilmstrip,
142
+            'keyboardShortcuts.toggleFilmstrip'
143
+        );
153 144
     }
154 145
 
155 146
     /**
@@ -207,7 +198,7 @@ class Filmstrip extends Component <Props> {
207 198
         let toolbar = null;
208 199
 
209 200
         if (!this.props._hideToolbar) {
210
-            toolbar = this.props._filmstripOnly ? <Toolbar /> : this._renderToggleButton();
201
+            toolbar = this._renderToggleButton();
211 202
         }
212 203
 
213 204
         return (
@@ -367,24 +358,20 @@ class Filmstrip extends Component <Props> {
367 358
 function _mapStateToProps(state) {
368 359
     const { iAmSipGateway } = state['features/base/config'];
369 360
     const { hovered, visible } = state['features/filmstrip'];
370
-    const isFilmstripOnly = Boolean(interfaceConfig.filmStripOnly);
371 361
     const reduceHeight
372
-        = !isFilmstripOnly && state['features/toolbox'].visible && interfaceConfig.TOOLBAR_BUTTONS.length;
362
+        = state['features/toolbox'].visible && interfaceConfig.TOOLBAR_BUTTONS.length;
373 363
     const remoteVideosVisible = shouldRemoteVideosBeVisible(state);
374 364
     const { isOpen: shiftRight } = state['features/chat'];
375 365
     const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${
376 366
         reduceHeight ? 'reduce-height' : ''
377 367
     } ${shiftRight ? 'shift-right' : ''}`.trim();
378
-    const videosClassName = `filmstrip__videos${
379
-        isFilmstripOnly ? ' filmstrip__videos-filmstripOnly' : ''}${
380
-        visible ? '' : ' hidden'}`;
368
+    const videosClassName = `filmstrip__videos${visible ? '' : ' hidden'}`;
381 369
     const { gridDimensions = {}, filmstripWidth } = state['features/filmstrip'].tileViewDimensions;
382 370
 
383 371
     return {
384 372
         _className: className,
385 373
         _columns: gridDimensions.columns,
386 374
         _currentLayout: getCurrentLayout(state),
387
-        _filmstripOnly: isFilmstripOnly,
388 375
         _filmstripWidth: filmstripWidth,
389 376
         _hideScrollbar: Boolean(iAmSipGateway),
390 377
         _hideToolbar: Boolean(iAmSipGateway),

+ 0
- 101
react/features/filmstrip/components/web/Toolbar.js View File

@@ -1,101 +0,0 @@
1
-// @flow
2
-
3
-import React, { Component } from 'react';
4
-
5
-import { connect, equals } from '../../../base/redux';
6
-import { SettingsButton } from '../../../settings';
7
-import {
8
-    AudioMuteButton,
9
-    HangupButton,
10
-    VideoMuteButton
11
-} from '../../../toolbox/components';
12
-
13
-declare var interfaceConfig: Object;
14
-
15
-// XXX: We are not currently using state here, but in the future, when
16
-// interfaceConfig is part of redux we will. This has to be retrieved from the store.
17
-const visibleButtons = new Set(interfaceConfig.TOOLBAR_BUTTONS);
18
-
19
-/**
20
- * The type of the React {@code Component} props of {@link Toolbar}.
21
- */
22
-type Props = {
23
-
24
-    /**
25
-     * The set of buttons which should be visible in this {@code Toolbar}.
26
-     */
27
-    _visibleButtons: Set<string>
28
-};
29
-
30
-/**
31
- * Implements the conference toolbar on React/Web for filmstrip-only mode.
32
- *
33
- * @extends Component
34
- */
35
-class Toolbar extends Component<Props> {
36
-    /**
37
-     * Implements React's {@link Component#render()}.
38
-     *
39
-     * @inheritdoc
40
-     * @returns {ReactElement}
41
-     */
42
-    render() {
43
-        return (
44
-            <div
45
-                className = 'filmstrip-toolbox'
46
-                id = 'new-toolbox'>
47
-                <HangupButton
48
-                    tooltipPosition = 'left'
49
-                    visible = { this._shouldShowButton('hangup') } />
50
-                <AudioMuteButton
51
-                    tooltipPosition = 'left'
52
-                    visible = { this._shouldShowButton('microphone') } />
53
-                <VideoMuteButton
54
-                    tooltipPosition = 'left'
55
-                    visible = { this._shouldShowButton('camera') } />
56
-                <SettingsButton
57
-                    tooltipPosition = 'left'
58
-                    visible = { this._shouldShowButton('fodeviceselection') } />
59
-            </div>
60
-        );
61
-    }
62
-
63
-    _shouldShowButton: (string) => boolean;
64
-
65
-    /**
66
-     * Returns if a button name has been explicitly configured to be displayed.
67
-     *
68
-     * @param {string} buttonName - The name of the button, as expected in
69
-     * {@link intefaceConfig}.
70
-     * @private
71
-     * @returns {boolean} True if the button should be displayed, false
72
-     * otherwise.
73
-     */
74
-    _shouldShowButton(buttonName) {
75
-        return this.props._visibleButtons.has(buttonName);
76
-    }
77
-}
78
-
79
-/**
80
- * Maps (parts of) the redux state to the associated props for this component.
81
- *
82
- * @param {Object} state - The Redux state.
83
- * @private
84
- * @returns {{
85
- *     _visibleButtons: Set<string>
86
- * }}
87
- */
88
-function _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars
89
-    // XXX: We are not currently using state here, but in the future, when
90
-    // interfaceConfig is part of redux we will.
91
-    //
92
-    // NB: We compute the buttons again here because if URL parameters were used to
93
-    // override them we'd miss it.
94
-    const buttons = new Set(interfaceConfig.TOOLBAR_BUTTONS);
95
-
96
-    return {
97
-        _visibleButtons: equals(visibleButtons, buttons) ? visibleButtons : buttons
98
-    };
99
-}
100
-
101
-export default connect(_mapStateToProps)(Toolbar);

+ 0
- 3
react/features/filmstrip/functions.web.js View File

@@ -56,9 +56,6 @@ export function shouldRemoteVideosBeVisible(state: Object) {
56 56
                     || ((pinnedParticipant = getPinnedParticipant(state))
57 57
                         && pinnedParticipant.local)))
58 58
 
59
-            || (typeof interfaceConfig === 'object'
60
-                && interfaceConfig.filmStripOnly)
61
-
62 59
             || state['features/base/config'].disable1On1Mode);
63 60
 }
64 61
 

+ 0
- 112
react/features/overlay/components/web/FilmstripOnlyOverlayFrame.js View File

@@ -1,112 +0,0 @@
1
-// @flow
2
-
3
-import React, { Component } from 'react';
4
-
5
-import { Avatar } from '../../../base/avatar';
6
-import { getLocalParticipant } from '../../../base/participants';
7
-import { connect } from '../../../base/redux';
8
-
9
-import OverlayFrame from './OverlayFrame';
10
-
11
-/**
12
- * The type of the React {@code Component} props of
13
- * {@link FilmstripOnlyOverlayFrame}.
14
- */
15
-type Props = {
16
-
17
-    /**
18
-     * The ID of the local participant.
19
-     */
20
-    _localParticipantId: string,
21
-
22
-    /**
23
-     * The children components to be displayed into the overlay frame for
24
-     * filmstrip only mode.
25
-     */
26
-    children: React$Node,
27
-
28
-    /**
29
-     * The css class name for the icon that will be displayed over the avatar.
30
-     */
31
-    icon: string,
32
-
33
-    /**
34
-     * Indicates the css style of the overlay. If true, then lighter; darker,
35
-     * otherwise.
36
-     */
37
-    isLightOverlay: boolean
38
-};
39
-
40
-/**
41
- * Implements a React Component for the frame of the overlays in filmstrip only
42
- * mode.
43
- */
44
-class FilmstripOnlyOverlayFrame extends Component<Props> {
45
-    /**
46
-     * Renders content related to the icon.
47
-     *
48
-     * @returns {ReactElement|null}
49
-     * @private
50
-     */
51
-    _renderIcon() {
52
-        if (!this.props.icon) {
53
-            return null;
54
-        }
55
-
56
-        const iconClass = `inlay-filmstrip-only__icon ${this.props.icon}`;
57
-        const iconBGClass = 'inlay-filmstrip-only__icon-background';
58
-
59
-        return (
60
-            <div>
61
-                <div className = { iconBGClass } />
62
-                <div className = 'inlay-filmstrip-only__icon-container'>
63
-                    <span className = { iconClass } />
64
-                </div>
65
-            </div>
66
-        );
67
-    }
68
-
69
-    /**
70
-     * Implements React's {@link Component#render()}.
71
-     *
72
-     * @inheritdoc
73
-     * @returns {ReactElement}
74
-     */
75
-    render() {
76
-        return (
77
-            <OverlayFrame isLightOverlay = { this.props.isLightOverlay }>
78
-                <div className = 'inlay-filmstrip-only'>
79
-                    <div className = 'inlay-filmstrip-only__content'>
80
-                        {
81
-                            this.props.children
82
-                        }
83
-                    </div>
84
-                    <div className = 'inlay-filmstrip-only__avatar-container'>
85
-                        <Avatar participantId = { this.props._localParticipantId } />
86
-                        {
87
-                            this._renderIcon()
88
-                        }
89
-                    </div>
90
-                </div>
91
-            </OverlayFrame>
92
-        );
93
-    }
94
-}
95
-
96
-/**
97
- * Maps (parts of) the Redux state to the associated FilmstripOnlyOverlayFrame
98
- * props.
99
- *
100
- * @param {Object} state - The Redux state.
101
- * @private
102
- * @returns {{
103
- *     _localParticipantId: string
104
- * }}
105
- */
106
-function _mapStateToProps(state) {
107
-    return {
108
-        _localParticipantId: (getLocalParticipant(state) || {}).id
109
-    };
110
-}
111
-
112
-export default connect(_mapStateToProps)(FilmstripOnlyOverlayFrame);

+ 3
- 46
react/features/overlay/components/web/OverlayFrame.js View File

@@ -21,44 +21,10 @@ type Props = {
21 21
     isLightOverlay?: boolean
22 22
 };
23 23
 
24
-/**
25
- * The type of the React {@code Component} state of {@link OverlayFrame}.
26
- */
27
-type State = {
28
-
29
-    /**
30
-     * Whether or not the application is currently displaying in filmstrip only
31
-     * mode.
32
-     */
33
-    filmstripOnly: boolean
34
-};
35
-
36 24
 /**
37 25
  * Implements a React {@link Component} for the frame of the overlays.
38 26
  */
39
-export default class OverlayFrame extends Component<Props, State> {
40
-    /**
41
-     * Initializes a new AbstractOverlay instance.
42
-     *
43
-     * @param {Object} props - The read-only properties with which the new
44
-     * instance is to be initialized.
45
-     * @public
46
-     */
47
-    constructor(props: Props) {
48
-        super(props);
49
-
50
-        this.state = {
51
-            /**
52
-             * Indicates whether the filmstrip only mode is enabled or not.
53
-             *
54
-             * @type {boolean}
55
-             */
56
-            filmstripOnly:
57
-                typeof interfaceConfig !== 'undefined'
58
-                    && interfaceConfig.filmStripOnly
59
-        };
60
-    }
61
-
27
+export default class OverlayFrame extends Component<Props> {
62 28
     /**
63 29
      * Implements React's {@link Component#render()}.
64 30
      *
@@ -66,20 +32,11 @@ export default class OverlayFrame extends Component<Props, State> {
66 32
      * @returns {ReactElement|null}
67 33
      */
68 34
     render() {
69
-        let containerClass = this.props.isLightOverlay
70
-            ? 'overlay__container-light' : 'overlay__container';
71
-        let contentClass = 'overlay__content';
72
-
73
-        if (this.state.filmstripOnly) {
74
-            containerClass += ' filmstrip-only';
75
-            contentClass += ' filmstrip-only';
76
-        }
77
-
78 35
         return (
79 36
             <div
80
-                className = { containerClass }
37
+                className = { this.props.isLightOverlay ? 'overlay__container-light' : 'overlay__container' }
81 38
                 id = 'overlay'>
82
-                <div className = { contentClass }>
39
+                <div className = { 'overlay__content' }>
83 40
                     {
84 41
                         this.props.children
85 42
                     }

+ 0
- 50
react/features/overlay/components/web/PageReloadFilmstripOnlyOverlay.js View File

@@ -1,50 +0,0 @@
1
-// @flow
2
-
3
-import React from 'react';
4
-
5
-import { translate } from '../../../base/i18n';
6
-import { connect } from '../../../base/redux';
7
-import AbstractPageReloadOverlay, { type Props, abstractMapStateToProps }
8
-    from '../AbstractPageReloadOverlay';
9
-
10
-import FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';
11
-
12
-/**
13
- * Implements a React Component for page reload overlay for filmstrip only
14
- * mode. Shown before the conference is reloaded. Shows a warning message and
15
- * counts down towards the reload.
16
- */
17
-class PageReloadFilmstripOnlyOverlay extends AbstractPageReloadOverlay<Props> {
18
-    /**
19
-     * Implements React's {@link Component#render()}.
20
-     *
21
-     * @inheritdoc
22
-     * @returns {ReactElement}
23
-     */
24
-    render() {
25
-        const { t } = this.props;
26
-        const { message, timeLeft, title } = this.state;
27
-
28
-        return (
29
-            <FilmstripOnlyOverlayFrame>
30
-                <div className = 'inlay-filmstrip-only__container'>
31
-                    <div className = 'inlay-filmstrip-only__title'>
32
-                        { t(title) }
33
-                    </div>
34
-                    <div className = 'inlay-filmstrip-only__text'>
35
-                        { t(message, { seconds: timeLeft }) }
36
-                    </div>
37
-                </div>
38
-                { this._renderButton() }
39
-                { this._renderProgressBar() }
40
-            </FilmstripOnlyOverlayFrame>
41
-        );
42
-    }
43
-
44
-    _renderButton: () => React$Element<*> | null
45
-
46
-    _renderProgressBar: () => React$Element<*> | null
47
-}
48
-
49
-export default translate(
50
-    connect(abstractMapStateToProps)(PageReloadFilmstripOnlyOverlay));

+ 0
- 41
react/features/overlay/components/web/SuspendedFilmstripOnlyOverlay.js View File

@@ -1,41 +0,0 @@
1
-// @flow
2
-
3
-import React from 'react';
4
-
5
-import { translate, translateToHTML } from '../../../base/i18n';
6
-
7
-import AbstractSuspendedOverlay from './AbstractSuspendedOverlay';
8
-import FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';
9
-import ReloadButton from './ReloadButton';
10
-
11
-/**
12
- * Implements a React Component for suspended overlay for filmstrip only mode.
13
- * Shown when suspended is detected.
14
- */
15
-class SuspendedFilmstripOnlyOverlay extends AbstractSuspendedOverlay {
16
-    /**
17
-     * Implements React's {@link Component#render()}.
18
-     *
19
-     * @inheritdoc
20
-     * @returns {ReactElement}
21
-     */
22
-    render() {
23
-        const { t } = this.props;
24
-
25
-        return (
26
-            <FilmstripOnlyOverlayFrame isLightOverlay = { true }>
27
-                <div className = 'inlay-filmstrip-only__container'>
28
-                    <div className = 'inlay-filmstrip-only__title'>
29
-                        { t('suspendedoverlay.title') }
30
-                    </div>
31
-                    <div className = 'inlay-filmstrip-only__text'>
32
-                        { translateToHTML(t, 'suspendedoverlay.text') }
33
-                    </div>
34
-                </div>
35
-                <ReloadButton textKey = 'suspendedoverlay.rejoinKeyTitle' />
36
-            </FilmstripOnlyOverlayFrame>
37
-        );
38
-    }
39
-}
40
-
41
-export default translate(SuspendedFilmstripOnlyOverlay);

+ 0
- 54
react/features/overlay/components/web/UserMediaPermissionsFilmstripOnlyOverlay.js View File

@@ -1,54 +0,0 @@
1
-// @flow
2
-
3
-import React from 'react';
4
-
5
-import { translate, translateToHTML } from '../../../base/i18n';
6
-import { connect } from '../../../base/redux';
7
-
8
-import AbstractUserMediaPermissionsOverlay, { abstractMapStateToProps }
9
-    from './AbstractUserMediaPermissionsOverlay';
10
-import FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';
11
-
12
-declare var interfaceConfig: Object;
13
-
14
-/**
15
- * Implements a React Component for overlay with guidance how to proceed with
16
- * gUM prompt. This component will be displayed only for filmstrip only mode.
17
- */
18
-class UserMediaPermissionsFilmstripOnlyOverlay
19
-    extends AbstractUserMediaPermissionsOverlay {
20
-
21
-    /**
22
-     * Implements React's {@link Component#render()}.
23
-     *
24
-     * @inheritdoc
25
-     * @returns {ReactElement}
26
-     */
27
-    render() {
28
-        const { t } = this.props;
29
-        const textKey = `userMedia.${this.props.browser}GrantPermissions`;
30
-
31
-        return (
32
-            <FilmstripOnlyOverlayFrame
33
-                icon = 'icon-mic-camera-combined'
34
-                isLightOverlay = { true }>
35
-                <div className = 'inlay-filmstrip-only__container'>
36
-                    <div className = 'inlay-filmstrip-only__title'>
37
-                        {
38
-                            t('startupoverlay.title',
39
-                                { app: interfaceConfig.APP_NAME })
40
-                        }
41
-                    </div>
42
-                    <div className = 'inlay-filmstrip-only__text'>
43
-                        {
44
-                            translateToHTML(t, textKey)
45
-                        }
46
-                    </div>
47
-                </div>
48
-            </FilmstripOnlyOverlayFrame>
49
-        );
50
-    }
51
-}
52
-
53
-export default translate(
54
-    connect(abstractMapStateToProps)(UserMediaPermissionsFilmstripOnlyOverlay));

+ 1
- 13
react/features/overlay/components/web/index.js View File

@@ -1,19 +1,7 @@
1 1
 // @flow
2 2
 
3
-export { default as FilmstripOnlyOverlayFrame } from './FilmstripOnlyOverlayFrame';
4 3
 export { default as OverlayFrame } from './OverlayFrame';
5 4
 
6
-export {
7
-    default as PageReloadFilmstripOnlyOverlay
8
-} from './PageReloadFilmstripOnlyOverlay';
9 5
 export { default as PageReloadOverlay } from './PageReloadOverlay';
10
-export {
11
-    default as SuspendedFilmstripOnlyOverlay
12
-} from './SuspendedFilmstripOnlyOverlay';
13 6
 export { default as SuspendedOverlay } from './SuspendedOverlay';
14
-export {
15
-    default as UserMediaPermissionsFilmstripOnlyOverlay
16
-} from './UserMediaPermissionsFilmstripOnlyOverlay';
17
-export {
18
-    default as UserMediaPermissionsOverlay
19
-} from './UserMediaPermissionsOverlay';
7
+export { default as UserMediaPermissionsOverlay } from './UserMediaPermissionsOverlay';

+ 2
- 18
react/features/overlay/overlays.web.js View File

@@ -1,11 +1,8 @@
1 1
 // @flow
2 2
 
3 3
 import {
4
-    PageReloadFilmstripOnlyOverlay,
5 4
     PageReloadOverlay,
6
-    SuspendedFilmstripOnlyOverlay,
7 5
     SuspendedOverlay,
8
-    UserMediaPermissionsFilmstripOnlyOverlay,
9 6
     UserMediaPermissionsOverlay
10 7
 } from './components/web';
11 8
 
@@ -17,22 +14,9 @@ declare var interfaceConfig: Object;
17 14
  * @returns {Array<Object>}
18 15
  */
19 16
 export function getOverlays(): Array<Object> {
20
-    const overlays = [
17
+    return [
18
+        PageReloadOverlay,
21 19
         SuspendedOverlay,
22 20
         UserMediaPermissionsOverlay
23 21
     ];
24
-
25
-    const filmstripOnly
26
-            = typeof interfaceConfig === 'object' && interfaceConfig.filmStripOnly;
27
-
28
-    if (filmstripOnly) {
29
-        overlays.push(
30
-            PageReloadFilmstripOnlyOverlay,
31
-            SuspendedFilmstripOnlyOverlay,
32
-            UserMediaPermissionsFilmstripOnlyOverlay);
33
-    } else {
34
-        overlays.push(PageReloadOverlay);
35
-    }
36
-
37
-    return overlays;
38 22
 }

+ 2
- 34
react/features/settings/components/web/SettingsButton.js View File

@@ -5,22 +5,14 @@ import { translate } from '../../../base/i18n';
5 5
 import { IconSettings } from '../../../base/icons';
6 6
 import { connect } from '../../../base/redux';
7 7
 import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';
8
-import { openDeviceSelectionPopup } from '../../../device-selection';
9 8
 import { openSettingsDialog } from '../../actions';
10 9
 import { SETTINGS_TABS } from '../../constants';
11 10
 
12
-declare var interfaceConfig: Object;
13
-
14 11
 /**
15 12
  * The type of the React {@code Component} props of {@link SettingsButton}.
16 13
  */
17 14
 type Props = AbstractButtonProps & {
18 15
 
19
-    /**
20
-     * Whether we are in filmstrip only mode or not.
21
-     */
22
-    _filmstripOnly: boolean,
23
-
24 16
     /**
25 17
      * The default tab at which the settings dialog will be opened.
26 18
      */
@@ -49,36 +41,12 @@ class SettingsButton extends AbstractButton<Props, *> {
49 41
      */
50 42
     _handleClick() {
51 43
         const {
52
-            _filmstripOnly,
53 44
             defaultTab = SETTINGS_TABS.DEVICES,
54 45
             dispatch } = this.props;
55 46
 
56 47
         sendAnalytics(createToolbarEvent('settings'));
57
-        if (_filmstripOnly) {
58
-            dispatch(openDeviceSelectionPopup());
59
-        } else {
60
-            dispatch(openSettingsDialog(defaultTab));
61
-        }
48
+        dispatch(openSettingsDialog(defaultTab));
62 49
     }
63 50
 }
64 51
 
65
-/**
66
- * Maps (parts of) the redux state to the associated props for the
67
- * {@code SettingsButton} component.
68
- *
69
- * @param {Object} state - The Redux state.
70
- * @private
71
- * @returns {{
72
- *     _filmstripOnly: boolean
73
- * }}
74
- */
75
-function _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars
76
-    // XXX: We are not currently using state here, but in the future, when
77
-    // interfaceConfig is part of redux we will.
78
-
79
-    return {
80
-        _filmstripOnly: Boolean(interfaceConfig.filmStripOnly)
81
-    };
82
-}
83
-
84
-export default translate(connect(_mapStateToProps)(SettingsButton));
52
+export default translate(connect()(SettingsButton));

+ 0
- 4
react/features/toolbox/actions.web.js View File

@@ -25,10 +25,6 @@ export * from './actions.native';
25 25
  */
26 26
 export function dockToolbox(dock: boolean): Function {
27 27
     return (dispatch: Dispatch<any>, getState: Function) => {
28
-        if (interfaceConfig.filmStripOnly) {
29
-            return;
30
-        }
31
-
32 28
         const { timeoutMS, visible } = getState()['features/toolbox'];
33 29
 
34 30
         if (dock) {

+ 0
- 3
react/features/video-layout/functions.js View File

@@ -99,9 +99,6 @@ export function shouldDisplayTileView(state: Object = {}) {
99 99
         // Editing etherpad
100 100
         state['features/etherpad']?.editing
101 101
 
102
-        // We're in filmstrip-only mode
103
-        || (typeof interfaceConfig === 'object' && interfaceConfig?.filmStripOnly)
104
-
105 102
         // We pinned a participant
106 103
         || getPinnedParticipant(state)
107 104
 

Loading…
Cancel
Save