Skip to content

Instantly share code, notes, and snippets.

@felisio
Forked from vinicius73/an-component.vue
Created October 17, 2016 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felisio/1db911de0faddb12767974202e22693b to your computer and use it in GitHub Desktop.
Save felisio/1db911de0faddb12767974202e22693b to your computer and use it in GitHub Desktop.
Helpers to filter collections
<script>
// an component
import { orderBy, isEmpty } from 'lodash';
import filterByName from '../helpers/filters/by-name';
// omit
computed: {
listOrdened() {
const { orderBy as by, order } = this.configs;
return orderBy(this.repos, by, order);
},
list() {
const filter = this.configs.filter;
if (isEmpty(filter)) {
return this.listOrdened;
}
return filterByName(this.listOrdened, filter);
},
},
</script>
// helpers/by-name.js
import { makeFilterByProp } from './by-prop';
export default makeFilterByProp('name');
// helpers/filters/by-prop.js
import { filter } from 'lodash';
import { contains } from '../strings';
export const makeFilterByProp = key => (list, st) => filter(list, row => contains(row[key], st));
export default (key, list, st) => filter(list, row => contains(row[key], st));
// helpers/strings.js
import { deburr, isEmpty } from 'lodash';
export const sanitize = deburr;
export const sanitizeAndLower = value => sanitize(value).toLowerCase();
export const contains = (st, value) => sanitizeAndLower(st).indexOf(sanitizeAndLower(value)) > -1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment