@@ -8,6 +8,9 @@ import type {
88 DeviceAuthenticationCollector ,
99 DeviceRegistrationCollector ,
1010 PhoneNumberCollector ,
11+ PhoneNumberExtensionCollector ,
12+ PhoneNumberExtensionInputValue ,
13+ PhoneNumberInputValue ,
1114 Updater ,
1215} from '@forgerock/davinci-client/types' ;
1316
@@ -19,11 +22,16 @@ import type {
1922 */
2023export default function objectValueComponent (
2124 formEl : HTMLFormElement ,
22- collector : DeviceRegistrationCollector | DeviceAuthenticationCollector | PhoneNumberCollector ,
25+ collector :
26+ | DeviceRegistrationCollector
27+ | DeviceAuthenticationCollector
28+ | PhoneNumberCollector
29+ | PhoneNumberExtensionCollector ,
2330 updater :
2431 | Updater < DeviceRegistrationCollector >
2532 | Updater < DeviceAuthenticationCollector >
26- | Updater < PhoneNumberCollector > ,
33+ | Updater < PhoneNumberCollector >
34+ | Updater < PhoneNumberExtensionCollector > ,
2735 submitForm : ( ) => void ,
2836) {
2937 if (
@@ -61,7 +69,7 @@ export default function objectValueComponent(
6169 buttonEl . textContent = option . label ;
6270 formEl . appendChild ( buttonEl ) ;
6371 }
64- } else {
72+ } else if ( collector . type === 'PhoneNumberCollector' ) {
6573 const phoneLabel = document . createElement ( 'label' ) ;
6674 phoneLabel . textContent = collector . output . label || 'Phone Number' ;
6775 phoneLabel . className = 'object-options-title' ;
@@ -73,6 +81,9 @@ export default function objectValueComponent(
7381 phoneInput . setAttribute ( 'name' , 'phone-number-input' ) ;
7482 phoneInput . setAttribute ( 'placeholder' , 'Enter phone number' ) ;
7583
84+ formEl . appendChild ( phoneLabel ) ;
85+ formEl . appendChild ( phoneInput ) ;
86+
7687 // Add change event listener
7788 phoneInput . addEventListener ( 'change' , ( event ) => {
7889 // Properly type the event target
@@ -84,13 +95,73 @@ export default function objectValueComponent(
8495 return ;
8596 }
8697
87- updater ( {
98+ const phoneNumberInputValue : PhoneNumberInputValue = {
8899 phoneNumber : selectedValue ,
89100 countryCode : collector . output . value ?. countryCode || '' ,
90- } as any ) ;
101+ } ;
102+ const phoneNumberUpdater = updater as Updater < PhoneNumberCollector > ;
103+ phoneNumberUpdater ( phoneNumberInputValue ) ;
91104 } ) ;
105+ } else if ( collector . type === 'PhoneNumberExtensionCollector' ) {
106+ const phoneLabel = document . createElement ( 'label' ) ;
107+ phoneLabel . textContent = collector . output . label || 'Phone Number' ;
108+ phoneLabel . className = 'object-options-title' ;
109+ phoneLabel . setAttribute ( 'for' , 'phone-number-input-1' ) ;
92110
93- formEl . appendChild ( phoneLabel ) ;
94- formEl . appendChild ( phoneInput ) ;
111+ const phoneInput = document . createElement ( 'input' ) ;
112+ phoneInput . setAttribute ( 'type' , 'tel' ) ;
113+ phoneInput . setAttribute ( 'id' , 'phone-number-input-1' ) ;
114+ phoneInput . setAttribute ( 'name' , 'phone-number-input-1' ) ;
115+ phoneInput . setAttribute ( 'placeholder' , 'Enter phone number' ) ;
116+
117+ const extensionLabel = document . createElement ( 'label' ) ;
118+ extensionLabel . textContent = collector . output . extensionLabel || 'Extension' ;
119+ extensionLabel . className = 'object-options-title' ;
120+ extensionLabel . setAttribute ( 'for' , 'extension-input-1' ) ;
121+
122+ const extensionInput = document . createElement ( 'input' ) ;
123+ extensionInput . setAttribute ( 'type' , 'text' ) ;
124+ extensionInput . setAttribute ( 'id' , 'extension-input-1' ) ;
125+ extensionInput . setAttribute ( 'name' , 'extension-input-1' ) ;
126+ extensionInput . setAttribute ( 'placeholder' , 'Enter extension' ) ;
127+
128+ const divEl = document . createElement ( 'div' ) ;
129+ divEl . style = 'display: flex; gap: 8px;' ;
130+ divEl . appendChild ( phoneLabel ) ;
131+ divEl . appendChild ( phoneInput ) ;
132+ divEl . appendChild ( extensionLabel ) ;
133+ divEl . appendChild ( extensionInput ) ;
134+
135+ formEl . appendChild ( divEl ) ;
136+
137+ const phoneNumberExtensionUpdater = updater as Updater < PhoneNumberExtensionCollector > ;
138+
139+ // Add change event listener for phone number input
140+ phoneInput . addEventListener ( 'change' , ( event ) => {
141+ const target = event . target as HTMLInputElement ;
142+ const phoneValue = target . value ;
143+ const extensionValue = extensionInput . value ;
144+ const phoneNumberExtensionInputValue : PhoneNumberExtensionInputValue = {
145+ phoneNumber : phoneValue ,
146+ countryCode : collector . output . value ?. countryCode || '' ,
147+ extension : extensionValue ,
148+ } ;
149+
150+ phoneNumberExtensionUpdater ( phoneNumberExtensionInputValue ) ;
151+ } ) ;
152+
153+ // Add change event listener for extension input
154+ extensionInput . addEventListener ( 'change' , ( event ) => {
155+ const target = event . target as HTMLInputElement ;
156+ const extensionValue = target . value ;
157+ const phoneValue = phoneInput . value ;
158+ const phoneNumberExtensionInputValue : PhoneNumberExtensionInputValue = {
159+ phoneNumber : phoneValue ,
160+ countryCode : collector . output . value ?. countryCode || '' ,
161+ extension : extensionValue ,
162+ } ;
163+
164+ phoneNumberExtensionUpdater ( phoneNumberExtensionInputValue ) ;
165+ } ) ;
95166 }
96167}
0 commit comments