-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dashboard: microapp v2 #999
Merged
Merged
Changes from all commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
c781ae7
reactive rmf api
koonpeng 64925ce
first test of new micro app architecture
koonpeng 8e703dd
migrate robots tab
koonpeng 0c31f4e
Merge remote-tracking branch 'origin/main' into koonpeng/microapp-v2
koonpeng c95b5ff
add container
koonpeng 2ed3ef4
docs
koonpeng d65ccaa
port tasks app
koonpeng c68874b
implement login route
koonpeng 41f216c
fix routes
koonpeng eaf6d54
cleanup
koonpeng d0dd12a
unload current tab when pending transition
koonpeng 3dcef2f
migrated app-base
koonpeng 2ed8628
managed to mock everything needed for appbar tests
koonpeng b046ada
hacky workaround for react-three-fiber and material conflict
koonpeng 23c1185
test passes
koonpeng ee58469
Merge remote-tracking branch 'origin/main' into koonpeng/microapp-v2
koonpeng d4dba00
add AlertManager and DeliveryAlertStore
koonpeng 9910a02
update schema
koonpeng 09dbfcc
Merge remote-tracking branch 'origin/main' into koonpeng/microapp-v2
koonpeng 932b04b
fix design mode
koonpeng cf84011
ported custom tabs
koonpeng 2421e0b
add key for micro app settings
koonpeng e432b93
fix onclose
koonpeng 6e3b5aa
fix tasks window
koonpeng f6d6f7c
fix importing app-config
koonpeng 1a7bf2d
add example
koonpeng 1d6fec8
add custom theme example
koonpeng 7d50262
some fixes to the theme
koonpeng 60fe3b9
add support for toggling dark mode
koonpeng c61a105
fix tests
koonpeng d371666
fix alert manager not getting some context
koonpeng 2bc496e
enable admin actions button
koonpeng File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8" /> | ||
<link rel="icon" href="%BASE_URL%favicon.ico" /> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<meta | ||
name="description" | ||
content="Web application that provides overall visualization and control over the RMF system" | ||
/> | ||
<link rel="shortcut icon" type="image/x-icon" href="%BASE_URL%favicon.ico" /> | ||
<title>RMF Dashboard</title> | ||
</head> | ||
<body> | ||
<div id="root"></div> | ||
<script type="module" src="/index.tsx"></script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
import '@fontsource/roboto/300.css'; | ||
import '@fontsource/roboto/400.css'; | ||
import '@fontsource/roboto/500.css'; | ||
import '@fontsource/roboto/700.css'; | ||
|
||
import { createTheme } from '@mui/material'; | ||
import ReactDOM from 'react-dom/client'; | ||
import { LocallyPersistentWorkspace, RmfDashboard } from 'rmf-dashboard/components'; | ||
import { MicroAppManifest } from 'rmf-dashboard/components/micro-app'; | ||
import doorsApp from 'rmf-dashboard/micro-apps/doors-app'; | ||
import liftsApp from 'rmf-dashboard/micro-apps/lifts-app'; | ||
import createMapApp from 'rmf-dashboard/micro-apps/map-app'; | ||
import robotMutexGroupsApp from 'rmf-dashboard/micro-apps/robot-mutex-groups-app'; | ||
import robotsApp from 'rmf-dashboard/micro-apps/robots-app'; | ||
import tasksApp from 'rmf-dashboard/micro-apps/tasks-app'; | ||
import StubAuthenticator from 'rmf-dashboard/services/stub-authenticator'; | ||
|
||
/* eslint-disable @typescript-eslint/no-unused-vars,@typescript-eslint/ban-ts-comment */ | ||
// Polar Night | ||
const nord0 = '#2e3440'; // @ts-ignore | ||
const nord1 = '#3b4252'; // @ts-ignore | ||
const nord2 = '#434c5e'; // @ts-ignore | ||
const nord3 = '#4c566a'; // @ts-ignore | ||
|
||
// Snow Storm | ||
const nord4 = '#d8dee9'; // @ts-ignore | ||
const nord5 = '#e5e9f0'; // @ts-ignore | ||
const nord6 = '#eceff4'; // @ts-ignore | ||
|
||
// Frost | ||
const nord7 = '#8fbcbb'; // @ts-ignore | ||
const nord8 = '#88c0d0'; // @ts-ignore | ||
const nord9 = '#81a1c1'; // @ts-ignore | ||
const nord10 = '#5e81ac'; // @ts-ignore | ||
|
||
// Aurora | ||
const nord11 = '#bf616a'; // @ts-ignore | ||
const nord12 = '#d08770'; // @ts-ignore | ||
const nord13 = '#ebcb8b'; // @ts-ignore | ||
const nord14 = '#a3be8c'; // @ts-ignore | ||
const nord15 = '#b48ead'; // @ts-ignore | ||
/* eslint-enable @typescript-eslint/no-unused-vars,@typescript-eslint/ban-ts-comment */ | ||
|
||
const nordTheme = createTheme({ | ||
palette: { | ||
mode: 'dark', | ||
primary: { | ||
main: nord8, | ||
contrastText: nord1, | ||
}, | ||
secondary: { | ||
main: nord9, | ||
}, | ||
text: { | ||
primary: nord4, | ||
secondary: nord6, | ||
disabled: nord5, | ||
}, | ||
error: { | ||
main: nord11, | ||
}, | ||
warning: { | ||
main: nord13, | ||
}, | ||
success: { | ||
main: nord14, | ||
}, | ||
background: { default: nord0, paper: nord1 }, | ||
}, | ||
}); | ||
|
||
const mapApp = createMapApp({ | ||
attributionPrefix: 'Open-RMF', | ||
defaultMapLevel: 'L1', | ||
defaultRobotZoom: 20, | ||
defaultZoom: 6, | ||
}); | ||
|
||
const appRegistry: MicroAppManifest[] = [ | ||
mapApp, | ||
doorsApp, | ||
liftsApp, | ||
robotsApp, | ||
robotMutexGroupsApp, | ||
tasksApp, | ||
]; | ||
|
||
export default function App() { | ||
return ( | ||
<RmfDashboard | ||
apiServerUrl="http://localhost:8000" | ||
trajectoryServerUrl="http://localhost:8006" | ||
authenticator={new StubAuthenticator()} | ||
helpLink="https://osrf.github.io/ros2multirobotbook/rmf-core.html" | ||
reportIssueLink="https://github.com/open-rmf/rmf-web/issues" | ||
themes={{ default: createTheme(), dark: nordTheme }} | ||
resources={{ fleets: {}, logos: { header: '/resources/defaultLogo.png' } }} | ||
tasks={{ | ||
allowedTasks: [ | ||
{ taskDefinitionId: 'patrol' }, | ||
{ taskDefinitionId: 'delivery' }, | ||
{ taskDefinitionId: 'compose-clean' }, | ||
{ taskDefinitionId: 'custom_compose' }, | ||
], | ||
pickupZones: [], | ||
cartIds: [], | ||
}} | ||
tabs={[ | ||
{ | ||
name: 'Example', | ||
route: '', | ||
element: ( | ||
<LocallyPersistentWorkspace | ||
defaultWindows={[]} | ||
allowDesignMode | ||
appRegistry={appRegistry} | ||
storageKey="custom-workspace" | ||
/> | ||
), | ||
}, | ||
]} | ||
/> | ||
); | ||
} | ||
|
||
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); | ||
root.render(<App />); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8" /> | ||
<link rel="icon" href="%BASE_URL%favicon.ico" /> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<meta | ||
name="description" | ||
content="Web application that provides overall visualization and control over the RMF system" | ||
/> | ||
<link rel="shortcut icon" type="image/x-icon" href="%BASE_URL%favicon.ico" /> | ||
<title>RMF Dashboard</title> | ||
</head> | ||
<body> | ||
<div id="root"></div> | ||
<script type="module" src="/index.tsx"></script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
import '@fontsource/roboto/300.css'; | ||
import '@fontsource/roboto/400.css'; | ||
import '@fontsource/roboto/500.css'; | ||
import '@fontsource/roboto/700.css'; | ||
|
||
import ReactDOM from 'react-dom/client'; | ||
import { | ||
InitialWindow, | ||
LocallyPersistentWorkspace, | ||
RmfDashboard, | ||
Workspace, | ||
} from 'rmf-dashboard/components'; | ||
import { MicroAppManifest } from 'rmf-dashboard/components/micro-app'; | ||
import doorsApp from 'rmf-dashboard/micro-apps/doors-app'; | ||
import liftsApp from 'rmf-dashboard/micro-apps/lifts-app'; | ||
import createMapApp from 'rmf-dashboard/micro-apps/map-app'; | ||
import robotMutexGroupsApp from 'rmf-dashboard/micro-apps/robot-mutex-groups-app'; | ||
import robotsApp from 'rmf-dashboard/micro-apps/robots-app'; | ||
import tasksApp from 'rmf-dashboard/micro-apps/tasks-app'; | ||
import StubAuthenticator from 'rmf-dashboard/services/stub-authenticator'; | ||
|
||
const mapApp = createMapApp({ | ||
attributionPrefix: 'Open-RMF', | ||
defaultMapLevel: 'L1', | ||
defaultRobotZoom: 20, | ||
defaultZoom: 6, | ||
}); | ||
|
||
const appRegistry: MicroAppManifest[] = [ | ||
mapApp, | ||
doorsApp, | ||
liftsApp, | ||
robotsApp, | ||
robotMutexGroupsApp, | ||
tasksApp, | ||
]; | ||
|
||
const homeWorkspace: InitialWindow[] = [ | ||
{ | ||
layout: { x: 0, y: 0, w: 12, h: 6 }, | ||
microApp: mapApp, | ||
}, | ||
]; | ||
|
||
const robotsWorkspace: InitialWindow[] = [ | ||
{ | ||
layout: { x: 0, y: 0, w: 7, h: 4 }, | ||
microApp: robotsApp, | ||
}, | ||
{ layout: { x: 8, y: 0, w: 5, h: 8 }, microApp: mapApp }, | ||
{ layout: { x: 0, y: 0, w: 7, h: 4 }, microApp: doorsApp }, | ||
{ layout: { x: 0, y: 0, w: 7, h: 4 }, microApp: liftsApp }, | ||
{ layout: { x: 8, y: 0, w: 5, h: 4 }, microApp: robotMutexGroupsApp }, | ||
]; | ||
|
||
const tasksWorkspace: InitialWindow[] = [ | ||
{ layout: { x: 0, y: 0, w: 7, h: 8 }, microApp: tasksApp }, | ||
{ layout: { x: 8, y: 0, w: 5, h: 8 }, microApp: mapApp }, | ||
]; | ||
|
||
export default function App() { | ||
return ( | ||
<RmfDashboard | ||
apiServerUrl="http://localhost:8000" | ||
trajectoryServerUrl="http://localhost:8006" | ||
authenticator={new StubAuthenticator()} | ||
helpLink="https://osrf.github.io/ros2multirobotbook/rmf-core.html" | ||
reportIssueLink="https://github.com/open-rmf/rmf-web/issues" | ||
resources={{ fleets: {}, logos: { header: '/resources/defaultLogo.png' } }} | ||
tasks={{ | ||
allowedTasks: [ | ||
{ taskDefinitionId: 'patrol' }, | ||
{ taskDefinitionId: 'delivery' }, | ||
{ taskDefinitionId: 'compose-clean' }, | ||
{ taskDefinitionId: 'custom_compose' }, | ||
], | ||
pickupZones: [], | ||
cartIds: [], | ||
}} | ||
tabs={[ | ||
{ | ||
name: 'Map', | ||
route: '', | ||
element: <Workspace initialWindows={homeWorkspace} />, | ||
}, | ||
{ | ||
name: 'Robots', | ||
route: 'robots', | ||
element: <Workspace initialWindows={robotsWorkspace} />, | ||
}, | ||
{ | ||
name: 'Tasks', | ||
route: 'tasks', | ||
element: <Workspace initialWindows={tasksWorkspace} />, | ||
}, | ||
{ | ||
name: 'Custom', | ||
route: 'custom', | ||
element: ( | ||
<LocallyPersistentWorkspace | ||
defaultWindows={[]} | ||
allowDesignMode | ||
appRegistry={appRegistry} | ||
storageKey="custom-workspace" | ||
/> | ||
), | ||
}, | ||
]} | ||
/> | ||
); | ||
} | ||
|
||
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); | ||
root.render(<App />); |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding this in, should we add some comments about this patch as well?
I'm not very familiar with patches in this manner, the
.patch
file was written by you manually, is that right? Or was it recommended somewhere?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was a known problem with mui and three-fiber, the only solution I found is to do a hacky patch.