Skip to content

Commit

Permalink
feat(hierarchical-menu): Add CSS classes dependent on the depth
Browse files Browse the repository at this point in the history
Hierarchical lists will have classes like
`ais-hierarchical-menu--list__lvl1`. Updated docs and test
  • Loading branch information
pixelastic committed Oct 21, 2015
1 parent c8d1a5f commit 1256ea8
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 4 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1031,7 +1031,7 @@ search.addWidget(
<div class="ais-hierarchical-menu">
<div class="ais-hierarchical-menu--header ais-header">[custom header template]</div>
<div class="ais-hierarchical-menu--body">
<div class="ais-hierarchical-menu--list">
<div class="ais-hierarchical-menu--list ais-hierarchical-menu--list__lvl0">
<div class="ais-hierarchical-menu--item">
<a class="ais-hierarchical-menu--link" href="/url">
Your value
Expand All @@ -1043,7 +1043,7 @@ search.addWidget(
Your active value
<span class="ais-hierarchical-menu--count">42</span>
</a>
<div class="ais-hierarchical-menu--list">
<div class="ais-hierarchical-menu--list ais-hierarchical-menu--list__lvl1">
<div class="ais-hierarchical-menu--item">
<a class="ais-hierarchical-menu--link" href="/url">
Your subvalue 1
Expand Down Expand Up @@ -1073,6 +1073,10 @@ search.addWidget(
}
.ais-hierarchical-menu--list {
}
.ais-hierarchical-menu--list__lvl0 {
}
.ais-hierarchical-menu--list__lvl1 {
}
.ais-hierarchical-menu--item {
}
.ais-hierarchical-menu--item__active {
Expand Down
18 changes: 16 additions & 2 deletions components/RefinementList/RefinementList.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,15 @@ class RefinementList extends React.Component {
}

_generateFacetItem(facetValue) {
var subList;
var hasChildren = facetValue.data && facetValue.data.length > 0;
var subList = hasChildren && <RefinementList {...this.props} facetValues={facetValue.data} />;
if (hasChildren) {
subList = <RefinementList
{...this.props}
depth={this.props.depth + 1}
facetValues={facetValue.data}
/>;
}
var data = facetValue;

if (this.props.createURL) {
Expand Down Expand Up @@ -87,8 +94,14 @@ class RefinementList extends React.Component {
}

render() {
// Adding `-lvl0` classes
var cssClassList = [this.props.cssClasses.list];
if (this.props.cssClasses.depth) {
cssClassList.push(`${this.props.cssClasses.depth}${this.props.depth}`);
}

return (
<div className={cx(this.props.cssClasses.list)}>
<div className={cx(cssClassList)}>
{this.props.facetValues.map(this._generateFacetItem, this)}
</div>
);
Expand Down Expand Up @@ -116,6 +129,7 @@ RefinementList.propTypes = {

RefinementList.defaultProps = {
cssClasses: {},
depth: 0,
facetNameKey: 'name'
};

Expand Down
60 changes: 60 additions & 0 deletions components/RefinementList/__tests__/RefinementList-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,66 @@ describe('RefinementList', () => {
);
});

context('sublist', () => {
it('uses autoHide() and headerFooter()', () => {
var customProps = {
cssClasses: {
depth: 'depth',
item: 'item',
list: 'list'
},
facetValues: [
{
name: 'facet1',
data: [
{name: 'subfacet1'},
{name: 'subfacet2'}
]
}
]
};
parentListProps = {
className: 'list depth0'
};
itemProps = {
className: 'item',
onClick: () => {}
};
templateProps = {
templateKey: 'item',
data: {
cssClasses: {
depth: 'depth',
list: 'list',
item: 'item'
}
}
};
var out = render(customProps);
expect(out).toEqualJSX(
<div {...parentListProps}>
<div {...itemProps}>
<Template
{...templateProps}
data={{
...templateProps.data,
name: 'facet1',
data: customProps.facetValues[0].data
}}
/>
<RefinementList
{...templateProps.data}
depth={1}
facetNameKey="name"
facetValues={customProps.facetValues[0].data}
templateProps={{}}
/>
</div>
</div>
);
});
});

function render(extraProps = {}) {
var props = getProps(extraProps);
renderer.render(<RefinementList {...props} templateProps={{}} />);
Expand Down
4 changes: 4 additions & 0 deletions themes/default.css
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@
}
.ais-hierarchical-menu--list {
}
.ais-hierarchical-menu--list__lvl0 {
}
.ais-hierarchical-menu--list__lvl1 {
}
.ais-hierarchical-menu--item {
}
.ais-hierarchical-menu--item__active {
Expand Down
1 change: 1 addition & 0 deletions widgets/hierarchical-menu/hierarchical-menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ function hierarchicalMenu({
body: cx(bem('body'), cssClasses.body),
footer: cx(bem('footer'), cssClasses.footer),
list: cx(bem('list'), cssClasses.list),
depth: bem('list', 'lvl'),
item: cx(bem('item'), cssClasses.item),
active: cx(bem('item', 'active'), cssClasses.active),
link: cx(bem('link'), cssClasses.link),
Expand Down

0 comments on commit 1256ea8

Please sign in to comment.