import React, { Fragment, PureComponent } from 'react'; import { Broadcast, Subscriber } from 'joy-react-broadcast'; import { Link as BaseLink } from 'react-router-dom'; import Flex, { FlexItem } from 'styled-flex-component'; import { Margin, Padding } from 'styled-components-spacing'; import { Row, Col } from 'joyent-react-styled-flexboxgrid'; import styled from 'styled-components'; import is from 'styled-is'; import remcalc from 'remcalc'; import { Card as BaseCard, CardOutlet, Divider, H3, P, ArrowIcon } from 'joyent-ui-toolkit'; import { Saved as SavedIcon, Error as ErrorIcon } from './status-icon'; const Card = styled(BaseCard)` ${is('error')` border: ${remcalc(1)} solid ${props => props.theme.redDark}; `}; ${is('expanded')` box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.1); `}; }`; const Link = styled(BaseLink)` color: ${props => props.theme.primary}; :active { color: #436275; } `; export const Header = ({ icon = null, children }) => ( {({ namespace }) => ( {({ expanded, optional, saved, name, isValid }) => ( {icon}

{children}

{/* improve this */} {optional ? (

Optional

) : null}
{expanded ? 'Save and Collapse' : 'Edit'} {!expanded && !isValid ? ( ) : null}
{expanded || saved ? ( ) : null}
)}
)}
); export const Description = ({ href = '', children }) => ( {({ expanded }) => expanded ? (

{children} {href ? Read the docs : null}

) : null }
); export const Preview = ({ children }) => ( {({ expanded, saved }) => !expanded && saved ? {children} : null } ); export const Outlet = ({ children }) => ( {({ namespace }) => ( {({ expanded, next }) => expanded ? children({ next: `/${namespace}/${next}` }) : null } )} ); export default class Step extends PureComponent { getSnapshotBeforeUpdate(prevProps) { const { expanded: wasExpanded } = prevProps; const { onDefocus, getValue, expanded } = this.props; if (!onDefocus || !getValue) { return; } if (wasExpanded && !expanded) { onDefocus(getValue()); } } render() { const { expanded = false, optional = false, saved = false, next = '', name = '', isValid = true, children } = this.props; return ( {children} ); } } export { StatusIcon } from './status-icon'; export { Saved as SavedIcon } from './status-icon'; export { Error as ErrorIcon } from './status-icon'; export { default as Provider } from './provider';