Skip to content

LiveQuery not triggering event callbacks when using query.containedIn. #2088

Closed
@wookiem

Description

@wookiem

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:bugImpaired feature or lacking behavior that is likely assumed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions