@@ -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,14 +95,85 @@ export default function objectValueComponent(
8495 return ;
8596 }
8697
87- updater ( {
98+ const phoneNumberInputValue : PhoneNumberInputValue = {
8899 phoneNumber : selectedValue ,
89100 countryCode : collector . output . value ?. countryCode || '' ,
90- extension : collector . output . value ?. extension || '' ,
91- } as any ) ;
101+ } ;
102+ const phoneNumberUpdater = updater as Updater < PhoneNumberCollector > ;
103+ phoneNumberUpdater ( phoneNumberInputValue ) ;
92104 } ) ;
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' ) ;
93110
94- formEl . appendChild ( phoneLabel ) ;
95- 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 . options . 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+
145+ if ( ! phoneValue ) {
146+ console . error ( 'No value found for phone number' ) ;
147+ return ;
148+ }
149+
150+ const phoneNumberExtensionInputValue : PhoneNumberExtensionInputValue = {
151+ phoneNumber : phoneValue ,
152+ countryCode : collector . output . value ?. countryCode || '' ,
153+ extension : extensionValue ,
154+ } ;
155+
156+ phoneNumberExtensionUpdater ( phoneNumberExtensionInputValue ) ;
157+ } ) ;
158+
159+ // Add change event listener for extension input
160+ extensionInput . addEventListener ( 'change' , ( event ) => {
161+ const target = event . target as HTMLInputElement ;
162+ const extensionValue = target . value ;
163+ const phoneValue = phoneInput . value ;
164+
165+ if ( ! extensionValue ) {
166+ console . error ( 'No value found for extension' ) ;
167+ return ;
168+ }
169+
170+ const phoneNumberExtensionInputValue : PhoneNumberExtensionInputValue = {
171+ phoneNumber : phoneValue ,
172+ countryCode : collector . output . value ?. countryCode || '' ,
173+ extension : extensionValue ,
174+ } ;
175+
176+ phoneNumberExtensionUpdater ( phoneNumberExtensionInputValue ) ;
177+ } ) ;
96178 }
97179}
0 commit comments