ref: Convert some reducers to TS (#11904)
This commit is contained in:
parent
432d07c2ad
commit
44e5fa35af
|
@ -15,6 +15,10 @@ import { ILibJitsiMeetState } from '../base/lib-jitsi-meet/reducer';
|
||||||
import { ILoggingState } from '../base/logging/reducer';
|
import { ILoggingState } from '../base/logging/reducer';
|
||||||
import { IMediaState } from '../base/media/reducer';
|
import { IMediaState } from '../base/media/reducer';
|
||||||
import { INetInfoState } from '../base/net-info/reducer';
|
import { INetInfoState } from '../base/net-info/reducer';
|
||||||
|
import { IResponsiveUIState } from '../base/responsive-ui/reducer';
|
||||||
|
import { ISettingsState } from '../base/settings/reducer';
|
||||||
|
import { ISoundsState } from '../base/sounds/reducer';
|
||||||
|
import { ITestingState } from '../base/testing/reducer';
|
||||||
import { INoiseSuppressionState } from '../noise-suppression/reducer';
|
import { INoiseSuppressionState } from '../noise-suppression/reducer';
|
||||||
|
|
||||||
export interface IStore {
|
export interface IStore {
|
||||||
|
@ -41,5 +45,9 @@ export interface IState {
|
||||||
'features/base/logging': ILoggingState,
|
'features/base/logging': ILoggingState,
|
||||||
'features/base/media': IMediaState,
|
'features/base/media': IMediaState,
|
||||||
'features/base/net-info': INetInfoState,
|
'features/base/net-info': INetInfoState,
|
||||||
'features/noise-suppression': INoiseSuppressionState
|
'features/base/responsive-ui': IResponsiveUIState,
|
||||||
|
'features/base/settings': ISettingsState,
|
||||||
|
'features/base/sounds': ISoundsState,
|
||||||
|
'features/noise-suppression': INoiseSuppressionState,
|
||||||
|
'features/testing': ITestingState
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// @flow
|
import ReducerRegistry from '../redux/ReducerRegistry';
|
||||||
|
import { set } from '../redux/functions';
|
||||||
import { ReducerRegistry, set } from '../redux';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
CLIENT_RESIZED,
|
CLIENT_RESIZED,
|
||||||
|
@ -27,7 +26,21 @@ const DEFAULT_STATE = {
|
||||||
contextMenuOpened: false
|
contextMenuOpened: false
|
||||||
};
|
};
|
||||||
|
|
||||||
ReducerRegistry.register('features/base/responsive-ui', (state = DEFAULT_STATE, action) => {
|
export interface IResponsiveUIState {
|
||||||
|
aspectRatio: Symbol;
|
||||||
|
clientHeight: number;
|
||||||
|
clientWidth: number;
|
||||||
|
contextMenuOpened: boolean;
|
||||||
|
reducedUI: boolean;
|
||||||
|
safeAreaInsets?: {
|
||||||
|
bottom: number;
|
||||||
|
left: number;
|
||||||
|
right: number;
|
||||||
|
top: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ReducerRegistry.register('features/base/responsive-ui', (state: IResponsiveUIState = DEFAULT_STATE, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case CLIENT_RESIZED: {
|
case CLIENT_RESIZED: {
|
||||||
return {
|
return {
|
|
@ -1,10 +1,12 @@
|
||||||
// @flow
|
/* eslint-disable lines-around-comment */
|
||||||
|
// @ts-ignore
|
||||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { APP_WILL_MOUNT } from '../app/actionTypes';
|
import { APP_WILL_MOUNT } from '../app/actionTypes';
|
||||||
import { PersistenceRegistry, ReducerRegistry } from '../redux';
|
import PersistenceRegistry from '../redux/PersistenceRegistry';
|
||||||
|
import ReducerRegistry from '../redux/ReducerRegistry';
|
||||||
|
// @ts-ignore
|
||||||
import { assignIfDefined } from '../util';
|
import { assignIfDefined } from '../util';
|
||||||
|
|
||||||
import { SETTINGS_UPDATED } from './actionTypes';
|
import { SETTINGS_UPDATED } from './actionTypes';
|
||||||
|
@ -14,7 +16,7 @@ import { SETTINGS_UPDATED } from './actionTypes';
|
||||||
*
|
*
|
||||||
* @type Object
|
* @type Object
|
||||||
*/
|
*/
|
||||||
const DEFAULT_STATE = {
|
const DEFAULT_STATE: ISettingsState = {
|
||||||
audioOutputDeviceId: undefined,
|
audioOutputDeviceId: undefined,
|
||||||
avatarURL: undefined,
|
avatarURL: undefined,
|
||||||
cameraDeviceId: undefined,
|
cameraDeviceId: undefined,
|
||||||
|
@ -49,16 +51,53 @@ const DEFAULT_STATE = {
|
||||||
userSelectedSkipPrejoin: undefined
|
userSelectedSkipPrejoin: undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface ISettingsState {
|
||||||
|
audioOutputDeviceId?: string|boolean;
|
||||||
|
avatarURL?: string|boolean;
|
||||||
|
cameraDeviceId?: string|boolean;
|
||||||
|
disableCallIntegration?: boolean;
|
||||||
|
disableCrashReporting?: boolean;
|
||||||
|
disableP2P?: boolean;
|
||||||
|
disableSelfView?: boolean;
|
||||||
|
displayName?: string|boolean;
|
||||||
|
email?: string|boolean;
|
||||||
|
hideShareAudioHelper?: boolean;
|
||||||
|
localFlipX?: boolean;
|
||||||
|
micDeviceId?: string|boolean;
|
||||||
|
serverURL?: string|boolean;
|
||||||
|
soundsIncomingMessage?: boolean;
|
||||||
|
soundsParticipantJoined?: boolean;
|
||||||
|
soundsParticipantKnocking?: boolean;
|
||||||
|
soundsParticipantLeft?: boolean;
|
||||||
|
soundsReactions?: boolean;
|
||||||
|
soundsTalkWhileMuted?: boolean;
|
||||||
|
startAudioOnly?: boolean;
|
||||||
|
startWithAudioMuted?: boolean;
|
||||||
|
startWithVideoMuted?: boolean;
|
||||||
|
userSelectedAudioOutputDeviceId?: string|boolean;
|
||||||
|
userSelectedAudioOutputDeviceLabel?: string|boolean;
|
||||||
|
userSelectedCameraDeviceId?: string|boolean;
|
||||||
|
userSelectedCameraDeviceLabel?: string|boolean;
|
||||||
|
userSelectedMicDeviceId?: string|boolean;
|
||||||
|
userSelectedMicDeviceLabel?: string|boolean;
|
||||||
|
userSelectedNotifications?: {
|
||||||
|
[key: string]: boolean;
|
||||||
|
}|boolean,
|
||||||
|
userSelectedSkipPrejoin?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
const STORE_NAME = 'features/base/settings';
|
const STORE_NAME = 'features/base/settings';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the persistence of the feature {@code base/settings}.
|
* Sets up the persistence of the feature {@code base/settings}.
|
||||||
*/
|
*/
|
||||||
const filterSubtree = {};
|
const filterSubtree: ISettingsState = {};
|
||||||
|
|
||||||
// start with the default state
|
// start with the default state
|
||||||
Object.keys(DEFAULT_STATE).forEach(key => {
|
Object.keys(DEFAULT_STATE).forEach(key => {
|
||||||
filterSubtree[key] = true;
|
const key1 = key as keyof typeof filterSubtree;
|
||||||
|
|
||||||
|
filterSubtree[key1] = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// we want to filter these props, to not be stored as they represent
|
// we want to filter these props, to not be stored as they represent
|
||||||
|
@ -69,7 +108,7 @@ filterSubtree.micDeviceId = false;
|
||||||
|
|
||||||
PersistenceRegistry.register(STORE_NAME, filterSubtree, DEFAULT_STATE);
|
PersistenceRegistry.register(STORE_NAME, filterSubtree, DEFAULT_STATE);
|
||||||
|
|
||||||
ReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {
|
ReducerRegistry.register(STORE_NAME, (state: ISettingsState = DEFAULT_STATE, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case APP_WILL_MOUNT:
|
case APP_WILL_MOUNT:
|
||||||
return _initSettings(state);
|
return _initSettings(state);
|
||||||
|
@ -90,10 +129,10 @@ ReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {
|
||||||
* - Old Settings.js style data.
|
* - Old Settings.js style data.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Object} featureState - The current state of the feature.
|
* @param {ISettingsState} featureState - The current state of the feature.
|
||||||
* @returns {Object}
|
* @returns {Object}
|
||||||
*/
|
*/
|
||||||
function _initSettings(featureState) {
|
function _initSettings(featureState: ISettingsState) {
|
||||||
let settings = featureState;
|
let settings = featureState;
|
||||||
|
|
||||||
// Old Settings.js values
|
// Old Settings.js values
|
|
@ -1,7 +1,8 @@
|
||||||
// @flow
|
/* eslint-disable lines-around-comment */
|
||||||
|
// @ts-ignore
|
||||||
import type { AudioElement } from '../media';
|
import type { AudioElement } from '../media';
|
||||||
import { assign, ReducerRegistry } from '../redux';
|
import ReducerRegistry from '../redux/ReducerRegistry';
|
||||||
|
import { assign } from '../redux/functions';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
_ADD_AUDIO_ELEMENT,
|
_ADD_AUDIO_ELEMENT,
|
||||||
|
@ -9,6 +10,7 @@ import {
|
||||||
REGISTER_SOUND,
|
REGISTER_SOUND,
|
||||||
UNREGISTER_SOUND
|
UNREGISTER_SOUND
|
||||||
} from './actionTypes';
|
} from './actionTypes';
|
||||||
|
// @ts-ignore
|
||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,17 +25,17 @@ export type Sound = {
|
||||||
*/
|
*/
|
||||||
audioElement?: AudioElement,
|
audioElement?: AudioElement,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This field is container for all optional parameters related to the sound.
|
||||||
|
*/
|
||||||
|
options?: Object,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This field describes the source of the audio resource to be played. It
|
* This field describes the source of the audio resource to be played. It
|
||||||
* can be either a path to the file or an object depending on the platform
|
* can be either a path to the file or an object depending on the platform
|
||||||
* (native vs web).
|
* (native vs web).
|
||||||
*/
|
*/
|
||||||
src: Object | string,
|
src?: Object | string
|
||||||
|
|
||||||
/**
|
|
||||||
* This field is container for all optional parameters related to the sound.
|
|
||||||
*/
|
|
||||||
options: Object
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,12 +46,14 @@ export type Sound = {
|
||||||
*/
|
*/
|
||||||
const DEFAULT_STATE = new Map();
|
const DEFAULT_STATE = new Map();
|
||||||
|
|
||||||
|
export type ISoundsState = Map<string, Sound>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base/sounds feature's reducer.
|
* The base/sounds feature's reducer.
|
||||||
*/
|
*/
|
||||||
ReducerRegistry.register(
|
ReducerRegistry.register(
|
||||||
'features/base/sounds',
|
'features/base/sounds',
|
||||||
(state = DEFAULT_STATE, action) => {
|
(state: ISoundsState = DEFAULT_STATE, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case _ADD_AUDIO_ELEMENT:
|
case _ADD_AUDIO_ELEMENT:
|
||||||
case _REMOVE_AUDIO_ELEMENT:
|
case _REMOVE_AUDIO_ELEMENT:
|
||||||
|
@ -75,7 +79,7 @@ ReducerRegistry.register(
|
||||||
* @private
|
* @private
|
||||||
* @returns {Map<string, Sound>}
|
* @returns {Map<string, Sound>}
|
||||||
*/
|
*/
|
||||||
function _addOrRemoveAudioElement(state, action) {
|
function _addOrRemoveAudioElement(state: ISoundsState, action: any) {
|
||||||
const isAddAction = action.type === _ADD_AUDIO_ELEMENT;
|
const isAddAction = action.type === _ADD_AUDIO_ELEMENT;
|
||||||
const nextState = new Map(state);
|
const nextState = new Map(state);
|
||||||
const { soundId } = action;
|
const { soundId } = action;
|
||||||
|
@ -112,7 +116,7 @@ function _addOrRemoveAudioElement(state, action) {
|
||||||
* @private
|
* @private
|
||||||
* @returns {Map<string, Sound>}
|
* @returns {Map<string, Sound>}
|
||||||
*/
|
*/
|
||||||
function _registerSound(state, action) {
|
function _registerSound(state: ISoundsState, action: any) {
|
||||||
const nextState = new Map(state);
|
const nextState = new Map(state);
|
||||||
|
|
||||||
nextState.set(action.soundId, {
|
nextState.set(action.soundId, {
|
||||||
|
@ -133,7 +137,7 @@ function _registerSound(state, action) {
|
||||||
* @private
|
* @private
|
||||||
* @returns {Map<string, Sound>}
|
* @returns {Map<string, Sound>}
|
||||||
*/
|
*/
|
||||||
function _unregisterSound(state, action) {
|
function _unregisterSound(state: ISoundsState, action: any) {
|
||||||
const nextState = new Map(state);
|
const nextState = new Map(state);
|
||||||
|
|
||||||
nextState.delete(action.soundId);
|
nextState.delete(action.soundId);
|
|
@ -1,4 +1,5 @@
|
||||||
import { assign, ReducerRegistry } from '../redux';
|
import ReducerRegistry from '../redux/ReducerRegistry';
|
||||||
|
import { assign } from '../redux/functions';
|
||||||
|
|
||||||
import { SET_CONNECTION_STATE } from './actionTypes';
|
import { SET_CONNECTION_STATE } from './actionTypes';
|
||||||
|
|
||||||
|
@ -13,9 +14,13 @@ const INITIAL_STATE = {
|
||||||
connectionState: ''
|
connectionState: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface ITestingState {
|
||||||
|
connectionState: string;
|
||||||
|
}
|
||||||
|
|
||||||
ReducerRegistry.register(
|
ReducerRegistry.register(
|
||||||
'features/testing',
|
'features/testing',
|
||||||
(state = INITIAL_STATE, action) => {
|
(state: ITestingState = INITIAL_STATE, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case SET_CONNECTION_STATE:
|
case SET_CONNECTION_STATE:
|
||||||
return _setConnectionState(state, action);
|
return _setConnectionState(state, action);
|
||||||
|
@ -35,6 +40,6 @@ ReducerRegistry.register(
|
||||||
* @returns {Object} The new state of the feature testing after the
|
* @returns {Object} The new state of the feature testing after the
|
||||||
* reduction of the specified action.
|
* reduction of the specified action.
|
||||||
*/
|
*/
|
||||||
function _setConnectionState(state, action) {
|
function _setConnectionState(state: ITestingState, action: any) {
|
||||||
return assign(state, { connectionState: action.connectionState });
|
return assign(state, { connectionState: action.connectionState });
|
||||||
}
|
}
|
Loading…
Reference in New Issue