Quellcode durchsuchen

Fixes inviting more than one participant (#4352)

* Fixes inviting more than one participant.

* Shows a notification when participants are invited.

* Adds support for both .id and .user_id props for people query results.
master
Дамян Минков vor 5 Jahren
Ursprung
Commit
08c4933c1b
Es ist kein Account mit der E-Mail-Adresse des Committers verbunden

+ 3
- 0
lang/main.json Datei anzeigen

472
         "focus": "Conference focus",
472
         "focus": "Conference focus",
473
         "focusFail": "__component__ not available - retry in __ms__ sec",
473
         "focusFail": "__component__ not available - retry in __ms__ sec",
474
         "grantedTo": "Moderator rights granted to __to__!",
474
         "grantedTo": "Moderator rights granted to __to__!",
475
+        "invitedOneMember": "__name__ has been invited",
476
+        "invitedThreePlusMembers": "__name__ and __count__ others have been invited",
477
+        "invitedTwoMembers": "__first__ and __second__ have been invited",
475
         "kickParticipant": "__kicked__ was kicked by __kicker__",
478
         "kickParticipant": "__kicked__ was kicked by __kicker__",
476
         "me": "Me",
479
         "me": "Me",
477
         "moderator": "Moderator rights granted!",
480
         "moderator": "Moderator rights granted!",

+ 45
- 1
react/features/invite/components/add-people-dialog/AbstractAddPeopleDialog.js Datei anzeigen

11
     isAddPeopleEnabled,
11
     isAddPeopleEnabled,
12
     isDialOutEnabled
12
     isDialOutEnabled
13
 } from '../../functions';
13
 } from '../../functions';
14
+import {
15
+    NOTIFICATION_TIMEOUT,
16
+    showNotification
17
+} from '../../../notifications';
14
 
18
 
15
 const logger = require('jitsi-meet-logger').getLogger(__filename);
19
 const logger = require('jitsi-meet-logger').getLogger(__filename);
16
 
20
 
21
      */
25
      */
22
     _addPeopleEnabled: boolean,
26
     _addPeopleEnabled: boolean,
23
 
27
 
28
+    /**
29
+     * Whether or not call flows are enabled.
30
+     */
31
+    _callFlowsEnabled: boolean,
32
+
24
     /**
33
     /**
25
      * The URL for validating if a phone number can be called.
34
      * The URL for validating if a phone number can be called.
26
      */
35
      */
115
             addToCallInProgress: true
124
             addToCallInProgress: true
116
         });
125
         });
117
 
126
 
118
-        const { dispatch } = this.props;
127
+        const { _callFlowsEnabled, dispatch } = this.props;
119
 
128
 
120
         return dispatch(invite(invitees))
129
         return dispatch(invite(invitees))
121
             .then(invitesLeftToSend => {
130
             .then(invitesLeftToSend => {
140
                     this.setState({
149
                     this.setState({
141
                         addToCallError: true
150
                         addToCallError: true
142
                     });
151
                     });
152
+                } else if (!_callFlowsEnabled) {
153
+                    const invitedCount = invitees.length;
154
+                    let notificationProps;
155
+
156
+                    if (invitedCount >= 3) {
157
+                        notificationProps = {
158
+                            titleArguments: {
159
+                                name: invitees[0].name,
160
+                                count: invitedCount - 1
161
+                            },
162
+                            titleKey: 'notify.invitedThreePlusMembers'
163
+                        };
164
+                    } else if (invitedCount === 2) {
165
+                        notificationProps = {
166
+                            titleArguments: {
167
+                                first: invitees[0].name,
168
+                                second: invitees[1].name
169
+                            },
170
+                            titleKey: 'notify.invitedTwoMembers'
171
+                        };
172
+                    } else if (invitedCount) {
173
+                        notificationProps = {
174
+                            titleArguments: {
175
+                                name: invitees[0].name
176
+                            },
177
+                            titleKey: 'notify.invitedOneMember'
178
+                        };
179
+                    }
180
+
181
+                    if (notificationProps) {
182
+                        dispatch(
183
+                            showNotification(notificationProps, NOTIFICATION_TIMEOUT));
184
+                    }
143
                 }
185
                 }
144
 
186
 
145
                 return invitesLeftToSend;
187
                 return invitesLeftToSend;
206
  */
248
  */
207
 export function _mapStateToProps(state: Object) {
249
 export function _mapStateToProps(state: Object) {
208
     const {
250
     const {
251
+        callFlowsEnabled,
209
         dialOutAuthUrl,
252
         dialOutAuthUrl,
210
         peopleSearchQueryTypes,
253
         peopleSearchQueryTypes,
211
         peopleSearchUrl
254
         peopleSearchUrl
213
 
256
 
214
     return {
257
     return {
215
         _addPeopleEnabled: isAddPeopleEnabled(state),
258
         _addPeopleEnabled: isAddPeopleEnabled(state),
259
+        _callFlowsEnabled: callFlowsEnabled,
216
         _dialOutAuthUrl: dialOutAuthUrl,
260
         _dialOutAuthUrl: dialOutAuthUrl,
217
         _dialOutEnabled: isDialOutEnabled(state),
261
         _dialOutEnabled: isDialOutEnabled(state),
218
         _jwt: state['features/base/jwt'].jwt,
262
         _jwt: state['features/base/jwt'].jwt,

+ 8
- 5
react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js Datei anzeigen

212
      * @returns {string}
212
      * @returns {string}
213
      */
213
      */
214
     _keyExtractor(item) {
214
     _keyExtractor(item) {
215
-        return item.type === 'user' ? item.user_id : item.number;
215
+        return item.type === 'user' ? item.id || item.user_id : item.number;
216
     }
216
     }
217
 
217
 
218
     _onCloseAddPeopleDialog: () => void
218
     _onCloseAddPeopleDialog: () => void
315
                         && !inviteItems.find(
315
                         && !inviteItems.find(
316
                             _.matchesProperty('number', result.number));
316
                             _.matchesProperty('number', result.number));
317
                 case 'user':
317
                 case 'user':
318
-                    return result.user_id && !inviteItems.find(
319
-                        _.matchesProperty('user_id', result.user_id));
318
+                    return !inviteItems.find(
319
+                        (result.user_id && _.matchesProperty('id', result.id))
320
+                        || (result.user_id && _.matchesProperty('user_id', result.user_id)));
320
                 default:
321
                 default:
321
                     return false;
322
                     return false;
322
                 }
323
                 }
367
             break;
368
             break;
368
         case 'user':
369
         case 'user':
369
             selected
370
             selected
370
-                = inviteItems.find(_.matchesProperty('user_id', item.user_id));
371
+                = item.id
372
+                    ? inviteItems.find(_.matchesProperty('id', item.id))
373
+                    : inviteItems.find(_.matchesProperty('user_id', item.user_id));
371
             renderableItem = {
374
             renderableItem = {
372
                 avatar: item.avatar,
375
                 avatar: item.avatar,
373
-                key: item.user_id,
376
+                key: item.id || item.user_id,
374
                 title: item.name
377
                 title: item.name
375
             };
378
             };
376
             break;
379
             break;

+ 3
- 3
react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js Datei anzeigen

254
                 if (invitesLeftToSend.length) {
254
                 if (invitesLeftToSend.length) {
255
                     const unsentInviteIDs
255
                     const unsentInviteIDs
256
                         = invitesLeftToSend.map(invitee =>
256
                         = invitesLeftToSend.map(invitee =>
257
-                            invitee.id || invitee.number);
257
+                            invitee.id || invitee.user_id || invitee.number);
258
                     const itemsToSelect
258
                     const itemsToSelect
259
                         = inviteItems.filter(({ item }) =>
259
                         = inviteItems.filter(({ item }) =>
260
-                            unsentInviteIDs.includes(item.id || item.number));
260
+                            unsentInviteIDs.includes(item.id || item.user_id || item.number));
261
 
261
 
262
                     if (this._multiselect) {
262
                     if (this._multiselect) {
263
                         this._multiselect.setSelectedItems(itemsToSelect);
263
                         this._multiselect.setSelectedItems(itemsToSelect);
296
                         size = 'xsmall'
296
                         size = 'xsmall'
297
                         src = { user.avatar } />
297
                         src = { user.avatar } />
298
                 },
298
                 },
299
-                value: user.id
299
+                value: user.id || user.user_id
300
             };
300
             };
301
         });
301
         });
302
 
302
 

Laden…
Abbrechen
Speichern