Skip to content

Commit f290dc5

Browse files
committed
Maintain geolocation data format through serialization.
1 parent a17e017 commit f290dc5

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

CliClient/tests/models_BaseItem.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,38 @@ describe('models_BaseItem', function() {
5858
}));
5959

6060
it('should correctly unserialize note timestamps', asyncTest(async () => {
61-
let folder = await Folder.save({ title: 'folder' });
61+
const folder = await Folder.save({ title: 'folder' });
6262
let note = await Note.save({ title: 'note', parent_id: folder.id });
6363

64-
let serialized = await Note.serialize(note);
65-
let unserialized = await Note.unserialize(serialized);
64+
const serialized = await Note.serialize(note);
65+
const unserialized = await Note.unserialize(serialized);
6666

6767
expect(unserialized.created_time).toEqual(note.created_time);
6868
expect(unserialized.updated_time).toEqual(note.updated_time);
6969
expect(unserialized.user_created_time).toEqual(note.user_created_time);
7070
expect(unserialized.user_updated_time).toEqual(note.user_updated_time);
71+
}));
72+
73+
it('should serialize geolocation fields', asyncTest(async () => {
74+
const folder = await Folder.save({ title: 'folder' });
75+
let note = await Note.save({ title: 'note', parent_id: folder.id });
76+
note = await Note.load(note.id);
77+
78+
let serialized = await Note.serialize(note);
79+
let unserialized = await Note.unserialize(serialized);
80+
81+
expect(unserialized.latitude).toEqual('0.00000000');
82+
expect(unserialized.longitude).toEqual('0.00000000');
83+
expect(unserialized.altitude).toEqual('0.0000');
84+
85+
await Note.updateGeolocation(note.id);
86+
note = await Note.load(note.id);
87+
88+
serialized = await Note.serialize(note);
89+
unserialized = await Note.unserialize(serialized);
90+
91+
expect(unserialized.latitude).toEqual(note.latitude);
92+
expect(unserialized.longitude).toEqual(note.longitude);
93+
expect(unserialized.altitude).toEqual(note.altitude);
7194
}));
7295
});

ReactNativeClient/lib/models/BaseItem.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,14 +255,17 @@ class BaseItem extends BaseModel {
255255
const ItemClass = this.itemClass(type);
256256

257257
if (['title_diff', 'body_diff'].indexOf(propName) >= 0) {
258-
if (!propValue) return '';
259-
propValue = JSON.parse(propValue);
260-
} else {
258+
if (!propValue) return '';
259+
propValue = JSON.parse(propValue);
260+
} else if (['longitude', 'latitude', 'altitude'].indexOf(propName) >= 0) {
261+
const places = (propName === 'altitude') ? 4 : 8;
262+
propValue = Number(propValue).toFixed(places);
263+
} else {
261264
if (['created_time', 'updated_time', 'user_created_time', 'user_updated_time'].indexOf(propName) >= 0) {
262265
propValue = (!propValue) ? '0' : moment(propValue, 'YYYY-MM-DDTHH:mm:ss.SSSZ').format('x');
263266
}
264267
propValue = Database.formatValue(ItemClass.fieldType(propName), propValue);
265-
}
268+
}
266269

267270
return propValue;
268271
}

0 commit comments

Comments
 (0)