From 4e257435df513d587a524b352faf52bb3092925f Mon Sep 17 00:00:00 2001 From: Christopher Joe Date: Wed, 11 Jan 2017 15:09:05 +1300 Subject: [PATCH] Fix Shift react breadcrumbs to use flexbox for placement --- admin/client/dist/js/bundle.js | 15 ++-- admin/client/dist/styles/bundle.css | 3 + .../src/components/Breadcrumb/Breadcrumb.js | 75 +++++++++++-------- .../src/components/Breadcrumb/Breadcrumb.scss | 4 + .../Breadcrumb/tests/breadcrumb-test.js | 18 +++-- 5 files changed, 70 insertions(+), 45 deletions(-) diff --git a/admin/client/dist/js/bundle.js b/admin/client/dist/js/bundle.js index 2799ba5a0..9a2f812bf 100644 --- a/admin/client/dist/js/bundle.js +++ b/admin/client/dist/js/bundle.js @@ -765,13 +765,16 @@ e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,wri }}Object.defineProperty(t,"__esModule",{value:!0}),t.Breadcrumb=void 0 var l=function(){function e(e,t){for(var n=0;n - {this.getBreadcrumbs()} - - ); + getLastCrumb() { + return this.props.crumbs && this.props.crumbs[this.props.crumbs.length - 1]; } - getBreadcrumbs() { - if (typeof this.props.crumbs === 'undefined') { + renderBreadcrumbs() { + if (!this.props.crumbs) { return null; } - return [].concat( - this.props.crumbs.slice(0, -1).map((crumb, index) => [ -
  • + return this.props.crumbs.slice(0, -1).map((crumb, index) => ( +
  • {crumb.text} -
  • , - ]), - this.props.crumbs.slice(-1).map((crumb, index) => { - const iconClassNames = ['breadcrumb__icon', crumb.icon ? crumb.icon.className : ''] - .join(' '); - const itemClassNames = ['breadcrumb__item', 'breadcrumb__item--last']; + + )).concat([ +
  • , + ]); + } - if (crumb.noCrumb) { - itemClassNames.push('breadcrumb__item--no-crumb'); - } + renderLastCrumb() { + const crumb = this.getLastCrumb(); + if (!crumb) { + return null; + } - return [ -
  • -

    - {crumb.text} - {crumb.icon && - - } -

    -
  • , - ]; - }) + const iconClassNames = ['breadcrumb__icon']; + if (crumb.icon) { + iconClassNames.push(crumb.icon.className); + } + + return ( +
    +

    + {crumb.text} + {crumb.icon && + + } +

    +
    ); } + render() { + return ( +
    +
      + {this.renderBreadcrumbs()} +
    + {this.renderLastCrumb()} +
    + ); + } } Breadcrumb.propTypes = { diff --git a/admin/client/src/components/Breadcrumb/Breadcrumb.scss b/admin/client/src/components/Breadcrumb/Breadcrumb.scss index d27083755..27093300b 100644 --- a/admin/client/src/components/Breadcrumb/Breadcrumb.scss +++ b/admin/client/src/components/Breadcrumb/Breadcrumb.scss @@ -6,6 +6,10 @@ max-height: $toolbar-height; } +.breadcrumb__container { + max-height: $toolbar-height; +} + .breadcrumb>li.breadcrumb__item--last, // TODO Fix Bootstrap clash .breadcrumb__item--last { display: block; diff --git a/admin/client/src/components/Breadcrumb/tests/breadcrumb-test.js b/admin/client/src/components/Breadcrumb/tests/breadcrumb-test.js index c2c8a925c..b5330b382 100644 --- a/admin/client/src/components/Breadcrumb/tests/breadcrumb-test.js +++ b/admin/client/src/components/Breadcrumb/tests/breadcrumb-test.js @@ -14,7 +14,7 @@ describe('BreadcrumbsComponent', () => { props = {}; }); - describe('getBreadcrumbs()', () => { + describe('renderBreadcrumbs()', () => { let breadcrumbs = null; it('should convert the props.crumbs array into jsx to be rendered', () => { @@ -32,11 +32,15 @@ describe('BreadcrumbsComponent', () => { breadcrumbs = ReactTestUtils.renderIntoDocument( ); - const listEls = breadcrumbs.getBreadcrumbs(); - expect(listEls[0][0].props.children.props.children).toBe('breadcrumb1'); - expect(listEls[1][0].props.children.props.children).toBe('breadcrumb2'); - expect(listEls[2][0].props.children.props.children[0]).toBe('breadcrumb3'); - expect(listEls[2][0].props.children.props.children[1].props.className.split(' ')) + const listEls = breadcrumbs.renderBreadcrumbs(); + console.log(listEls[2].props.children); + expect(listEls[0].props.children.props.children).toBe('breadcrumb1'); + expect(listEls[1].props.children.props.children).toBe('breadcrumb2'); + expect(listEls[2].props.children).toBe(undefined); + + const lastEl = breadcrumbs.renderLastCrumb(); + expect(lastEl.props.children.props.children[0]).toBe('breadcrumb3'); + expect(lastEl.props.children.props.children[1].props.className.split(' ')) .toContain('breadcrumb3icon'); }); @@ -45,7 +49,7 @@ describe('BreadcrumbsComponent', () => { ); - const listEls = breadcrumbs.getBreadcrumbs(); + const listEls = breadcrumbs.renderBreadcrumbs(); expect(listEls).toBe(null); }); });