full flow of zapping or pinning and unpinning cold full run
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import Conversation, { MemberState } from '@nirvana/core/models/conversation.model';
|
||||
import NirvanaResponse, { INirvanaResponse } from '@nirvana/core/responses/nirvanaResponse';
|
||||
import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios';
|
||||
|
||||
import Conversation from '@nirvana/core/models/conversation.model';
|
||||
import CreateConversationRequest from '@nirvana/core/requests/CreateConversationRequest.request';
|
||||
import CreateConversationResponse from '@nirvana/core/responses/CreateConversationResponse.response';
|
||||
import LoginResponse from '@nirvana/core/responses/login.response';
|
||||
import UpdateConversationPriorityRequest from '@nirvana/core/requests/UpdateConversationPriority.request';
|
||||
import UserDetailsResponse from '@nirvana/core/responses/userDetails.response';
|
||||
import UserSearchResponse from '@nirvana/core/responses/userSearch.response';
|
||||
|
||||
@@ -95,3 +96,15 @@ export async function getConversationById(
|
||||
): Promise<NirvanaResponse<Conversation>> {
|
||||
return await NirvanaApi.fetch(`/conversations/${conversationId}`, 'GET', true);
|
||||
}
|
||||
|
||||
export async function updateConversationPriority(
|
||||
conversationId: string,
|
||||
newState: MemberState,
|
||||
): Promise<NirvanaResponse<string>> {
|
||||
return await NirvanaApi.fetch(
|
||||
`/conversations/${conversationId}/priority`,
|
||||
'POST',
|
||||
true,
|
||||
new UpdateConversationPriorityRequest(newState),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
createConversation,
|
||||
getConversationById,
|
||||
getConversations,
|
||||
updateConversationPriority,
|
||||
} from '../api/NirvanaApi';
|
||||
import { useAsyncFn, useEffectOnce, useKeyPressEvent, useUnmount } from 'react-use';
|
||||
|
||||
@@ -75,6 +76,8 @@ interface IConversationContext {
|
||||
handleStartConversation?: (otherUsers: User[], conversationName?: string) => Promise<boolean>;
|
||||
|
||||
handleEscape?: () => void;
|
||||
|
||||
updateConversationPriority?: (conversationId: string, newState: MemberState) => Promise<void>;
|
||||
}
|
||||
|
||||
const ConversationContext = React.createContext<IConversationContext>({
|
||||
@@ -397,6 +400,29 @@ export function ConversationProvider({ children }: { children: React.ReactNode }
|
||||
return [priorityConversations, inboxConversations];
|
||||
}, [conversationMap, user]);
|
||||
|
||||
const updateConversationPriority = useCallback(
|
||||
async (conversationId: string, newState: MemberState) => {
|
||||
try {
|
||||
await updateConversationPriority(conversationId, newState);
|
||||
|
||||
setConversationMap((draft) => {
|
||||
if (draft[conversationId]) {
|
||||
const currUserMember = draft[conversationId].members.find(
|
||||
(mem) => mem._id.toString() === user._id.toString(),
|
||||
);
|
||||
|
||||
if (currUserMember) {
|
||||
currUserMember.memberState = newState;
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
toast.error('problem in pinning conversation');
|
||||
}
|
||||
},
|
||||
[setConversationMap, user],
|
||||
);
|
||||
|
||||
const handleEscape = useCallback(() => {
|
||||
selectConversation(undefined);
|
||||
}, [selectConversation]);
|
||||
@@ -434,6 +460,7 @@ export function ConversationProvider({ children }: { children: React.ReactNode }
|
||||
priorityConversations: masterConversations[0],
|
||||
inboxConversations: masterConversations[1],
|
||||
handleEscape,
|
||||
updateConversationPriority,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
@@ -186,7 +186,7 @@ function OverlayConversation({
|
||||
}) {
|
||||
const { user } = useAuth();
|
||||
|
||||
const { selectConversation, handleEscape } = useConversations();
|
||||
const { selectConversation, handleEscape, updateConversationPriority } = useConversations();
|
||||
|
||||
const handleSelectConversation = useCallback(() => {
|
||||
if (!isSelected) {
|
||||
@@ -205,6 +205,14 @@ function OverlayConversation({
|
||||
return false;
|
||||
}, [masterConversation, user]);
|
||||
|
||||
const handleToggleConversationZap = useCallback(() => {
|
||||
if (isPriority) {
|
||||
updateConversationPriority(masterConversation._id.toString(), 'inbox');
|
||||
return;
|
||||
}
|
||||
updateConversationPriority(masterConversation._id.toString(), 'priority');
|
||||
}, [updateConversationPriority, isPriority, masterConversation._id]);
|
||||
|
||||
return (
|
||||
<Stack
|
||||
direction={'column'}
|
||||
@@ -279,6 +287,7 @@ function OverlayConversation({
|
||||
}}
|
||||
size="small"
|
||||
aria-selected={isPriority ? true : false}
|
||||
onClick={handleToggleConversationZap}
|
||||
>
|
||||
{isPriority ? <FiZap /> : <FiZapOff />}
|
||||
</IconButton>
|
||||
|
||||
Reference in New Issue
Block a user