Add Onyx-backed draft persistence for odometer expense data.
Design Doc section: https://docs.google.com/document/d/1Z103dY4guA07UUw3sTP1o0IKvFxXZJ1HAB1EwUeEyaA/edit?tab=t.0#bookmark=id.le7upbg1v6r1
Implementation:
- Add
ODOMETER_DRAFT: 'odometerDraft' key to ONYXKEYS.ts
- Create
IOU.saveOdometerDraft(startReading, endReading, startImage, endImage) in IOU.ts
- Create
IOU.clearOdometerDraft() — clears draft after successful expense submission
- Web/mWeb/Desktop: Convert
File objects to base64 via FileReader.readAsDataURL(), store as data URIs
- iOS/Android: Store file URI strings directly (images persist on device filesystem)
- Call
clearOdometerDraft() in the expense submission flow after successful API response
Reference: Odometer tracking issue — Release 2
Issue Owner
Current Issue Owner: @jakubkalinski0
Add Onyx-backed draft persistence for odometer expense data.
Design Doc section: https://docs.google.com/document/d/1Z103dY4guA07UUw3sTP1o0IKvFxXZJ1HAB1EwUeEyaA/edit?tab=t.0#bookmark=id.le7upbg1v6r1
Implementation:
ODOMETER_DRAFT: 'odometerDraft'key toONYXKEYS.tsIOU.saveOdometerDraft(startReading, endReading, startImage, endImage)inIOU.tsIOU.clearOdometerDraft()— clears draft after successful expense submissionFileobjects to base64 viaFileReader.readAsDataURL(), store as data URIsclearOdometerDraft()in the expense submission flow after successful API responseReference: Odometer tracking issue — Release 2
Issue Owner
Current Issue Owner: @jakubkalinski0