faster display of dynamic list (plugins, monitor)
Massimo Melina committed
Apr 12, 2022 at 20:58 UTC
de85d4da8954712b802c48695d630ca169674133
3 files changed
+10
-2
admin/src/PluginsPage.ts
+2
-1
@@ -6,11 +6,12 @@ import { IconBtn } from './misc'
6
import { PowerSettingsNew } from '@mui/icons-material'
7
8
export default function PluginsPage() {
9
- const { list, error } = useApiList('get_plugins')
9
+ const { list, error, initializing } = useApiList('get_plugins')
10
if (error)
11
return h(Alert, { severity: 'error' }, error)
12
return h(DataGrid, {
13
rows: list,
14
+ loading: initializing,
15
disableColumnSelector: true,
16
disableColumnMenu: true,
17
columns: [
admin/src/api.ts
+7
-1
@@ -108,6 +108,7 @@ export function useApiList<T=any>(cmd:string|Falsy, params: Dict={}, { addId=fal
108
const [list, setList] = useStateMounted<T[]>([])
109
const [error, setError] = useStateMounted<any>(undefined)
110
const [loading, setLoading] = useStateMounted(false)
111
+ const [initializing, setInitializing] = useStateMounted(true)
112
const idRef = useRef(0)
113
useEffect(() => {
114
if (!cmd) return
@@ -131,6 +132,11 @@ export function useApiList<T=any>(cmd:string|Falsy, params: Dict={}, { addId=fal
132
case 'msg':
133
if (src?.readyState === src?.CLOSED)
134
return stop()
135
+ if (data === 'init') {
136
+ flush()
137
+ setInitializing(false)
138
+ return
139
+ }
140
if (data.add) {
141
const rec = map(data.add)
142
if (addId)
@@ -181,5 +187,5 @@ export function useApiList<T=any>(cmd:string|Falsy, params: Dict={}, { addId=fal
187
clearInterval(timer)
188
}
189
}, [cmd, JSON.stringify(params)]) //eslint-disable-line
184
- return { list, loading, error }
190
+ return { list, loading, error, initializing }
191
}
server/src/adminApis.ts
+1
@@ -187,6 +187,7 @@ function sendList<T>(addAtStart: T[]=[]) {
187
}
188
for (const x of addAtStart)
189
ret.add(x)
190
+ stream.push('init')
191
return ret
192
}
193