@aleph-alpha/chat-kit 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composables/fileUpload/index.d.ts +1 -1
- package/dist/composables/fileUpload/index.d.ts.map +1 -1
- package/dist/composables/fileUpload/types.d.ts +11 -1
- package/dist/composables/fileUpload/types.d.ts.map +1 -1
- package/dist/composables/fileUpload/useFileUpload.d.ts.map +1 -1
- package/dist/composables/fileUpload/useFileUploadWrapper.d.ts.map +1 -1
- package/dist/composables/index.js +1 -1
- package/dist/{index-Ct5hD214.js → index-BPXg1Yf6.js} +47 -10
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/composables/fileUpload/index.spec.ts +21 -0
- package/src/composables/fileUpload/index.ts +2 -0
- package/src/composables/fileUpload/types.ts +15 -1
- package/src/composables/fileUpload/useFileUpload.spec.ts +258 -0
- package/src/composables/fileUpload/useFileUpload.ts +47 -7
- package/src/composables/fileUpload/useFileUploadWrapper.spec.ts +202 -0
- package/src/composables/fileUpload/useFileUploadWrapper.ts +25 -3
|
@@ -3,6 +3,6 @@ import { createDocumentUploadProvider } from './useFileUploadWrapper';
|
|
|
3
3
|
export declare const defaultDocumentUploadConfig: DocumentUploadConfig;
|
|
4
4
|
declare const useDocumentUploadWithDefaultConfig: (conversationIdRef: import("vue").MaybeRef<string>) => import("./types").DocumentUploadReturn;
|
|
5
5
|
export { useDocumentUploadWithDefaultConfig, createDocumentUploadProvider };
|
|
6
|
-
export type { DocumentUploadConfig, DocumentUploadProvider, FileEntry, FileStatus, } from './types';
|
|
6
|
+
export type { DocumentUploadConfig, DocumentUploadProvider, DocumentUploadReturn, HandleFilesSelectedOptions, FileEntry, FileStatus, } from './types';
|
|
7
7
|
export { SdkError, defaultEndpoints } from './types';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -245,6 +245,7 @@ export interface DocumentUploadConfig {
|
|
|
245
245
|
workflowConfig: Record<string, unknown>;
|
|
246
246
|
persist?: boolean;
|
|
247
247
|
maxConcurrency?: number;
|
|
248
|
+
maxFilesPerUpload?: number;
|
|
248
249
|
headers?: Record<string, string>;
|
|
249
250
|
onEvent?: (event: UploadEvent) => void;
|
|
250
251
|
}
|
|
@@ -255,13 +256,21 @@ export interface DocumentUploadReturn {
|
|
|
255
256
|
upload: UseFileUploadReturn;
|
|
256
257
|
storeId: Ref<string>;
|
|
257
258
|
fileInput: Ref<HTMLInputElement | null>;
|
|
259
|
+
maxFilesPerUpload: number;
|
|
258
260
|
uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
|
|
259
261
|
unassignedFiles: ComputedRef<FileEntry[]>;
|
|
260
262
|
assignFilesToMessage: (messageId: string) => void;
|
|
261
263
|
getFilesForMessage: (messageId: string) => FileEntry[];
|
|
262
264
|
stampResponseId: (responseId: string, localMessageId: string) => void;
|
|
263
265
|
purgeCompletedFiles: () => void;
|
|
264
|
-
handleFilesSelected: (event: Event) => void;
|
|
266
|
+
handleFilesSelected: (event: Event, options?: HandleFilesSelectedOptions) => void;
|
|
267
|
+
}
|
|
268
|
+
export interface HandleFilesSelectedOptions {
|
|
269
|
+
onFilesExceeded?: (info: {
|
|
270
|
+
selected: number;
|
|
271
|
+
allowed: number;
|
|
272
|
+
kept: number;
|
|
273
|
+
}) => void;
|
|
265
274
|
}
|
|
266
275
|
export interface UseFileUploadOptions {
|
|
267
276
|
client: HttpClient;
|
|
@@ -270,6 +279,7 @@ export interface UseFileUploadOptions {
|
|
|
270
279
|
endpoints?: EndpointResolver;
|
|
271
280
|
persist?: PersistOptions | boolean;
|
|
272
281
|
maxConcurrency?: number;
|
|
282
|
+
maxFilesPerUpload?: number;
|
|
273
283
|
retryPolicy?: RetryPolicy;
|
|
274
284
|
validators?: ValidatorFn[];
|
|
275
285
|
onEvent?: (event: UploadEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CA2yBrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAiJjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAsPxB"}
|
|
@@ -588,7 +588,12 @@ function useFileUpload(options) {
|
|
|
588
588
|
let storeId = options.storeId ?? "";
|
|
589
589
|
const endpoints = options.endpoints ?? defaultEndpoints;
|
|
590
590
|
const retryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
|
|
591
|
-
const constraints = {
|
|
591
|
+
const constraints = {
|
|
592
|
+
...DEFAULT_CONSTRAINTS,
|
|
593
|
+
...options.maxFilesPerUpload != null && {
|
|
594
|
+
maxFilesPerUpload: options.maxFilesPerUpload
|
|
595
|
+
}
|
|
596
|
+
};
|
|
592
597
|
const validators = options.validators ?? [];
|
|
593
598
|
const maxConcurrency = options.maxConcurrency ?? 3;
|
|
594
599
|
const files = ref(/* @__PURE__ */ new Map());
|
|
@@ -757,10 +762,13 @@ function useFileUpload(options) {
|
|
|
757
762
|
}
|
|
758
763
|
async function upload(params) {
|
|
759
764
|
const fileList = Array.isArray(params.files) ? params.files : [params.files];
|
|
760
|
-
|
|
765
|
+
const activeFileCount = [...files.value.values()].filter(
|
|
766
|
+
(e) => e.status !== "failed" && e.status !== "cancelled" && e.status !== "removed"
|
|
767
|
+
).length;
|
|
768
|
+
if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
|
|
761
769
|
throw new SdkError(
|
|
762
770
|
"MAX_FILES_EXCEEDED",
|
|
763
|
-
`Cannot upload ${fileList.length}
|
|
771
|
+
`Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`
|
|
764
772
|
);
|
|
765
773
|
}
|
|
766
774
|
const mergedMeta = {
|
|
@@ -1033,6 +1041,19 @@ function useFileUpload(options) {
|
|
|
1033
1041
|
for (const key of involvedStateKeys) {
|
|
1034
1042
|
updateEntry(key, { status: "processing", progress: 0 });
|
|
1035
1043
|
}
|
|
1044
|
+
const completeInvolvedFiles = (documents = []) => {
|
|
1045
|
+
const documentIdByFileId = new Map(
|
|
1046
|
+
documents.filter((doc) => doc.file_id && doc.document_id).map((doc) => [doc.file_id, doc.document_id])
|
|
1047
|
+
);
|
|
1048
|
+
for (const key of involvedStateKeys) {
|
|
1049
|
+
updateEntry(key, { status: "success", progress: 100 });
|
|
1050
|
+
const remoteFileId = files.value.get(key)?.remoteFileId;
|
|
1051
|
+
const documentId = remoteFileId ? documentIdByFileId.get(remoteFileId) : void 0;
|
|
1052
|
+
if (documentId) {
|
|
1053
|
+
updateFileMetadata(key, { documentId });
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
};
|
|
1036
1057
|
const runResponse = await client.post(
|
|
1037
1058
|
endpoints.workflowRun(storeId, workflowId),
|
|
1038
1059
|
{ input },
|
|
@@ -1075,9 +1096,9 @@ function useFileUpload(options) {
|
|
|
1075
1096
|
if (data.status === "completed") {
|
|
1076
1097
|
workflowRun.value.status = "completed";
|
|
1077
1098
|
workflowRun.value.completedAt = now();
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1099
|
+
completeInvolvedFiles(
|
|
1100
|
+
Array.isArray(data.documents) ? data.documents : []
|
|
1101
|
+
);
|
|
1081
1102
|
emit({ type: "workflow:completed", runId });
|
|
1082
1103
|
} else if (data.status === "failed" || data.status === "error") {
|
|
1083
1104
|
workflowRun.value.status = "failed";
|
|
@@ -1308,7 +1329,8 @@ function createDocumentUploadProvider(config) {
|
|
|
1308
1329
|
searchStoreConfig,
|
|
1309
1330
|
workflowConfig,
|
|
1310
1331
|
persist = true,
|
|
1311
|
-
maxConcurrency = 3
|
|
1332
|
+
maxConcurrency = 3,
|
|
1333
|
+
maxFilesPerUpload
|
|
1312
1334
|
} = config;
|
|
1313
1335
|
const defaultHeaders = {
|
|
1314
1336
|
"x-user-id": userId,
|
|
@@ -1373,6 +1395,7 @@ function createDocumentUploadProvider(config) {
|
|
|
1373
1395
|
workflowId,
|
|
1374
1396
|
persist,
|
|
1375
1397
|
maxConcurrency,
|
|
1398
|
+
maxFilesPerUpload,
|
|
1376
1399
|
onEvent
|
|
1377
1400
|
});
|
|
1378
1401
|
}
|
|
@@ -1381,6 +1404,7 @@ function createDocumentUploadProvider(config) {
|
|
|
1381
1404
|
function useDocumentUpload(conversationIdRef) {
|
|
1382
1405
|
const fileInput = ref(null);
|
|
1383
1406
|
const upload = getUploadInstance();
|
|
1407
|
+
const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
|
|
1384
1408
|
const storeId = ref(resolvedStoreId ?? "");
|
|
1385
1409
|
const currentScope = shallowRef(
|
|
1386
1410
|
upload.scopeBy("conversationId", toValue(conversationIdRef))
|
|
@@ -1456,16 +1480,29 @@ function createDocumentUploadProvider(config) {
|
|
|
1456
1480
|
upload.removeFile(entry.id, { removeFromRemote: false });
|
|
1457
1481
|
}
|
|
1458
1482
|
}
|
|
1459
|
-
function handleFilesSelected(event) {
|
|
1483
|
+
function handleFilesSelected(event, options) {
|
|
1460
1484
|
const input = event.target;
|
|
1461
|
-
|
|
1462
|
-
|
|
1485
|
+
let fileList = Array.from(input.files ?? []);
|
|
1486
|
+
const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
|
|
1487
|
+
if (fileList.length > availableSlots) {
|
|
1488
|
+
const kept = Math.max(0, availableSlots);
|
|
1489
|
+
options?.onFilesExceeded?.({
|
|
1490
|
+
selected: fileList.length,
|
|
1491
|
+
allowed: availableSlots,
|
|
1492
|
+
kept
|
|
1493
|
+
});
|
|
1494
|
+
fileList = fileList.slice(0, kept);
|
|
1495
|
+
}
|
|
1496
|
+
if (fileList.length > 0) {
|
|
1497
|
+
uploadFiles(fileList);
|
|
1498
|
+
}
|
|
1463
1499
|
input.value = "";
|
|
1464
1500
|
}
|
|
1465
1501
|
return {
|
|
1466
1502
|
upload,
|
|
1467
1503
|
storeId,
|
|
1468
1504
|
fileInput,
|
|
1505
|
+
maxFilesPerUpload: resolvedMaxFiles,
|
|
1469
1506
|
uploadFiles,
|
|
1470
1507
|
unassignedFiles,
|
|
1471
1508
|
assignFilesToMessage,
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { u } from "./useMessageHandler-CMdy-lm0.js";
|
|
2
2
|
import { C, d, p, u as u2, a } from "./useChatKitLabels-ZutacPad.js";
|
|
3
|
-
import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-
|
|
3
|
+
import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-BPXg1Yf6.js";
|
|
4
4
|
import { _, a as a3, b as b2, C as C2, c as c2, d as d3, e as e2, f as f2, g, h, i, j, k, l, m, n, o, p as p2, q, r, s, t } from "./CkInput.vue_vue_type_script_setup_true_lang-DPZedAQS.js";
|
|
5
5
|
export {
|
|
6
6
|
C as CHAT_KIT_LABELS,
|
package/package.json
CHANGED
|
@@ -10,6 +10,7 @@ vi.mock('./useFileUploadWrapper', () => ({
|
|
|
10
10
|
upload: {},
|
|
11
11
|
storeId: { value: '' },
|
|
12
12
|
fileInput: { value: null },
|
|
13
|
+
maxFilesPerUpload: config.maxFilesPerUpload ?? 20,
|
|
13
14
|
uploadFiles: vi.fn(),
|
|
14
15
|
unassignedFiles: { value: [] },
|
|
15
16
|
assignFilesToMessage: vi.fn(),
|
|
@@ -143,6 +144,10 @@ describe('fileUpload index', () => {
|
|
|
143
144
|
additionalProperties: true,
|
|
144
145
|
});
|
|
145
146
|
});
|
|
147
|
+
|
|
148
|
+
it('does not set maxFilesPerUpload by default', () => {
|
|
149
|
+
expect(defaultDocumentUploadConfig.maxFilesPerUpload).toBeUndefined();
|
|
150
|
+
});
|
|
146
151
|
});
|
|
147
152
|
|
|
148
153
|
describe('createDocumentUploadProvider', () => {
|
|
@@ -187,6 +192,22 @@ describe('fileUpload index', () => {
|
|
|
187
192
|
};
|
|
188
193
|
expect(provider._config).toBe(customConfig);
|
|
189
194
|
});
|
|
195
|
+
|
|
196
|
+
it('passes maxFilesPerUpload through config', () => {
|
|
197
|
+
const customConfig: DocumentUploadConfig = {
|
|
198
|
+
...defaultDocumentUploadConfig,
|
|
199
|
+
maxFilesPerUpload: 5,
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const provider = createDocumentUploadProvider(
|
|
203
|
+
customConfig,
|
|
204
|
+
) as unknown as {
|
|
205
|
+
useDocumentUpload: (id: string) => { maxFilesPerUpload: number };
|
|
206
|
+
_config: DocumentUploadConfig;
|
|
207
|
+
};
|
|
208
|
+
const result = provider.useDocumentUpload('conv-1');
|
|
209
|
+
expect(result.maxFilesPerUpload).toBe(5);
|
|
210
|
+
});
|
|
190
211
|
});
|
|
191
212
|
|
|
192
213
|
describe('useDocumentUploadWithDefaultConfig', () => {
|
|
@@ -345,6 +345,7 @@ export interface DocumentUploadConfig {
|
|
|
345
345
|
workflowConfig: Record<string, unknown>;
|
|
346
346
|
persist?: boolean;
|
|
347
347
|
maxConcurrency?: number;
|
|
348
|
+
maxFilesPerUpload?: number;
|
|
348
349
|
headers?: Record<string, string>;
|
|
349
350
|
onEvent?: (event: UploadEvent) => void;
|
|
350
351
|
}
|
|
@@ -359,13 +360,25 @@ export interface DocumentUploadReturn {
|
|
|
359
360
|
upload: UseFileUploadReturn;
|
|
360
361
|
storeId: Ref<string>;
|
|
361
362
|
fileInput: Ref<HTMLInputElement | null>;
|
|
363
|
+
maxFilesPerUpload: number;
|
|
362
364
|
uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
|
|
363
365
|
unassignedFiles: ComputedRef<FileEntry[]>;
|
|
364
366
|
assignFilesToMessage: (messageId: string) => void;
|
|
365
367
|
getFilesForMessage: (messageId: string) => FileEntry[];
|
|
366
368
|
stampResponseId: (responseId: string, localMessageId: string) => void;
|
|
367
369
|
purgeCompletedFiles: () => void;
|
|
368
|
-
handleFilesSelected: (
|
|
370
|
+
handleFilesSelected: (
|
|
371
|
+
event: Event,
|
|
372
|
+
options?: HandleFilesSelectedOptions,
|
|
373
|
+
) => void;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export interface HandleFilesSelectedOptions {
|
|
377
|
+
onFilesExceeded?: (info: {
|
|
378
|
+
selected: number;
|
|
379
|
+
allowed: number;
|
|
380
|
+
kept: number;
|
|
381
|
+
}) => void;
|
|
369
382
|
}
|
|
370
383
|
|
|
371
384
|
// ---------------------------------------------------------------------------
|
|
@@ -379,6 +392,7 @@ export interface UseFileUploadOptions {
|
|
|
379
392
|
endpoints?: EndpointResolver;
|
|
380
393
|
persist?: PersistOptions | boolean;
|
|
381
394
|
maxConcurrency?: number;
|
|
395
|
+
maxFilesPerUpload?: number;
|
|
382
396
|
retryPolicy?: RetryPolicy;
|
|
383
397
|
validators?: ValidatorFn[];
|
|
384
398
|
onEvent?: (event: UploadEvent) => void;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { useFileUpload } from './useFileUpload';
|
|
2
|
+
import type { FileEntry, HttpClient, SseEvent } from './types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Build a minimal `FileEntry` in the post-upload `processing` state so
|
|
6
|
+
* `runWorkflow` treats it as an involved file (it filters on `remoteFileId`).
|
|
7
|
+
*/
|
|
8
|
+
function makeEntry(id: string, remoteFileId: string): FileEntry {
|
|
9
|
+
return {
|
|
10
|
+
id,
|
|
11
|
+
groupId: 'group-1',
|
|
12
|
+
fileName: `${id}.pdf`,
|
|
13
|
+
fileSize: 1,
|
|
14
|
+
fileType: 'application/pdf',
|
|
15
|
+
status: 'processing',
|
|
16
|
+
progress: 0,
|
|
17
|
+
queuedAt: 'now',
|
|
18
|
+
uploadStartedAt: null,
|
|
19
|
+
uploadCompletedAt: null,
|
|
20
|
+
cancelledAt: null,
|
|
21
|
+
removedAt: null,
|
|
22
|
+
uploadDurationMs: null,
|
|
23
|
+
remoteFileId,
|
|
24
|
+
error: null,
|
|
25
|
+
attemptCount: 0,
|
|
26
|
+
lastAttemptAt: null,
|
|
27
|
+
thumbnail: null,
|
|
28
|
+
metadata: {},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function makeSuccessEntry(id: string, remoteFileId: string): FileEntry {
|
|
33
|
+
return { ...makeEntry(id, remoteFileId), status: 'success', progress: 100 };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Mock `HttpClient` whose `stream` captures the subscriber so the test can
|
|
38
|
+
* drive SSE events synchronously. `post` resolves the workflow run id.
|
|
39
|
+
*/
|
|
40
|
+
function createMockClient(captured: { cb?: (event: SseEvent) => void }) {
|
|
41
|
+
return {
|
|
42
|
+
get: vi.fn(),
|
|
43
|
+
delete: vi.fn(),
|
|
44
|
+
post: vi.fn().mockResolvedValue({ id: 'run-1' }),
|
|
45
|
+
stream: vi.fn(() => ({
|
|
46
|
+
subscribe: (cb: (event: SseEvent) => void) => {
|
|
47
|
+
captured.cb = cb;
|
|
48
|
+
},
|
|
49
|
+
close: vi.fn(),
|
|
50
|
+
})),
|
|
51
|
+
} as unknown as HttpClient;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function createUploadMockClient() {
|
|
55
|
+
return {
|
|
56
|
+
get: vi.fn(),
|
|
57
|
+
delete: vi.fn(),
|
|
58
|
+
post: vi.fn().mockResolvedValue([{ id: 'remote-1' }]),
|
|
59
|
+
stream: vi.fn(() => ({
|
|
60
|
+
subscribe: vi.fn(),
|
|
61
|
+
close: vi.fn(),
|
|
62
|
+
})),
|
|
63
|
+
} as unknown as HttpClient;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function completeEvent(
|
|
67
|
+
documents: Array<{ document_id?: string; file_id?: string }>,
|
|
68
|
+
): SseEvent {
|
|
69
|
+
return {
|
|
70
|
+
event: 'complete',
|
|
71
|
+
data: JSON.stringify({
|
|
72
|
+
document_ids: documents.map((d) => d.document_id),
|
|
73
|
+
documents,
|
|
74
|
+
status: 'completed',
|
|
75
|
+
}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function createFile(name: string, size = 100): File {
|
|
80
|
+
return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
describe('useFileUpload runWorkflow', () => {
|
|
84
|
+
it('stamps documentId onto each file from the completed event, matched by file_id', async () => {
|
|
85
|
+
const captured: { cb?: (event: SseEvent) => void } = {};
|
|
86
|
+
const upload = useFileUpload({
|
|
87
|
+
client: createMockClient(captured),
|
|
88
|
+
workflowId: 'wf',
|
|
89
|
+
storeId: 'ss-1',
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
upload.files.value.set('key-1', makeEntry('key-1', 'file-1'));
|
|
93
|
+
upload.files.value.set('key-2', makeEntry('key-2', 'file-2'));
|
|
94
|
+
|
|
95
|
+
await upload.runWorkflow(['file-1', 'file-2']);
|
|
96
|
+
expect(captured.cb).toBeDefined();
|
|
97
|
+
|
|
98
|
+
// Reverse order on purpose: mapping must be keyed by file_id, not position.
|
|
99
|
+
captured.cb!(
|
|
100
|
+
completeEvent([
|
|
101
|
+
{ document_id: 'doc-2', file_id: 'file-2' },
|
|
102
|
+
{ document_id: 'doc-1', file_id: 'file-1' },
|
|
103
|
+
]),
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
expect(upload.getFileState('key-1')?.metadata.documentId).toBe('doc-1');
|
|
107
|
+
expect(upload.getFileState('key-2')?.metadata.documentId).toBe('doc-2');
|
|
108
|
+
expect(upload.getFileState('key-1')?.status).toBe('success');
|
|
109
|
+
expect(upload.getFileState('key-2')?.status).toBe('success');
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('marks files successful without a documentId when the event has no documents', async () => {
|
|
113
|
+
const captured: { cb?: (event: SseEvent) => void } = {};
|
|
114
|
+
const upload = useFileUpload({
|
|
115
|
+
client: createMockClient(captured),
|
|
116
|
+
workflowId: 'wf',
|
|
117
|
+
storeId: 'ss-1',
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
upload.files.value.set('key-1', makeEntry('key-1', 'file-1'));
|
|
121
|
+
|
|
122
|
+
await upload.runWorkflow(['file-1']);
|
|
123
|
+
captured.cb!({
|
|
124
|
+
event: 'complete',
|
|
125
|
+
data: JSON.stringify({ status: 'completed' }),
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
expect(upload.getFileState('key-1')?.status).toBe('success');
|
|
129
|
+
expect(upload.getFileState('key-1')?.metadata.documentId).toBeUndefined();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('useFileUpload maxFilesPerUpload', () => {
|
|
134
|
+
it('uses default maxFilesPerUpload of 20 when not configured', () => {
|
|
135
|
+
const upload = useFileUpload({
|
|
136
|
+
client: createUploadMockClient(),
|
|
137
|
+
workflowId: 'wf',
|
|
138
|
+
storeId: 'ss-1',
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
const constraints = upload.getSupportedFileTypes();
|
|
142
|
+
expect(constraints.maxFilesPerUpload).toBe(20);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('respects custom maxFilesPerUpload from options', () => {
|
|
146
|
+
const upload = useFileUpload({
|
|
147
|
+
client: createUploadMockClient(),
|
|
148
|
+
workflowId: 'wf',
|
|
149
|
+
storeId: 'ss-1',
|
|
150
|
+
maxFilesPerUpload: 5,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
const constraints = upload.getSupportedFileTypes();
|
|
154
|
+
expect(constraints.maxFilesPerUpload).toBe(5);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it('throws MAX_FILES_EXCEEDED when batch exceeds limit', async () => {
|
|
158
|
+
const upload = useFileUpload({
|
|
159
|
+
client: createUploadMockClient(),
|
|
160
|
+
workflowId: 'wf',
|
|
161
|
+
storeId: 'ss-1',
|
|
162
|
+
maxFilesPerUpload: 2,
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
const files = [
|
|
166
|
+
createFile('a.pdf'),
|
|
167
|
+
createFile('b.pdf'),
|
|
168
|
+
createFile('c.pdf'),
|
|
169
|
+
];
|
|
170
|
+
|
|
171
|
+
await expect(upload.upload({ id: 'g1', files })).rejects.toMatchObject({
|
|
172
|
+
code: 'MAX_FILES_EXCEEDED',
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('throws MAX_FILES_EXCEEDED when active files plus new batch exceeds limit', async () => {
|
|
177
|
+
const client = createUploadMockClient();
|
|
178
|
+
(client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
|
|
179
|
+
{ id: 'remote-1' },
|
|
180
|
+
]);
|
|
181
|
+
|
|
182
|
+
const upload = useFileUpload({
|
|
183
|
+
client,
|
|
184
|
+
workflowId: 'wf',
|
|
185
|
+
storeId: 'ss-1',
|
|
186
|
+
maxFilesPerUpload: 3,
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
|
|
190
|
+
upload.files.value.set('existing-2', makeSuccessEntry('existing-2', 'r-2'));
|
|
191
|
+
|
|
192
|
+
await expect(
|
|
193
|
+
upload.upload({
|
|
194
|
+
id: 'g2',
|
|
195
|
+
files: [createFile('a.pdf'), createFile('b.pdf')],
|
|
196
|
+
}),
|
|
197
|
+
).rejects.toMatchObject({
|
|
198
|
+
code: 'MAX_FILES_EXCEEDED',
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('allows upload when active files plus new batch is within limit', async () => {
|
|
203
|
+
const client = createUploadMockClient();
|
|
204
|
+
(client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
|
|
205
|
+
{ id: 'remote-new' },
|
|
206
|
+
]);
|
|
207
|
+
|
|
208
|
+
const upload = useFileUpload({
|
|
209
|
+
client,
|
|
210
|
+
workflowId: 'wf',
|
|
211
|
+
storeId: 'ss-1',
|
|
212
|
+
maxFilesPerUpload: 3,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
|
|
216
|
+
|
|
217
|
+
const result = await upload.upload({
|
|
218
|
+
id: 'g3',
|
|
219
|
+
files: [createFile('a.pdf'), createFile('b.pdf')],
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
expect(result.results).toHaveLength(2);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('does not count failed/cancelled/removed files towards active count', async () => {
|
|
226
|
+
const client = createUploadMockClient();
|
|
227
|
+
(client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
|
|
228
|
+
{ id: 'remote-new' },
|
|
229
|
+
]);
|
|
230
|
+
|
|
231
|
+
const upload = useFileUpload({
|
|
232
|
+
client,
|
|
233
|
+
workflowId: 'wf',
|
|
234
|
+
storeId: 'ss-1',
|
|
235
|
+
maxFilesPerUpload: 2,
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
const failedEntry: FileEntry = {
|
|
239
|
+
...makeEntry('failed-1', 'r-f1'),
|
|
240
|
+
status: 'failed',
|
|
241
|
+
error: { code: 'UPLOAD_FAILED', message: 'err', occurredAt: 'now' },
|
|
242
|
+
};
|
|
243
|
+
const cancelledEntry: FileEntry = {
|
|
244
|
+
...makeEntry('cancelled-1', 'r-c1'),
|
|
245
|
+
status: 'cancelled',
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
upload.files.value.set('failed-1', failedEntry);
|
|
249
|
+
upload.files.value.set('cancelled-1', cancelledEntry);
|
|
250
|
+
|
|
251
|
+
const result = await upload.upload({
|
|
252
|
+
id: 'g4',
|
|
253
|
+
files: [createFile('a.pdf'), createFile('b.pdf')],
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
expect(result.results).toHaveLength(2);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
@@ -473,7 +473,12 @@ export function useFileUpload(
|
|
|
473
473
|
let storeId = options.storeId ?? '';
|
|
474
474
|
const endpoints: EndpointResolver = options.endpoints ?? defaultEndpoints;
|
|
475
475
|
const retryPolicy: RetryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
|
|
476
|
-
const constraints: FileConstraints = {
|
|
476
|
+
const constraints: FileConstraints = {
|
|
477
|
+
...DEFAULT_CONSTRAINTS,
|
|
478
|
+
...(options.maxFilesPerUpload != null && {
|
|
479
|
+
maxFilesPerUpload: options.maxFilesPerUpload,
|
|
480
|
+
}),
|
|
481
|
+
};
|
|
477
482
|
const validators: ValidatorFn[] = options.validators ?? [];
|
|
478
483
|
const maxConcurrency = options.maxConcurrency ?? 3;
|
|
479
484
|
|
|
@@ -701,10 +706,17 @@ export function useFileUpload(
|
|
|
701
706
|
? params.files
|
|
702
707
|
: [params.files];
|
|
703
708
|
|
|
704
|
-
|
|
709
|
+
const activeFileCount = [...files.value.values()].filter(
|
|
710
|
+
(e) =>
|
|
711
|
+
e.status !== 'failed' &&
|
|
712
|
+
e.status !== 'cancelled' &&
|
|
713
|
+
e.status !== 'removed',
|
|
714
|
+
).length;
|
|
715
|
+
|
|
716
|
+
if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
|
|
705
717
|
throw new SdkError(
|
|
706
718
|
'MAX_FILES_EXCEEDED',
|
|
707
|
-
`Cannot upload ${fileList.length}
|
|
719
|
+
`Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`,
|
|
708
720
|
);
|
|
709
721
|
}
|
|
710
722
|
|
|
@@ -1054,6 +1066,30 @@ export function useFileUpload(
|
|
|
1054
1066
|
updateEntry(key, { status: 'processing', progress: 0 });
|
|
1055
1067
|
}
|
|
1056
1068
|
|
|
1069
|
+
// Mark the involved files successful and stamp the `documentId` resolved
|
|
1070
|
+
// from the terminal event's `documents` array (mapping `file_id` ->
|
|
1071
|
+
// `document_id`) onto each matching entry, so consumers can reference the
|
|
1072
|
+
// produced document directly without a separate lookup.
|
|
1073
|
+
const completeInvolvedFiles = (
|
|
1074
|
+
documents: Array<{ document_id?: string; file_id?: string }> = [],
|
|
1075
|
+
) => {
|
|
1076
|
+
const documentIdByFileId = new Map(
|
|
1077
|
+
documents
|
|
1078
|
+
.filter((doc) => doc.file_id && doc.document_id)
|
|
1079
|
+
.map((doc) => [doc.file_id, doc.document_id] as const),
|
|
1080
|
+
);
|
|
1081
|
+
for (const key of involvedStateKeys) {
|
|
1082
|
+
updateEntry(key, { status: 'success', progress: 100 });
|
|
1083
|
+
const remoteFileId = files.value.get(key)?.remoteFileId;
|
|
1084
|
+
const documentId = remoteFileId
|
|
1085
|
+
? documentIdByFileId.get(remoteFileId)
|
|
1086
|
+
: undefined;
|
|
1087
|
+
if (documentId) {
|
|
1088
|
+
updateFileMetadata(key, { documentId });
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1092
|
+
|
|
1057
1093
|
const runResponse = await client.post<{ id: string }>(
|
|
1058
1094
|
endpoints.workflowRun(storeId, workflowId),
|
|
1059
1095
|
{ input },
|
|
@@ -1087,7 +1123,11 @@ export function useFileUpload(
|
|
|
1087
1123
|
sseStream.subscribe((event: SseEvent) => {
|
|
1088
1124
|
if (!workflowRun.value) return;
|
|
1089
1125
|
|
|
1090
|
-
let data: {
|
|
1126
|
+
let data: {
|
|
1127
|
+
id?: string;
|
|
1128
|
+
status?: string;
|
|
1129
|
+
documents?: Array<{ document_id?: string; file_id?: string }>;
|
|
1130
|
+
};
|
|
1091
1131
|
try {
|
|
1092
1132
|
data = JSON.parse(event.data);
|
|
1093
1133
|
} catch {
|
|
@@ -1105,9 +1145,9 @@ export function useFileUpload(
|
|
|
1105
1145
|
if (data.status === 'completed') {
|
|
1106
1146
|
workflowRun.value.status = 'completed';
|
|
1107
1147
|
workflowRun.value.completedAt = now();
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1148
|
+
completeInvolvedFiles(
|
|
1149
|
+
Array.isArray(data.documents) ? data.documents : [],
|
|
1150
|
+
);
|
|
1111
1151
|
emit({ type: 'workflow:completed', runId });
|
|
1112
1152
|
} else if (data.status === 'failed' || data.status === 'error') {
|
|
1113
1153
|
workflowRun.value.status = 'failed';
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { createDocumentUploadProvider } from './useFileUploadWrapper';
|
|
2
|
+
import type { DocumentUploadConfig } from './types';
|
|
3
|
+
|
|
4
|
+
function createFile(name: string, size = 100): File {
|
|
5
|
+
return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function createMockFetchResponse(body: unknown, status = 200) {
|
|
9
|
+
return Promise.resolve({
|
|
10
|
+
ok: status >= 200 && status < 300,
|
|
11
|
+
status,
|
|
12
|
+
headers: new Headers({ 'content-length': '1' }),
|
|
13
|
+
json: () => Promise.resolve(body),
|
|
14
|
+
body: null,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function makeInputEvent(files: File[]): Event {
|
|
19
|
+
const input = document.createElement('input');
|
|
20
|
+
input.type = 'file';
|
|
21
|
+
Object.defineProperty(input, 'files', {
|
|
22
|
+
value: files,
|
|
23
|
+
writable: true,
|
|
24
|
+
});
|
|
25
|
+
return { target: input } as unknown as Event;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function buildConfig(
|
|
29
|
+
overrides?: Partial<DocumentUploadConfig>,
|
|
30
|
+
): DocumentUploadConfig {
|
|
31
|
+
return {
|
|
32
|
+
baseUrl: 'https://test.example.com',
|
|
33
|
+
userId: 'user-1',
|
|
34
|
+
workflowId: 'wf-1',
|
|
35
|
+
searchStoreConfig: {
|
|
36
|
+
models: [
|
|
37
|
+
{
|
|
38
|
+
type: 'dense',
|
|
39
|
+
dimension: 1024,
|
|
40
|
+
distance: 'cosine',
|
|
41
|
+
modality: 'text',
|
|
42
|
+
embedding_model: 'test-model',
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
fusion_strategy: { type: 'rrf' },
|
|
46
|
+
},
|
|
47
|
+
workflowConfig: { name: 'wf-1' },
|
|
48
|
+
...overrides,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
describe('useFileUploadWrapper handleFilesSelected', () => {
|
|
53
|
+
let fetchMock: ReturnType<typeof vi.fn>;
|
|
54
|
+
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
fetchMock = vi.fn();
|
|
57
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
58
|
+
|
|
59
|
+
fetchMock.mockImplementation((url: string, init?: RequestInit) => {
|
|
60
|
+
const method = init?.method ?? 'GET';
|
|
61
|
+
|
|
62
|
+
if (method === 'GET' && url.includes('search-stores')) {
|
|
63
|
+
return createMockFetchResponse([{ id: 'store-1' }]);
|
|
64
|
+
}
|
|
65
|
+
if (method === 'POST' && url.includes('/files')) {
|
|
66
|
+
return createMockFetchResponse([{ id: 'remote-1' }]);
|
|
67
|
+
}
|
|
68
|
+
if (method === 'POST' && url.includes('/workflows')) {
|
|
69
|
+
return createMockFetchResponse({ id: 'run-1' });
|
|
70
|
+
}
|
|
71
|
+
if (url.includes('/event-stream')) {
|
|
72
|
+
return createMockFetchResponse(null, 200).then((res) => ({
|
|
73
|
+
...res,
|
|
74
|
+
body: new ReadableStream({
|
|
75
|
+
start(controller) {
|
|
76
|
+
controller.close();
|
|
77
|
+
},
|
|
78
|
+
}),
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
return createMockFetchResponse({});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
afterEach(() => {
|
|
86
|
+
vi.unstubAllGlobals();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('exposes maxFilesPerUpload from config', () => {
|
|
90
|
+
const provider = createDocumentUploadProvider(
|
|
91
|
+
buildConfig({ maxFilesPerUpload: 7 }),
|
|
92
|
+
);
|
|
93
|
+
const result = provider.useDocumentUpload('conv-1');
|
|
94
|
+
expect(result.maxFilesPerUpload).toBe(7);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('defaults maxFilesPerUpload to 20 when not configured', () => {
|
|
98
|
+
const provider = createDocumentUploadProvider(buildConfig());
|
|
99
|
+
const result = provider.useDocumentUpload('conv-1');
|
|
100
|
+
expect(result.maxFilesPerUpload).toBe(20);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('uploads all files when within the limit', async () => {
|
|
104
|
+
const provider = createDocumentUploadProvider(
|
|
105
|
+
buildConfig({ maxFilesPerUpload: 5 }),
|
|
106
|
+
);
|
|
107
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
108
|
+
|
|
109
|
+
const onFilesExceeded = vi.fn();
|
|
110
|
+
const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
|
|
111
|
+
|
|
112
|
+
handleFilesSelected(event, { onFilesExceeded });
|
|
113
|
+
|
|
114
|
+
expect(onFilesExceeded).not.toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('truncates files to available slots and calls onFilesExceeded', () => {
|
|
118
|
+
const provider = createDocumentUploadProvider(
|
|
119
|
+
buildConfig({ maxFilesPerUpload: 2 }),
|
|
120
|
+
);
|
|
121
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
122
|
+
|
|
123
|
+
const onFilesExceeded = vi.fn();
|
|
124
|
+
const event = makeInputEvent([
|
|
125
|
+
createFile('a.pdf'),
|
|
126
|
+
createFile('b.pdf'),
|
|
127
|
+
createFile('c.pdf'),
|
|
128
|
+
createFile('d.pdf'),
|
|
129
|
+
]);
|
|
130
|
+
|
|
131
|
+
handleFilesSelected(event, { onFilesExceeded });
|
|
132
|
+
|
|
133
|
+
expect(onFilesExceeded).toHaveBeenCalledWith({
|
|
134
|
+
selected: 4,
|
|
135
|
+
allowed: 2,
|
|
136
|
+
kept: 2,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('resets input value after handling', () => {
|
|
141
|
+
const provider = createDocumentUploadProvider(
|
|
142
|
+
buildConfig({ maxFilesPerUpload: 5 }),
|
|
143
|
+
);
|
|
144
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
145
|
+
|
|
146
|
+
const event = makeInputEvent([createFile('a.pdf')]);
|
|
147
|
+
const input = (event as any).target as HTMLInputElement;
|
|
148
|
+
|
|
149
|
+
const valueSetter = vi.spyOn(input, 'value', 'set');
|
|
150
|
+
|
|
151
|
+
handleFilesSelected(event);
|
|
152
|
+
|
|
153
|
+
expect(valueSetter).toHaveBeenCalledWith('');
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('does not upload when no slots are available', async () => {
|
|
157
|
+
const provider = createDocumentUploadProvider(
|
|
158
|
+
buildConfig({ maxFilesPerUpload: 0 }),
|
|
159
|
+
);
|
|
160
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
161
|
+
|
|
162
|
+
const onFilesExceeded = vi.fn();
|
|
163
|
+
const event = makeInputEvent([createFile('a.pdf')]);
|
|
164
|
+
|
|
165
|
+
handleFilesSelected(event, { onFilesExceeded });
|
|
166
|
+
|
|
167
|
+
expect(onFilesExceeded).toHaveBeenCalledWith({
|
|
168
|
+
selected: 1,
|
|
169
|
+
allowed: 0,
|
|
170
|
+
kept: 0,
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('does not call onFilesExceeded when exactly at the limit', () => {
|
|
175
|
+
const provider = createDocumentUploadProvider(
|
|
176
|
+
buildConfig({ maxFilesPerUpload: 3 }),
|
|
177
|
+
);
|
|
178
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
179
|
+
|
|
180
|
+
const onFilesExceeded = vi.fn();
|
|
181
|
+
const event = makeInputEvent([
|
|
182
|
+
createFile('a.pdf'),
|
|
183
|
+
createFile('b.pdf'),
|
|
184
|
+
createFile('c.pdf'),
|
|
185
|
+
]);
|
|
186
|
+
|
|
187
|
+
handleFilesSelected(event, { onFilesExceeded });
|
|
188
|
+
|
|
189
|
+
expect(onFilesExceeded).not.toHaveBeenCalled();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('works without onFilesExceeded callback (no crash)', () => {
|
|
193
|
+
const provider = createDocumentUploadProvider(
|
|
194
|
+
buildConfig({ maxFilesPerUpload: 1 }),
|
|
195
|
+
);
|
|
196
|
+
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
197
|
+
|
|
198
|
+
const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
|
|
199
|
+
|
|
200
|
+
expect(() => handleFilesSelected(event)).not.toThrow();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
DocumentUploadConfig,
|
|
10
10
|
DocumentUploadProvider,
|
|
11
11
|
DocumentUploadReturn,
|
|
12
|
+
HandleFilesSelectedOptions,
|
|
12
13
|
UploadEvent,
|
|
13
14
|
} from './types';
|
|
14
15
|
import { useFileUpload } from './useFileUpload';
|
|
@@ -166,6 +167,7 @@ export function createDocumentUploadProvider(
|
|
|
166
167
|
workflowConfig,
|
|
167
168
|
persist = true,
|
|
168
169
|
maxConcurrency = 3,
|
|
170
|
+
maxFilesPerUpload,
|
|
169
171
|
} = config;
|
|
170
172
|
|
|
171
173
|
const defaultHeaders: Record<string, string> = {
|
|
@@ -249,6 +251,7 @@ export function createDocumentUploadProvider(
|
|
|
249
251
|
workflowId,
|
|
250
252
|
persist,
|
|
251
253
|
maxConcurrency,
|
|
254
|
+
maxFilesPerUpload,
|
|
252
255
|
onEvent,
|
|
253
256
|
});
|
|
254
257
|
}
|
|
@@ -262,6 +265,7 @@ export function createDocumentUploadProvider(
|
|
|
262
265
|
): DocumentUploadReturn {
|
|
263
266
|
const fileInput = ref<HTMLInputElement | null>(null);
|
|
264
267
|
const upload = getUploadInstance();
|
|
268
|
+
const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
|
|
265
269
|
const storeId = ref<string>(resolvedStoreId ?? '');
|
|
266
270
|
|
|
267
271
|
const currentScope = shallowRef<ScopedFileView | null>(
|
|
@@ -360,10 +364,27 @@ export function createDocumentUploadProvider(
|
|
|
360
364
|
}
|
|
361
365
|
}
|
|
362
366
|
|
|
363
|
-
function handleFilesSelected(
|
|
367
|
+
function handleFilesSelected(
|
|
368
|
+
event: Event,
|
|
369
|
+
options?: HandleFilesSelectedOptions,
|
|
370
|
+
) {
|
|
364
371
|
const input = event.target as HTMLInputElement;
|
|
365
|
-
|
|
366
|
-
|
|
372
|
+
let fileList = Array.from(input.files ?? []);
|
|
373
|
+
const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
|
|
374
|
+
|
|
375
|
+
if (fileList.length > availableSlots) {
|
|
376
|
+
const kept = Math.max(0, availableSlots);
|
|
377
|
+
options?.onFilesExceeded?.({
|
|
378
|
+
selected: fileList.length,
|
|
379
|
+
allowed: availableSlots,
|
|
380
|
+
kept,
|
|
381
|
+
});
|
|
382
|
+
fileList = fileList.slice(0, kept);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
if (fileList.length > 0) {
|
|
386
|
+
uploadFiles(fileList);
|
|
387
|
+
}
|
|
367
388
|
input.value = '';
|
|
368
389
|
}
|
|
369
390
|
|
|
@@ -371,6 +392,7 @@ export function createDocumentUploadProvider(
|
|
|
371
392
|
upload,
|
|
372
393
|
storeId,
|
|
373
394
|
fileInput,
|
|
395
|
+
maxFilesPerUpload: resolvedMaxFiles,
|
|
374
396
|
uploadFiles,
|
|
375
397
|
unassignedFiles,
|
|
376
398
|
assignFilesToMessage,
|