import type { Method, OperationParams, PathPattern, UrlParams } from '@rocket.chat/rest-typings'; import type { EndpointFunction } from '@rocket.chat/ui-contexts'; import { useToastMessageDispatch, useEndpoint } from '@rocket.chat/ui-contexts'; import { useCallback } from 'react'; type UseEndpointActionOptions = (undefined extends UrlParams ? { keys?: UrlParams; } : { keys: UrlParams; }) & { successMessage?: string; }; export function useEndpointAction( method: TMethod, pathPattern: TPathPattern, options: UseEndpointActionOptions = { keys: {} as UrlParams }, ): EndpointFunction { const sendData = useEndpoint(method, pathPattern, options.keys as UrlParams); const dispatchToastMessage = useToastMessageDispatch(); return useCallback( async (params: OperationParams | undefined) => { try { const data = await sendData(params as OperationParams); if (options.successMessage) { dispatchToastMessage({ type: 'success', message: options.successMessage }); } return data; } catch (error) { dispatchToastMessage({ type: 'error', message: error }); throw error; } }, [dispatchToastMessage, sendData, options.successMessage], ); }