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);
}