github.com/kjdelisle/consul@v1.4.5/ui-v2/app/mixins/with-filtering.js (about)

     1  import Mixin from '@ember/object/mixin';
     2  import { computed, get, set } from '@ember/object';
     3  
     4  const toKeyValue = function(el) {
     5    const key = el.name;
     6    let value = '';
     7    switch (el.type) {
     8      case 'radio':
     9      case 'search':
    10      case 'text':
    11        value = el.value;
    12        break;
    13    }
    14    return { [key]: value };
    15  };
    16  export default Mixin.create({
    17    filters: {},
    18    filtered: computed('items', 'filters', function() {
    19      const filters = get(this, 'filters');
    20      return get(this, 'items').filter(item => {
    21        return this.filter(item, filters);
    22      });
    23    }),
    24    setProperties: function() {
    25      this._super(...arguments);
    26      const query = get(this, 'queryParams');
    27      query.forEach((item, i, arr) => {
    28        const filters = get(this, 'filters');
    29        Object.keys(item).forEach(key => {
    30          set(filters, key, get(this, key));
    31        });
    32        set(this, 'filters', filters);
    33      });
    34    },
    35    actions: {
    36      filter: function(e) {
    37        const obj = toKeyValue(e.target);
    38        Object.keys(obj).forEach((key, i, arr) => {
    39          set(this, key, obj[key] != '' ? obj[key] : null);
    40        });
    41        set(this, 'filters', {
    42          ...this.get('filters'),
    43          ...obj,
    44        });
    45      },
    46    },
    47  });