import { createSlice as e, createAction as i } from "@reduxjs/toolkit"
import { userErrorNotification as t } from "../notification/index"
import { DEVICE_ERROR as o } from "./device.constants"
export const updateDevices = i("device/update-devices")
export const DEVICE_STATE_KEY = "device"
const c = {
devicesMap: {},
isReady: !1,
audio: { devices: [], activeDev: null, permission: "" },
audioOutput: { devices: [], activeDev: null },
video: { devices: [], activeDev: null, permission: "" },
shareScreen: { permission: "" },
}
export const deviceSlice = e({
name: "device",
initialState: c,
reducers: {
setAllDevices: (e, i) => {
const { devicesMap: t, audio: o, video: c, audioOutput: s } = i.payload
return {
...e,
devicesMap: t || {},
audio: { ...e.audio, devices: Array.isArray(o) ? o : [] },
audioOutput: { ...e.audioOutput, devices: Array.isArray(s) ? s : [] },
video: { ...e.video, devices: Array.isArray(c) ? c : [] },
isReady: !0,
}
},
setAudioDevice: (e, i) => {
const { payload: t } = i
return { ...e, audio: { ...e.audio, activeDev: t } }
},
setAudioOutputDevice: (e, i) => {
const { payload: t } = i
return { ...e, audioOutput: { ...e.audioOutput, activeDev: t } }
},
setVideoDevice: (e, i) => {
const { payload: t } = i
return { ...e, video: { ...e.video, activeDev: t } }
},
setMediaPermissions: (e, i) => {
const {
payload: { mic: t, camera: o, shareScreen: c },
} = i,
s = "string" == typeof t ? { ...e.audio, permission: t } : e.audio,
d = "string" == typeof o ? { ...e.video, permission: o } : e.video,
a = "string" == typeof c ? { ...e.shareScreen, permission: c } : e.shareScreen
return { ...e, audio: s, video: d, shareScreen: a }
},
},
})
export const getDeviceState = (e) => e.device
export const getMediaPermissionMic = (e) => getDeviceState(e).audio.permission
export const getMediaPermissionCamera = (e) => getDeviceState(e).video.permission
export const getMediaPermissionShareScreen = (e) => getDeviceState(e).shareScreen.permission
export const getAudioDevice = (e) => getDeviceState(e).audio.activeDev
export const getAudioDevices = (e) => getDeviceState(e).audio.devices
export const getAudioOutputDevice = (e) => getDeviceState(e).audioOutput.activeDev
export const getAudioOutputDevices = (e) => getDeviceState(e).audioOutput.devices
export const getVideoDevice = (e) => getDeviceState(e).video.activeDev
export const getVideoDevices = (e) => getDeviceState(e).video.devices
export const {
setAllDevices: setAllDevices,
setAudioDevice: setAudioDevice,
setAudioOutputDevice: setAudioOutputDevice,
setVideoDevice: setVideoDevice,
setMediaPermissions: setMediaPermissions,
} = deviceSlice.actions
export const deviceAllInitCmd = i("media/device-all-init-cmd")
export const deviceAllInitFail = i("media/device-all-init-fail")
export const checkDevicePermissionCompleted = i("media/device-permission-check-completed")
export const deviceUpdateErrorNotification = (e) => t({ title: o.UPDATE, message: e })
export const getDeviceInitialState = deviceSlice.getInitialState
export const deviceReducer = deviceSlice.reducer