diff --git a/src/components/Alert/Alert.stories.js b/src/components/Alert/Alert.stories.js index 400802cc01f..df88133de69 100644 --- a/src/components/Alert/Alert.stories.js +++ b/src/components/Alert/Alert.stories.js @@ -3,6 +3,7 @@ import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { withKnobs, text } from '@storybook/addon-knobs'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Alert } from './index'; const stories = storiesOf('Alert', module); @@ -11,7 +12,7 @@ stories.addDecorator( defaultTemplate({ title: 'Alert / Inline Notification', documentationLink: - 'http://www.patternfly.org/pattern-library/communication/inline-notifications/' + DOCUMENTATION_URL.PATTERNFLY_ORG_COMMUNICATION + 'inline-notifications/' }) ); diff --git a/src/components/Badge/Badge.stories.js b/src/components/Badge/Badge.stories.js index 4263b955d9f..addec75f458 100644 --- a/src/components/Badge/Badge.stories.js +++ b/src/components/Badge/Badge.stories.js @@ -1,6 +1,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Badge } from './index'; const stories = storiesOf('Badges', module); @@ -9,7 +10,7 @@ const description = (
This component is based on React Bootstrap Badge component. Badges easily highlight new or unread items. See{' '} - + React Bootstrap Docs {' '} for complete Badge component documentation. @@ -19,8 +20,7 @@ const description = ( stories.addDecorator( defaultTemplate({ title: 'Badges', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#badges', + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#badges', description: description }) ); diff --git a/src/components/Breadcrumb/Breadcrumb.stories.js b/src/components/Breadcrumb/Breadcrumb.stories.js index 74c15aa3418..88022519dca 100644 --- a/src/components/Breadcrumb/Breadcrumb.stories.js +++ b/src/components/Breadcrumb/Breadcrumb.stories.js @@ -1,6 +1,7 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Breadcrumb } from './index'; const stories = storiesOf('Breadcrumb', module); @@ -9,7 +10,7 @@ const description = (
This component is based on React Bootstrap Breadcrumb component. Breadcrumbs are used to indicate the current page's location. See{' '} - + React Bootstrap Docs {' '} for complete Breadcrumb component documentation. @@ -20,7 +21,7 @@ stories.addDecorator( defaultTemplate({ title: 'Breadcrumb', documentationLink: - 'http://www.patternfly.org/pattern-library/navigation/breadcrumbs/', + DOCUMENTATION_URL.PATTERNFLY_ORG_NAVIGATION + 'breadcrumbs/', description: description }) ); diff --git a/src/components/Button/Button.stories.js b/src/components/Button/Button.stories.js index 5d608f31702..9d486134cb5 100644 --- a/src/components/Button/Button.stories.js +++ b/src/components/Button/Button.stories.js @@ -2,52 +2,44 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { withKnobs, select } from '@storybook/addon-knobs'; -import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { inlineTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Grid, Row, Col, MenuItem } from '../../index'; import { Button, ButtonGroup, DropdownButton, SplitButton } from './index'; import { BUTTON_BS_STYLES } from './constants'; const stories = storiesOf('Button', module); -const description = ( -
- This component is based on React Bootstrap Button component. See{' '} - - React Bootstrap Docs - {' '} - for complete Button component documentation. -
-); - stories.addDecorator(withKnobs); -stories.addDecorator( - defaultTemplate({ - title: 'Button', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#buttons', - description: description - }) -); -stories.addWithInfo('Button', '', () => ( -- {' '} - {' '} - {' '} - -
-- {' '} - {' '} - {' '} - -
-+ {' '} + {' '} + {' '} + +
++ {' '} + {' '} + {' '} + +
+- This component is based on Patternfly Chart component. See{' '} - - Patternfly Chart Docs - {' '} - for complete Chart component documentation. -
-); - -stories.addDecorator( - defaultTemplate({ - title: 'Chart', - documentationLink: - 'http://www.patternfly.org/pattern-library/data-visualization/line-chart/', - description: description - }) -); /** * Chart stories diff --git a/src/components/Chart/Stories/AreaChartStory.js b/src/components/Chart/Stories/AreaChartStory.js index a72d94f4383..8451b24f06d 100644 --- a/src/components/Chart/Stories/AreaChartStory.js +++ b/src/components/Chart/Stories/AreaChartStory.js @@ -1,5 +1,7 @@ import React from 'react'; import { AreaChart, SingleAreaChart } from '../index'; +import { inlineTemplate } from '../../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../../storybook/constants'; /** * Story constants @@ -27,27 +29,35 @@ const singleAreaChartData = { */ const areaChartAddWithInfo = stories => { - stories.addWithInfo('Area Charts', '', () => ( -- Those components are based on React Bootstrap Form components. See{' '} - - React Bootstrap Docs - {' '} - for complete Form components documentation. -
-); - -stories.addDecorator( - defaultTemplate({ - title: 'Forms', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#forms', - description: description - }) -); +// const description = ( +//+// Those components are based on React Bootstrap Form components. See{' '} +// +// React Bootstrap Docs +// {' '} +// for complete Form components documentation. +//
+// ); + +// stories.addDecorator( +// defaultTemplate({ +// title: 'Forms', +// documentationLink: +// 'http://www.patternfly.org/pattern-library/widgets/#forms', +// description: description +// }) +// ); stories.addWithInfo('Inline Form', '', () => { const formFieldsKnobs = getInlineFormKnobs(); @@ -77,13 +78,20 @@ stories.addWithInfo('Inline Form', '', () => { )); - return ( + let story = (This component is based on React Bootstrap Grid component. Grids are used to structure and present data. See{' '} - + React Bootstrap Docs {' '} for complete Grid component documentation. diff --git a/src/components/Label/Label.stories.js b/src/components/Label/Label.stories.js index c7511f83281..f74d5263c5d 100644 --- a/src/components/Label/Label.stories.js +++ b/src/components/Label/Label.stories.js @@ -1,25 +1,17 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Label } from './index'; const stories = storiesOf('Label', module); -const description = ( -
- This component is based on React Bootstrap Label component. See{' '} - - React Bootstrap Docs - {' '} - for complete Label component documentation. -
-); stories.addDecorator( defaultTemplate({ title: 'Label', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#labels', - description: description + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#labels', + reactBootstrapDocumentationLink: + DOCUMENTATION_URL.REACT_BOOTSTRAP_COMPONENT + 'label/' }) ); diff --git a/src/components/ListGroup/ListGroup.stories.js b/src/components/ListGroup/ListGroup.stories.js index 5c53c5c6c6a..055b501edca 100644 --- a/src/components/ListGroup/ListGroup.stories.js +++ b/src/components/ListGroup/ListGroup.stories.js @@ -1,27 +1,18 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Badge } from '../Badge'; import { ListGroup, ListGroupItem } from './index'; const stories = storiesOf('ListGroup', module); -const description = ( -- This component is based on React Bootstrap ListGroup component. See{' '} - - React Bootstrap Docs - {' '} - for complete ListGroup component documentation. -
-); - stories.addDecorator( defaultTemplate({ title: 'ListGroup', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#list-group', - description: description + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#list-group', + reactBootstrapDocumentationLink: + DOCUMENTATION_URL.REACT_BOOTSTRAP_COMPONENT + 'list-group/' }) ); diff --git a/src/components/ListView/ListView.stories.js b/src/components/ListView/ListView.stories.js index 9a2fe0f8697..03613a0fb0d 100644 --- a/src/components/ListView/ListView.stories.js +++ b/src/components/ListView/ListView.stories.js @@ -4,7 +4,7 @@ import { storiesOf } from '@storybook/react'; import { Row, Col } from '../Grid'; import { withKnobs, boolean } from '@storybook/addon-knobs'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; - +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Button } from '../Button'; import { DropdownKebab } from '../DropdownKebab'; import { Icon } from '../Icon'; @@ -18,7 +18,7 @@ stories.addDecorator( defaultTemplate({ title: 'ListView', documentationLink: - 'http://www.patternfly.org/pattern-library/content-views/list-view/' + DOCUMENTATION_URL.PATTERNFLY_ORG_CONTENT_VIEWS + 'list-view/' }) ); diff --git a/src/components/MenuItem/MenuItem.stories.js b/src/components/MenuItem/MenuItem.stories.js index 2a007e2b921..48f9e0a84e7 100644 --- a/src/components/MenuItem/MenuItem.stories.js +++ b/src/components/MenuItem/MenuItem.stories.js @@ -2,6 +2,7 @@ import { Dropdown } from 'react-bootstrap'; import React from 'react'; import { storiesOf } from '@storybook/react'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { MenuItem } from './index'; const stories = storiesOf('MenuItem', module); @@ -10,7 +11,11 @@ const description = (This component is based on React Bootstrap MenuItem component. This component represents a menu item in a dropdown. See{' '} - + React Bootstrap Docs {' '} for complete MenuItem component documentation. diff --git a/src/components/Modal/Modal.stories.js b/src/components/Modal/Modal.stories.js index dfe042b1bce..55ceb274dff 100644 --- a/src/components/Modal/Modal.stories.js +++ b/src/components/Modal/Modal.stories.js @@ -1,7 +1,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { withInfo } from '@storybook/addon-info'; -import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { inlineTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { MockModalManager, @@ -15,25 +16,6 @@ import { const stories = storiesOf('Modal Overlay', module); -const description = ( -
- This component is based on React Bootstrap Modal component. See{' '} - - React Bootstrap Docs - {' '} - for complete Modal component documentation. -
-); - -stories.addDecorator( - defaultTemplate({ - title: 'Modal Overlay', - documentationLink: - 'http://www.patternfly.org/pattern-library/forms-and-controls/modal-overlay/', - description: description - }) -); - stories.add( 'Basic example', withInfo({ @@ -45,7 +27,17 @@ stories.add({basicExampleSource}
)
- })(() => {aboutExampleSource}
)
- })(() => - This component is based on React Bootstrap Popover component. See{' '} - - React Bootstrap Docs - {' '} - for complete Popover component documentation. -
-); stories.addDecorator(withKnobs); stories.addDecorator( defaultTemplate({ title: 'Popover', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#popover', - description: description + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#popover', + reactBootstrapDocumentationLink: + DOCUMENTATION_URL.REACT_BOOTSTRAP_COMPONENT + 'popovers/' }) ); diff --git a/src/components/Spinner/Spinner.stories.js b/src/components/Spinner/Spinner.stories.js index 55e11d77d17..31374bf6e44 100644 --- a/src/components/Spinner/Spinner.stories.js +++ b/src/components/Spinner/Spinner.stories.js @@ -1,8 +1,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { withKnobs, select, boolean } from '@storybook/addon-knobs'; - import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Spinner } from './index'; const stories = storiesOf('Widgets', module); @@ -11,8 +11,7 @@ stories.addDecorator(withKnobs); stories.addDecorator( defaultTemplate({ title: 'Spinner', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#spinner' + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#spinner' }) ); diff --git a/src/components/ToastNotification/ToastNotification.stories.js b/src/components/ToastNotification/ToastNotification.stories.js index 81b42323d7d..db08c055e44 100644 --- a/src/components/ToastNotification/ToastNotification.stories.js +++ b/src/components/ToastNotification/ToastNotification.stories.js @@ -2,7 +2,8 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { withKnobs, text, select, boolean } from '@storybook/addon-knobs'; -import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; +import { inlineTemplate } from '../../../storybook/decorators/storyTemplates'; +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { Button } from '../Button'; import { DropdownKebab } from '../DropdownKebab'; import { MenuItem } from '../MenuItem'; @@ -14,13 +15,6 @@ import { const stories = storiesOf('ToastNotification', module); stories.addDecorator(withKnobs); -stories.addDecorator( - defaultTemplate({ - title: 'Toast Notification', - documentationLink: - 'http://www.patternfly.org/pattern-library/communication/toast-notifications/' - }) -); stories.addWithInfo( 'Toast Notification', @@ -36,7 +30,8 @@ stories.addWithInfo( const dismissEnabled = boolean('Dismiss', false); const menuEnabled = boolean('Menu', true); const actionEnabled = boolean('Action', true); - return ( + + let story = (- This component is based on React Bootstrap Tooltip component. See{' '} - - React Bootstrap Docs - {' '} - for complete Tooltip component documentation. -
-); stories.addDecorator(withKnobs); stories.addDecorator( defaultTemplate({ title: 'Tooltip', - documentationLink: - 'http://www.patternfly.org/pattern-library/widgets/#tooltip', - description: description + documentationLink: DOCUMENTATION_URL.PATTERNFLY_ORG_WIDGETS + '#tooltip', + reactBootstrapDocumentationLink: + DOCUMENTATION_URL.REACT_BOOTSTRAP_COMPONENT + 'tooltips/' }) ); diff --git a/src/components/Wizard/Wizard.stories.js b/src/components/Wizard/Wizard.stories.js index d39e0aa7f91..2321ef6476f 100644 --- a/src/components/Wizard/Wizard.stories.js +++ b/src/components/Wizard/Wizard.stories.js @@ -4,7 +4,7 @@ import { withInfo } from '@storybook/addon-info'; import { Row, Col } from 'react-bootstrap'; import { withKnobs } from '@storybook/addon-knobs'; import { defaultTemplate } from '../../../storybook/decorators/storyTemplates'; - +import { DOCUMENTATION_URL } from '../../../storybook/constants'; import { mockWizardItems } from './__mocks__/mockWizardItems'; import { @@ -28,7 +28,7 @@ stories.addDecorator( defaultTemplate({ title: 'Wizard', documentationLink: - 'http://www.patternfly.org/pattern-library/communication/wizard/#/overview' + DOCUMENTATION_URL.PATTERNFLY_ORG_COMMUNICATION + 'wizard/#/overview' }) ); diff --git a/storybook/constants.js b/storybook/constants.js new file mode 100644 index 00000000000..6acb5bf2f0f --- /dev/null +++ b/storybook/constants.js @@ -0,0 +1,16 @@ +export const BASE_URL = { + PATTERNFLY_ORG: 'http://www.patternfly.org/pattern-library/', + REACT_BOOTSTRAP: 'https://react-bootstrap.github.io/' +}; + +export const DOCUMENTATION_URL = { + PATTERNFLY_ORG_COMMUNICATION: BASE_URL.PATTERNFLY_ORG + 'communication/', + PATTERNFLY_ORG_WIDGETS: BASE_URL.PATTERNFLY_ORG + 'widgets/', + PATTERNFLY_ORG_NAVIGATION: BASE_URL.PATTERNFLY_ORG + 'navigation/', + PATTERNFLY_ORG_DATA_VISUALIZATION: + BASE_URL.PATTERNFLY_ORG + 'data-visualization/', + PATTERNFLY_ORG_FORMS: BASE_URL.PATTERNFLY_ORG + 'forms-and-controls/', + PATTERNFLY_ORG_CONTENT_VIEWS: BASE_URL.PATTERNFLY_ORG + 'content-views/', + REACT_BOOTSTRAP_COMPONENT: BASE_URL.REACT_BOOTSTRAP + 'components/', + REACT_BOOTSTRAP_LAYOUT: BASE_URL.REACT_BOOTSTRAP + 'layout/' +}; diff --git a/storybook/decorators/storyTemplates.js b/storybook/decorators/storyTemplates.js index 4c3f7229652..699ffb7335a 100644 --- a/storybook/decorators/storyTemplates.js +++ b/storybook/decorators/storyTemplates.js @@ -1,32 +1,86 @@ import React from 'react'; +import PropTypes from 'prop-types'; + +const patternflyDocumentationTemplate = documentationLink => { + if (documentationLink) { + return ( ++ This is an existing PatternFly component. For more details, refer to the + design documentation on patternfly.org. +
+ ); + } else + return ( ++ This pattern does not yet exist in{' '} + PatternFly. +
+ ); +}; + +const reactBootstrapDocumentationTemplate = (documentationLink, title) => { + return ( ++ This component is based on React Bootstrap {title} component. See{' '} + React Bootstrap Docs for complete {title}{' '} + component documentation. +
+ ); +}; export const defaultTemplate = config => story => (- This pattern does not yet exist in{' '} - PatternFly - . -
- )} - {/* Do not describe the pattern if a design is already documented - on patternfly.org */} - {config.documentationLink && ( -- This is an existing PatternFly component. For more details, refer to the - - {' '} - design documentation on patternfly.org - - . -
- )} + {patternflyDocumentationTemplate(config.documentationLink)} + {config.reactBootstrapDocumentationLink && + reactBootstrapDocumentationTemplate( + config.reactBootstrapDocumentationLink, + config.title + )} {config.description &&