Skip to content

Commit 507902e

Browse files
committed
chore: pr revisions
1 parent ec5922f commit 507902e

10 files changed

Lines changed: 84 additions & 18 deletions

File tree

.changeset/long-singers-do.md

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

5-
Add support for extension in PhoneNumberCollector
6-
7-
BREAKING CHANGE: `ObjectValueCollectorWithObjectValue` type was removed
5+
A new PhoneNumberExtensionCollector has been added to support phone number fields that include an extension. When a DaVinci PHONE_NUMBER field has showExtension: true, the SDK now produces a PhoneNumberExtensionCollector instead of a PhoneNumberCollector.

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,6 @@ GEMINI.md
9595
.claude/worktrees
9696
.claude/settings.local.json
9797
.opensource
98+
99+
# Polaris
100+
.polaris-setup-progress.json

e2e/davinci-app/components/object-value.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export default function objectValueComponent(
115115
phoneInput.setAttribute('placeholder', 'Enter phone number');
116116

117117
const extensionLabel = document.createElement('label');
118-
extensionLabel.textContent = collector.output.options.extensionLabel || 'Extension';
118+
extensionLabel.textContent = collector.output.extensionLabel || 'Extension';
119119
extensionLabel.className = 'object-options-title';
120120
extensionLabel.setAttribute('for', 'extension-input-1');
121121

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ test('Should render form fields', async ({ page }) => {
5757
'phone-field': {
5858
phoneNumber: '1234567890',
5959
countryCode: 'GB',
60-
extension: '7890',
60+
extension: '7890', // Tests PhoneNumberExtensionCollector
6161
},
6262
});
6363
});

e2e/davinci-suites/src/phone-number-field.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ test.describe('Device registration tests', () => {
103103
await page.getByRole('button', { name: 'DEVICE_REGISTRATION' }).click();
104104
await expect(page.getByText('SDK Automation - Device Registration')).toBeVisible();
105105
await page.getByRole('button', { name: 'Text Message' }).click();
106-
await expect(page.getByText('SDK Automation - Enter Phone Number')).toBeVisible();
106+
await expect(page.getByText('SDK Automation [JS] - Enter Phone Number')).toBeVisible();
107107
await page.getByRole('textbox', { name: 'Enter Phone Number' }).fill('3035550100');
108+
await expect(page.getByText('Extension')).not.toBeVisible(); // Tests standard PhoneNumberCollector
108109
await page.getByRole('button', { name: 'Submit' }).click();
109110

110111
await expect(page.getByText('SMS/Voice MFA Registered')).toBeVisible();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ describe('Collector Types', () => {
410410
key: '',
411411
label: '',
412412
type: '',
413-
options: { extensionLabel: '' },
413+
extensionLabel: '',
414414
value: {},
415415
},
416416
};

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,10 +317,6 @@ export interface PhoneNumberExtensionOutputValue {
317317
extension?: string;
318318
}
319319

320-
export interface PhoneNumberExtensionOptions {
321-
extensionLabel: string;
322-
}
323-
324320
export interface ObjectOptionsCollectorWithStringValue<
325321
T extends ObjectValueCollectorTypes,
326322
V = string,
@@ -409,7 +405,7 @@ export interface PhoneNumberExtensionCollector {
409405
key: string;
410406
label: string;
411407
type: string;
412-
options: PhoneNumberExtensionOptions;
408+
extensionLabel: string;
413409
value: PhoneNumberExtensionOutputValue;
414410
};
415411
}

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

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,59 @@ describe('returnObjectValueCollector with phone fields', () => {
788788
expect(result.type).toBe('PhoneNumberExtensionCollector');
789789
});
790790

791+
it('creates a full PhoneNumberExtensionCollector with all fields', () => {
792+
const mockField: PhoneNumberExtensionField = {
793+
key: 'phone-number-key',
794+
defaultCountryCode: 'US',
795+
label: 'Phone Number',
796+
type: 'PHONE_NUMBER',
797+
required: true,
798+
validatePhoneNumber: true,
799+
showExtension: true,
800+
extensionLabel: 'Extension',
801+
};
802+
const result = returnObjectValueCollector(mockField, 1, {}) as PhoneNumberExtensionCollector;
803+
expect(result).toEqual({
804+
category: 'ObjectValueCollector',
805+
error: null,
806+
type: 'PhoneNumberExtensionCollector',
807+
id: 'phone-number-key-1',
808+
name: 'phone-number-key',
809+
input: {
810+
key: mockField.key,
811+
value: {
812+
countryCode: 'US',
813+
phoneNumber: '',
814+
extension: '',
815+
},
816+
type: mockField.type,
817+
validation: [
818+
{
819+
message: 'Value cannot be empty',
820+
rule: true,
821+
type: 'required',
822+
},
823+
{
824+
message: 'Phone number should be validated',
825+
rule: true,
826+
type: 'validatePhoneNumber',
827+
},
828+
],
829+
},
830+
output: {
831+
key: mockField.key,
832+
label: mockField.label,
833+
type: mockField.type,
834+
extensionLabel: 'Extension',
835+
value: {
836+
countryCode: 'US',
837+
phoneNumber: '',
838+
extension: '',
839+
},
840+
},
841+
});
842+
});
843+
791844
it('prefilled extension is set on collector', () => {
792845
const mockField: PhoneNumberExtensionField = {
793846
key: 'phone-number-key',
@@ -810,7 +863,20 @@ describe('returnObjectValueCollector with phone fields', () => {
810863
) as PhoneNumberExtensionCollector;
811864
expect(result.input.value.extension).toBe('123');
812865
expect(result.output.value?.extension).toBe('123');
813-
expect(result.output.options.extensionLabel).toBe('Extension');
866+
expect(result.output.extensionLabel).toBe('Extension');
867+
});
868+
869+
it('PhoneNumberCollector does not have extensionLabel in output', () => {
870+
const mockField: PhoneNumberField = {
871+
key: 'phone-number-key',
872+
defaultCountryCode: null,
873+
label: 'Phone Number',
874+
type: 'PHONE_NUMBER',
875+
required: false,
876+
validatePhoneNumber: false,
877+
};
878+
const result = returnObjectValueCollector(mockField, 1, {});
879+
expect(result.output).not.toHaveProperty('extensionLabel');
814880
});
815881
});
816882

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,7 @@ export function returnObjectCollector<
612612

613613
let options;
614614
let defaultValue;
615+
let extensionLabel: string | null = null;
615616

616617
if (field.type === 'DEVICE_AUTHENTICATION') {
617618
if (!('options' in field)) {
@@ -680,7 +681,7 @@ export function returnObjectCollector<
680681
extension: prefilledExtension ?? '',
681682
};
682683

683-
options = { extensionLabel: field.extensionLabel || '' };
684+
extensionLabel = field.extensionLabel;
684685
} else {
685686
// PhoneNumberCollector default value
686687
defaultValue = {
@@ -707,6 +708,7 @@ export function returnObjectCollector<
707708
label: field.label,
708709
type: field.type,
709710
...(options && { options: options || [] }),
711+
...(extensionLabel !== null && { extensionLabel }),
710712
...(defaultValue && { value: defaultValue }),
711713
},
712714
} as InferValueObjectCollectorType<CollectorType>;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -994,12 +994,12 @@ describe('The phone number extension collector reducer', () => {
994994
key: 'phone-number-key',
995995
label: 'Phone Number',
996996
type: 'PHONE_NUMBER',
997+
extensionLabel: 'Extension',
997998
value: {
998999
countryCode: '',
9991000
phoneNumber: '',
10001001
extension: '',
10011002
},
1002-
options: { extensionLabel: 'Extension' },
10031003
},
10041004
},
10051005
]);
@@ -1052,12 +1052,12 @@ describe('The phone number extension collector reducer', () => {
10521052
key: 'phone-number-key',
10531053
label: 'Phone Number',
10541054
type: 'PHONE_NUMBER',
1055+
extensionLabel: 'Extension',
10551056
value: {
10561057
countryCode: 'US',
10571058
phoneNumber: '1234567890',
10581059
extension: '123',
10591060
},
1060-
options: { extensionLabel: 'Extension' },
10611061
},
10621062
},
10631063
]);
@@ -1101,7 +1101,7 @@ describe('The phone number extension collector reducer', () => {
11011101
phoneNumber: '',
11021102
extension: '',
11031103
},
1104-
options: { extensionLabel: 'Extension' },
1104+
extensionLabel: 'Extension',
11051105
},
11061106
},
11071107
];
@@ -1126,12 +1126,12 @@ describe('The phone number extension collector reducer', () => {
11261126
key: 'phone-number-key',
11271127
label: 'Phone Number',
11281128
type: 'PHONE_NUMBER',
1129+
extensionLabel: 'Extension',
11291130
value: {
11301131
countryCode: '',
11311132
phoneNumber: '',
11321133
extension: '',
11331134
},
1134-
options: { extensionLabel: 'Extension' },
11351135
},
11361136
},
11371137
]);

0 commit comments

Comments
 (0)