Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website

JSON store filtering based on stored data - solved


  • Hi all,

    I am playing around with jsonStoreTable taken from here -> https://github.com/infiniteautomation/ma-dashboards/tree/3.3.x/UI/web/ngMango/components/jsonStoreTable

    As I am still learning about subscription to data I have a problem on filtering data of my stores.

    Filtering out stores which have certain string in their xid and then ordering them like I want is quite easy and understandable as it seems this data is accessible within my controller without problems.

            this.orderedItems = this.$filter('filter')(this.items,{xid: "Report"});
            this.orderedItems = this.$filter('orderBy')(this.orderedItems, this.tableOrder);
            this.count = this.orderedItems.length;
            this.latestXid = 'SavedReportData-' + this.orderedItems.length;
            this.nextXid = 'SavedReportData-' + (this.orderedItems.length + 1);
            this.dataTable = this.$filter('limitTo')(this.orderedItems,this.limit,(this.page-1)*this.limit);
    

    The problem is that I would like to filter out some of my stores which have certain variable value in their jsonData object.

    Lets say I have a following jsonStores:

    {
        "reportNo": 4,
        "approved": "testingstation",
        "name": "Thomas Einasto",
        "address": "Street name 34",
        "equipment": "Truck",
        "regno": "919BVY",
        "serialno": "2315824123",
        "firstentry": "2018-07-24",
        "tare": "2015",
        "carryingcapacity": "32153434",
        "finished":true
    },
    {
        "reportNo": 7,
        "approved": "testingstation",
        "name": "Thomas Einasto",
        "address": "Street name 34",
        "equipment": "Truck",
        "regno": "919BVY",
        "serialno": "2315824123",
        "firstentry": "2018-07-24",
        "tare": "2015",
        "carryingcapacity": "32153434",
        "finished":false
    }
    

    I would like to filter out all jsonStores which have reportNo 7. Filtering should work here just like filtering through xids from before work but I cannot access jsonStore because it is undefined in my filtering function.

    Correct me if I am wrong but as I understand $q and $promise make a subscription to the backend and then the data gets passed asynchronously to the object after all promises have been resolved and that is why if I try to pass

    console.log(this.dataTable[0]);
    console.log(this.dataTable[0].jsonData);
    

    at the end of the filtering I see jsonData on the first object log but I get undefined on the second log as browser has got the data from the server as chrome says on the object that:

    value below was evaluated just now
    

    Can someone point me to the right directions on how should I handle this kind of filtering so that I would gain access to my jsonStores in the right time? I think this is about correctly timing my filtering based on an event when the data has been loaded but as I am still learning I am at a problem here.

    Edit:

    Got it filtered by changing html ng-repeat for the table.

    <tr md-row ng-repeat='item in $ctrl.dataTable | filter:{ jsonData: {reportNo : 7}}' >
    

    But still interested in how to do it through a controller.

    Many Thanks
    Thomas