11import { useState , useRef , useEffect } from 'preact/hooks'
22
3- import { Stream , allStream , delStream } from '../api'
3+ import { allStream , delStream } from '../api'
44import { formatTime } from '../utils'
5-
5+ import { useRefreshTimer } from '../hooks/use-refresh-timer'
6+ import { StyledCheckbox } from './styled-checkbox'
67import { IClientsDialog , ClientsDialog } from './dialog-clients'
78import { ICascadeDialog , CascadePullDialog , CascadePushDialog } from './dialog-cascade'
89import { IPreviewDialog , PreviewDialog } from './dialog-preview'
910import { IWebStreamDialog , WebStreamDialog } from './dialog-web-stream'
1011import { INewStreamDialog , NewStreamDialog } from './dialog-new-stream'
1112
1213export function StreamsTable ( ) {
13- const [ streams , setStreams ] = useState < Stream [ ] > ( [ ] )
14+ const [ streams , isRefreshingStreams , toggleRefreshStreams ] = useRefreshTimer ( [ ] , allStream )
1415 const [ selectedStreamId , setSelectedStreamId ] = useState ( '' )
15- const [ refreshTimer , setRefershTimer ] = useState ( - 1 )
1616 const refCascadePull = useRef < ICascadeDialog > ( null )
1717 const refCascadePush = useRef < ICascadeDialog > ( null )
1818 const refClients = useRef < IClientsDialog > ( null )
@@ -24,23 +24,6 @@ export function StreamsTable() {
2424 const [ previewStreamId , setPreviewStreamId ] = useState ( '' )
2525 const refPreviewStreams = useRef < Map < string , IPreviewDialog > > ( new Map ( ) )
2626
27- const updateAllStreams = async ( ) => {
28- setStreams ( await allStream ( ) )
29- }
30-
31- // fetch all streams on component mount
32- useEffect ( ( ) => { updateAllStreams ( ) } , [ ] )
33-
34- const toggleTimer = ( ) => {
35- if ( refreshTimer > 0 ) {
36- clearInterval ( refreshTimer )
37- setRefershTimer ( - 1 )
38- } else {
39- updateAllStreams ( )
40- setRefershTimer ( window . setInterval ( updateAllStreams , 3000 ) )
41- }
42- }
43-
4427 const handleViewClients = ( id : string ) => {
4528 setSelectedStreamId ( id )
4629 refClients . current ?. show ( )
@@ -141,13 +124,7 @@ export function StreamsTable() {
141124 < fieldset >
142125 < legend class = "inline-flex items-center" >
143126 < span > Streams (total: { streams . length } )</ span >
144- < label class = "ml-10 inline-flex items-center cursor-pointer" >
145- < input type = "checkbox" class = "sr-only peer" checked = { refreshTimer > 0 } onClick = { toggleTimer } />
146- < div class = "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" > </ div >
147- < span class = "ml-2" > Auto Refresh</ span >
148- </ label >
149- </ legend >
150- < legend >
127+ < StyledCheckbox label = "Auto Refresh" checked = { isRefreshingStreams } onClick = { toggleRefreshStreams } > </ StyledCheckbox >
151128 </ legend >
152129 < table >
153130 < thead >
0 commit comments