UNPKG

@azure/communication-react

Version:

React library for building modern communication user experiences utilizing Azure Communication Services

128 lines 7.59 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { getDisplayName, getIdentifier, getStartCaptionsInProgress, getSupportedCaptionLanguages } from './baseSelectors'; import { allRemoteParticipantsSelector } from './remoteParticipantsSelector'; import { getRealTimeTextStatus, getRealTimeText } from './baseSelectors'; import { getCaptions, getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage, getSupportedSpokenLanguages } from './baseSelectors'; import * as reselect from 'reselect'; import { toFlatCommunicationIdentifier } from "../../acs-ui-common/src"; import { getRemoteParticipantDisplayName } from './utils/callUtils'; /** * Selector for {@link StartCaptionsButton} component. * * @public */ export const startCaptionsButtonSelector = reselect.createSelector([getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage], (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => { return { checked: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false, currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : '', currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us' }; }); /** * Selector for Changing caption language and spoken language * * @public */ export const captionSettingsSelector = reselect.createSelector([getSupportedCaptionLanguages, getCurrentCaptionLanguage, getSupportedSpokenLanguages, getCurrentSpokenLanguage, getCaptionsStatus], (supportedCaptionLanguages, currentCaptionLanguage, supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive) => { return { supportedCaptionLanguages: supportedCaptionLanguages !== null && supportedCaptionLanguages !== void 0 ? supportedCaptionLanguages : [], currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : 'en', supportedSpokenLanguages: supportedSpokenLanguages !== null && supportedSpokenLanguages !== void 0 ? supportedSpokenLanguages : ['en-us'], currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us', isCaptionsFeatureActive: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false }; }); /** * Selector for {@link CaptionsBanner} component. * * @public */ export const captionsBannerSelector = reselect.createSelector([getCaptions, getRealTimeText, getCaptionsStatus, getRealTimeTextStatus, getStartCaptionsInProgress, allRemoteParticipantsSelector, getDisplayName, getIdentifier], (captions, realTimeTexts, isCaptionsFeatureActive, isRealTimeTextActive, startCaptionsInProgress, allRemoteParticipants, displayName, identifier) => { var _a, _b; const captionsInfo = captions === null || captions === void 0 ? void 0 : captions.map((c, index) => { const userId = getCaptionsSpeakerIdentifier(c); let finalDisplayName; if (userId === identifier) { finalDisplayName = displayName; } else { finalDisplayName = getRemoteParticipantDisplayName(userId, allRemoteParticipants); } return { id: (finalDisplayName !== null && finalDisplayName !== void 0 ? finalDisplayName : 'Unnamed Participant') + index, displayName: finalDisplayName !== null && finalDisplayName !== void 0 ? finalDisplayName : 'Unnamed Participant', captionText: c.captionText, userId, createdTimeStamp: c.timestamp, isFinalized: c.resultType === 'Final' }; }); const completedRealTimeTexts = (_a = realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.completedMessages) === null || _a === void 0 ? void 0 : _a.filter(rtt => rtt.message !== '').map(rtt => { const userId = getRealTimeTextSpeakerIdentifier(rtt); return { id: rtt.sequenceId, displayName: getRealTimeTextDisplayName(rtt, identifier, allRemoteParticipants, displayName, userId), message: rtt.message, userId, isTyping: rtt.resultType === 'Partial', isMe: rtt.isMe, finalizedTimeStamp: rtt.updatedTimestamp }; }); const inProgressRealTimeTexts = (_b = realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.currentInProgress) === null || _b === void 0 ? void 0 : _b.filter(rtt => rtt.message !== '').map(rtt => { const userId = getRealTimeTextSpeakerIdentifier(rtt); return { id: rtt.sequenceId, displayName: getRealTimeTextDisplayName(rtt, identifier, allRemoteParticipants, displayName, userId), message: rtt.message, userId, isTyping: rtt.resultType === 'Partial', isMe: rtt.isMe, finalizedTimeStamp: rtt.updatedTimestamp }; }); const myInProgress = (realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.myInProgress) && realTimeTexts.myInProgress.message !== '' ? { id: realTimeTexts.myInProgress.sequenceId, displayName: displayName, message: realTimeTexts.myInProgress.message, userId: identifier, isTyping: realTimeTexts.myInProgress.resultType === 'Partial', isMe: true, finalizedTimeStamp: realTimeTexts.myInProgress.updatedTimestamp } : undefined; // find the last final local real time text caption if myInProgress is not available let latestLocalRealTimeText; if (!myInProgress) { latestLocalRealTimeText = realTimeTexts && realTimeTexts.completedMessages && realTimeTexts.completedMessages.slice().reverse().find(rtt => rtt.isMe); } return { captions: captionsInfo !== null && captionsInfo !== void 0 ? captionsInfo : [], realTimeTexts: { completedMessages: completedRealTimeTexts, currentInProgress: inProgressRealTimeTexts, myInProgress: myInProgress }, isCaptionsOn: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false, startCaptionsInProgress: startCaptionsInProgress !== null && startCaptionsInProgress !== void 0 ? startCaptionsInProgress : false, isRealTimeTextOn: isRealTimeTextActive !== null && isRealTimeTextActive !== void 0 ? isRealTimeTextActive : false, latestLocalRealTimeText: (myInProgress !== null && myInProgress !== void 0 ? myInProgress : latestLocalRealTimeText) }; }); const getCaptionsSpeakerIdentifier = (captions) => { return captions.speaker.identifier ? toFlatCommunicationIdentifier(captions.speaker.identifier) : ''; }; const getRealTimeTextSpeakerIdentifier = (realTimeText) => { return realTimeText.sender.identifier ? toFlatCommunicationIdentifier(realTimeText.sender.identifier) : ''; }; const getRealTimeTextDisplayName = (realTimeText, identifier, allRemoteParticipants, displayName, userId) => { let finalDisplayName; if (userId === identifier) { finalDisplayName = displayName; } else { finalDisplayName = getRemoteParticipantDisplayName(userId, allRemoteParticipants); } return finalDisplayName !== null && finalDisplayName !== void 0 ? finalDisplayName : 'Unnamed Participant'; }; //# sourceMappingURL=captionsSelector.js.map