From 50720b7a5c9cf606b5ed9c4ba28d8038c8034cbf Mon Sep 17 00:00:00 2001 From: Aleksandr Grenishin Date: Tue, 14 Nov 2023 15:33:51 +0300 Subject: [PATCH] feat(rest-client/convert): add `saveInGroup` option to document conversion method (#499) Co-authored-by: Egor Didenko --- .../src/api/conversion/convert.test.ts | 3 ++- .../rest-client/src/api/conversion/convert.ts | 16 ++++++++++++---- .../rest-client/src/tools/conversionJobPoller.ts | 7 +++++-- .../rest-client/src/tools/createJobPoller.ts | 4 ++-- .../rest-client/src/types/ConversionOptions.ts | 7 ++++++- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/rest-client/src/api/conversion/convert.test.ts b/packages/rest-client/src/api/conversion/convert.test.ts index 1d5e76d3c..2140af532 100644 --- a/packages/rest-client/src/api/conversion/convert.test.ts +++ b/packages/rest-client/src/api/conversion/convert.test.ts @@ -30,7 +30,8 @@ describe('convert', () => { { type: ConversionType.DOCUMENT, paths: [`${DOCUMENT_UUID}/document/-/format/pdf/`, 'invalid'], - store: false + store: false, + saveInGroup: false }, testSettings ) diff --git a/packages/rest-client/src/api/conversion/convert.ts b/packages/rest-client/src/api/conversion/convert.ts index 2ad1f9704..aeef529d6 100644 --- a/packages/rest-client/src/api/conversion/convert.ts +++ b/packages/rest-client/src/api/conversion/convert.ts @@ -11,14 +11,22 @@ export async function convert>( options: ConversionOptions, userSettings: ApiRequestSettings ): Promise> { + const isDocument = options.type === ConversionType.DOCUMENT + + const body = { + paths: options.paths, + store: storeValueToString(options.store) + } + + if (isDocument) { + body['save_in_group'] = options?.saveInGroup?.toString() + } + const apiRequest = await makeApiRequest( { method: 'POST', path: `/convert/${options.type}/`, - body: { - paths: options.paths, - store: storeValueToString(options.store) - } + body }, userSettings ) diff --git a/packages/rest-client/src/tools/conversionJobPoller.ts b/packages/rest-client/src/tools/conversionJobPoller.ts index d26d07f1f..80f4f21fe 100644 --- a/packages/rest-client/src/tools/conversionJobPoller.ts +++ b/packages/rest-client/src/tools/conversionJobPoller.ts @@ -26,10 +26,13 @@ export const conversionJobPoller = >( ConversionJobPollerOptions, settings: ApiRequestSettings ) => { - const { onRun, onStatus, ...pollerOptions } = options + const { onRun, onStatus, ...rest } = options + + const pollerOptions = rest as ConversionOptions & + CreateJobPollerPollOptions const poller = createJobPoller({ - runner: convert, + runner: convert, resolveJobs: (response, runnerOptions, runnerSettings) => { onRun && onRun(response as ConversionResponse) return runnerOptions.paths.map((path) => { diff --git a/packages/rest-client/src/tools/createJobPoller.ts b/packages/rest-client/src/tools/createJobPoller.ts index 833b90540..e1cd9e278 100644 --- a/packages/rest-client/src/tools/createJobPoller.ts +++ b/packages/rest-client/src/tools/createJobPoller.ts @@ -1,6 +1,6 @@ import { CancelError, poll } from '@uploadcare/api-client-utils' -export type CrateJobPollerRunner = ( +export type CreateJobPollerRunner = ( options: Options, settings: Settings ) => ReturnType @@ -41,7 +41,7 @@ type CrateJobPollerOptions< ResultType, ErrorType > = { - runner: CrateJobPollerRunner + runner: CreateJobPollerRunner resolveJobs: CreateJobPollerJobResolver< RunnerReturnType, JobType, diff --git a/packages/rest-client/src/types/ConversionOptions.ts b/packages/rest-client/src/types/ConversionOptions.ts index 45d27b39f..bf4e59404 100644 --- a/packages/rest-client/src/types/ConversionOptions.ts +++ b/packages/rest-client/src/types/ConversionOptions.ts @@ -2,8 +2,13 @@ import { ConversionType } from './ConversionType' import { StoreValue } from '@uploadcare/api-client-utils' import { ValueOf } from './ValueOf' -export type ConversionOptions> = { +type BaseConversionOption = { type: T paths: string[] store?: StoreValue } + +export type ConversionOptions> = + T extends ConversionType.VIDEO + ? BaseConversionOption + : BaseConversionOption & { saveInGroup?: boolean }