From cd9f910c78f2715ee9025ccdc79da7ee88f00bb3 Mon Sep 17 00:00:00 2001 From: Chris Lawton <chris.lawton@torchbox.com> Date: Tue, 15 Jan 2019 17:23:22 +0000 Subject: [PATCH] re-arrange the detail view components so they're part of the tabbed content to prepare for mobile layout --- .../components/ApplicationDisplay/index.js | 2 +- .../components/ApplicationDisplay/styles.scss | 3 -- .../app/src/components/DisplayPanel/index.js | 16 +++++-- .../src/components/DisplayPanel/style.scss | 39 ++++++++++++++-- .../src/app/src/components/Tabber/index.js | 44 ++++++++++++++++++- 5 files changed, 90 insertions(+), 14 deletions(-) diff --git a/opentech/static_src/src/app/src/components/ApplicationDisplay/index.js b/opentech/static_src/src/app/src/components/ApplicationDisplay/index.js index 47bf4e877..3cac4e35c 100644 --- a/opentech/static_src/src/app/src/components/ApplicationDisplay/index.js +++ b/opentech/static_src/src/app/src/components/ApplicationDisplay/index.js @@ -51,7 +51,7 @@ export default class ApplicationDisplay extends Component { const { metaResponses, responses } = this.props.submissionData; return ( - <div className="application-display"> + <div> <h3>Proposal Information</h3> <div className="grid grid--proposal-info"> diff --git a/opentech/static_src/src/app/src/components/ApplicationDisplay/styles.scss b/opentech/static_src/src/app/src/components/ApplicationDisplay/styles.scss index e7d2cac37..e69de29bb 100644 --- a/opentech/static_src/src/app/src/components/ApplicationDisplay/styles.scss +++ b/opentech/static_src/src/app/src/components/ApplicationDisplay/styles.scss @@ -1,3 +0,0 @@ -.application-display { - padding: 20px; -} diff --git a/opentech/static_src/src/app/src/components/DisplayPanel/index.js b/opentech/static_src/src/app/src/components/DisplayPanel/index.js index d5dbbfc41..7e4980cd2 100644 --- a/opentech/static_src/src/app/src/components/DisplayPanel/index.js +++ b/opentech/static_src/src/app/src/components/DisplayPanel/index.js @@ -1,6 +1,7 @@ import React from 'react'; import ApplicationDisplay from '@components/ApplicationDisplay' import Tabber from '@components/Tabber' +import {Tab} from '@components/Tabber' import './style.scss'; const DisplayPanel = () => { @@ -31,10 +32,17 @@ const DisplayPanel = () => { } return ( - <div className="display-panel"> - <ApplicationDisplay submissionData={data} /> - <Tabber /> - </div> + <Tabber className="display-panel"> + <Tab name="Application"> + <ApplicationDisplay submissionData={data} /> + </Tab> + <Tab name="Notes"> + <p>Notes</p> + </Tab> + <Tab name="Status"> + <p>Status</p> + </Tab> + </Tabber> ) }; diff --git a/opentech/static_src/src/app/src/components/DisplayPanel/style.scss b/opentech/static_src/src/app/src/components/DisplayPanel/style.scss index 00e22068d..8b08643bc 100644 --- a/opentech/static_src/src/app/src/components/DisplayPanel/style.scss +++ b/opentech/static_src/src/app/src/components/DisplayPanel/style.scss @@ -1,8 +1,5 @@ .display-panel { - // temporary to visualise middle column - > div:first-child { - background-color: $color--white; - } + background-color: $color--white; @include media-query(tablet-landscape) { display: grid; @@ -11,9 +8,43 @@ @include media-query(desktop) { grid-template-columns: 1fr 390px; + grid-template-rows: 75px 1fr; + } + @include target-ie11 { display: flex; flex-wrap: wrap; } + + &__body, + &__header { + @include submission-list-item; + padding: 20px; + } + + &__header { + &--spacer { + display: none; + + @include media-query(tablet-landscape) { + display: block; + } + } + } + + &__links { + display: flex; + align-items: center; + padding: 0; + } + + &__link { + padding: 20px; + + @include media-query(tablet-landscape) { + &:first-child { + display: none; + } + } } } diff --git a/opentech/static_src/src/app/src/components/Tabber/index.js b/opentech/static_src/src/app/src/components/Tabber/index.js index 1fb0d3537..7ba90c2e2 100644 --- a/opentech/static_src/src/app/src/components/Tabber/index.js +++ b/opentech/static_src/src/app/src/components/Tabber/index.js @@ -1,5 +1,45 @@ -import React from 'react'; +import React, {Component} from 'react'; -const Tabber = () => <div>Tabber</div> +export const Tab = ({name, children}) => <div>{children}</div> + +class Tabber extends Component { + constructor() { + super(); + + this.state = { + activeTab: 0 + } + } + + handleClick = (e) => { + e.preventDefault(); + this.setState({ + activeTab: event.target.getAttribute('data-tab') + }) + } + + render() { + + const { children, className } = this.props; + const [ mainDisplay, ...other ] = children; + + return ( + <div className={className}> + <div className="display-panel__header display-panel__header--spacer"></div> + <div className="display-panel__header display-panel__links"> + <a data-tab="0" onClick={this.handleClick} className="display-panel__link">{mainDisplay.props.name}</a> + {other.map((child, i) => <a data-tab={i + 1} onClick={this.handleClick} className="display-panel__link" key={child.props.name}>{child.props.name}</a>)} + </div> + <div className="display-panel__body"> + {mainDisplay} + </div> + <div className="display-panel__body"> + {other[0]} + </div> + </div> + ) + } + +} export default Tabber; -- GitLab