Skip to content

Instantly share code, notes, and snippets.

@ndelitski
Created November 21, 2017 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ndelitski/28df7be1870b73cf84c425c59eb423f8 to your computer and use it in GitHub Desktop.
Save ndelitski/28df7be1870b73cf84c425c59eb423f8 to your computer and use it in GitHub Desktop.
import React from 'react'
import { compose, branch, renderComponent } from 'recompose'
import {
Breadcrumbs,
BreadcrumbsItemLink,
BreadcrumbsItem,
} from 'components/common/Breadcrumbs'
import { connect } from 'react-redux'
import createRouteUrl from 'utils/createRouteUrl'
import { userRoleSelector, isLoggedInSelector } from 'flux/selectors/auth'
import {
organizationIdSelector,
organizationNameSelector,
applicationIdSelector,
applicationStatusSelector,
} from './selectors'
import {
ROUTES,
APPLICATION_STATUS_TO_NAVIGATION_TITLE,
APPLICATION_ROLE,
} from '../../../constants'
const AnonymousBreadcrumbs = props =>
<Breadcrumbs {...props}>
<BreadcrumbsItem>Grant application</BreadcrumbsItem>
</Breadcrumbs>
const FoundationBreadcrumbs = ({
applicationStatus,
organizationName,
organizationId,
...props
}) =>
<Breadcrumbs {...props}>
<BreadcrumbsItemLink
to={createRouteUrl(ROUTES.inbox.root, {}, { status: applicationStatus })}
>
{APPLICATION_STATUS_TO_NAVIGATION_TITLE[applicationStatus]}
</BreadcrumbsItemLink>
{organizationName &&
<BreadcrumbsItemLink
to={createRouteUrl(ROUTES.organization.idRoot, {
id: organizationId,
})}
>
{organizationName}
</BreadcrumbsItemLink>}
</Breadcrumbs>
const mapPropsToFoundation = state => ({
applicationStatus: applicationStatusSelector(state),
organizationId: organizationIdSelector(state),
organizationName: organizationNameSelector(state),
})
const mapPropsToApplicant = state => ({
applicationId: applicationIdSelector(state),
})
const ApplicantBreadcrumbs = ({ applicationId, ...props }) =>
<Breadcrumbs {...props}>
<BreadcrumbsItemLink
to={createRouteUrl(ROUTES.application.idRoot, {
id: applicationId,
})}
>
Grant application
</BreadcrumbsItemLink>
</Breadcrumbs>
export default compose(
connect(state => ({
isLoggedIn: isLoggedInSelector(state),
userRole: userRoleSelector(state),
})),
branch(
props => props.isLoggedIn && props.userRole === APPLICATION_ROLE.foundation,
renderComponent(connect(mapPropsToFoundation)(FoundationBreadcrumbs))
),
branch(
props => props.isLoggedIn && props.userRole === APPLICATION_ROLE.applicant,
renderComponent(connect(mapPropsToApplicant)(ApplicantBreadcrumbs))
)
)(AnonymousBreadcrumbs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment