@selfcommunity/react-ui 0.8.0-live.73 → 0.8.0-live.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/CreateLiveStreamDialog/LiveStreamSelector/LiveStreamSelector.js +3 -3
- package/lib/cjs/components/EventForm/EventAddress.js +5 -1
- package/lib/cjs/components/LiveStreamRoom/LiveStreamRoom.js +7 -1
- package/lib/cjs/components/LiveStreamRoom/LiveStreamVideoConference/VideoConference.js +15 -10
- package/lib/cjs/components/LiveStreamRoom/LiveStreamVideoConference/useLiveStreamCheck.js +10 -1
- package/lib/cjs/components/LiveStreamRoom/constants.d.ts +1 -1
- package/lib/cjs/components/LiveStreamRoom/constants.js +1 -1
- package/lib/cjs/components/UserLiveStreamWidget/UserLiveStreamWidget.js +1 -2
- package/lib/esm/components/CreateLiveStreamDialog/LiveStreamSelector/LiveStreamSelector.js +3 -3
- package/lib/esm/components/EventForm/EventAddress.js +5 -1
- package/lib/esm/components/LiveStreamRoom/LiveStreamRoom.js +7 -1
- package/lib/esm/components/LiveStreamRoom/LiveStreamVideoConference/VideoConference.js +15 -10
- package/lib/esm/components/LiveStreamRoom/LiveStreamVideoConference/useLiveStreamCheck.js +10 -1
- package/lib/esm/components/LiveStreamRoom/constants.d.ts +1 -1
- package/lib/esm/components/LiveStreamRoom/constants.js +1 -1
- package/lib/esm/components/UserLiveStreamWidget/UserLiveStreamWidget.js +1 -2
- package/lib/umd/react-ui.js +1 -1
- package/package.json +7 -7
|
@@ -79,7 +79,7 @@ function LiveStreamSelector(inProps) {
|
|
|
79
79
|
const isFreeTrialTier = (0, react_1.useMemo)(() => preferences &&
|
|
80
80
|
react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER in preferences &&
|
|
81
81
|
preferences[react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value &&
|
|
82
|
-
preferences[react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value
|
|
82
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value === types_2.SCCommunitySubscriptionTier.FREE_TRIAL, [preferences]);
|
|
83
83
|
const intl = (0, react_intl_1.useIntl)();
|
|
84
84
|
const options = [
|
|
85
85
|
{
|
|
@@ -171,7 +171,7 @@ function LiveStreamSelector(inProps) {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
if (_message) {
|
|
174
|
-
return ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.warning }, { children: (0, jsx_runtime_1.jsx)(material_1.Alert, Object.assign({ variant: "filled", severity: "warning" }, { children:
|
|
174
|
+
return ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.warning }, { children: (0, jsx_runtime_1.jsx)(material_1.Alert, Object.assign({ variant: "filled", severity: "warning" }, { children: _message })) })));
|
|
175
175
|
}
|
|
176
176
|
return null;
|
|
177
177
|
}, [timeRemaining, isFreeTrialTier]);
|
|
@@ -183,6 +183,6 @@ function LiveStreamSelector(inProps) {
|
|
|
183
183
|
}, theme: undefined }, { children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h6", component: "h2", sx: { fontWeight: 500 } }, { children: option.title })), (0, jsx_runtime_1.jsx)(material_1.Radio, { checked: selectedOption === option.type })] }), (0, jsx_runtime_1.jsx)("img", { src: option.image, alt: "logo" }), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ component: "ul" }, { children: option.features.map((feature, featureIndex) => {
|
|
184
184
|
const _Icon = option.icons[featureIndex];
|
|
185
185
|
return ((0, jsx_runtime_1.jsxs)(FeatureItem, Object.assign({ component: "li" }, { children: [_Icon, (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "body2", color: "text.secondary", sx: { flex: 1 } }, { children: feature }))] }), featureIndex));
|
|
186
|
-
}) }))] }), index))) })), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ disabled: !selectedOption || !timeRemaining, variant: "contained", onClick: handleNext, color: "secondary" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamForm.selector.next", defaultMessage: "ui.liveStreamForm.selector.next" }) })) }))] })));
|
|
186
|
+
}) }))] }), index))) })), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ disabled: !selectedOption || !timeRemaining || isFreeTrialTier, variant: "contained", onClick: handleNext, color: "secondary" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamForm.selector.next", defaultMessage: "ui.liveStreamForm.selector.next" }) })) }))] })));
|
|
187
187
|
}
|
|
188
188
|
exports.default = LiveStreamSelector;
|
|
@@ -79,7 +79,11 @@ function EventAddress(inProps) {
|
|
|
79
79
|
react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER in preferences &&
|
|
80
80
|
preferences[react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value &&
|
|
81
81
|
preferences[react_core_1.SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value === types_1.SCCommunitySubscriptionTier.FREE_TRIAL, [preferences]);
|
|
82
|
-
const canViewLiveTab = (0, react_1.useMemo)(() => {
|
|
82
|
+
const canViewLiveTab = (0, react_1.useMemo)(() => {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
return (!isFreeTrialTier || (isFreeTrialTier && (scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) && (scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user.id) === 1)) &&
|
|
85
|
+
(((_b = (_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.permission) === null || _b === void 0 ? void 0 : _b.create_live_stream) || event.live_stream);
|
|
86
|
+
}, [(_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.permission, event]);
|
|
83
87
|
// HANDLERS
|
|
84
88
|
const handleChange = (_event, newValue) => {
|
|
85
89
|
setLocation(newValue);
|
|
@@ -137,6 +137,9 @@ function LiveStreamRoom(inProps) {
|
|
|
137
137
|
if (error.response.data.errors[0].code !== types_1.SCLiveStreamConnectionDetailsErrorType.WAITING_HOST_TO_START_LIVE_STREAM) {
|
|
138
138
|
setError(_msg);
|
|
139
139
|
}
|
|
140
|
+
else {
|
|
141
|
+
setTimeout(() => toggleAttrDisabledPrejoinActions(false), 3000);
|
|
142
|
+
}
|
|
140
143
|
enqueueSnackbar(_msg, { variant: 'error', autoHideDuration: 5000 });
|
|
141
144
|
}
|
|
142
145
|
else {
|
|
@@ -175,7 +178,10 @@ function LiveStreamRoom(inProps) {
|
|
|
175
178
|
/**
|
|
176
179
|
* Renders root object
|
|
177
180
|
*/
|
|
178
|
-
return ((0, jsx_runtime_1.jsx)(Root, Object.assign({ id: id, className: (0, classnames_1.default)(classes.root, className) }, rest, { children: scLiveStream.closed_at_by_host ? ((0, jsx_runtime_1.jsx)(DialogRoot, Object.assign({ open: true, maxWidth: 'md', fullWidth: true }, { children: (0, jsx_runtime_1.jsxs)(DialogContent_1.default, Object.assign({ className: classes.endConferenceWrap }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h5" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.conference.closed", defaultMessage: "ui.liveStreamRoom.conference.closed" }) })), (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ variant: "contained", color: "secondary", component: react_core_1.Link, to: '/', className: classes.btnBackHome }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.button.backHome", defaultMessage: "ui.liveStreamRoom.button.backHome" }) }))] })) }))) : ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.content, "data-lk-theme": "default" }, { children: connectionDetails === undefined || preJoinChoices === undefined ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [startPrejoinContent && (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.startPrejoinContent }, { children: startPrejoinContent })), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title) && ((0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: 'div', variant: "h5", className: classes.title }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title }))), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description) && ((0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: 'div', variant: "body1", className: classes.description }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description }))), (0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: (0, classnames_1.default)(classes.preJoin, { [classes.preJoinLoading]: loading || error }) }, { children: [(0, jsx_runtime_1.jsx)(LiveStreamProvider_1.LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: (0, jsx_runtime_1.jsx)(PreJoin_1.PreJoin, { defaults: preJoinDefaults, onSubmit: handlePreJoinSubmit, onError: handlePreJoinError, joinLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.joinRoom', defaultMessage: 'ui.liveStreamRoom.preJoin.joinRoom' }), micLabel: intl.formatMessage({
|
|
181
|
+
return ((0, jsx_runtime_1.jsx)(Root, Object.assign({ id: id, className: (0, classnames_1.default)(classes.root, className) }, rest, { children: scLiveStream.closed_at_by_host ? ((0, jsx_runtime_1.jsx)(DialogRoot, Object.assign({ open: true, maxWidth: 'md', fullWidth: true }, { children: (0, jsx_runtime_1.jsxs)(DialogContent_1.default, Object.assign({ className: classes.endConferenceWrap }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h5" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.conference.closed", defaultMessage: "ui.liveStreamRoom.conference.closed" }) })), (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ variant: "contained", color: "secondary", component: react_core_1.Link, to: '/', className: classes.btnBackHome }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.button.backHome", defaultMessage: "ui.liveStreamRoom.button.backHome" }) }))] })) }))) : ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.content, "data-lk-theme": "default" }, { children: connectionDetails === undefined || preJoinChoices === undefined ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [startPrejoinContent && (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.startPrejoinContent }, { children: startPrejoinContent })), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title) && ((0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: 'div', variant: "h5", className: classes.title }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title }))), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description) && ((0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: 'div', variant: "body1", className: classes.description }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description }))), (0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: (0, classnames_1.default)(classes.preJoin, { [classes.preJoinLoading]: loading || error }) }, { children: [(0, jsx_runtime_1.jsx)(LiveStreamProvider_1.LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: (0, jsx_runtime_1.jsx)(PreJoin_1.PreJoin, { defaults: preJoinDefaults, onSubmit: handlePreJoinSubmit, onError: handlePreJoinError, joinLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.joinRoom', defaultMessage: 'ui.liveStreamRoom.preJoin.joinRoom' }), micLabel: intl.formatMessage({
|
|
182
|
+
id: 'ui.liveStreamRoom.preJoin.microphone',
|
|
183
|
+
defaultMessage: 'ui.liveStreamRoom.preJoin.microphone'
|
|
184
|
+
}), camLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.camera', defaultMessage: 'ui.liveStreamRoom.preJoin.camera' }), userLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.username', defaultMessage: 'ui.liveStreamRoom.preJoin.username' }) }) })), loading && ((0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: classes.prejoinLoader }, { children: [(0, jsx_runtime_1.jsx)(material_1.CircularProgress, {}), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: 'div', variant: "body2" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.connecting", defaultMessage: "ui.liveStreamRoom.connecting" }) }))] })))] })), (0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: classes.endPrejoinContent }, { children: [Boolean(scUserContext.user &&
|
|
179
185
|
scUserContext.user.id !== scLiveStream.host.id &&
|
|
180
186
|
scLiveStream &&
|
|
181
187
|
(((_a = scLiveStream.settings) === null || _a === void 0 ? void 0 : _a.muteParticipants) || (scLiveStream && ((_b = scLiveStream.settings) === null || _b === void 0 ? void 0 : _b.disableVideo)))) && ((0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ sx: { width: '60%' }, spacing: 1 }, { children: [scLiveStream && ((_c = scLiveStream.settings) === null || _c === void 0 ? void 0 : _c.muteParticipants) && ((0, jsx_runtime_1.jsx)(material_1.Alert, Object.assign({ variant: "filled", severity: "info", component: 'div' }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.hostDisableMicrophone", defaultMessage: "ui.liveStreamRoom.hostDisableMicrophone" }) }))), scLiveStream && ((_d = scLiveStream.settings) === null || _d === void 0 ? void 0 : _d.disableVideo) && ((0, jsx_runtime_1.jsx)(material_1.Alert, Object.assign({ variant: "filled", severity: "info" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.liveStreamRoom.hostDisableVideo", defaultMessage: "ui.liveStreamRoom.hostDisableVideo" }) })))] }))), endPrejoinContent] }))] })) : ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.conference }, { children: (0, jsx_runtime_1.jsx)(LiveStreamProvider_1.LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: (0, jsx_runtime_1.jsx)(LiveStreamVideoConference_1.default, Object.assign({ connectionDetails: connectionDetails, userChoices: preJoinChoices }, LiveStreamVideoConferenceComponentProps)) })) }))) }))) })));
|
|
@@ -26,6 +26,7 @@ function VideoConference(_a) {
|
|
|
26
26
|
unreadMessages: 0,
|
|
27
27
|
showSettings: showSettings || false
|
|
28
28
|
});
|
|
29
|
+
const [focusInitialized, setFocusInitialized] = React.useState(false);
|
|
29
30
|
const lastAutoFocusedScreenShareTrack = React.useRef(null);
|
|
30
31
|
const tracks = (0, components_react_1.useTracks)([
|
|
31
32
|
{ source: livekit_client_1.Track.Source.Camera, withPlaceholder: true },
|
|
@@ -53,7 +54,7 @@ function VideoConference(_a) {
|
|
|
53
54
|
// HOOKS
|
|
54
55
|
(0, useLiveStreamCheck_1.useLivestreamCheck)();
|
|
55
56
|
(0, react_1.useEffect)(() => {
|
|
56
|
-
var _a, _b, _c, _d, _e, _f
|
|
57
|
+
var _a, _b, _c, _d, _e, _f;
|
|
57
58
|
// If screen share tracks are published, and no pin is set explicitly, auto set the screen share.
|
|
58
59
|
if (screenShareTracks.some((track) => track.publication.isSubscribed) && lastAutoFocusedScreenShareTrack.current === null) {
|
|
59
60
|
components_core_1.log.debug('Auto set screen share focus:', { newScreenShareTrack: screenShareTracks[0] });
|
|
@@ -72,7 +73,16 @@ function VideoConference(_a) {
|
|
|
72
73
|
(_f = (_e = layoutContext.pin).dispatch) === null || _f === void 0 ? void 0 : _f.call(_e, { msg: 'set_pin', trackReference: updatedFocusTrack });
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
|
-
|
|
76
|
+
}, [
|
|
77
|
+
screenShareTracks.map((ref) => `${ref.publication.trackSid}_${ref.publication.isSubscribed}`).join(),
|
|
78
|
+
(_c = focusTrack === null || focusTrack === void 0 ? void 0 : focusTrack.publication) === null || _c === void 0 ? void 0 : _c.trackSid,
|
|
79
|
+
tracks,
|
|
80
|
+
participants,
|
|
81
|
+
speakerFocused
|
|
82
|
+
]);
|
|
83
|
+
(0, react_1.useEffect)(() => {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
if (speakerFocused && !focusInitialized) {
|
|
76
86
|
const speaker = participants.find((pt) => {
|
|
77
87
|
return pt.name === speakerFocused.username;
|
|
78
88
|
});
|
|
@@ -83,16 +93,11 @@ function VideoConference(_a) {
|
|
|
83
93
|
}
|
|
84
94
|
return false;
|
|
85
95
|
});
|
|
86
|
-
(
|
|
96
|
+
(_b = (_a = layoutContext.pin).dispatch) === null || _b === void 0 ? void 0 : _b.call(_a, { msg: 'set_pin', trackReference: updatedFocusTrack });
|
|
97
|
+
setFocusInitialized(true);
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
|
-
}, [
|
|
90
|
-
screenShareTracks.map((ref) => `${ref.publication.trackSid}_${ref.publication.isSubscribed}`).join(),
|
|
91
|
-
(_c = focusTrack === null || focusTrack === void 0 ? void 0 : focusTrack.publication) === null || _c === void 0 ? void 0 : _c.trackSid,
|
|
92
|
-
tracks,
|
|
93
|
-
participants,
|
|
94
|
-
speakerFocused
|
|
95
|
-
]);
|
|
100
|
+
}, [tracks, participants, speakerFocused]);
|
|
96
101
|
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "lk-video-conference" }, props, { children: [(0, components_core_1.isWeb)() && ((0, jsx_runtime_1.jsxs)(components_react_1.LayoutContextProvider, Object.assign({ value: layoutContext, onPinChange: handleFocusStateChange, onWidgetChange: widgetUpdate }, { children: [(0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "lk-video-conference-inner" }, { children: [!focusTrack ? ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: "lk-grid-layout-wrapper" }, { children: (0, jsx_runtime_1.jsx)(components_react_1.GridLayout, Object.assign({ tracks: tracks }, { children: (0, jsx_runtime_1.jsx)(ParticipantTile_1.ParticipantTile, {}) })) }))) : ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: "lk-focus-layout-wrapper" }, { children: hideParticipantsList ? ((0, jsx_runtime_1.jsx)(FocusLayout_1.FocusLayoutContainerNoParticipants, { children: focusTrack && (0, jsx_runtime_1.jsx)(FocusLayout_1.FocusLayout, { trackRef: focusTrack }) })) : ((0, jsx_runtime_1.jsxs)(FocusLayout_1.FocusLayoutContainer, { children: [(0, jsx_runtime_1.jsx)(components_react_1.CarouselLayout, Object.assign({ tracks: carouselTracks }, { children: (0, jsx_runtime_1.jsx)(ParticipantTile_1.ParticipantTile, {}) })), focusTrack && (0, jsx_runtime_1.jsx)(FocusLayout_1.FocusLayout, { trackRef: focusTrack })] })) }))), (0, jsx_runtime_1.jsx)(ControlBar_1.ControlBar, { controls: Object.assign({
|
|
97
102
|
chat: !disableChat,
|
|
98
103
|
microphone: !disableMicrophone,
|
|
@@ -49,6 +49,9 @@ function useLivestreamCheck(warningThreshold = constants_1.WARNING_THRESHOLD_EXP
|
|
|
49
49
|
setIsExpired(true);
|
|
50
50
|
clearInterval(intervalRef.current);
|
|
51
51
|
}
|
|
52
|
+
else if (isExpiringSoon) {
|
|
53
|
+
setIsExpiringSoon(false);
|
|
54
|
+
}
|
|
52
55
|
})
|
|
53
56
|
.catch((error) => {
|
|
54
57
|
console.error('Error fetching live status:', error);
|
|
@@ -75,6 +78,9 @@ function useLivestreamCheck(warningThreshold = constants_1.WARNING_THRESHOLD_EXP
|
|
|
75
78
|
}
|
|
76
79
|
return;
|
|
77
80
|
}
|
|
81
|
+
else if (isExpiringSoon) {
|
|
82
|
+
setIsExpiringSoon(false);
|
|
83
|
+
}
|
|
78
84
|
__DEBUG && console.log('Checking live speaker...');
|
|
79
85
|
const speaker = participants.find((pt) => {
|
|
80
86
|
return pt.name === liveStream.host.username;
|
|
@@ -93,11 +99,14 @@ function useLivestreamCheck(warningThreshold = constants_1.WARNING_THRESHOLD_EXP
|
|
|
93
99
|
buttonProps.onClick();
|
|
94
100
|
}
|
|
95
101
|
}
|
|
102
|
+
else if (isExpiringSoon) {
|
|
103
|
+
setIsExpiringSoon(false);
|
|
104
|
+
}
|
|
96
105
|
__DEBUG && console.log('Checking live status resources...');
|
|
97
106
|
fetchLivestreamStatus();
|
|
98
107
|
}, [isExpired, isExpiringSoon, buttonProps, participants]);
|
|
99
108
|
(0, react_1.useEffect)(() => {
|
|
100
|
-
intervalRef.current = setInterval(check, constants_1.LIVE_CHECKING_INTERVAL *
|
|
109
|
+
intervalRef.current = setInterval(check, constants_1.LIVE_CHECKING_INTERVAL * 60000);
|
|
101
110
|
return () => intervalRef.current && clearInterval(intervalRef.current);
|
|
102
111
|
}, [isExpired, isExpiringSoon]);
|
|
103
112
|
return { timeRemaining, isExpiringSoon, isExpired };
|
|
@@ -7,7 +7,7 @@ export declare const defaultVideoOptions: {
|
|
|
7
7
|
* Checking live status on VideoLiveConference
|
|
8
8
|
* In minutes
|
|
9
9
|
*/
|
|
10
|
-
export declare const LIVE_CHECKING_INTERVAL =
|
|
10
|
+
export declare const LIVE_CHECKING_INTERVAL = 3;
|
|
11
11
|
/**
|
|
12
12
|
* Warning threshold expiring soon
|
|
13
13
|
* In minutes
|
|
@@ -124,8 +124,7 @@ function UserLiveStreamWidget(inProps) {
|
|
|
124
124
|
if (!scUser && !state.initialized) {
|
|
125
125
|
return (0, jsx_runtime_1.jsx)(Skeleton_1.default, {});
|
|
126
126
|
}
|
|
127
|
-
|
|
128
|
-
if (!scUser.user || (state === null || state === void 0 ? void 0 : state.count) === 0 || !liveStreamEnabled || isFreeTrialTier) {
|
|
127
|
+
if (!scUser || (state === null || state === void 0 ? void 0 : state.count) === 0 || !liveStreamEnabled || isFreeTrialTier) {
|
|
129
128
|
return (0, jsx_runtime_1.jsx)(HiddenPlaceholder_1.default, {});
|
|
130
129
|
}
|
|
131
130
|
return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: classes.root }, rest, { children: [(0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.content }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h4" }, { children: (0, jsx_runtime_1.jsx)("b", { children: intl.formatMessage(messages.title, { user: scUser.username }) }) })), (0, jsx_runtime_1.jsx)(material_1.Stack, Object.assign({ className: classes.liveWrapper }, { children: state === null || state === void 0 ? void 0 : state.results.map((_live, i, array) => ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(LiveStream_1.default, Object.assign({ liveStream: _live }, liveStreamComponentProps, { className: classes.live })), i < array.length - 1 && (0, jsx_runtime_1.jsx)(material_1.Divider, {})] }, i))) }))] })), state.count > state.visibleItems && ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ onClick: handleToggleDialogOpen, className: classes.actionButton }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "caption" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.userLiveStreamWidget.showAll", defaultMessage: "ui.userLiveStreamWidget.showAll" }) })) })) }))), openDialog && ((0, jsx_runtime_1.jsx)(DialogRoot, Object.assign({ className: classes.dialogRoot, title: intl.formatMessage(messages.title, { user: scUser.username }), onClose: handleToggleDialogOpen, open: openDialog }, dialogProps, { children: (0, jsx_runtime_1.jsx)(InfiniteScroll_1.default, Object.assign({ dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: (0, jsx_runtime_1.jsx)(LiveStream_1.LiveStreamSkeleton, Object.assign({ elevation: 0 }, liveStreamComponentProps)), className: classes.infiniteScroll, endMessage: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ className: classes.endMessage }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.userLiveStreamWidget.noMoreResults", defaultMessage: "ui.userLiveStreamWidget.noMoreResults" }) })) }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: state.results.map((live) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(LiveStream_1.default, Object.assign({ elevation: 0, liveStream: live }, liveStreamComponentProps)) }, live.id))) }) })) })))] })));
|
|
@@ -75,7 +75,7 @@ export default function LiveStreamSelector(inProps) {
|
|
|
75
75
|
const isFreeTrialTier = useMemo(() => preferences &&
|
|
76
76
|
SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER in preferences &&
|
|
77
77
|
preferences[SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value &&
|
|
78
|
-
preferences[SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value
|
|
78
|
+
preferences[SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value === SCCommunitySubscriptionTier.FREE_TRIAL, [preferences]);
|
|
79
79
|
const intl = useIntl();
|
|
80
80
|
const options = [
|
|
81
81
|
{
|
|
@@ -167,7 +167,7 @@ export default function LiveStreamSelector(inProps) {
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
if (_message) {
|
|
170
|
-
return (_jsx(Box, Object.assign({ className: classes.warning }, { children: _jsx(Alert, Object.assign({ variant: "filled", severity: "warning" }, { children:
|
|
170
|
+
return (_jsx(Box, Object.assign({ className: classes.warning }, { children: _jsx(Alert, Object.assign({ variant: "filled", severity: "warning" }, { children: _message })) })));
|
|
171
171
|
}
|
|
172
172
|
return null;
|
|
173
173
|
}, [timeRemaining, isFreeTrialTier]);
|
|
@@ -179,5 +179,5 @@ export default function LiveStreamSelector(inProps) {
|
|
|
179
179
|
}, theme: undefined }, { children: [_jsxs(Box, { children: [_jsx(Typography, Object.assign({ variant: "h6", component: "h2", sx: { fontWeight: 500 } }, { children: option.title })), _jsx(Radio, { checked: selectedOption === option.type })] }), _jsx("img", { src: option.image, alt: "logo" }), _jsx(Box, Object.assign({ component: "ul" }, { children: option.features.map((feature, featureIndex) => {
|
|
180
180
|
const _Icon = option.icons[featureIndex];
|
|
181
181
|
return (_jsxs(FeatureItem, Object.assign({ component: "li" }, { children: [_Icon, _jsx(Typography, Object.assign({ variant: "body2", color: "text.secondary", sx: { flex: 1 } }, { children: feature }))] }), featureIndex));
|
|
182
|
-
}) }))] }), index))) })), _jsx(Box, Object.assign({ className: classes.actions }, { children: _jsx(Button, Object.assign({ disabled: !selectedOption || !timeRemaining, variant: "contained", onClick: handleNext, color: "secondary" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamForm.selector.next", defaultMessage: "ui.liveStreamForm.selector.next" }) })) }))] })));
|
|
182
|
+
}) }))] }), index))) })), _jsx(Box, Object.assign({ className: classes.actions }, { children: _jsx(Button, Object.assign({ disabled: !selectedOption || !timeRemaining || isFreeTrialTier, variant: "contained", onClick: handleNext, color: "secondary" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamForm.selector.next", defaultMessage: "ui.liveStreamForm.selector.next" }) })) }))] })));
|
|
183
183
|
}
|
|
@@ -77,7 +77,11 @@ export default function EventAddress(inProps) {
|
|
|
77
77
|
SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER in preferences &&
|
|
78
78
|
preferences[SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value &&
|
|
79
79
|
preferences[SCPreferences.CONFIGURATIONS_SUBSCRIPTION_TIER].value === SCCommunitySubscriptionTier.FREE_TRIAL, [preferences]);
|
|
80
|
-
const canViewLiveTab = useMemo(() => {
|
|
80
|
+
const canViewLiveTab = useMemo(() => {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
return (!isFreeTrialTier || (isFreeTrialTier && (scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) && (scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user.id) === 1)) &&
|
|
83
|
+
(((_b = (_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.permission) === null || _b === void 0 ? void 0 : _b.create_live_stream) || event.live_stream);
|
|
84
|
+
}, [(_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.permission, event]);
|
|
81
85
|
// HANDLERS
|
|
82
86
|
const handleChange = (_event, newValue) => {
|
|
83
87
|
setLocation(newValue);
|
|
@@ -135,6 +135,9 @@ export default function LiveStreamRoom(inProps) {
|
|
|
135
135
|
if (error.response.data.errors[0].code !== SCLiveStreamConnectionDetailsErrorType.WAITING_HOST_TO_START_LIVE_STREAM) {
|
|
136
136
|
setError(_msg);
|
|
137
137
|
}
|
|
138
|
+
else {
|
|
139
|
+
setTimeout(() => toggleAttrDisabledPrejoinActions(false), 3000);
|
|
140
|
+
}
|
|
138
141
|
enqueueSnackbar(_msg, { variant: 'error', autoHideDuration: 5000 });
|
|
139
142
|
}
|
|
140
143
|
else {
|
|
@@ -173,7 +176,10 @@ export default function LiveStreamRoom(inProps) {
|
|
|
173
176
|
/**
|
|
174
177
|
* Renders root object
|
|
175
178
|
*/
|
|
176
|
-
return (_jsx(Root, Object.assign({ id: id, className: classNames(classes.root, className) }, rest, { children: scLiveStream.closed_at_by_host ? (_jsx(DialogRoot, Object.assign({ open: true, maxWidth: 'md', fullWidth: true }, { children: _jsxs(DialogContent, Object.assign({ className: classes.endConferenceWrap }, { children: [_jsx(Typography, Object.assign({ variant: "h5" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.conference.closed", defaultMessage: "ui.liveStreamRoom.conference.closed" }) })), _jsx(Button, Object.assign({ variant: "contained", color: "secondary", component: Link, to: '/', className: classes.btnBackHome }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.button.backHome", defaultMessage: "ui.liveStreamRoom.button.backHome" }) }))] })) }))) : (_jsx(Box, Object.assign({ className: classes.content, "data-lk-theme": "default" }, { children: connectionDetails === undefined || preJoinChoices === undefined ? (_jsxs(_Fragment, { children: [startPrejoinContent && _jsx(Box, Object.assign({ className: classes.startPrejoinContent }, { children: startPrejoinContent })), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title) && (_jsx(Typography, Object.assign({ component: 'div', variant: "h5", className: classes.title }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title }))), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description) && (_jsx(Typography, Object.assign({ component: 'div', variant: "body1", className: classes.description }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description }))), _jsxs(Box, Object.assign({ className: classNames(classes.preJoin, { [classes.preJoinLoading]: loading || error }) }, { children: [_jsx(LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: _jsx(PreJoin, { defaults: preJoinDefaults, onSubmit: handlePreJoinSubmit, onError: handlePreJoinError, joinLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.joinRoom', defaultMessage: 'ui.liveStreamRoom.preJoin.joinRoom' }), micLabel: intl.formatMessage({
|
|
179
|
+
return (_jsx(Root, Object.assign({ id: id, className: classNames(classes.root, className) }, rest, { children: scLiveStream.closed_at_by_host ? (_jsx(DialogRoot, Object.assign({ open: true, maxWidth: 'md', fullWidth: true }, { children: _jsxs(DialogContent, Object.assign({ className: classes.endConferenceWrap }, { children: [_jsx(Typography, Object.assign({ variant: "h5" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.conference.closed", defaultMessage: "ui.liveStreamRoom.conference.closed" }) })), _jsx(Button, Object.assign({ variant: "contained", color: "secondary", component: Link, to: '/', className: classes.btnBackHome }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.button.backHome", defaultMessage: "ui.liveStreamRoom.button.backHome" }) }))] })) }))) : (_jsx(Box, Object.assign({ className: classes.content, "data-lk-theme": "default" }, { children: connectionDetails === undefined || preJoinChoices === undefined ? (_jsxs(_Fragment, { children: [startPrejoinContent && _jsx(Box, Object.assign({ className: classes.startPrejoinContent }, { children: startPrejoinContent })), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title) && (_jsx(Typography, Object.assign({ component: 'div', variant: "h5", className: classes.title }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.title }))), (scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description) && (_jsx(Typography, Object.assign({ component: 'div', variant: "body1", className: classes.description }, { children: scLiveStream === null || scLiveStream === void 0 ? void 0 : scLiveStream.description }))), _jsxs(Box, Object.assign({ className: classNames(classes.preJoin, { [classes.preJoinLoading]: loading || error }) }, { children: [_jsx(LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: _jsx(PreJoin, { defaults: preJoinDefaults, onSubmit: handlePreJoinSubmit, onError: handlePreJoinError, joinLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.joinRoom', defaultMessage: 'ui.liveStreamRoom.preJoin.joinRoom' }), micLabel: intl.formatMessage({
|
|
180
|
+
id: 'ui.liveStreamRoom.preJoin.microphone',
|
|
181
|
+
defaultMessage: 'ui.liveStreamRoom.preJoin.microphone'
|
|
182
|
+
}), camLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.camera', defaultMessage: 'ui.liveStreamRoom.preJoin.camera' }), userLabel: intl.formatMessage({ id: 'ui.liveStreamRoom.preJoin.username', defaultMessage: 'ui.liveStreamRoom.preJoin.username' }) }) })), loading && (_jsxs(Box, Object.assign({ className: classes.prejoinLoader }, { children: [_jsx(CircularProgress, {}), _jsx(Typography, Object.assign({ component: 'div', variant: "body2" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.connecting", defaultMessage: "ui.liveStreamRoom.connecting" }) }))] })))] })), _jsxs(Box, Object.assign({ className: classes.endPrejoinContent }, { children: [Boolean(scUserContext.user &&
|
|
177
183
|
scUserContext.user.id !== scLiveStream.host.id &&
|
|
178
184
|
scLiveStream &&
|
|
179
185
|
(((_a = scLiveStream.settings) === null || _a === void 0 ? void 0 : _a.muteParticipants) || (scLiveStream && ((_b = scLiveStream.settings) === null || _b === void 0 ? void 0 : _b.disableVideo)))) && (_jsxs(Stack, Object.assign({ sx: { width: '60%' }, spacing: 1 }, { children: [scLiveStream && ((_c = scLiveStream.settings) === null || _c === void 0 ? void 0 : _c.muteParticipants) && (_jsx(Alert, Object.assign({ variant: "filled", severity: "info", component: 'div' }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.hostDisableMicrophone", defaultMessage: "ui.liveStreamRoom.hostDisableMicrophone" }) }))), scLiveStream && ((_d = scLiveStream.settings) === null || _d === void 0 ? void 0 : _d.disableVideo) && (_jsx(Alert, Object.assign({ variant: "filled", severity: "info" }, { children: _jsx(FormattedMessage, { id: "ui.liveStreamRoom.hostDisableVideo", defaultMessage: "ui.liveStreamRoom.hostDisableVideo" }) })))] }))), endPrejoinContent] }))] })) : (_jsx(Box, Object.assign({ className: classes.conference }, { children: _jsx(LiveStreamContext.Provider, Object.assign({ value: { liveStream: scLiveStream } }, { children: _jsx(LiveStreamVideoConference, Object.assign({ connectionDetails: connectionDetails, userChoices: preJoinChoices }, LiveStreamVideoConferenceComponentProps)) })) }))) }))) })));
|
|
@@ -23,6 +23,7 @@ export function VideoConference(_a) {
|
|
|
23
23
|
unreadMessages: 0,
|
|
24
24
|
showSettings: showSettings || false
|
|
25
25
|
});
|
|
26
|
+
const [focusInitialized, setFocusInitialized] = React.useState(false);
|
|
26
27
|
const lastAutoFocusedScreenShareTrack = React.useRef(null);
|
|
27
28
|
const tracks = useTracks([
|
|
28
29
|
{ source: Track.Source.Camera, withPlaceholder: true },
|
|
@@ -50,7 +51,7 @@ export function VideoConference(_a) {
|
|
|
50
51
|
// HOOKS
|
|
51
52
|
useLivestreamCheck();
|
|
52
53
|
useEffect(() => {
|
|
53
|
-
var _a, _b, _c, _d, _e, _f
|
|
54
|
+
var _a, _b, _c, _d, _e, _f;
|
|
54
55
|
// If screen share tracks are published, and no pin is set explicitly, auto set the screen share.
|
|
55
56
|
if (screenShareTracks.some((track) => track.publication.isSubscribed) && lastAutoFocusedScreenShareTrack.current === null) {
|
|
56
57
|
log.debug('Auto set screen share focus:', { newScreenShareTrack: screenShareTracks[0] });
|
|
@@ -69,7 +70,16 @@ export function VideoConference(_a) {
|
|
|
69
70
|
(_f = (_e = layoutContext.pin).dispatch) === null || _f === void 0 ? void 0 : _f.call(_e, { msg: 'set_pin', trackReference: updatedFocusTrack });
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
+
}, [
|
|
74
|
+
screenShareTracks.map((ref) => `${ref.publication.trackSid}_${ref.publication.isSubscribed}`).join(),
|
|
75
|
+
(_c = focusTrack === null || focusTrack === void 0 ? void 0 : focusTrack.publication) === null || _c === void 0 ? void 0 : _c.trackSid,
|
|
76
|
+
tracks,
|
|
77
|
+
participants,
|
|
78
|
+
speakerFocused
|
|
79
|
+
]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
if (speakerFocused && !focusInitialized) {
|
|
73
83
|
const speaker = participants.find((pt) => {
|
|
74
84
|
return pt.name === speakerFocused.username;
|
|
75
85
|
});
|
|
@@ -80,16 +90,11 @@ export function VideoConference(_a) {
|
|
|
80
90
|
}
|
|
81
91
|
return false;
|
|
82
92
|
});
|
|
83
|
-
(
|
|
93
|
+
(_b = (_a = layoutContext.pin).dispatch) === null || _b === void 0 ? void 0 : _b.call(_a, { msg: 'set_pin', trackReference: updatedFocusTrack });
|
|
94
|
+
setFocusInitialized(true);
|
|
84
95
|
}
|
|
85
96
|
}
|
|
86
|
-
}, [
|
|
87
|
-
screenShareTracks.map((ref) => `${ref.publication.trackSid}_${ref.publication.isSubscribed}`).join(),
|
|
88
|
-
(_c = focusTrack === null || focusTrack === void 0 ? void 0 : focusTrack.publication) === null || _c === void 0 ? void 0 : _c.trackSid,
|
|
89
|
-
tracks,
|
|
90
|
-
participants,
|
|
91
|
-
speakerFocused
|
|
92
|
-
]);
|
|
97
|
+
}, [tracks, participants, speakerFocused]);
|
|
93
98
|
return (_jsxs("div", Object.assign({ className: "lk-video-conference" }, props, { children: [isWeb() && (_jsxs(LayoutContextProvider, Object.assign({ value: layoutContext, onPinChange: handleFocusStateChange, onWidgetChange: widgetUpdate }, { children: [_jsxs("div", Object.assign({ className: "lk-video-conference-inner" }, { children: [!focusTrack ? (_jsx("div", Object.assign({ className: "lk-grid-layout-wrapper" }, { children: _jsx(GridLayout, Object.assign({ tracks: tracks }, { children: _jsx(ParticipantTile, {}) })) }))) : (_jsx("div", Object.assign({ className: "lk-focus-layout-wrapper" }, { children: hideParticipantsList ? (_jsx(FocusLayoutContainerNoParticipants, { children: focusTrack && _jsx(FocusLayout, { trackRef: focusTrack }) })) : (_jsxs(FocusLayoutContainer, { children: [_jsx(CarouselLayout, Object.assign({ tracks: carouselTracks }, { children: _jsx(ParticipantTile, {}) })), focusTrack && _jsx(FocusLayout, { trackRef: focusTrack })] })) }))), _jsx(ControlBar, { controls: Object.assign({
|
|
94
99
|
chat: !disableChat,
|
|
95
100
|
microphone: !disableMicrophone,
|
|
@@ -46,6 +46,9 @@ export function useLivestreamCheck(warningThreshold = WARNING_THRESHOLD_EXPIRING
|
|
|
46
46
|
setIsExpired(true);
|
|
47
47
|
clearInterval(intervalRef.current);
|
|
48
48
|
}
|
|
49
|
+
else if (isExpiringSoon) {
|
|
50
|
+
setIsExpiringSoon(false);
|
|
51
|
+
}
|
|
49
52
|
})
|
|
50
53
|
.catch((error) => {
|
|
51
54
|
console.error('Error fetching live status:', error);
|
|
@@ -72,6 +75,9 @@ export function useLivestreamCheck(warningThreshold = WARNING_THRESHOLD_EXPIRING
|
|
|
72
75
|
}
|
|
73
76
|
return;
|
|
74
77
|
}
|
|
78
|
+
else if (isExpiringSoon) {
|
|
79
|
+
setIsExpiringSoon(false);
|
|
80
|
+
}
|
|
75
81
|
__DEBUG && console.log('Checking live speaker...');
|
|
76
82
|
const speaker = participants.find((pt) => {
|
|
77
83
|
return pt.name === liveStream.host.username;
|
|
@@ -90,11 +96,14 @@ export function useLivestreamCheck(warningThreshold = WARNING_THRESHOLD_EXPIRING
|
|
|
90
96
|
buttonProps.onClick();
|
|
91
97
|
}
|
|
92
98
|
}
|
|
99
|
+
else if (isExpiringSoon) {
|
|
100
|
+
setIsExpiringSoon(false);
|
|
101
|
+
}
|
|
93
102
|
__DEBUG && console.log('Checking live status resources...');
|
|
94
103
|
fetchLivestreamStatus();
|
|
95
104
|
}, [isExpired, isExpiringSoon, buttonProps, participants]);
|
|
96
105
|
useEffect(() => {
|
|
97
|
-
intervalRef.current = setInterval(check, LIVE_CHECKING_INTERVAL *
|
|
106
|
+
intervalRef.current = setInterval(check, LIVE_CHECKING_INTERVAL * 60000);
|
|
98
107
|
return () => intervalRef.current && clearInterval(intervalRef.current);
|
|
99
108
|
}, [isExpired, isExpiringSoon]);
|
|
100
109
|
return { timeRemaining, isExpiringSoon, isExpired };
|
|
@@ -7,7 +7,7 @@ export declare const defaultVideoOptions: {
|
|
|
7
7
|
* Checking live status on VideoLiveConference
|
|
8
8
|
* In minutes
|
|
9
9
|
*/
|
|
10
|
-
export declare const LIVE_CHECKING_INTERVAL =
|
|
10
|
+
export declare const LIVE_CHECKING_INTERVAL = 3;
|
|
11
11
|
/**
|
|
12
12
|
* Warning threshold expiring soon
|
|
13
13
|
* In minutes
|
|
@@ -122,8 +122,7 @@ export default function UserLiveStreamWidget(inProps) {
|
|
|
122
122
|
if (!scUser && !state.initialized) {
|
|
123
123
|
return _jsx(Skeleton, {});
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
if (!scUser.user || (state === null || state === void 0 ? void 0 : state.count) === 0 || !liveStreamEnabled || isFreeTrialTier) {
|
|
125
|
+
if (!scUser || (state === null || state === void 0 ? void 0 : state.count) === 0 || !liveStreamEnabled || isFreeTrialTier) {
|
|
127
126
|
return _jsx(HiddenPlaceholder, {});
|
|
128
127
|
}
|
|
129
128
|
return (_jsxs(Root, Object.assign({ className: classes.root }, rest, { children: [_jsxs(CardContent, Object.assign({ className: classes.content }, { children: [_jsx(Typography, Object.assign({ variant: "h4" }, { children: _jsx("b", { children: intl.formatMessage(messages.title, { user: scUser.username }) }) })), _jsx(Stack, Object.assign({ className: classes.liveWrapper }, { children: state === null || state === void 0 ? void 0 : state.results.map((_live, i, array) => (_jsxs(Fragment, { children: [_jsx(LiveStream, Object.assign({ liveStream: _live }, liveStreamComponentProps, { className: classes.live })), i < array.length - 1 && _jsx(Divider, {})] }, i))) }))] })), state.count > state.visibleItems && (_jsx(CardActions, Object.assign({ className: classes.actions }, { children: _jsx(Button, Object.assign({ onClick: handleToggleDialogOpen, className: classes.actionButton }, { children: _jsx(Typography, Object.assign({ variant: "caption" }, { children: _jsx(FormattedMessage, { id: "ui.userLiveStreamWidget.showAll", defaultMessage: "ui.userLiveStreamWidget.showAll" }) })) })) }))), openDialog && (_jsx(DialogRoot, Object.assign({ className: classes.dialogRoot, title: intl.formatMessage(messages.title, { user: scUser.username }), onClose: handleToggleDialogOpen, open: openDialog }, dialogProps, { children: _jsx(InfiniteScroll, Object.assign({ dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: _jsx(LiveStreamSkeleton, Object.assign({ elevation: 0 }, liveStreamComponentProps)), className: classes.infiniteScroll, endMessage: _jsx(Typography, Object.assign({ className: classes.endMessage }, { children: _jsx(FormattedMessage, { id: "ui.userLiveStreamWidget.noMoreResults", defaultMessage: "ui.userLiveStreamWidget.noMoreResults" }) })) }, { children: _jsx(List, { children: state.results.map((live) => (_jsx(ListItem, { children: _jsx(LiveStream, Object.assign({ elevation: 0, liveStream: live }, liveStreamComponentProps)) }, live.id))) }) })) })))] })));
|