64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
/* @flow */
|
|
|
|
import { Share } from 'react-native';
|
|
|
|
import { MiddlewareRegistry } from '../base/redux';
|
|
|
|
import { endShareRoom } from './actions';
|
|
import { BEGIN_SHARE_ROOM } from './actionTypes';
|
|
|
|
/**
|
|
* Middleware that captures room URL sharing actions and starts the sharing
|
|
* process.
|
|
*
|
|
* @param {Store} store - Redux store.
|
|
* @returns {Function}
|
|
*/
|
|
MiddlewareRegistry.register(store => next => action => {
|
|
switch (action.type) {
|
|
case BEGIN_SHARE_ROOM:
|
|
_shareRoom(action.roomURL, store.dispatch);
|
|
break;
|
|
}
|
|
|
|
return next(action);
|
|
});
|
|
|
|
/**
|
|
* Open the native sheet for sharing a specific conference/room URL.
|
|
*
|
|
* @param {string} roomURL - The URL of the conference/room to be shared.
|
|
* @param {Dispatch} dispatch - The Redux dispatch function.
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
function _shareRoom(roomURL: string, dispatch: Function) {
|
|
// TODO The following display/human-readable strings were submitted for
|
|
// review before i18n was introduces in react/. However, I reviewed it
|
|
// afterwards. Translate the display/human-readable strings.
|
|
const message = `Click the following link to join the meeting: ${roomURL}`;
|
|
const title = 'Jitsi Meet Conference';
|
|
const onFulfilled
|
|
= (shared: boolean) => dispatch(endShareRoom(roomURL, shared));
|
|
|
|
Share.share(
|
|
/* content */ {
|
|
message,
|
|
title
|
|
},
|
|
/* options */ {
|
|
dialogTitle: title, // Android
|
|
subject: title // iOS
|
|
})
|
|
.then(
|
|
/* onFulfilled */ value => {
|
|
onFulfilled(value.action === Share.sharedAction);
|
|
},
|
|
/* onRejected */ reason => {
|
|
console.error(
|
|
`Failed to share conference/room URL ${roomURL}:`,
|
|
reason);
|
|
onFulfilled(false);
|
|
});
|
|
}
|