mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-09 20:18:50 +01:00
🚀 feat: Artifact Editing & Downloads (#5428)
* refactor: expand container * chore: bump @codesandbox/sandpack-react to latest * WIP: first pass, show editor * feat: implement ArtifactCodeEditor and ArtifactTabs components for enhanced artifact management * refactor: fileKey * refactor: auto scrolling code editor and add messageId to artifact * feat: first pass, editing artifact * feat: first pass, robust artifact replacement * fix: robust artifact replacement & re-render when expected * feat: Download Artifacts * refactor: improve artifact editing UX * fix: layout shift of new download button * fix: enhance missing output checks and logging in StreamRunManager
This commit is contained in:
parent
87383fec27
commit
ed57bb4711
34 changed files with 1156 additions and 237 deletions
2
client/src/data-provider/Messages/index.ts
Normal file
2
client/src/data-provider/Messages/index.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
// export * from './queries';
|
||||
export * from './mutations';
|
||||
46
client/src/data-provider/Messages/mutations.ts
Normal file
46
client/src/data-provider/Messages/mutations.ts
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import { dataService, QueryKeys } from 'librechat-data-provider';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import type * as t from 'librechat-data-provider';
|
||||
import type { UseMutationResult } from '@tanstack/react-query';
|
||||
|
||||
export const useEditArtifact = (
|
||||
_options?: t.EditArtifactOptions,
|
||||
): UseMutationResult<t.TEditArtifactResponse, Error, t.TEditArtifactRequest> => {
|
||||
const queryClient = useQueryClient();
|
||||
const { onSuccess, ...options } = _options ?? {};
|
||||
return useMutation({
|
||||
mutationFn: (variables: t.TEditArtifactRequest) => dataService.editArtifact(variables),
|
||||
onSuccess: (data, vars, context) => {
|
||||
queryClient.setQueryData<t.TMessage[]>([QueryKeys.messages, data.conversationId], (prev) => {
|
||||
if (!prev) {
|
||||
return prev;
|
||||
}
|
||||
|
||||
const newArray = [...prev];
|
||||
let targetIndex: number | undefined;
|
||||
|
||||
for (let i = newArray.length - 1; i >= 0; i--) {
|
||||
if (newArray[i].messageId === vars.messageId) {
|
||||
targetIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (targetIndex == null) {
|
||||
return prev;
|
||||
}
|
||||
|
||||
newArray[targetIndex] = {
|
||||
...newArray[targetIndex],
|
||||
content: data.content,
|
||||
text: data.text,
|
||||
};
|
||||
|
||||
return newArray;
|
||||
});
|
||||
|
||||
onSuccess?.(data, vars, context);
|
||||
},
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
export * from './Auth';
|
||||
export * from './Agents';
|
||||
export * from './Files';
|
||||
export * from './Messages';
|
||||
export * from './Tools';
|
||||
export * from './connection';
|
||||
export * from './mutations';
|
||||
|
|
|
|||
|
|
@ -579,9 +579,6 @@ export const useDuplicateConversationMutation = (
|
|||
if (originalId.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
queryClient.setQueryData(
|
||||
[QueryKeys.conversation, data.conversation.conversationId],
|
||||
data.conversation,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue