@@ -165,38 +165,31 @@ async function saveOdometerDraft({startReading, endReading, startImage, endImage
165165 await Onyx . set ( ONYXKEYS . ODOMETER_DRAFT , odometerDraft ) ;
166166}
167167
168- function buildOdometerCommentFromDraft ( transactionID : string , odometerDraft : OnyxEntry < OdometerDraft > , currentComment ?: Partial < Comment > ) : Partial < Comment > | undefined {
168+ type OdometerCommentUpdate = {
169+ odometerStart : number | null ;
170+ odometerEnd : number | null ;
171+ odometerStartImage : FileObject | string | null ;
172+ odometerEndImage : FileObject | string | null ;
173+ } ;
174+
175+ function buildOdometerCommentFromDraft ( transactionID : string , odometerDraft : OnyxEntry < OdometerDraft > , currentComment ?: Partial < Comment > ) : OdometerCommentUpdate | undefined {
169176 if ( ! odometerDraft ) {
170177 return ;
171178 }
172179
173- const commentUpdate : Partial < Comment > = { } ;
174-
175- if ( odometerDraft . odometerStartReading !== undefined ) {
176- commentUpdate . odometerStart = odometerDraft . odometerStartReading ;
177- }
180+ const startImage = deserializeOdometerDraftImage ( odometerDraft . odometerStartImage , transactionID , CONST . IOU . ODOMETER_IMAGE_TYPE . START ) ?? null ;
181+ const endImage = deserializeOdometerDraftImage ( odometerDraft . odometerEndImage , transactionID , CONST . IOU . ODOMETER_IMAGE_TYPE . END ) ?? null ;
178182
179- if ( odometerDraft . odometerEndReading !== undefined ) {
180- commentUpdate . odometerEnd = odometerDraft . odometerEndReading ;
181- }
182-
183- const startImage = deserializeOdometerDraftImage ( odometerDraft . odometerStartImage , transactionID , CONST . IOU . ODOMETER_IMAGE_TYPE . START ) ;
184- if ( startImage !== undefined ) {
185- revokeOdometerImageUri ( currentComment ?. odometerStartImage , startImage ) ;
186- commentUpdate . odometerStartImage = startImage ;
187- }
183+ // Free the previous blob URL before the merge drops the reference - covers both replace and wipe-to-null; helper no-ops if non-blob or unchanged.
184+ revokeOdometerImageUri ( currentComment ?. odometerStartImage , startImage ) ;
185+ revokeOdometerImageUri ( currentComment ?. odometerEndImage , endImage ) ;
188186
189- const endImage = deserializeOdometerDraftImage ( odometerDraft . odometerEndImage , transactionID , CONST . IOU . ODOMETER_IMAGE_TYPE . END ) ;
190- if ( endImage !== undefined ) {
191- revokeOdometerImageUri ( currentComment ?. odometerEndImage , endImage ) ;
192- commentUpdate . odometerEndImage = endImage ;
193- }
194-
195- if ( Object . keys ( commentUpdate ) . length === 0 ) {
196- return ;
197- }
198-
199- return commentUpdate ;
187+ return {
188+ odometerStart : odometerDraft . odometerStartReading ?? null ,
189+ odometerEnd : odometerDraft . odometerEndReading ?? null ,
190+ odometerStartImage : startImage ,
191+ odometerEndImage : endImage ,
192+ } ;
200193}
201194
202195/**
@@ -223,10 +216,10 @@ function isOdometerDraftPendingHydration(odometerDraft: OnyxEntry<OdometerDraft>
223216 return false ;
224217 }
225218 return (
226- ( odometerDraft . odometerStartReading !== undefined && comment ?. odometerStart == null ) ||
227- ( odometerDraft . odometerEndReading !== undefined && comment ?. odometerEnd == null ) ||
228- ( ! ! odometerDraft . odometerStartImage && ! comment ?. odometerStartImage ) ||
229- ( ! ! odometerDraft . odometerEndImage && ! comment ?. odometerEndImage )
219+ ( odometerDraft . odometerStartReading ?? null ) !== ( comment ?. odometerStart ?? null ) ||
220+ ( odometerDraft . odometerEndReading ?? null ) !== ( comment ?. odometerEnd ?? null ) ||
221+ ! ! odometerDraft . odometerStartImage !== ! ! comment ?. odometerStartImage ||
222+ ! ! odometerDraft . odometerEndImage !== ! ! comment ?. odometerEndImage
230223 ) ;
231224}
232225
0 commit comments