jiti-meet/react/features/base/dialog/actions.ts

104 lines
2.6 KiB
TypeScript
Raw Normal View History

import { ComponentType } from 'react';
2019-03-19 15:42:25 +00:00
import { IStore } from '../../app/types';
import {
HIDE_DIALOG,
HIDE_SHEET,
OPEN_DIALOG,
OPEN_SHEET
} from './actionTypes';
import { isDialogOpen } from './functions';
2017-03-07 03:34:51 +00:00
/**
* Signals Dialog to close its dialog.
*
* @param {Object} [component] - The {@code Dialog} component to close/hide. If
* {@code undefined}, closes/hides {@code Dialog} regardless of which
* component it's rendering; otherwise, closes/hides {@code Dialog} only if
* it's rendering the specified {@code component}.
2017-03-07 03:34:51 +00:00
* @returns {{
* type: HIDE_DIALOG,
* component: (React.Component | undefined)
2017-03-07 03:34:51 +00:00
* }}
*/
export function hideDialog(component?: ComponentType) {
2017-03-07 03:34:51 +00:00
return {
type: HIDE_DIALOG,
component
2017-03-07 03:34:51 +00:00
};
}
/**
* Closes the active sheet.
*
* @returns {{
* type: HIDE_SHEET,
* }}
*/
export function hideSheet() {
return {
type: HIDE_SHEET
};
}
2017-03-07 03:34:51 +00:00
/**
* Signals Dialog to open dialog.
*
* @param {Object} component - The component to display as dialog.
* @param {Object} [componentProps] - The React {@code Component} props of the
* specified {@code component}.
* @returns {{
* type: OPEN_DIALOG,
* component: React.Component,
* componentProps: (Object | undefined)
* }}
2017-03-07 03:34:51 +00:00
*/
export function openDialog(component: ComponentType, componentProps?: Object) {
2017-03-07 03:34:51 +00:00
return {
type: OPEN_DIALOG,
component,
componentProps
};
}
/**
* Opens the requested sheet.
*
* @param {Object} component - The component to display as a sheet.
* @param {Object} [componentProps] - The React {@code Component} props of the
* specified {@code component}.
* @returns {{
* type: OPEN_SHEET,
* component: React.Component,
* componentProps: (Object | undefined)
* }}
*/
export function openSheet(component: ComponentType, componentProps?: Object) {
return {
type: OPEN_SHEET,
component,
componentProps
};
}
/**
* Signals Dialog to open a dialog with the specified component if the component
2017-09-18 15:58:03 +00:00
* is not already open. If it is open, then Dialog is signaled to close its
* dialog.
*
* @param {Object} component - The component to display as dialog.
* @param {Object} [componentProps] - The React {@code Component} props of the
* specified {@code component}.
* @returns {Function}
*/
export function toggleDialog(component: ComponentType, componentProps?: Object) {
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
if (isDialogOpen(getState, component)) {
dispatch(hideDialog(component));
} else {
dispatch(openDialog(component, componentProps));
}
};
}