11import {
22 For ,
33 onMount ,
4+ onUnMount ,
45 onUpdate ,
56 Show ,
67 useDefaultProps ,
@@ -41,6 +42,7 @@ import {
4142 uuid
4243} from '../../utils' ;
4344import {
45+ addValueResetEventListener ,
4446 handleFrameworkEventAngular ,
4547 handleFrameworkEventVue
4648} from '../../utils/form-components' ;
@@ -71,6 +73,7 @@ export default function DBInput(props: DBInputProps) {
7173 _descByIds : undefined ,
7274 _value : undefined ,
7375 _voiceOverFallback : '' ,
76+ abortController : undefined ,
7477 hasValidState : ( ) => {
7578 return ! ! ( props . validMessage ?? props . validation === 'valid' ) ;
7679 } ,
@@ -106,8 +109,15 @@ export default function DBInput(props: DBInputProps) {
106109 state . _descByIds = undefined ;
107110 }
108111 } ,
109- handleInput : ( event : InputEvent < HTMLInputElement > ) => {
112+ handleInput : ( event : InputEvent < HTMLInputElement > , reset ?: boolean ) => {
110113 useTarget ( {
114+ angular : ( ) => {
115+ if ( props . onInput ) {
116+ if ( reset ) {
117+ props . onInput ( event ) ;
118+ }
119+ }
120+ } ,
111121 vue : ( ) => {
112122 if ( props . input ) {
113123 props . input ( event ) ;
@@ -129,10 +139,25 @@ export default function DBInput(props: DBInputProps) {
129139 } ) ;
130140 state . handleValidation ( ) ;
131141 } ,
132- handleChange : ( event : ChangeEvent < HTMLInputElement > ) => {
133- if ( props . onChange ) {
134- props . onChange ( event ) ;
135- }
142+ handleChange : (
143+ event : ChangeEvent < HTMLInputElement > ,
144+ reset ?: boolean
145+ ) => {
146+ useTarget ( {
147+ angular : ( ) => {
148+ if ( props . onChange ) {
149+ // We need to split the if statements for generation
150+ if ( reset ) {
151+ props . onChange ( event ) ;
152+ }
153+ }
154+ } ,
155+ default : ( ) => {
156+ if ( props . onChange ) {
157+ props . onChange ( event ) ;
158+ }
159+ }
160+ } ) ;
136161
137162 useTarget ( {
138163 angular : ( ) => handleFrameworkEventAngular ( state , event ) ,
@@ -202,6 +227,35 @@ export default function DBInput(props: DBInputProps) {
202227 state . _value = props . value ;
203228 } , [ props . value ] ) ;
204229
230+ onUpdate ( ( ) => {
231+ if ( _ref ) {
232+ const defaultValue = useTarget ( {
233+ react : ( props as any ) . defaultValue ,
234+ default : undefined
235+ } ) ;
236+
237+ let controller = state . abortController ;
238+ if ( ! controller ) {
239+ controller = new AbortController ( ) ;
240+ state . abortController = controller ;
241+ }
242+
243+ addValueResetEventListener (
244+ _ref ,
245+ { value : props . value , defaultValue } ,
246+ ( event ) => {
247+ state . handleChange ( event , true ) ;
248+ state . handleInput ( event , true ) ;
249+ } ,
250+ controller . signal
251+ ) ;
252+ }
253+ } , [ _ref ] ) ;
254+
255+ onUnMount ( ( ) => {
256+ state . abortController ?. abort ( ) ;
257+ } ) ;
258+
205259 return (
206260 < div
207261 class = { cls ( 'db-input' , props . className ) }
0 commit comments