1import type { ScopedProjectRef, ScopedThreadRef } from "@t3tools/contracts";
2import { scopedThreadKey } from "@t3tools/client-runtime/environment";
3
4import { type DraftId, useComposerDraftStore } from "../composerDraftStore";
5import { releaseDraftAttachments } from "./attachmentUploadQueue";
6
7export function releaseComposerDraftUploads(target: ScopedThreadRef | DraftId): void {
8 const draft = useComposerDraftStore.getState().getComposerDraft(target);
9 if (draft) {
10 releaseDraftAttachments([...draft.images, ...draft.files]);
11 }
12}
13
14export function releaseProjectDraftUploads(
15 projectRef: ScopedProjectRef,
16 projectThreadRefs: ReadonlyArray<ScopedThreadRef> = [],
17): void {
18 const store = useComposerDraftStore.getState();
19 for (const [draftKey, session] of Object.entries(store.draftThreadsByThreadKey)) {
20 if (
21 session.environmentId === projectRef.environmentId &&
22 session.projectId === projectRef.projectId
23 ) {
24 const draft = store.draftsByThreadKey[draftKey];
25 releaseDraftAttachments(draft ? [...draft.images, ...draft.files] : []);
26 }
27 }
28 for (const threadRef of projectThreadRefs) {
29 const draft = store.draftsByThreadKey[scopedThreadKey(threadRef)];
30 if (draft) {
31 releaseDraftAttachments([...draft.images, ...draft.files]);
32 }
33 }
34}