mirror of
https://github.com/ascribe/onion.git
synced 2025-01-03 10:25:08 +01:00
Document PieceListToolbarFilterWidget and PieceListFilterDisplay
This commit is contained in:
parent
ace465afad
commit
ac09c721ca
@ -85,6 +85,8 @@ let PieceListToolbarFilterWidgetFilter = React.createClass({
|
|||||||
<DropdownButton
|
<DropdownButton
|
||||||
title={filterIcon}
|
title={filterIcon}
|
||||||
className="ascribe-piece-list-toolbar-filter-widget">
|
className="ascribe-piece-list-toolbar-filter-widget">
|
||||||
|
{/* We iterate over filterParams, to receive the label and then for each
|
||||||
|
label also iterate over its items, to get all filterable options */}
|
||||||
{this.props.filterParams.map(({ label, items }, i) => {
|
{this.props.filterParams.map(({ label, items }, i) => {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@ -94,6 +96,16 @@ let PieceListToolbarFilterWidgetFilter = React.createClass({
|
|||||||
<em>{label}:</em>
|
<em>{label}:</em>
|
||||||
</li>
|
</li>
|
||||||
{items.map((param, j) => {
|
{items.map((param, j) => {
|
||||||
|
|
||||||
|
// As can be seen in the PropTypes, a param can either
|
||||||
|
// be a string or an object of the shape:
|
||||||
|
//
|
||||||
|
// {
|
||||||
|
// key: <String>,
|
||||||
|
// label: <String>
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// This is why we need to distinguish between both here.
|
||||||
if(typeof param !== 'string') {
|
if(typeof param !== 'string') {
|
||||||
label = param.label;
|
label = param.label;
|
||||||
param = param.key;
|
param = param.key;
|
||||||
|
@ -22,6 +22,12 @@ let PieceListFilterDisplay = React.createClass({
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes the above described filterParams prop,
|
||||||
|
* assigns it it's true filterBy value that is derived from the filterBy prop
|
||||||
|
* and also - if there wasn't already one defined - generates a label
|
||||||
|
* @return {object}
|
||||||
|
*/
|
||||||
transformFilterParamsItemsToBools() {
|
transformFilterParamsItemsToBools() {
|
||||||
let { filterParams, filterBy } = this.props;
|
let { filterParams, filterBy } = this.props;
|
||||||
|
|
||||||
@ -47,23 +53,40 @@ let PieceListFilterDisplay = React.createClass({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes the list of filters generated in transformFilterParamsItemsToBools and
|
||||||
|
* transforms them into human readable text.
|
||||||
|
* @param {Object} filtersWithLabel An object of the shape {key: <String>, label: <String>, value: <Bool>}
|
||||||
|
* @return {string} A human readable string
|
||||||
|
*/
|
||||||
getFilterText(filtersWithLabel) {
|
getFilterText(filtersWithLabel) {
|
||||||
let filterTextList = filtersWithLabel
|
let filterTextList = filtersWithLabel
|
||||||
|
// Iterate over all provided filterLabels and generate a list
|
||||||
|
// of human readable strings
|
||||||
.map((filterWithLabel) => {
|
.map((filterWithLabel) => {
|
||||||
let activeFilterWithLabel = filterWithLabel
|
let activeFilterWithLabel = filterWithLabel
|
||||||
.items
|
.items
|
||||||
|
// If the filter is active (which it is when its value is true),
|
||||||
|
// we're going to include it's label into a list,
|
||||||
|
// otherwise we'll just return nothing
|
||||||
.map((filter) => {
|
.map((filter) => {
|
||||||
if(filter.value) {
|
if(filter.value) {
|
||||||
return filter.label;
|
return filter.label;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
// if nothing is returned, that index is 'undefined'.
|
||||||
|
// As we only want active filter, we filter out all falsy values e.g. undefined
|
||||||
.filter((filterName) => !!filterName)
|
.filter((filterName) => !!filterName)
|
||||||
|
// and join the result to a string
|
||||||
.join(', ');
|
.join(', ');
|
||||||
|
|
||||||
|
// If this actually didn't generate an empty string,
|
||||||
|
// we take the label and concat it to the result.
|
||||||
if(activeFilterWithLabel) {
|
if(activeFilterWithLabel) {
|
||||||
return filterWithLabel.label + ': ' + activeFilterWithLabel;
|
return filterWithLabel.label + ': ' + activeFilterWithLabel;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
// filter out strings that are undefined, as their filter's were not activated
|
||||||
.filter((filterText) => !!filterText)
|
.filter((filterText) => !!filterText)
|
||||||
// if there are multiple sentences, capitalize the first one and lowercase the others
|
// if there are multiple sentences, capitalize the first one and lowercase the others
|
||||||
.map((filterText, i) => i === 0 ? filterText.charAt(0).toUpperCase() + filterText.substr(1) : filterText.charAt(0).toLowerCase() + filterText.substr(1))
|
.map((filterText, i) => i === 0 ? filterText.charAt(0).toUpperCase() + filterText.substr(1) : filterText.charAt(0).toLowerCase() + filterText.substr(1))
|
||||||
|
Loading…
Reference in New Issue
Block a user