11import React from 'react' ;
22
3- import {
4- Nav ,
5- NavList
6- } from '@patternfly/react-core' ;
73import EventEmitter from 'wolfy87-eventemitter' ;
84import ElementWrapper from './components/elementWrapper' ;
95
10- import { NavLink , Route , Routes } from 'react-router-dom' ;
6+ import { Route , Routes } from 'react-router-dom' ;
117
128import { Dashboard } from './dashboard' ;
139import { ReportBuilder } from './report-builder' ;
1410import { RunList } from './run-list' ;
1511import { Run } from './run' ;
1612import { ResultList } from './result-list' ;
1713import { Result } from './result' ;
18- import { Settings } from './settings' ;
1914import { View , IbutsuPage } from './components' ;
20- import { HttpClient } from './services/http ' ;
21- import { getActiveProject } from './utilities' ;
15+ import { IbutsuContext } from './services/context ' ;
16+
2217import './app.css' ;
2318
2419
2520export class App extends React . Component {
21+ static contextType = IbutsuContext ;
2622 constructor ( props ) {
2723 super ( props ) ;
2824 this . eventEmitter = new EventEmitter ( ) ;
@@ -33,79 +29,78 @@ export class App extends React.Component {
3329 searchValue : '' ,
3430 views : [ ]
3531 } ;
36- this . eventEmitter . on ( 'projectChange' , ( ) => {
37- this . getViews ( ) ;
38- } ) ;
39- }
40-
41- getViews ( ) {
42- let params = { 'filter' : [ 'type=view' , 'navigable=true' ] } ;
43- let project = getActiveProject ( ) ;
44- if ( project ) {
45- params [ 'filter' ] . push ( 'project_id=' + project . id ) ;
46- }
47- HttpClient . get ( [ Settings . serverUrl , 'widget-config' ] , params )
48- . then ( response => HttpClient . handleResponse ( response ) )
49- . then ( data => {
50- data . widgets . forEach ( widget => {
51- if ( project ) {
52- widget . params [ 'project' ] = project . id ;
53- }
54- else {
55- delete widget . params [ 'project' ] ;
56- }
57- } ) ;
58- this . setState ( { views : data . widgets } ) ;
59- } ) ;
6032 }
6133
6234 componentDidMount ( ) {
63- this . getViews ( ) ;
6435 }
6536
6637 render ( ) {
6738 document . title = 'Ibutsu' ;
68- const { views } = this . state ;
69- const navigation = (
70- < Nav onSelect = { this . onNavSelect } theme = "dark" aria-label = "Nav" >
71- < NavList >
72- < li className = "pf-v5-c-nav__item" >
73- < NavLink to = "/" className = "pf-v5-c-nav__link" > Dashboard</ NavLink >
74- </ li >
75- < li className = "pf-v5-c-nav__item" >
76- < NavLink to = "/runs" className = "pf-v5-c-nav__link" > Runs</ NavLink >
77- </ li >
78- < li className = "pf-v5-c-nav__item" >
79- < NavLink to = "/results" className = "pf-v5-c-nav__link" > Test Results</ NavLink >
80- </ li >
81- < li className = "pf-v5-c-nav__item" >
82- < NavLink to = "/reports" className = "pf-v5-c-nav__link" > Report Builder</ NavLink >
83- </ li >
84- { views && views . map ( view => (
85- view . widget !== "jenkins-analysis-view" && (
86- < li className = "pf-v5-c-nav__item" key = { view . id } >
87- < NavLink to = { `/view/${ view . id } ` } className = "pf-v5-c-nav__link" > { view . title } </ NavLink >
88- </ li >
89- )
90- ) ) }
91- </ NavList >
92- </ Nav >
93- ) ;
94-
9539 return (
96- < React . Fragment >
97- < IbutsuPage eventEmitter = { this . eventEmitter } navigation = { navigation } >
98- < Routes >
99- < Route path = "*" element = { < Dashboard eventEmitter = { this . eventEmitter } /> } />
100- < Route path = "/runs" element = { < ElementWrapper routeElement = { RunList } eventEmitter = { this . eventEmitter } /> } />
101- < Route path = "/results" element = { < ElementWrapper routeElement = { ResultList } eventEmitter = { this . eventEmitter } /> } />
102- < Route path = "/reports" element = { < ElementWrapper routeElement = { ReportBuilder } eventEmitter = { this . eventEmitter } /> } />
103- < Route path = "/runs/:id" element = { < ElementWrapper routeElement = { Run } /> } />
104- < Route path = "/results/:id" element = { < ElementWrapper routeElement = { Result } /> } />
105- < Route path = "/view/:id" element = { < ElementWrapper routeElement = { View } /> } />
106- </ Routes >
107- </ IbutsuPage >
108- </ React . Fragment >
40+ < Routes >
41+ < Route
42+ path = ""
43+ element = { < IbutsuPage eventEmitter = { this . eventEmitter } /> }
44+ >
45+
46+ { /* Nested project routes */ }
47+ < Route
48+ path = ":project_id/dashboard"
49+ element = {
50+ < ElementWrapper routeElement = { Dashboard } eventEmitter = { this . eventEmitter } />
51+ }
52+ />
53+ < Route
54+ path = ":project_id/dashboard/:dashboard_id"
55+ element = {
56+ < ElementWrapper routeElement = { Dashboard } eventEmitter = { this . eventEmitter } />
57+ }
58+ />
59+ < Route
60+ path = ":project_id/runs"
61+ element = {
62+ < ElementWrapper routeElement = { RunList } eventEmitter = { this . eventEmitter } />
63+ }
64+ />
65+ < Route
66+ path = ":project_id/runs/:run_id"
67+ element = { < ElementWrapper routeElement = { Run } /> }
68+ />
69+ < Route
70+ path = ":project_id/results"
71+ element = { < ElementWrapper routeElement = { ResultList } eventEmitter = { this . eventEmitter } /> }
72+ />
73+ < Route
74+ path = ":project_id/results/:result_id"
75+ element = { < ElementWrapper routeElement = { Result } /> }
76+ />
77+ < Route
78+ path = ":project_id/reports"
79+ element = { < ElementWrapper routeElement = { ReportBuilder } eventEmitter = { this . eventEmitter } /> }
80+ />
81+ < Route
82+ path = ":project_id/view/:view_id"
83+ element = { < ElementWrapper routeElement = { View } /> }
84+ />
85+ { /* <Route path="*" element={<Navigate to="project" replace />} /> */ }
86+ </ Route >
87+
88+ { /* Nested Portal routes */ }
89+ { /* <Route
90+ path="/portal/*"
91+ element={<ElementWrapper routeElement={Dashboard} eventEmitter={this.eventEmitter} />}
92+ />
93+ <Route
94+ path="/portal/:portal_id"
95+ element={<ElementWrapper routeElement={Dashboard} eventEmitter={this.eventEmitter} />}
96+ />
97+ <Route
98+ path="/portal/:portal_id/dashboard/:dashboard_id"
99+ element={<ElementWrapper routeElement={Dashboard} eventEmitter={this.eventEmitter} />}
100+ /> */ }
101+
102+
103+ </ Routes >
109104 ) ;
110105 }
111106}
0 commit comments