Skip to content

Commit 315a98f

Browse files
authored
Add original object to LiveQuery events (#712)
* Add original object to LiveQuery events * Parse Server 3.1.3 requirement
1 parent e3e105a commit 315a98f

File tree

3 files changed

+56
-5
lines changed

3 files changed

+56
-5
lines changed

src/LiveQueryClient.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,11 @@ class LiveQueryClient extends EventEmitter {
396396
if (!subscription) {
397397
break;
398398
}
399-
subscription.emit(data.op, parseObject);
399+
if (data.original) {
400+
delete data.original.__type;
401+
data.original = ParseObject.fromJSON(data.original, false);
402+
}
403+
subscription.emit(data.op, parseObject, data.original);
400404
}
401405
}
402406
}

src/LiveQuerySubscription.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,26 @@ import CoreManager from './CoreManager';
3737
*
3838
* });</pre></p>
3939
*
40-
* <p>Update Event - When an existing ParseObject which fulfills the ParseQuery you subscribe
40+
* <p>Update Event - When an existing ParseObject (original) which fulfills the ParseQuery you subscribe
4141
* is updated (The ParseObject fulfills the ParseQuery before and after changes),
4242
* you'll get this event. The object is the ParseObject which is updated.
4343
* Its content is the latest value of the ParseObject.
4444
*
45+
* Parse-Server 3.1.3+ Required for original object parameter
46+
*
4547
* <pre>
46-
* subscription.on('update', (object) => {
48+
* subscription.on('update', (object, original) => {
4749
*
4850
* });</pre></p>
4951
*
50-
* <p>Enter Event - When an existing ParseObject's old value doesn't fulfill the ParseQuery
52+
* <p>Enter Event - When an existing ParseObject's (original) old value doesn't fulfill the ParseQuery
5153
* but its new value fulfills the ParseQuery, you'll get this event. The object is the
5254
* ParseObject which enters the ParseQuery. Its content is the latest value of the ParseObject.
5355
*
56+
* Parse-Server 3.1.3+ Required for original object parameter
57+
*
5458
* <pre>
55-
* subscription.on('enter', (object) => {
59+
* subscription.on('enter', (object, original) => {
5660
*
5761
* });</pre></p>
5862
*

src/__tests__/LiveQueryClient-test.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,49 @@ describe('LiveQueryClient', () => {
221221
expect(isChecked).toBe(true);
222222
});
223223

224+
it('can handle WebSocket response with original', () => {
225+
const liveQueryClient = new LiveQueryClient({
226+
applicationId: 'applicationId',
227+
serverURL: 'ws://test',
228+
javascriptKey: 'javascriptKey',
229+
masterKey: 'masterKey',
230+
sessionToken: 'sessionToken'
231+
});
232+
// Add mock subscription
233+
const subscription = new events.EventEmitter();
234+
liveQueryClient.subscriptions.set(1, subscription);
235+
const object = new ParseObject('Test');
236+
const original = new ParseObject('Test');
237+
object.set('key', 'value');
238+
original.set('key', 'old');
239+
const data = {
240+
op: 'update',
241+
clientId: 1,
242+
requestId: 1,
243+
object: object._toFullJSON(),
244+
original: original._toFullJSON(),
245+
};
246+
const event = {
247+
data: JSON.stringify(data)
248+
}
249+
// Register checked in advance
250+
let isChecked = false;
251+
subscription.on('update', (parseObject, parseOriginalObject) => {
252+
isChecked = true;
253+
expect(parseObject.get('key')).toEqual('value');
254+
expect(parseObject.get('className')).toBeUndefined();
255+
expect(parseObject.get('__type')).toBeUndefined();
256+
257+
expect(parseOriginalObject.get('key')).toEqual('old');
258+
expect(parseOriginalObject.get('className')).toBeUndefined();
259+
expect(parseOriginalObject.get('__type')).toBeUndefined();
260+
});
261+
262+
liveQueryClient._handleWebSocketMessage(event);
263+
264+
expect(isChecked).toBe(true);
265+
});
266+
224267
it('can handle WebSocket close message', () => {
225268
const liveQueryClient = new LiveQueryClient({
226269
applicationId: 'applicationId',

0 commit comments

Comments
 (0)