11import React from 'react' ;
22import { useTranslation } from 'react-i18next' ;
3- import { useNavigate , useParams } from 'react-router-dom' ;
4- import { format } from 'date-fns' ;
3+ import { Outlet , useNavigate , useParams } from 'react-router-dom' ;
54
6- import {
7- Box ,
8- Button ,
9- ColumnLayout ,
10- Container ,
11- ContentLayout ,
12- DetailsHeader ,
13- Header ,
14- Loader ,
15- NavigateLink ,
16- StatusIndicator ,
17- } from 'components' ;
5+ import { Button , ContentLayout , DetailsHeader , Tabs } from 'components' ;
6+
7+ enum CodeTab {
8+ Details = 'details' ,
9+ Events = 'events' ,
10+ }
1811
19- import { DATE_TIME_FORMAT } from 'consts' ;
2012import { useBreadcrumbs } from 'hooks' ;
21- import { getFleetInstancesLinkText , getFleetPrice , getFleetStatusIconType } from 'libs/fleet' ;
2213import { ROUTES } from 'routes' ;
2314import { useGetFleetDetailsQuery } from 'services/fleet' ;
2415
2516import { useDeleteFleet } from '../List/useDeleteFleet' ;
2617
18+ import styles from './styles.module.scss' ;
19+
2720export const FleetDetails : React . FC = ( ) => {
2821 const { t } = useTranslation ( ) ;
2922 const params = useParams ( ) ;
@@ -33,7 +26,7 @@ export const FleetDetails: React.FC = () => {
3326
3427 const { deleteFleets, isDeleting } = useDeleteFleet ( ) ;
3528
36- const { data, isLoading } = useGetFleetDetailsQuery (
29+ const { data } = useGetFleetDetailsQuery (
3730 {
3831 projectName : paramProjectName ,
3932 fleetId : paramFleetId ,
@@ -72,87 +65,42 @@ export const FleetDetails: React.FC = () => {
7265 . catch ( console . log ) ;
7366 } ;
7467
75- const renderPrice = ( fleet : IFleet ) => {
76- const price = getFleetPrice ( fleet ) ;
77-
78- if ( typeof price === 'number' ) return `$${ price } ` ;
79-
80- return '-' ;
81- } ;
82-
8368 const isDisabledDeleteButton = ! data || isDeleting ;
8469
8570 return (
86- < ContentLayout
87- header = {
88- < DetailsHeader
89- title = { data ?. name }
90- actionButtons = {
91- < >
92- < Button onClick = { deleteClickHandle } disabled = { isDisabledDeleteButton } >
93- { t ( 'common.delete' ) }
94- </ Button >
95- </ >
96- }
71+ < div className = { styles . page } >
72+ < ContentLayout
73+ header = {
74+ < DetailsHeader
75+ title = { data ?. name }
76+ actionButtons = {
77+ < >
78+ < Button onClick = { deleteClickHandle } disabled = { isDisabledDeleteButton } >
79+ { t ( 'common.delete' ) }
80+ </ Button >
81+ </ >
82+ }
83+ />
84+ }
85+ >
86+ < Tabs
87+ withNavigation
88+ tabs = { [
89+ {
90+ label : 'Details' ,
91+ id : CodeTab . Details ,
92+ href : ROUTES . FLEETS . DETAILS . FORMAT ( paramProjectName , paramFleetId ) ,
93+ } ,
94+ {
95+ label : 'Events' ,
96+ id : CodeTab . Events ,
97+ href : ROUTES . FLEETS . DETAILS . EVENTS . FORMAT ( paramProjectName , paramFleetId ) ,
98+ } ,
99+ ] }
97100 />
98- }
99- >
100- { isLoading && (
101- < Container >
102- < Loader />
103- </ Container >
104- ) }
105-
106- { data && (
107- < Container header = { < Header variant = "h2" > { t ( 'common.general' ) } </ Header > } >
108- < ColumnLayout columns = { 4 } variant = "text-grid" >
109- < div >
110- < Box variant = "awsui-key-label" > { t ( 'fleets.fleet' ) } </ Box >
111- < div > { data . name } </ div >
112- </ div >
113-
114- < div >
115- < Box variant = "awsui-key-label" > { t ( 'fleets.instances.status' ) } </ Box >
116-
117- < div >
118- < StatusIndicator type = { getFleetStatusIconType ( data . status ) } >
119- { t ( `fleets.statuses.${ data . status } ` ) }
120- </ StatusIndicator >
121- </ div >
122- </ div >
123-
124- < div >
125- < Box variant = "awsui-key-label" > { t ( 'fleets.instances.project' ) } </ Box >
126-
127- < div >
128- < NavigateLink href = { ROUTES . PROJECT . DETAILS . FORMAT ( data . project_name ) } >
129- { data . project_name }
130- </ NavigateLink >
131- </ div >
132- </ div >
133-
134- < div >
135- < Box variant = "awsui-key-label" > { t ( 'fleets.instances.title' ) } </ Box >
136-
137- < div >
138- < NavigateLink href = { ROUTES . INSTANCES . LIST + `?fleet_ids=${ data . id } ` } >
139- { getFleetInstancesLinkText ( data ) }
140- </ NavigateLink >
141- </ div >
142- </ div >
143-
144- < div >
145- < Box variant = "awsui-key-label" > { t ( 'fleets.instances.started' ) } </ Box >
146- < div > { format ( new Date ( data . created_at ) , DATE_TIME_FORMAT ) } </ div >
147- </ div >
148101
149- < div >
150- < Box variant = "awsui-key-label" > { t ( 'fleets.instances.price' ) } </ Box >
151- < div > { renderPrice ( data ) } </ div >
152- </ div >
153- </ ColumnLayout >
154- </ Container >
155- ) }
156- </ ContentLayout >
102+ < Outlet />
103+ </ ContentLayout >
104+ </ div >
157105 ) ;
158106} ;
0 commit comments