Saving Table Filters

  • 1
  • Question
  • Updated 4 years ago
  • Answered
Has anyone been able to save table filters to a record and then set filters with said data on load?  Looking for this capability.  
Photo of Peter Herzog

Peter Herzog

  • 1,664 Points 1k badge 2x thumb

Posted 4 years ago

  • 1
Photo of Greg Jarrett

Greg Jarrett

  • 3,496 Points 3k badge 2x thumb
Hey Peter,

We're using a snippet to retrieve values from a row, apply those values to filter conditions in a 2nd model, and then run a query on the 2nd model - is that kind of what you mean?

It looks like this:



The column on the left acts as the 'table filters' but is really just a new row in a separate model which never actually gets saved to the database. The button pulls values from that model once the user has entered something in a field. You could either use actions or a snippet to retrieve the values and stick them into condiitions for the model on the right.

I know Rob did a tutorial on this kind of thing a while back but I went searching and couldn't find it.

Let me know if that helps.
Photo of Peter Herzog

Peter Herzog

  • 1,664 Points 1k badge 2x thumb
This is very close.  The only piece I need to add is to save the filter settings on the left to a record for future retrieval.  Seems like your code would only need a slight modification to do that.  Would you mind sharing the snippet?  Or I can I try to find Rob's tutorial.

Thanks Greg!
Photo of Greg Jarrett

Greg Jarrett

  • 3,496 Points 3k badge 2x thumb
No problem, here you go. It's quite a big and repetitive snippet as there are almost 10 conditions on the model being queried, so I've trimmed it down to the basic principles:

var $ = skuid.$,    
    //get the models from the page
    search = skuid.model.getModel('SearchCriteria');
    operatorsModel = skuid.model.getModel('SearchOperators');


        $.blockUI({ message: 'Searching for Operators with aircraft that match your criteria...',timeout: 4000});

    //get the first row which contains the criteria which we will use to set model conditions
    var criteria = search.getFirstRow();
    
        //get the values of fields in that first row
        var paxCount = search.getFieldValue(criteria,'PAX__c');
                if (paxCount === "") { //this statement checks to see whether the text field
                    paxCount = null;   //is returning an empty string, and if so, set it to null
                }
                console.log("PAX Count is " + paxCount);
        
        var cargo = search.getFieldValue(criteria,'Cargo__c');
                console.log("Cargo is " + cargo);
                
        var yearOM = search.getFieldValue(criteria,'YOM__c');
                if (yearOM === "") {
                    yearOM = null;
                }
                console.log("YOM is " + yearOM);   
        
   //set the conditions on the Operators Model, from the values contained by search criteria    //minimum pax condition
    var minPAX = operatorsModel.getConditionByName('minPAX',true);
        if (paxCount !== null || undefined) {
        operatorsModel.setCondition(minPAX,paxCount);
            console.log("Activated minPAX");
        } else {
            operatorsModel.deactivateCondition(minPAX);
            console.log("Deactivated minPAX");
        }
    //Cargo true or false condition    
    var CGO = operatorsModel.getConditionByName('CGO',true);
        if (cargo === true) {
        operatorsModel.activateCondition(CGO);
        console.log("Activated CGO");
        } else {
            operatorsModel.deactivateCondition(CGO);
            console.log("Deactivated CGO");
        }


operatorsModel.updateData();


Hope that helps!
Photo of Rob Hatch

Rob Hatch, Official Rep

  • 44,006 Points 20k badge 2x thumb
I do believe Greg's model will work.  You will just need to create a new object that has fields for all the filter items, and then allow the user to save thier filter options (and retrieve saved selections).   A little more complicated than what Greg has included, but very feasible.