From 2fb374b082a56a235a0e8bdec275b744c3e46df6 Mon Sep 17 00:00:00 2001 From: ireic Date: Fri, 27 Dec 2019 16:40:40 +0100 Subject: [PATCH] Extracted breadcrumbs into a shared component, added it to project settings page --- api/src/database/seeds/guestUser.ts | 14 +++++---- client/src/Project/Board/Header/Styles.js | 14 +-------- client/src/Project/Board/Header/index.jsx | 29 ++++--------------- client/src/Project/Board/index.jsx | 4 ++- client/src/Project/ProjectSettings/Styles.js | 3 +- client/src/Project/ProjectSettings/index.jsx | 3 +- client/src/Project/Sidebar/index.jsx | 6 ++-- .../shared/components/Breadcrumbs/Styles.js | 15 ++++++++++ .../shared/components/Breadcrumbs/index.jsx | 23 +++++++++++++++ client/src/shared/components/index.js | 1 + 10 files changed, 65 insertions(+), 47 deletions(-) create mode 100644 client/src/shared/components/Breadcrumbs/Styles.js create mode 100644 client/src/shared/components/Breadcrumbs/index.jsx diff --git a/api/src/database/seeds/guestUser.ts b/api/src/database/seeds/guestUser.ts index 33bc599..b67a7de 100644 --- a/api/src/database/seeds/guestUser.ts +++ b/api/src/database/seeds/guestUser.ts @@ -1,4 +1,3 @@ -import faker from 'faker'; import { sample } from 'lodash'; import { Comment, Issue, Project, User } from 'entities'; @@ -9,14 +8,19 @@ import { createEntity } from 'utils/typeorm'; const seedUsers = (): Promise => { const users = [ createEntity(User, { - email: 'greg@jira.guest', - name: 'Greg the Egg', - avatarUrl: faker.image.avatar(), + email: 'gaben@jira.guest', + name: 'Lord Gaben', + avatarUrl: 'https://i.ibb.co/6RJ5hq6/gaben.jpg', }), createEntity(User, { email: 'yoda@jira.guest', name: 'Baby Yoda', - avatarUrl: faker.image.avatar(), + avatarUrl: 'https://i.ibb.co/6n0hLML/baby-yoda.jpg', + }), + createEntity(User, { + email: 'rick@jira.guest', + name: 'Pickle Rick', + avatarUrl: 'https://i.ibb.co/7JM1P2r/picke-rick.jpg', }), ]; return Promise.all(users); diff --git a/client/src/Project/Board/Header/Styles.js b/client/src/Project/Board/Header/Styles.js index 32f036f..f0d006a 100644 --- a/client/src/Project/Board/Header/Styles.js +++ b/client/src/Project/Board/Header/Styles.js @@ -1,18 +1,6 @@ import styled from 'styled-components'; -import { color, font } from 'shared/utils/styles'; - -export const Breadcrumbs = styled.div` - color: ${color.textMedium}; - ${font.size(15)}; -`; - -export const Divider = styled.span` - position: relative; - top: 2px; - margin: 0 10px; - ${font.size(18)}; -`; +import { font } from 'shared/utils/styles'; export const Header = styled.div` margin-top: 6px; diff --git a/client/src/Project/Board/Header/index.jsx b/client/src/Project/Board/Header/index.jsx index 7416dc5..5fae1e8 100644 --- a/client/src/Project/Board/Header/index.jsx +++ b/client/src/Project/Board/Header/index.jsx @@ -1,31 +1,14 @@ import React from 'react'; -import PropTypes from 'prop-types'; import { CopyLinkButton } from 'shared/components'; -import { Breadcrumbs, Divider, Header, BoardName } from './Styles'; +import { Header, BoardName } from './Styles'; -const propTypes = { - projectName: PropTypes.string.isRequired, -}; - -const ProjectBoardHeader = ({ projectName }) => ( - <> - - Projects - / - {projectName} - / - Kanban Board - - -
- Kanban board - -
- +const ProjectBoardHeader = () => ( +
+ Kanban board + +
); -ProjectBoardHeader.propTypes = propTypes; - export default ProjectBoardHeader; diff --git a/client/src/Project/Board/index.jsx b/client/src/Project/Board/index.jsx index 0ec1fbf..88ba5a5 100644 --- a/client/src/Project/Board/index.jsx +++ b/client/src/Project/Board/index.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import useMergeState from 'shared/hooks/mergeState'; +import { Breadcrumbs } from 'shared/components'; import Header from './Header'; import Filters from './Filters'; @@ -24,7 +25,8 @@ const ProjectBoard = ({ project, updateLocalProjectIssues }) => { return ( <> -
+ +
{ > + Project Details diff --git a/client/src/Project/Sidebar/index.jsx b/client/src/Project/Sidebar/index.jsx index 4cadcd6..9215cdb 100644 --- a/client/src/Project/Sidebar/index.jsx +++ b/client/src/Project/Sidebar/index.jsx @@ -25,7 +25,9 @@ const ProjectSidebar = ({ project }) => { const match = useRouteMatch(); const renderLinkItem = (text, iconType, path) => { - const linkItemProps = path + const isImplemented = !!path; + + const linkItemProps = isImplemented ? { as: NavLink, exact: true, to: `${match.path}${path}` } : { as: 'div' }; @@ -33,7 +35,7 @@ const ProjectSidebar = ({ project }) => { {text} - {!path && Not implemented} + {!isImplemented && Not implemented} ); }; diff --git a/client/src/shared/components/Breadcrumbs/Styles.js b/client/src/shared/components/Breadcrumbs/Styles.js new file mode 100644 index 0000000..73720a7 --- /dev/null +++ b/client/src/shared/components/Breadcrumbs/Styles.js @@ -0,0 +1,15 @@ +import styled from 'styled-components'; + +import { color, font } from 'shared/utils/styles'; + +export const Container = styled.div` + color: ${color.textMedium}; + ${font.size(15)}; +`; + +export const Divider = styled.span` + position: relative; + top: 2px; + margin: 0 10px; + ${font.size(18)}; +`; diff --git a/client/src/shared/components/Breadcrumbs/index.jsx b/client/src/shared/components/Breadcrumbs/index.jsx new file mode 100644 index 0000000..c88c6fa --- /dev/null +++ b/client/src/shared/components/Breadcrumbs/index.jsx @@ -0,0 +1,23 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; + +import { Container, Divider } from './Styles'; + +const propTypes = { + items: PropTypes.array.isRequired, +}; + +const Breadcrumbs = ({ items }) => ( + + {items.map((item, index) => ( + + {index !== 0 && /} + {item} + + ))} + +); + +Breadcrumbs.propTypes = propTypes; + +export default Breadcrumbs; diff --git a/client/src/shared/components/index.js b/client/src/shared/components/index.js index da41094..2871fe7 100644 --- a/client/src/shared/components/index.js +++ b/client/src/shared/components/index.js @@ -1,6 +1,7 @@ export { default as AboutTooltip } from './AboutTooltip'; export { default as Avatar } from './Avatar'; export { default as Button } from './Button'; +export { default as Breadcrumbs } from './Breadcrumbs'; export { default as ConfirmModal } from './ConfirmModal'; export { default as CopyLinkButton } from './CopyLinkButton'; export { default as DatePicker } from './DatePicker';