@livelike/react-native
Version:
LiveLike React Native package
117 lines • 3.7 kB
JavaScript
import { useMemo, useState } from 'react';
import { blockProfile, deleteMessage, hasDebugLogger, reportMessage, unblockProfile } from '@livelike/javascript';
import { useAnalytics } from './useAnalytics';
import { useBannerActions } from './useBannerActions';
import { useChatMessageActions } from './useChatMessageActions';
import { BannerType } from '../types';
export const useChatMessageMenuItemActions = _ref => {
let {
messageDetails
} = _ref;
const {
addBannerItem
} = useBannerActions();
const [blockId, setBlockedId] = useState();
const {
deleteChatMessage
} = useChatMessageActions({
roomId: messageDetails.chat_room_id
});
const {
trackEvent
} = useAnalytics();
return useMemo(() => {
const addInfoBanner = bannerMessage => addBannerItem({
bannerType: BannerType.INFO,
bannerMessage
});
const addErrorBanner = bannerMessage => addBannerItem({
bannerType: BannerType.ERROR,
bannerMessage
});
const deleteMessageApiFn = () => deleteMessage({
roomId: messageDetails.chat_room_id,
messageId: messageDetails.id
}).then(res => {
addInfoBanner('Message deleted');
deleteChatMessage({
roomId: messageDetails.chat_room_id,
chatMessage: messageDetails
});
return res;
}).catch(error => {
addErrorBanner('Failed to delete message');
hasDebugLogger() && console.error(error);
return error;
});
const reportMessageApiFn = () => reportMessage({
messageId: messageDetails.id,
nickname: messageDetails.sender_nickname,
profileId: messageDetails.sender_id,
roomId: messageDetails.chat_room_id
}).then(res => {
addInfoBanner('Message reported');
trackEvent('Chat Message Reported', {
messageDetails,
reportInfo: res
});
return res;
}).catch(error => {
let errorDetail = 'Failed to report message';
if (error.status === 409) {
errorDetail = 'This message is already reported by you';
}
addErrorBanner(errorDetail);
hasDebugLogger() && console.error(error);
return error;
});
const blockUserApiFn = () => blockProfile({
profileId: messageDetails.sender_id
}).then(res => {
setBlockedId(res.id);
addInfoBanner(`${messageDetails.sender_nickname} was blocked`);
trackEvent('Chat User Blocked', {
messageDetails,
blockInfo: res
});
return res;
}).catch(error => {
addErrorBanner(`Failed to block ${messageDetails.sender_nickname}`);
hasDebugLogger() && console.error(error);
return error;
});
const unblockUserApiFn = () => unblockProfile({
blockId
}).then(res => {
setBlockedId(null);
addInfoBanner(`${messageDetails.sender_nickname} was unblocked`);
trackEvent('Chat User Unblocked', {
messageDetails,
unblockInfo: res
});
return res;
}).catch(error => {
addErrorBanner(`Unable to unblock ${messageDetails.sender_nickname}`);
hasDebugLogger() && console.error(error);
return error;
});
const blockUnblockApiFn = () => {
if (blockId) return unblockUserApiFn().then(res => {
setBlockedId(null);
return res;
});else return blockUserApiFn().then(res => {
setBlockedId(res.id);
return res;
});
};
return {
blockId,
deleteMessageApiFn,
reportMessageApiFn,
blockUserApiFn,
unblockUserApiFn,
blockUnblockApiFn
};
}, [blockId, messageDetails, addBannerItem, deleteChatMessage, trackEvent]);
};
//# sourceMappingURL=useChatMessageMenuItemActions.js.map