Make Media menu disappear after connecting

This commit is contained in:
Jerko Steiner 2019-11-17 09:46:11 -03:00
parent ef110e6fe2
commit 0a40e7202a
5 changed files with 57 additions and 4 deletions

View File

@ -1,5 +1,5 @@
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 {
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(
MEDIA_STREAM,
async (constraints: GetMediaConstraints) => getUserMedia(constraints),
@ -103,4 +115,5 @@ export type MediaAction =
MediaVideoConstraintAction |
MediaAudioConstraintAction |
MediaEnumerateAction |
MediaStreamAction
MediaStreamAction |
MediaVisibleAction

View File

@ -27,6 +27,9 @@ const mapDispatchToProps = {
const c = connect(mapStateToProps, mapDispatchToProps)
export const Media = c(React.memo(function Media(props: MediaProps) {
if (!props.visible) {
return null
}
React.useMemo(async () => await props.enumerateDevices(), [])

View File

@ -19,6 +19,7 @@ export const MEDIA_ENUMERATE = 'MEDIA_ENUMERATE'
export const MEDIA_STREAM = 'MEDIA_STREAM'
export const MEDIA_VIDEO_CONSTRAINT_SET = 'MEDIA_VIDEO_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_REMOVE = 'PEER_REMOVE'

View File

@ -1,5 +1,5 @@
import { MediaDevice, AudioConstraint, VideoConstraint, MediaAction, MediaEnumerateAction } from '../actions/MediaActions'
import { MEDIA_ENUMERATE, MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET } from '../constants'
import { MediaDevice, AudioConstraint, VideoConstraint, MediaAction, MediaEnumerateAction, MediaStreamAction } from '../actions/MediaActions'
import { MEDIA_ENUMERATE, MEDIA_AUDIO_CONSTRAINT_SET, MEDIA_VIDEO_CONSTRAINT_SET, MEDIA_VISIBLE_SET, MEDIA_STREAM } from '../constants'
export interface MediaState {
devices: MediaDevice[]
@ -7,6 +7,7 @@ export interface MediaState {
audio: AudioConstraint
loading: boolean
error: string
visible: boolean
}
const defaultState: MediaState = {
@ -15,6 +16,7 @@ const defaultState: MediaState = {
audio: true,
loading: false,
error: '',
visible: true,
}
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(
state = defaultState,
action: MediaAction,
@ -59,6 +82,13 @@ export default function media(
...state,
video: action.payload,
}
case MEDIA_VISIBLE_SET:
return {
...state,
visible: action.payload.visible,
}
case MEDIA_STREAM:
return handleMediaStream(state, action)
default:
return state
}

View File

@ -71,6 +71,12 @@
}
}
.send-file {
&:hover {
background: #407cf7;
}
}
.mute-video {
&:hover, &.on {
background: #407cf7;