File size: 1,457 Bytes
5f40163 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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);
}
|