Files
bigcapital/src/hooks/state/dashboard.js

79 lines
1.7 KiB
JavaScript

import { useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import {
splashStopLoading,
splashStartLoading,
dashboardPageTitle,
openSidebarSubmenu,
closeSidebarSubmenu,
openDialog,
closeDialog,
} from '../../store/dashboard/dashboard.actions';
export const useDispatchAction = (action) => {
const dispatch = useDispatch();
return useCallback(
(payload) => {
dispatch(action(payload));
},
[dispatch, action],
);
};
export const useDashboardPageTitle = () => {
return useDispatchAction(dashboardPageTitle);
};
/**
* Splash loading screen actions.
*/
export const useSplashLoading = () => {
return [
useDispatchAction(splashStartLoading),
useDispatchAction(splashStopLoading),
];
};
/**
* Sidebar submenu actions.
*/
export const useSidebarSubmnuActions = () => {
return {
openSidebarSubmenu: useDispatchAction(openSidebarSubmenu),
closeSidebarSubmenu: useDispatchAction(closeSidebarSubmenu),
toggleSidebarSubmenu: useDispatchAction(openSidebarSubmenu),
};
};
/**
* Retrieves the sidebar submenu selector.
*/
const sidebarSubmenuSelector = createSelector(
(state) => state.dashboard.sidebarSubmenu,
(sidebarSubmenu) => sidebarSubmenu,
);
/**
* Retrieves the sidebar submenu selector.
*/
export const useSidebarSubmenu = () => {
const sidebarSubmenu = useSelector(sidebarSubmenuSelector);
return {
isOpen: sidebarSubmenu?.isOpen || false,
submenuId: sidebarSubmenu?.submenuId || null,
};
};
/**
* Dialogs actions.
*/
export const useDialogActions = () => {
return {
openDialog: useDispatchAction(openDialog),
closeDialog: useDispatchAction(closeDialog),
};
};