Make Media menu disappear after connecting
This commit is contained in:
parent
ef110e6fe2
commit
0a40e7202a
@ -1,5 +1,5 @@
|
|||||||
import { makeAction, AsyncAction } from '../async'
|
import { makeAction, AsyncAction } from '../async'
|
||||||
import { MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET, MEDIA_ENUMERATE, MEDIA_STREAM } from '../constants'
|
import { MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET, MEDIA_ENUMERATE, MEDIA_STREAM, MEDIA_VISIBLE_SET } from '../constants'
|
||||||
|
|
||||||
export interface MediaDevice {
|
export interface MediaDevice {
|
||||||
id: string
|
id: string
|
||||||
@ -91,6 +91,18 @@ export function setAudioConstraint(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MediaVisibleAction {
|
||||||
|
type: 'MEDIA_VISIBLE_SET'
|
||||||
|
payload: { visible: boolean }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setMediaVisible(visible: boolean): MediaVisibleAction {
|
||||||
|
return {
|
||||||
|
type: MEDIA_VISIBLE_SET,
|
||||||
|
payload: { visible },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const getMediaStream = makeAction(
|
export const getMediaStream = makeAction(
|
||||||
MEDIA_STREAM,
|
MEDIA_STREAM,
|
||||||
async (constraints: GetMediaConstraints) => getUserMedia(constraints),
|
async (constraints: GetMediaConstraints) => getUserMedia(constraints),
|
||||||
@ -103,4 +115,5 @@ export type MediaAction =
|
|||||||
MediaVideoConstraintAction |
|
MediaVideoConstraintAction |
|
||||||
MediaAudioConstraintAction |
|
MediaAudioConstraintAction |
|
||||||
MediaEnumerateAction |
|
MediaEnumerateAction |
|
||||||
MediaStreamAction
|
MediaStreamAction |
|
||||||
|
MediaVisibleAction
|
||||||
|
|||||||
@ -27,6 +27,9 @@ const mapDispatchToProps = {
|
|||||||
const c = connect(mapStateToProps, mapDispatchToProps)
|
const c = connect(mapStateToProps, mapDispatchToProps)
|
||||||
|
|
||||||
export const Media = c(React.memo(function Media(props: MediaProps) {
|
export const Media = c(React.memo(function Media(props: MediaProps) {
|
||||||
|
if (!props.visible) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
React.useMemo(async () => await props.enumerateDevices(), [])
|
React.useMemo(async () => await props.enumerateDevices(), [])
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@ export const MEDIA_ENUMERATE = 'MEDIA_ENUMERATE'
|
|||||||
export const MEDIA_STREAM = 'MEDIA_STREAM'
|
export const MEDIA_STREAM = 'MEDIA_STREAM'
|
||||||
export const MEDIA_VIDEO_CONSTRAINT_SET = 'MEDIA_VIDEO_CONSTRAINT_SET'
|
export const MEDIA_VIDEO_CONSTRAINT_SET = 'MEDIA_VIDEO_CONSTRAINT_SET'
|
||||||
export const MEDIA_AUDIO_CONSTRAINT_SET = 'MEDIA_AUDIO_CONSTRAINT_SET'
|
export const MEDIA_AUDIO_CONSTRAINT_SET = 'MEDIA_AUDIO_CONSTRAINT_SET'
|
||||||
|
export const MEDIA_VISIBLE_SET = 'MEDIA_VISIBLE_SET'
|
||||||
|
|
||||||
export const PEER_ADD = 'PEER_ADD'
|
export const PEER_ADD = 'PEER_ADD'
|
||||||
export const PEER_REMOVE = 'PEER_REMOVE'
|
export const PEER_REMOVE = 'PEER_REMOVE'
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { MediaDevice, AudioConstraint, VideoConstraint, MediaAction, MediaEnumerateAction } from '../actions/MediaActions'
|
import { MediaDevice, AudioConstraint, VideoConstraint, MediaAction, MediaEnumerateAction, MediaStreamAction } from '../actions/MediaActions'
|
||||||
import { MEDIA_ENUMERATE, MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET } from '../constants'
|
import { MEDIA_ENUMERATE, MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET, MEDIA_VISIBLE_SET, MEDIA_STREAM } from '../constants'
|
||||||
|
|
||||||
export interface MediaState {
|
export interface MediaState {
|
||||||
devices: MediaDevice[]
|
devices: MediaDevice[]
|
||||||
@ -7,6 +7,7 @@ export interface MediaState {
|
|||||||
audio: AudioConstraint
|
audio: AudioConstraint
|
||||||
loading: boolean
|
loading: boolean
|
||||||
error: string
|
error: string
|
||||||
|
visible: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultState: MediaState = {
|
const defaultState: MediaState = {
|
||||||
@ -15,6 +16,7 @@ const defaultState: MediaState = {
|
|||||||
audio: true,
|
audio: true,
|
||||||
loading: false,
|
loading: false,
|
||||||
error: '',
|
error: '',
|
||||||
|
visible: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
export function handleEnumerate(
|
export function handleEnumerate(
|
||||||
@ -42,6 +44,27 @@ export function handleEnumerate(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function handleMediaStream(
|
||||||
|
state: MediaState,
|
||||||
|
action: MediaStreamAction,
|
||||||
|
): MediaState {
|
||||||
|
switch (action.status) {
|
||||||
|
case 'resolved':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
visible: false,
|
||||||
|
}
|
||||||
|
case 'rejected':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
error: action.payload.message,
|
||||||
|
visible: true,
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default function media(
|
export default function media(
|
||||||
state = defaultState,
|
state = defaultState,
|
||||||
action: MediaAction,
|
action: MediaAction,
|
||||||
@ -59,6 +82,13 @@ export default function media(
|
|||||||
...state,
|
...state,
|
||||||
video: action.payload,
|
video: action.payload,
|
||||||
}
|
}
|
||||||
|
case MEDIA_VISIBLE_SET:
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
visible: action.payload.visible,
|
||||||
|
}
|
||||||
|
case MEDIA_STREAM:
|
||||||
|
return handleMediaStream(state, action)
|
||||||
default:
|
default:
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.send-file {
|
||||||
|
&:hover {
|
||||||
|
background: #407cf7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.mute-video {
|
.mute-video {
|
||||||
&:hover, &.on {
|
&:hover, &.on {
|
||||||
background: #407cf7;
|
background: #407cf7;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user