|
1 | | -import React from 'react'; |
| 1 | +import React, { useMemo } from 'react'; |
2 | 2 | import { useTranslation } from 'react-i18next'; |
3 | | -import { Outlet, useParams } from 'react-router-dom'; |
| 3 | +import { Outlet, useMatch, useParams } from 'react-router-dom'; |
4 | 4 |
|
5 | | -import { ContentLayout, DetailsHeader, NavigateLink } from 'components'; |
| 5 | +import { ContentLayout, DetailsHeader, Tabs } from 'components'; |
6 | 6 |
|
7 | 7 | import { ROUTES } from 'routes'; |
8 | 8 |
|
| 9 | +import styles from './styles.module.scss'; |
| 10 | + |
9 | 11 | export const ProjectDetails: React.FC = () => { |
10 | 12 | const params = useParams(); |
11 | 13 | const paramProjectName = params.projectName ?? ''; |
12 | 14 | const { t } = useTranslation(); |
13 | 15 |
|
| 16 | + const matchSettings = useMatch(ROUTES.PROJECT.DETAILS.SETTINGS.FORMAT(paramProjectName)); |
| 17 | + const matchEvents = useMatch(ROUTES.PROJECT.DETAILS.EVENTS.FORMAT(paramProjectName)); |
| 18 | + |
| 19 | + const tabs: { |
| 20 | + label: string; |
| 21 | + id: string; |
| 22 | + href: string; |
| 23 | + }[] = [ |
| 24 | + { |
| 25 | + label: t('projects.settings'), |
| 26 | + id: 'settings', |
| 27 | + href: ROUTES.PROJECT.DETAILS.SETTINGS.FORMAT(paramProjectName), |
| 28 | + }, |
| 29 | + { |
| 30 | + label: t('projects.events'), |
| 31 | + id: 'events', |
| 32 | + href: ROUTES.PROJECT.DETAILS.EVENTS.FORMAT(paramProjectName), |
| 33 | + }, |
| 34 | + ].filter(Boolean); |
| 35 | + |
| 36 | + const showTabs = useMemo<boolean>(() => { |
| 37 | + return Boolean(matchSettings) || Boolean(matchEvents); |
| 38 | + }, [matchSettings, matchEvents]); |
| 39 | + |
14 | 40 | return ( |
15 | | - <ContentLayout |
16 | | - header={ |
17 | | - <DetailsHeader |
18 | | - title={paramProjectName} |
19 | | - actionButtons={ |
20 | | - <NavigateLink href={ROUTES.EVENTS.LIST + `?within_projects=${paramProjectName}`}> |
21 | | - {t('projects.events')} |
22 | | - </NavigateLink> |
23 | | - } |
24 | | - /> |
25 | | - } |
26 | | - > |
27 | | - <Outlet /> |
28 | | - </ContentLayout> |
| 41 | + <div className={styles.page}> |
| 42 | + <ContentLayout header={<DetailsHeader title={paramProjectName} />}> |
| 43 | + {showTabs && <Tabs withNavigation tabs={tabs} />} |
| 44 | + |
| 45 | + <Outlet /> |
| 46 | + </ContentLayout> |
| 47 | + </div> |
29 | 48 | ); |
30 | 49 | }; |
0 commit comments