Skip to content

Commit 6df8b5f

Browse files
committed
fix(davinci-client): address PR review comments on ImageCollector
1 parent c1803d9 commit 6df8b5f

10 files changed

Lines changed: 37 additions & 28 deletions

File tree

.changeset/curly-wolves-swim.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
'@forgerock/davinci-client': minor
33
---
44

5-
Add `ImageCollector` for rendering `IMAGE` form fields from DaVinci Forms.
5+
Add `ImageCollector` for rendering `IMAGE` form fields from PingOne Forms.

e2e/davinci-app/components/form-image.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 - 2026 Ping Identity Corporation. All rights reserved.
2+
* Copyright (c) 2026 Ping Identity Corporation. All rights reserved.
33
*
44
* This software may be modified and distributed under the terms
55
* of the MIT license. See the LICENSE file for details.

e2e/davinci-suites/src/form-image.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 - 2026 Ping Identity Corporation. All rights reserved.
2+
* Copyright (c) 2026 Ping Identity Corporation. All rights reserved.
33
*
44
* This software may be modified and distributed under the terms
55
* of the MIT license. See the LICENSE file for details.

packages/davinci-client/api-report/davinci-client.api.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,14 +355,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
355355
} & Omit<{
356356
requestId: string;
357357
data?: unknown;
358-
error?: FetchBaseQueryError | SerializedError | undefined;
358+
error?: SerializedError | FetchBaseQueryError | undefined;
359359
endpointName: string;
360360
startedTimeStamp: number;
361361
fulfilledTimeStamp?: number;
362362
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
363363
requestId: string;
364364
data?: unknown;
365-
error?: FetchBaseQueryError | SerializedError | undefined;
365+
error?: SerializedError | FetchBaseQueryError | undefined;
366366
endpointName: string;
367367
startedTimeStamp: number;
368368
fulfilledTimeStamp?: number;
@@ -379,14 +379,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
379379
} & Omit<{
380380
requestId: string;
381381
data?: unknown;
382-
error?: FetchBaseQueryError | SerializedError | undefined;
382+
error?: SerializedError | FetchBaseQueryError | undefined;
383383
endpointName: string;
384384
startedTimeStamp: number;
385385
fulfilledTimeStamp?: number;
386386
}, "error"> & Required<Pick<{
387387
requestId: string;
388388
data?: unknown;
389-
error?: FetchBaseQueryError | SerializedError | undefined;
389+
error?: SerializedError | FetchBaseQueryError | undefined;
390390
endpointName: string;
391391
startedTimeStamp: number;
392392
fulfilledTimeStamp?: number;
@@ -407,14 +407,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
407407
} & Omit<{
408408
requestId: string;
409409
data?: unknown;
410-
error?: FetchBaseQueryError | SerializedError | undefined;
410+
error?: SerializedError | FetchBaseQueryError | undefined;
411411
endpointName: string;
412412
startedTimeStamp: number;
413413
fulfilledTimeStamp?: number;
414414
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
415415
requestId: string;
416416
data?: unknown;
417-
error?: FetchBaseQueryError | SerializedError | undefined;
417+
error?: SerializedError | FetchBaseQueryError | undefined;
418418
endpointName: string;
419419
startedTimeStamp: number;
420420
fulfilledTimeStamp?: number;
@@ -431,14 +431,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
431431
} & Omit<{
432432
requestId: string;
433433
data?: unknown;
434-
error?: FetchBaseQueryError | SerializedError | undefined;
434+
error?: SerializedError | FetchBaseQueryError | undefined;
435435
endpointName: string;
436436
startedTimeStamp: number;
437437
fulfilledTimeStamp?: number;
438438
}, "error"> & Required<Pick<{
439439
requestId: string;
440440
data?: unknown;
441-
error?: FetchBaseQueryError | SerializedError | undefined;
441+
error?: SerializedError | FetchBaseQueryError | undefined;
442442
endpointName: string;
443443
startedTimeStamp: number;
444444
fulfilledTimeStamp?: number;

packages/davinci-client/api-report/davinci-client.types.api.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,14 +355,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
355355
} & Omit<{
356356
requestId: string;
357357
data?: unknown;
358-
error?: FetchBaseQueryError | SerializedError | undefined;
358+
error?: SerializedError | FetchBaseQueryError | undefined;
359359
endpointName: string;
360360
startedTimeStamp: number;
361361
fulfilledTimeStamp?: number;
362362
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
363363
requestId: string;
364364
data?: unknown;
365-
error?: FetchBaseQueryError | SerializedError | undefined;
365+
error?: SerializedError | FetchBaseQueryError | undefined;
366366
endpointName: string;
367367
startedTimeStamp: number;
368368
fulfilledTimeStamp?: number;
@@ -379,14 +379,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
379379
} & Omit<{
380380
requestId: string;
381381
data?: unknown;
382-
error?: FetchBaseQueryError | SerializedError | undefined;
382+
error?: SerializedError | FetchBaseQueryError | undefined;
383383
endpointName: string;
384384
startedTimeStamp: number;
385385
fulfilledTimeStamp?: number;
386386
}, "error"> & Required<Pick<{
387387
requestId: string;
388388
data?: unknown;
389-
error?: FetchBaseQueryError | SerializedError | undefined;
389+
error?: SerializedError | FetchBaseQueryError | undefined;
390390
endpointName: string;
391391
startedTimeStamp: number;
392392
fulfilledTimeStamp?: number;
@@ -407,14 +407,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
407407
} & Omit<{
408408
requestId: string;
409409
data?: unknown;
410-
error?: FetchBaseQueryError | SerializedError | undefined;
410+
error?: SerializedError | FetchBaseQueryError | undefined;
411411
endpointName: string;
412412
startedTimeStamp: number;
413413
fulfilledTimeStamp?: number;
414414
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
415415
requestId: string;
416416
data?: unknown;
417-
error?: FetchBaseQueryError | SerializedError | undefined;
417+
error?: SerializedError | FetchBaseQueryError | undefined;
418418
endpointName: string;
419419
startedTimeStamp: number;
420420
fulfilledTimeStamp?: number;
@@ -431,14 +431,14 @@ export function davinci<ActionType extends ActionTypes = ActionTypes>(input: {
431431
} & Omit<{
432432
requestId: string;
433433
data?: unknown;
434-
error?: FetchBaseQueryError | SerializedError | undefined;
434+
error?: SerializedError | FetchBaseQueryError | undefined;
435435
endpointName: string;
436436
startedTimeStamp: number;
437437
fulfilledTimeStamp?: number;
438438
}, "error"> & Required<Pick<{
439439
requestId: string;
440440
data?: unknown;
441-
error?: FetchBaseQueryError | SerializedError | undefined;
441+
error?: SerializedError | FetchBaseQueryError | undefined;
442442
endpointName: string;
443443
startedTimeStamp: number;
444444
fulfilledTimeStamp?: number;

packages/davinci-client/src/lib/collector.utils.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,8 +1177,8 @@ describe('returnImageCollector', () => {
11771177
expect(result.output.label).toBe('Friendly alt text');
11781178
});
11791179

1180-
// (e) imageUrl absent — src defaults to empty string
1181-
it('should default src to empty string when imageUrl is absent', () => {
1180+
// (e) imageUrl absent — src defaults to empty string and error is set
1181+
it('should set error and default src to empty string when imageUrl is absent', () => {
11821182
const mockField: ImageField = {
11831183
type: 'IMAGE',
11841184
key: 'image',
@@ -1187,6 +1187,7 @@ describe('returnImageCollector', () => {
11871187
};
11881188
const result = returnImageCollector(mockField, 0);
11891189
expect(result.output.src).toBe('');
1190+
expect(result.error).toMatch(/imageUrl is not found/);
11901191
});
11911192

11921193
// (f) output.label mirrors alt

packages/davinci-client/src/lib/collector.utils.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,14 +1039,22 @@ export function returnQrCodeCollector(field: QrCodeField, idx: number): QrCodeCo
10391039
export function returnImageCollector(field: ImageField, idx: number): ImageCollector {
10401040
const base = returnNoValueCollector(field, idx, 'ImageCollector');
10411041

1042+
let error = '';
1043+
if (!field.imageUrl) {
1044+
error = `${error}imageUrl is not found in the field object. `;
1045+
}
1046+
if (field.type !== 'IMAGE') {
1047+
error = `${error}Type is not IMAGE. `;
1048+
}
1049+
10421050
return {
10431051
...base,
1044-
error: null,
1052+
error: error || null,
10451053
output: {
10461054
...base.output,
1047-
label: field.description,
1048-
src: field.imageUrl,
1049-
alt: field.description,
1055+
label: field.description || '',
1056+
src: field.imageUrl || '',
1057+
alt: field.description || '',
10501058
...(field.hyperlinkUrl ? { href: field.hyperlinkUrl } : {}),
10511059
},
10521060
};

packages/davinci-client/src/lib/node.reducer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
2+
* Copyright (c) 2025 - 2026 Ping Identity Corporation. All rights reserved.
33
*
44
* This software may be modified and distributed under the terms
55
* of the MIT license. See the LICENSE file for details.

packages/davinci-client/src/lib/node.types.test-d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
2+
* Copyright (c) 2025 - 2026 Ping Identity Corporation. All rights reserved.
33
*
44
* This software may be modified and distributed under the terms
55
* of the MIT license. See the LICENSE file for details.

packages/davinci-client/src/lib/node.types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
2+
* Copyright (c) 2025 - 2026 Ping Identity Corporation. All rights reserved.
33
*
44
* This software may be modified and distributed under the terms
55
* of the MIT license. See the LICENSE file for details.

0 commit comments

Comments
 (0)