mirror of https://github.com/buster-so/buster.git
create share chat stuff
This commit is contained in:
parent
4291597b5c
commit
f5afb2772e
|
@ -7,6 +7,7 @@ import {
|
|||
} from '@tanstack/react-query';
|
||||
import last from 'lodash/last';
|
||||
import { useMemo } from 'react';
|
||||
import { create } from 'mutative';
|
||||
import type { BusterChatMessage } from '@/api/asset_interfaces/chat';
|
||||
import type { IBusterChat } from '@/api/asset_interfaces/chat/iChatInterfaces';
|
||||
import { chatQueryKeys } from '@/api/query_keys/chat';
|
||||
|
@ -27,8 +28,11 @@ import {
|
|||
getChat,
|
||||
getListChats,
|
||||
getListLogs,
|
||||
shareChat,
|
||||
unshareChat,
|
||||
updateChat,
|
||||
updateChatMessageFeedback,
|
||||
updateChatShare,
|
||||
} from './requests';
|
||||
|
||||
export const useGetListChats = (
|
||||
|
@ -340,3 +344,95 @@ export const useRemoveChatFromCollections = () => {
|
|||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useShareChat = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: shareChat,
|
||||
onMutate: ({ id, params }) => {
|
||||
const queryKey = chatQueryKeys.chatsGetChat(id).queryKey;
|
||||
|
||||
queryClient.setQueryData(queryKey, (previousData: IBusterChat | undefined) => {
|
||||
if (!previousData) return previousData;
|
||||
return create(previousData, (draft: IBusterChat) => {
|
||||
draft.individual_permissions = [
|
||||
...params.map((p) => ({
|
||||
...p,
|
||||
name: p.name,
|
||||
avatar_url: p.avatar_url || null,
|
||||
})),
|
||||
...(draft.individual_permissions || []),
|
||||
].sort((a, b) => a.email.localeCompare(b.email));
|
||||
});
|
||||
});
|
||||
},
|
||||
onSuccess: (data) => {
|
||||
const upgradedChat = updateChatToIChat(data).iChat;
|
||||
queryClient.setQueryData(
|
||||
chatQueryKeys.chatsGetChat(data.id).queryKey,
|
||||
upgradedChat
|
||||
);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useUnshareChat = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: unshareChat,
|
||||
onMutate: (variables) => {
|
||||
const queryKey = chatQueryKeys.chatsGetChat(variables.id).queryKey;
|
||||
queryClient.setQueryData(queryKey, (previousData: IBusterChat | undefined) => {
|
||||
if (!previousData) return previousData;
|
||||
return create(previousData, (draft: IBusterChat) => {
|
||||
draft.individual_permissions = (
|
||||
draft.individual_permissions?.filter((t) => !variables.data.includes(t.email)) || []
|
||||
).sort((a, b) => a.email.localeCompare(b.email));
|
||||
});
|
||||
});
|
||||
},
|
||||
onSuccess: (data) => {
|
||||
const upgradedChat = updateChatToIChat(data).iChat;
|
||||
queryClient.setQueryData(
|
||||
chatQueryKeys.chatsGetChat(upgradedChat.id).queryKey,
|
||||
upgradedChat
|
||||
);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdateChatShare = () => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: updateChatShare,
|
||||
onMutate: (variables) => {
|
||||
const queryKey = chatQueryKeys.chatsGetChat(variables.id).queryKey;
|
||||
queryClient.setQueryData(queryKey, (previousData: IBusterChat | undefined) => {
|
||||
if (!previousData) return previousData;
|
||||
return create(previousData, (draft: IBusterChat) => {
|
||||
draft.individual_permissions = (
|
||||
draft.individual_permissions?.map((t) => {
|
||||
const found = variables.params.users?.find((v) => v.email === t.email);
|
||||
if (found) return { ...t, ...found };
|
||||
return t;
|
||||
}) || []
|
||||
).sort((a, b) => a.email.localeCompare(b.email));
|
||||
|
||||
if (variables.params.publicly_accessible !== undefined) {
|
||||
draft.publicly_accessible = variables.params.publicly_accessible;
|
||||
}
|
||||
if (variables.params.public_password !== undefined) {
|
||||
draft.public_password = variables.params.public_password;
|
||||
}
|
||||
if (variables.params.public_expiry_date !== undefined) {
|
||||
draft.public_expiry_date = variables.params.public_expiry_date;
|
||||
}
|
||||
if (variables.params.workspace_sharing !== undefined) {
|
||||
draft.workspace_sharing = variables.params.workspace_sharing;
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
|
@ -8,11 +8,17 @@ import type {
|
|||
GetChatsListResponse,
|
||||
GetLogsListRequest,
|
||||
GetLogsListResponse,
|
||||
ShareChatResponse,
|
||||
UpdateChatMessageFeedbackRequest,
|
||||
UpdateChatMessageFeedbackResponse,
|
||||
UpdateChatRequest,
|
||||
UpdateChatResponse,
|
||||
} from '@buster/server-shared/chats';
|
||||
import type {
|
||||
ShareDeleteRequest,
|
||||
SharePostRequest,
|
||||
ShareUpdateRequest,
|
||||
} from '@buster/server-shared/share';
|
||||
import { mainApi, mainApiV2 } from '../instances';
|
||||
|
||||
const CHATS_BASE = '/chats';
|
||||
|
@ -66,3 +72,23 @@ export const duplicateChat = async ({
|
|||
}: DuplicateChatRequest): Promise<DuplicateChatResponse> => {
|
||||
return mainApi.post(`${CHATS_BASE}/duplicate`, { id, message_id }).then((res) => res.data);
|
||||
};
|
||||
|
||||
export const shareChat = async ({ id, params }: { id: string; params: SharePostRequest }) => {
|
||||
return mainApi.post<string>(`${CHATS_BASE}/${id}/sharing`, params).then((res) => res.data);
|
||||
};
|
||||
|
||||
export const unshareChat = async ({ id, data }: { id: string; data: ShareDeleteRequest }) => {
|
||||
return mainApi.delete<boolean>(`${CHATS_BASE}/${id}/sharing`, { data }).then((res) => res.data);
|
||||
};
|
||||
|
||||
export const updateChatShare = async ({
|
||||
id,
|
||||
params,
|
||||
}: {
|
||||
id: string;
|
||||
params: ShareUpdateRequest;
|
||||
}) => {
|
||||
return mainApi
|
||||
.put<ShareChatResponse>(`${CHATS_BASE}/${id}/sharing`, params)
|
||||
.then((res) => res.data);
|
||||
};
|
||||
|
|
|
@ -31,3 +31,6 @@ export type DuplicateChatResponse = z.infer<typeof DuplicateChatResponseSchema>;
|
|||
// Response for deleting chats (void)
|
||||
export const DeleteChatsResponseSchema = z.void();
|
||||
export type DeleteChatsResponse = z.infer<typeof DeleteChatsResponseSchema>;
|
||||
|
||||
export const ShareChatResponseSchema = ChatWithMessagesSchema;
|
||||
export type ShareChatResponse = z.infer<typeof ShareChatResponseSchema>;
|
||||
|
|
Loading…
Reference in New Issue