openhands / src /stores /pending-task-attachments-store.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
5f40163 verified
Raw History Blame Contribute Delete
1.46 kB
import { create } from "zustand";
export interface PendingTaskAttachments {
content: string;
images: File[];
files: File[];
imagesMarkedUploadAsFile: string[];
}
interface PendingTaskAttachmentsState {
byTaskId: Record<string, PendingTaskAttachments>;
setPendingTaskAttachments: (
taskId: string,
payload: PendingTaskAttachments,
) => void;
consumePendingTaskAttachments: (
taskId: string,
) => PendingTaskAttachments | null;
}
export const usePendingTaskAttachmentsStore =
create<PendingTaskAttachmentsState>()((set, get) => ({
byTaskId: {},
setPendingTaskAttachments: (taskId, payload) =>
set((state) => ({
byTaskId: { ...state.byTaskId, [taskId]: payload },
})),
consumePendingTaskAttachments: (taskId) => {
const payload = get().byTaskId[taskId];
if (!payload) {
return null;
}
set((state) => {
const { [taskId]: _removed, ...rest } = state.byTaskId;
return { byTaskId: rest };
});
return payload;
},
}));
export function setPendingTaskAttachments(
taskId: string,
payload: PendingTaskAttachments,
): void {
usePendingTaskAttachmentsStore
.getState()
.setPendingTaskAttachments(taskId, payload);
}
export function consumePendingTaskAttachments(
taskId: string,
): PendingTaskAttachments | null {
return usePendingTaskAttachmentsStore
.getState()
.consumePendingTaskAttachments(taskId);
}