atst/js/components/forms/members_list.js
2018-11-01 16:26:47 -04:00

63 lines
1.4 KiB
JavaScript

import { compose, filter, equals, indexBy, partial, prop, pipe } from 'ramda'
const search = (query, members) => {
if (query === '' || query === 'all') {
return members
} else {
const normalizedQuery = query.toLowerCase()
return members.filter(
(member) => member.name.toLowerCase().includes(normalizedQuery)
)
}
}
const filterByStatus = (status, members) => {
if (status === '' || status === 'all') {
return members
} else {
return members.filter(
(member) => member.status === status
)
}
}
const filterByRole = (role, rolesByDisplayname, members) => {
const getRoleNameFromDisplayName = (_role) => rolesByDisplayname[_role].name
if (role === '' || role === 'all') {
return members
} else {
return members.filter(
(member) => getRoleNameFromDisplayName(member.role) === role
)
}
}
export default {
name: 'members-list',
props: {
members: Array,
choices: Array,
},
data: function () {
return {
searchValue: '',
status: '',
role: '',
rolesByDisplayName: indexBy(prop('display_name'), this.choices),
}
},
computed: {
searchedList: function () {
return pipe(
partial(search, [this.searchValue]),
partial(filterByStatus, [this.status]),
partial(filterByRole, [this.role, this.rolesByDisplayName]),
)(this.members)
}
},
}