diff --git a/ui/src/App.jsx b/ui/src/App.jsx
index 65afbc5..2740847 100644
--- a/ui/src/App.jsx
+++ b/ui/src/App.jsx
@@ -18,7 +18,9 @@ export default function App() {
const [authed, setAuthed] = useState(false)
const [loginUser, setLoginUser] = useState('')
const [sources, setSources] = useState([])
+ const [stacks, setStacks] = useState([])
const [source, setSource] = useState(() => localStorage.getItem('selectedSource') || '')
+ const [selectedStack, setSelectedStack] = useState(null)
const [sidebarExpanded, setSidebarExpanded] = useState(() => localStorage.getItem('df_sidebar') !== 'collapsed')
// Sets of names whose dfv view is out of sync with current definitions
const [staleSources, setStaleSources] = useState(new Set())
@@ -28,14 +30,14 @@ export default function App() {
async function handleLogin(user, pass) {
setCredentials(user, pass)
- await api.getSources().then(s => {
- sessionStorage.setItem('df_user', user)
- sessionStorage.setItem('df_pass', pass)
- setSources(s)
- if (!source && s.length > 0) setSource(s[0].name)
- setAuthed(true)
- setLoginUser(user)
- })
+ const s = await api.getSources()
+ sessionStorage.setItem('df_user', user)
+ sessionStorage.setItem('df_pass', pass)
+ setSources(s)
+ if (!source && s.length > 0) setSource(s[0].name)
+ setAuthed(true)
+ setLoginUser(user)
+ api.getStacks().then(setStacks).catch(() => {})
}
function handleLogout() {
@@ -45,11 +47,17 @@ export default function App() {
setAuthed(false)
setLoginUser('')
setSources([])
+ setStacks([])
+ setSelectedStack(null)
setStaleSources(new Set())
setStaleStacks(new Set())
setReprocessSources(new Set())
}
+ function refreshStacks() {
+ api.getStacks().then(setStacks).catch(() => {})
+ }
+
// Load initial stale state from DB once on login
useEffect(() => {
if (!authed) return
@@ -128,7 +136,10 @@ export default function App() {
{/* Main */}
-
+
{(staleSources.size > 0 || staleStacks.size > 0) && (
@@ -187,8 +198,8 @@ export default function App() {
} />
} />
} />
- } />
- } />
+ } />
+ } />
} />
diff --git a/ui/src/components/StatusBar.jsx b/ui/src/components/StatusBar.jsx
index f430104..2042699 100644
--- a/ui/src/components/StatusBar.jsx
+++ b/ui/src/components/StatusBar.jsx
@@ -1,7 +1,7 @@
import { NavLink } from 'react-router-dom'
import useTheme from '../theme.jsx'
-export default function StatusBar({ sources = [], source, setSource }) {
+export default function StatusBar({ sources = [], source, setSource, stacks = [], selectedStack, setSelectedStack }) {
const { dark, setDark } = useTheme()
return (
@@ -23,6 +23,26 @@ export default function StatusBar({ sources = [], source, setSource }) {
title="New source"
>+
+ {stacks.length > 0 && (
+ <>
+
|
+
Stacks
+ {stacks.map(s => (
+
+ ))}
+ >
+ )}
+