Closed
Description
LiveQuery not triggering event callbacks when using query.containedIn.
Steps to reproduce
A) Parse database contains following classes:
Proposal = [
{
objectId: gLbeSQLSkf,
itemId: 2iyjvsN1Pi,
retailPrice: 31
},
{
objectId: EoJRfZcLth,
itemId: Q8t0uSnvKn,
Price: 4
}
]
Items = [
{itemId: 2iyjvsN2Pi},
{itemId: Q8t0uSnvKn}
]
B) JavaScript nextProps variable contains following
nextProps.items = [
{itemId: 2iyjvsN2Pi},
{itemId: Q8t0uSnvKn}
]
C) Code for Query subscription
componentWillReceiveProps( nextProps ) {
{
let proposalQuery = new Parse.Query('Proposal');
let items = nextProps.items;
let itemPointers = items.map((item) => {
let ItemPointer = new Parse.Object("Item");
ItemPointer.id = item.itemId;
return ItemPointer;
});
proposalQuery.containedIn('itemId', itemPointers);
var proposalSubscription = proposalQuery.subscribe();
proposalSubscription.on('create', (proposal) => {
console.log('created new proposal');
});
proposalSubscription.on('update', (proposal) => {
console.log('updated existing proposal');
});
}
E) Change retailPrice in Parse Dashboard from 31 to 30
F) Output from Parse Server (verbose)
verbose: PUT /parse/classes/Proposal/gLbeSQLSkf { host: 'localhost:1337',
connection: 'keep-alive',
'content-length': '205',
origin: 'http://0.0.0.0:4040',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
'content-type': 'text/plain',
accept: '*/*',
referer: 'http://0.0.0.0:4040/apps/idpractice/browser/Proposal',
'accept-encoding': 'gzip, deflate',
'accept-language': 'en-US,en;q=0.8' } {
"retailPrice": 30
}
verbose: {
"response": {
"updatedAt": "2016-06-17T13:03:20.119Z"
}
}
G. Subscription 'update' Callback doesn't trigger
H. Remove query.containedIn from query
componentWillReceiveProps( nextProps ) {
{
let proposalQuery = new Parse.Query('Proposal');
var proposalSubscription = proposalQuery.subscribe();
proposalSubscription.on('create', (proposal) => {
console.log('added mfr model#: ', proposal.get('manufacturerModelNumber'));
});
proposalSubscription.on('update', (proposal) => {
console.log('updated mfr model#: ', proposal.get('manufacturerModelNumber'));
});
}
I) Change retailPrice in Parse Dashboard from 30 back to 31
J) Output from Parse Server (verbose)
verbose: PUT /parse/classes/Proposal/gLbeSQLSkf { host: 'localhost:1337',
connection: 'keep-alive',
'content-length': '205',
origin: 'http://0.0.0.0:4040',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
'content-type': 'text/plain',
accept: '*/*',
referer: 'http://0.0.0.0:4040/apps/idpractice/browser/Proposal',
'accept-encoding': 'gzip, deflate',
'accept-language': 'en-US,en;q=0.8' } {
"retailPrice": 31
}
verbose: {
"response": {
"updatedAt": "2016-06-17T13:23:43.386Z"
}
}
K. Subscription 'update' Callback triggers (note: no output from parse server in verbose mode)
L. Demonstrate that query.containedIn works with query.find
componentWillReceiveProps( nextProps ) {
{
let proposalQuery = new Parse.Query('Proposal');
let items = nextProps.items;
let itemPointers = items.map((item) => {
let ItemPointer = new Parse.Object("Item");
ItemPointer.id = item.itemId;
return ItemPointer;
});
proposalQuery.containedIn('itemId', itemPointers);
proposalQuery.find({
success: function (proposals) {
console.log('number of proposal = ' + proposals.length)
},
error: function(error) {
console.log('error: ', error);
}
});
}
M. Console outputs "number of proposals = 2"
Expected Results
See above
Actual Outcome
See above
Environment Setup
- Server
- parse-server version: 2.2.12
- Operating System: react-native: 0.26.1 running on iOS 9.3 simulator
- Hardware: iOS 9.3 simulator
- Localhost or remote server? Localhost
- Database
- MongoDB version: Running mLab "SandBox" tier
- Localhost or remote server? mLab
- Client
- Parse JS API: 1.8.5
Logs/Trace
See above