From cec00e362220e0be23e947a7dcfd6309d5887240 Mon Sep 17 00:00:00 2001 From: Levi Thomason Date: Tue, 23 Aug 2016 22:06:21 -0700 Subject: [PATCH] wip --- .../Components/ComponentDoc/ComponentDoc.js | 114 +++++++++++++----- .../Components/ComponentDoc/ComponentProps.js | 1 - src/lib/META.js | 2 +- src/views/Feed/FeedDate.js | 4 +- 4 files changed, 86 insertions(+), 35 deletions(-) diff --git a/docs/app/Components/ComponentDoc/ComponentDoc.js b/docs/app/Components/ComponentDoc/ComponentDoc.js index 8432a4376b..c48f4a5e66 100644 --- a/docs/app/Components/ComponentDoc/ComponentDoc.js +++ b/docs/app/Components/ComponentDoc/ComponentDoc.js @@ -1,5 +1,5 @@ import _ from 'lodash' -import React, { PropTypes } from 'react' +import React, { Component, PropTypes } from 'react' import DocumentTitle from 'react-document-title' import ComponentDescription from './ComponentDescription' @@ -7,37 +7,87 @@ import ComponentExamples from './ComponentExamples' import ComponentProps from './ComponentProps' import docgenInfo from '../../docgenInfo.json' -const ComponentDoc = ({ _meta }) => { - // TODO remove docgetInfo searching in favor of separate docgen.json in each component directory - // This just parses out a single docgen file based on component path name. - // Our current docgen gulp task concats these into one, only for us to split it back out. - // The leading slash in the RegEx is required, some components end with the same name. - const docPath = _.find(_.keys(docgenInfo), path => new RegExp(`${__PATH_SEP__}${_meta.name}.js$`).test(path)) - const docgen = docgenInfo[docPath] - - return ( - -
- - {docgen.props && } - -
-
- ) -} +import * as stardust from 'src' +import { Header } from 'src' -ComponentDoc.propTypes = { - /** An element type to render as (string or function). */ - as: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.func, - ]), +const docgenPaths = _.keys(docgenInfo) +const getDocgenPath = (componentName) => _.find(docgenPaths, path => { + return new RegExp(`${__PATH_SEP__}${componentName}.js$`).test(path) +}) - _meta: PropTypes.object, -} +export default class ComponentDoc extends Component { + static propTypes = { + _meta: PropTypes.object, + } + + state = { + showPropsFor: this.props._meta.name, + } + + handleTabClick = (name) => { + this.setState({ + showPropsFor: name, + }) + } + + render() { + const { _meta } = this.props + const { showPropsFor } = this.state -export default ComponentDoc + const docPath = getDocgenPath(_meta.name) + const docgen = docgenInfo[docPath] + + // find all sub components that have this component as their parent + const subComponents = _.flatMap(stardust, SDComponent => _.filter(SDComponent, staticValue => ( + _.get(staticValue, '_meta.parent') === _meta.name + ))) + // const subDocgen = _.map(subComponents, sub => { + // const subDocgenPath = getDocgenPath(sub._meta.name) + // return docgenInfo[subDocgenPath] + // }) + + const subDocgen = docgenInfo[getDocgenPath(showPropsFor)] + + return ( + +
+ +
Props
+
+ this.handleTabClick(_meta.name)} + > + {_meta.name} + + {_.map(subComponents, sub => ( + this.handleTabClick(sub._meta.name)} + > + {sub._meta.name.replace(_meta.name, '')} + + ))} +
+ {docgen.props && ( +
+ +
+ )} + {subDocgen && ( +
+ {subDocgen.docBlock.description &&
{subDocgen.docBlock.description}
} + +
+ )} + +
+
+ ) + } +} diff --git a/docs/app/Components/ComponentDoc/ComponentProps.js b/docs/app/Components/ComponentDoc/ComponentProps.js index 2489e80cce..4e6c5d66b5 100644 --- a/docs/app/Components/ComponentDoc/ComponentProps.js +++ b/docs/app/Components/ComponentDoc/ComponentProps.js @@ -66,7 +66,6 @@ export default class ComponentProps extends Component { return (
-
Props
diff --git a/src/lib/META.js b/src/lib/META.js index 952cd0aa61..79f4183214 100644 --- a/src/lib/META.js +++ b/src/lib/META.js @@ -17,7 +17,7 @@ const TYPE_VALUES = _.values(TYPES) * @param {Object} _meta A proposed Stardust _meta object. * @returns {Boolean} */ -const isMeta = (_meta) => ( +export const isMeta = (_meta) => ( _.includes(_.get('type', _meta), TYPE_VALUES) ) diff --git a/src/views/Feed/FeedDate.js b/src/views/Feed/FeedDate.js index a6be947f46..528d6b4048 100644 --- a/src/views/Feed/FeedDate.js +++ b/src/views/Feed/FeedDate.js @@ -7,7 +7,9 @@ import { getUnhandledProps, META, } from '../../lib' - +/** + * Show a feed date + */ function FeedDate(props) { const { children, className, date } = props const classes = cx(className, 'date')