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
     overflow: hidden;
28
     overflow: hidden;
29
     color: $defaultColor;
29
     color: $defaultColor;
30
     background: $defaultBackground;
30
     background: $defaultBackground;
31
-    &.filmstrip-only {
32
-        background: transparent;
33
-    }
34
 }
31
 }
35
 
32
 
36
 /**
33
 /**
70
     cursor: pointer;
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
 p {
70
 p {
84
     margin: 0;
71
     margin: 0;
85
 }
72
 }

+ 0
- 80
css/_inlay.scss View File

27
         font-size: 50px;
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
         }
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
     .remote-videos-container {
70
     .remote-videos-container {
85
         transition: opacity 1s;
71
         transition: opacity 1s;
86
     }
72
     }

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

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
  * Workarounds for Edge and Firefox not handling scrolling properly with
149
  * Workarounds for Edge and Firefox not handling scrolling properly with
170
  * flex-direction: column-reverse. The remove videos in filmstrip should
150
  * flex-direction: column-reverse. The remove videos in filmstrip should

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

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

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

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

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

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

+ 0
- 5
interface_config.js View File

97
 
97
 
98
     FILM_STRIP_MAX_HEIGHT: 120,
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
     GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
100
     GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
106
 
101
 
107
     /**
102
     /**

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

1
-/* global APP, $, config, interfaceConfig */
1
+/* global APP, $, config */
2
 
2
 
3
 
3
 
4
 const UI = {};
4
 const UI = {};
143
     $.prompt.setDefaults({ persistent: false });
143
     $.prompt.setDefaults({ persistent: false });
144
 
144
 
145
     VideoLayout.init(eventEmitter);
145
     VideoLayout.init(eventEmitter);
146
-    if (!interfaceConfig.filmStripOnly) {
147
-        VideoLayout.initLargeVideo();
148
-    }
146
+    VideoLayout.initLargeVideo();
149
 
147
 
150
     // Do not animate the video area on UI start (second argument passed into
148
     // Do not animate the video area on UI start (second argument passed into
151
     // resizeVideoArea) because the animation is not visible anyway. Plus with
149
     // resizeVideoArea) because the animation is not visible anyway. Plus with
161
         $('body').addClass('desktop-browser');
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
         // in case of iAmSipGateway keep local video visible
163
         // in case of iAmSipGateway keep local video visible
169
         if (!config.iAmSipGateway) {
164
         if (!config.iAmSipGateway) {
170
             VideoLayout.setLocalVideoVisible(false);
165
             VideoLayout.setLocalVideoVisible(false);

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

135
      * @private
135
      * @private
136
      */
136
      */
137
     _generatePopupContent() {
137
     _generatePopupContent() {
138
-        if (interfaceConfig.filmStripOnly) {
139
-            return;
140
-        }
141
-
142
         const remoteVideoMenuContainer
138
         const remoteVideoMenuContainer
143
             = this.container.querySelector('.remotevideomenu');
139
             = this.container.querySelector('.remotevideomenu');
144
 
140
 

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

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

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

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

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

1
-/* global APP, $, interfaceConfig */
1
+/* global APP, $ */
2
 
2
 
3
 import Logger from 'jitsi-meet-logger';
3
 import Logger from 'jitsi-meet-logger';
4
 
4
 
203
         });
203
         });
204
         this._addShortcutToHelp('SPACE', 'keyboardShortcuts.pushToTalk');
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
          * FIXME: Currently focus keys are directly implemented below in
214
          * FIXME: Currently focus keys are directly implemented below in

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

54
     'UNSUPPORTED_BROWSERS',
54
     'UNSUPPORTED_BROWSERS',
55
     'VERTICAL_FILMSTRIP',
55
     'VERTICAL_FILMSTRIP',
56
     'VIDEO_LAYOUT_FIT',
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
     constructor(props: Props) {
84
     constructor(props: Props) {
85
         super(props);
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
         this.state = {
89
         this.state = {
96
             brandWatermarkLink:
90
             brandWatermarkLink:
237
     const {
231
     const {
238
         DEFAULT_LOGO_URL,
232
         DEFAULT_LOGO_URL,
239
         JITSI_WATERMARK_LINK,
233
         JITSI_WATERMARK_LINK,
240
-        SHOW_JITSI_WATERMARK,
241
-        filmStripOnly
234
+        SHOW_JITSI_WATERMARK
242
     } = interfaceConfig;
235
     } = interfaceConfig;
243
-    let _showJitsiWatermark = (!filmStripOnly
244
-          && (customizationReady && !customizationFailed)
245
-          && SHOW_JITSI_WATERMARK)
236
+    let _showJitsiWatermark = (
237
+        customizationReady && !customizationFailed
238
+        && SHOW_JITSI_WATERMARK)
246
     || !isValidRoom;
239
     || !isValidRoom;
247
     let _logoUrl = logoImageUrl;
240
     let _logoUrl = logoImageUrl;
248
     let _logoLink = logoClickUrl;
241
     let _logoLink = logoClickUrl;

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

152
  * @returns {void}
152
  * @returns {void}
153
  */
153
  */
154
 function _addChatMsgListener(conference, store) {
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
         || store.getState()['features/base/config'].iAmRecorder) {
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
         // or we are in iAmRecorder mode
158
         // or we are in iAmRecorder mode
161
         return;
159
         return;
162
     }
160
     }

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

14
 import { LargeVideo } from '../../../large-video';
14
 import { LargeVideo } from '../../../large-video';
15
 import { KnockingParticipantList, LobbyScreen } from '../../../lobby';
15
 import { KnockingParticipantList, LobbyScreen } from '../../../lobby';
16
 import { Prejoin, isPrejoinPageVisible } from '../../../prejoin';
16
 import { Prejoin, isPrejoinPageVisible } from '../../../prejoin';
17
-import { fullScreenChanged, setToolboxAlwaysVisible, showToolbox } from '../../../toolbox/actions.web';
17
+import { fullScreenChanged, showToolbox } from '../../../toolbox/actions.web';
18
 import { Toolbox } from '../../../toolbox/components/web';
18
 import { Toolbox } from '../../../toolbox/components/web';
19
 import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
19
 import { LAYOUTS, getCurrentLayout } from '../../../video-layout';
20
 import { maybeShowSuboptimalExperienceNotification } from '../../functions';
20
 import { maybeShowSuboptimalExperienceNotification } from '../../functions';
28
 import { default as Notice } from './Notice';
28
 import { default as Notice } from './Notice';
29
 
29
 
30
 declare var APP: Object;
30
 declare var APP: Object;
31
-declare var config: Object;
32
 declare var interfaceConfig: Object;
31
 declare var interfaceConfig: Object;
33
 
32
 
34
 /**
33
 /**
175
      * @returns {ReactElement}
174
      * @returns {ReactElement}
176
      */
175
      */
177
     render() {
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
         const {
177
         const {
184
             _iAmRecorder,
178
             _iAmRecorder,
185
             _isLobbyScreenVisible,
179
             _isLobbyScreenVisible,
186
             _layoutClassName,
180
             _layoutClassName,
187
             _showPrejoin
181
             _showPrejoin
188
         } = this.props;
182
         } = this.props;
189
-        const hideLabels = filmstripOnly || _iAmRecorder;
183
+        const hideLabels = _iAmRecorder;
190
 
184
 
191
         return (
185
         return (
192
             <div
186
             <div
198
                 <div id = 'videospace'>
192
                 <div id = 'videospace'>
199
                     <LargeVideo />
193
                     <LargeVideo />
200
                     <KnockingParticipantList />
194
                     <KnockingParticipantList />
201
-                    <Filmstrip filmstripOnly = { filmstripOnly } />
195
+                    <Filmstrip />
202
                     { hideLabels || <Labels /> }
196
                     { hideLabels || <Labels /> }
203
                 </div>
197
                 </div>
204
 
198
 
205
-                { filmstripOnly || _showPrejoin || _isLobbyScreenVisible || <Toolbox /> }
206
-                { filmstripOnly || <Chat /> }
199
+                { _showPrejoin || _isLobbyScreenVisible || <Toolbox /> }
200
+                <Chat />
207
 
201
 
208
                 { this.renderNotificationsContainer() }
202
                 { this.renderNotificationsContainer() }
209
 
203
 
210
                 <CalleeInfoContainer />
204
                 <CalleeInfoContainer />
211
 
205
 
212
-                { !filmstripOnly && _showPrejoin && <Prejoin />}
206
+                { _showPrejoin && <Prejoin />}
213
             </div>
207
             </div>
214
         );
208
         );
215
     }
209
     }
256
         dispatch(connect());
250
         dispatch(connect());
257
 
251
 
258
         maybeShowSuboptimalExperienceNotification(dispatch, t);
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
         const state = getState();
56
         const state = getState();
57
         const { feedbackPercentage = 100 } = state['features/base/config'];
57
         const { feedbackPercentage = 100 } = state['features/base/config'];
58
 
58
 
59
-        if (interfaceConfig.filmStripOnly || config.iAmRecorder) {
59
+        if (config.iAmRecorder) {
60
             // Intentionally fall through the if chain to prevent further action
60
             // Intentionally fall through the if chain to prevent further action
61
             // from being taken with regards to showing feedback.
61
             // from being taken with regards to showing feedback.
62
         } else if (state['features/base/dialog'].component === FeedbackDialog) {
62
         } else if (state['features/base/dialog'].component === FeedbackDialog) {

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

17
 import { setFilmstripHovered, setFilmstripVisible } from '../../actions';
17
 import { setFilmstripHovered, setFilmstripVisible } from '../../actions';
18
 import { shouldRemoteVideosBeVisible } from '../../functions';
18
 import { shouldRemoteVideosBeVisible } from '../../functions';
19
 
19
 
20
-import Toolbar from './Toolbar';
21
-
22
 declare var APP: Object;
20
 declare var APP: Object;
23
 declare var interfaceConfig: Object;
21
 declare var interfaceConfig: Object;
24
 
22
 
42
      */
40
      */
43
     _columns: number,
41
     _columns: number,
44
 
42
 
45
-    /**
46
-     * Whether the UI/UX is filmstrip-only.
47
-     */
48
-    _filmstripOnly: boolean,
49
-
50
     /**
43
     /**
51
      * The width of the filmstrip.
44
      * The width of the filmstrip.
52
      */
45
      */
142
      * @inheritdoc
135
      * @inheritdoc
143
      */
136
      */
144
     componentDidMount() {
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
         let toolbar = null;
198
         let toolbar = null;
208
 
199
 
209
         if (!this.props._hideToolbar) {
200
         if (!this.props._hideToolbar) {
210
-            toolbar = this.props._filmstripOnly ? <Toolbar /> : this._renderToggleButton();
201
+            toolbar = this._renderToggleButton();
211
         }
202
         }
212
 
203
 
213
         return (
204
         return (
367
 function _mapStateToProps(state) {
358
 function _mapStateToProps(state) {
368
     const { iAmSipGateway } = state['features/base/config'];
359
     const { iAmSipGateway } = state['features/base/config'];
369
     const { hovered, visible } = state['features/filmstrip'];
360
     const { hovered, visible } = state['features/filmstrip'];
370
-    const isFilmstripOnly = Boolean(interfaceConfig.filmStripOnly);
371
     const reduceHeight
361
     const reduceHeight
372
-        = !isFilmstripOnly && state['features/toolbox'].visible && interfaceConfig.TOOLBAR_BUTTONS.length;
362
+        = state['features/toolbox'].visible && interfaceConfig.TOOLBAR_BUTTONS.length;
373
     const remoteVideosVisible = shouldRemoteVideosBeVisible(state);
363
     const remoteVideosVisible = shouldRemoteVideosBeVisible(state);
374
     const { isOpen: shiftRight } = state['features/chat'];
364
     const { isOpen: shiftRight } = state['features/chat'];
375
     const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${
365
     const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${
376
         reduceHeight ? 'reduce-height' : ''
366
         reduceHeight ? 'reduce-height' : ''
377
     } ${shiftRight ? 'shift-right' : ''}`.trim();
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
     const { gridDimensions = {}, filmstripWidth } = state['features/filmstrip'].tileViewDimensions;
369
     const { gridDimensions = {}, filmstripWidth } = state['features/filmstrip'].tileViewDimensions;
382
 
370
 
383
     return {
371
     return {
384
         _className: className,
372
         _className: className,
385
         _columns: gridDimensions.columns,
373
         _columns: gridDimensions.columns,
386
         _currentLayout: getCurrentLayout(state),
374
         _currentLayout: getCurrentLayout(state),
387
-        _filmstripOnly: isFilmstripOnly,
388
         _filmstripWidth: filmstripWidth,
375
         _filmstripWidth: filmstripWidth,
389
         _hideScrollbar: Boolean(iAmSipGateway),
376
         _hideScrollbar: Boolean(iAmSipGateway),
390
         _hideToolbar: Boolean(iAmSipGateway),
377
         _hideToolbar: Boolean(iAmSipGateway),

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

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
                     || ((pinnedParticipant = getPinnedParticipant(state))
56
                     || ((pinnedParticipant = getPinnedParticipant(state))
57
                         && pinnedParticipant.local)))
57
                         && pinnedParticipant.local)))
58
 
58
 
59
-            || (typeof interfaceConfig === 'object'
60
-                && interfaceConfig.filmStripOnly)
61
-
62
             || state['features/base/config'].disable1On1Mode);
59
             || state['features/base/config'].disable1On1Mode);
63
 }
60
 }
64
 
61
 

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

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
     isLightOverlay?: boolean
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
  * Implements a React {@link Component} for the frame of the overlays.
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
      * Implements React's {@link Component#render()}.
29
      * Implements React's {@link Component#render()}.
64
      *
30
      *
66
      * @returns {ReactElement|null}
32
      * @returns {ReactElement|null}
67
      */
33
      */
68
     render() {
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
         return (
35
         return (
79
             <div
36
             <div
80
-                className = { containerClass }
37
+                className = { this.props.isLightOverlay ? 'overlay__container-light' : 'overlay__container' }
81
                 id = 'overlay'>
38
                 id = 'overlay'>
82
-                <div className = { contentClass }>
39
+                <div className = { 'overlay__content' }>
83
                     {
40
                     {
84
                         this.props.children
41
                         this.props.children
85
                     }
42
                     }

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

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
-// @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
-// @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
 // @flow
1
 // @flow
2
 
2
 
3
-export { default as FilmstripOnlyOverlayFrame } from './FilmstripOnlyOverlayFrame';
4
 export { default as OverlayFrame } from './OverlayFrame';
3
 export { default as OverlayFrame } from './OverlayFrame';
5
 
4
 
6
-export {
7
-    default as PageReloadFilmstripOnlyOverlay
8
-} from './PageReloadFilmstripOnlyOverlay';
9
 export { default as PageReloadOverlay } from './PageReloadOverlay';
5
 export { default as PageReloadOverlay } from './PageReloadOverlay';
10
-export {
11
-    default as SuspendedFilmstripOnlyOverlay
12
-} from './SuspendedFilmstripOnlyOverlay';
13
 export { default as SuspendedOverlay } from './SuspendedOverlay';
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
 // @flow
1
 // @flow
2
 
2
 
3
 import {
3
 import {
4
-    PageReloadFilmstripOnlyOverlay,
5
     PageReloadOverlay,
4
     PageReloadOverlay,
6
-    SuspendedFilmstripOnlyOverlay,
7
     SuspendedOverlay,
5
     SuspendedOverlay,
8
-    UserMediaPermissionsFilmstripOnlyOverlay,
9
     UserMediaPermissionsOverlay
6
     UserMediaPermissionsOverlay
10
 } from './components/web';
7
 } from './components/web';
11
 
8
 
17
  * @returns {Array<Object>}
14
  * @returns {Array<Object>}
18
  */
15
  */
19
 export function getOverlays(): Array<Object> {
16
 export function getOverlays(): Array<Object> {
20
-    const overlays = [
17
+    return [
18
+        PageReloadOverlay,
21
         SuspendedOverlay,
19
         SuspendedOverlay,
22
         UserMediaPermissionsOverlay
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
 import { IconSettings } from '../../../base/icons';
5
 import { IconSettings } from '../../../base/icons';
6
 import { connect } from '../../../base/redux';
6
 import { connect } from '../../../base/redux';
7
 import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';
7
 import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';
8
-import { openDeviceSelectionPopup } from '../../../device-selection';
9
 import { openSettingsDialog } from '../../actions';
8
 import { openSettingsDialog } from '../../actions';
10
 import { SETTINGS_TABS } from '../../constants';
9
 import { SETTINGS_TABS } from '../../constants';
11
 
10
 
12
-declare var interfaceConfig: Object;
13
-
14
 /**
11
 /**
15
  * The type of the React {@code Component} props of {@link SettingsButton}.
12
  * The type of the React {@code Component} props of {@link SettingsButton}.
16
  */
13
  */
17
 type Props = AbstractButtonProps & {
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
      * The default tab at which the settings dialog will be opened.
17
      * The default tab at which the settings dialog will be opened.
26
      */
18
      */
49
      */
41
      */
50
     _handleClick() {
42
     _handleClick() {
51
         const {
43
         const {
52
-            _filmstripOnly,
53
             defaultTab = SETTINGS_TABS.DEVICES,
44
             defaultTab = SETTINGS_TABS.DEVICES,
54
             dispatch } = this.props;
45
             dispatch } = this.props;
55
 
46
 
56
         sendAnalytics(createToolbarEvent('settings'));
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
  */
25
  */
26
 export function dockToolbox(dock: boolean): Function {
26
 export function dockToolbox(dock: boolean): Function {
27
     return (dispatch: Dispatch<any>, getState: Function) => {
27
     return (dispatch: Dispatch<any>, getState: Function) => {
28
-        if (interfaceConfig.filmStripOnly) {
29
-            return;
30
-        }
31
-
32
         const { timeoutMS, visible } = getState()['features/toolbox'];
28
         const { timeoutMS, visible } = getState()['features/toolbox'];
33
 
29
 
34
         if (dock) {
30
         if (dock) {

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

99
         // Editing etherpad
99
         // Editing etherpad
100
         state['features/etherpad']?.editing
100
         state['features/etherpad']?.editing
101
 
101
 
102
-        // We're in filmstrip-only mode
103
-        || (typeof interfaceConfig === 'object' && interfaceConfig?.filmStripOnly)
104
-
105
         // We pinned a participant
102
         // We pinned a participant
106
         || getPinnedParticipant(state)
103
         || getPinnedParticipant(state)
107
 
104
 

Loading…
Cancel
Save