The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/hooks/useEndpointAction.js

48 lines
1.4 KiB

import { useCallback } from 'react';
import { useEndpoint } from '../contexts/ServerContext';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
export const useEndpointAction = (httpMethod, endpoint, params = {}, successMessage) => {
const sendData = useEndpoint(httpMethod, endpoint);
const dispatchToastMessage = useToastMessageDispatch();
return useCallback(async (...args) => {
try {
const data = await sendData(params, ...args);
if (!data.success) {
throw new Error(data.status);
}
successMessage && dispatchToastMessage({ type: 'success', message: successMessage });
return data;
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
return { success: false };
}
}, [dispatchToastMessage, params, sendData, successMessage]);
};
export const useEndpointActionExperimental = (httpMethod, endpoint, successMessage) => {
const sendData = useEndpoint(httpMethod, endpoint);
const dispatchToastMessage = useToastMessageDispatch();
return useCallback(async (params, ...args) => {
try {
const data = await sendData(params, ...args);
if (!data.success) {
throw new Error(data.status);
}
successMessage && dispatchToastMessage({ type: 'success', message: successMessage });
return data;
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
return { success: false };
}
}, [dispatchToastMessage, sendData, successMessage]);
};