keycloak-demo-frontend/src/hooks/useMessage.tsx

56 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-09-06 10:00:03 +00:00
import { useMemo } from 'react';
import { APIError } from '@Models/GeneralTypes';
import {
postMessageDialog,
postMessageConfirm,
removeMessageDialog,
removeMessageConfirm,
} from '@Reducers/message/actions';
import { MessageDialogObject, MessageConfirmObject } from '@Models/Redux/Message/types';
import { errorCatch } from '@Reducers/_Capture/errorCapture';
import useDispatch from './useDispatch';
interface useMessageDefine {
dialog: (dialog: MessageDialogObject) => void;
confirm: (confirm: MessageConfirmObject) => void;
removeDialog: () => void;
removeConfirm: () => void;
error: (error: APIError) => void;
}
/**
* :  Redux Action Message Action
*/
export default function useMessage(): useMessageDefine {
/* Global & Local State */
const dispatch = useDispatch();
/* Functions */
const apiCallPostMessageDialog = (dialog: MessageDialogObject): void => {
dispatch(postMessageDialog(dialog));
};
const apiCallPostMessageConfirm = (confirm: MessageConfirmObject): void => {
dispatch(postMessageConfirm(confirm));
};
const apiCallRemoveMessageDialog = (): void => {
dispatch(removeMessageDialog());
};
const apiCallRemoveMessageConfirm = (): void => {
dispatch(removeMessageConfirm());
};
const apiCallError = (error): void => {
dispatch(errorCatch(error));
};
/* Main */
return useMemo(
() => ({
dialog: apiCallPostMessageDialog,
confirm: apiCallPostMessageConfirm,
removeDialog: apiCallRemoveMessageDialog,
removeConfirm: apiCallRemoveMessageConfirm,
error: apiCallError,
}),
[],
);
}