1
1
import React , { useEffect , useState } from 'react'
2
2
import { useTranslation } from 'react-i18next'
3
3
import { DMQueueElement , DownloadManagerState } from 'common/types'
4
- import { UpdateComponent } from 'frontend/components/UI'
5
4
import ProgressHeader from './components/ProgressHeader'
6
5
import { DMQueue } from 'frontend/types'
7
- import { Background , Tabs , getTabsClassNames } from '@hyperplay/ui'
6
+ import { Background , Button , Tabs , getTabsClassNames } from '@hyperplay/ui'
8
7
import styles from './index.module.scss'
9
8
import { DownloadTable } from './components/DownloadTable'
9
+ import { downloadManagerStore } from 'frontend/helpers/electronStores'
10
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
11
+ import { faTrash } from '@fortawesome/free-solid-svg-icons'
10
12
11
13
export default React . memo ( function DownloadManager ( ) : JSX . Element | null {
12
14
const { t } = useTranslation ( )
13
- const [ refreshing , setRefreshing ] = useState ( false )
14
15
const [ state , setState ] = useState < DownloadManagerState > ( 'idle' )
15
16
const [ queuedElements , setQueuedElements ] = useState < DMQueueElement [ ] > ( [ ] )
16
17
const [ currentElement , setCurrentElement ] = useState < DMQueueElement > ( )
17
18
const [ finishedElem , setFinishedElem ] = useState < DMQueueElement [ ] > ( )
19
+ const [ activeTab , setActiveTab ] = useState < string | null > ( 'downloading' )
18
20
19
21
const appName = currentElement ?. params ?. appName ?? ''
20
22
21
23
useEffect ( ( ) => {
22
- setRefreshing ( true )
23
24
window . api . getDMQueueInformation ( ) . then ( ( { elements, state } : DMQueue ) => {
24
25
setCurrentElement ( elements [ 0 ] )
25
26
setQueuedElements ( [ ...elements . slice ( 1 ) ] )
26
- setRefreshing ( false )
27
27
setState ( state )
28
28
} )
29
29
@@ -44,7 +44,7 @@ export default React.memo(function DownloadManager(): JSX.Element | null {
44
44
return ( ) => {
45
45
removeHandleDMQueueInformation ( )
46
46
}
47
- } , [ ] )
47
+ } , [ finishedElem ] )
48
48
49
49
useEffect ( ( ) => {
50
50
window . api . getDMQueueInformation ( ) . then ( ( { finished } : DMQueue ) => {
@@ -57,10 +57,6 @@ export default React.memo(function DownloadManager(): JSX.Element | null {
57
57
window . api . trackScreen ( 'Download Manager' )
58
58
} , [ ] )
59
59
60
- if ( refreshing ) {
61
- return < UpdateComponent />
62
- }
63
-
64
60
const doneElements =
65
61
( finishedElem ?. length &&
66
62
finishedElem . sort ( ( a , b ) => {
@@ -69,6 +65,13 @@ export default React.memo(function DownloadManager(): JSX.Element | null {
69
65
} ) ) ||
70
66
[ ]
71
67
68
+ const handleClearList = ( ) => {
69
+ setFinishedElem ( [ ] )
70
+ downloadManagerStore . set ( 'finished' , [ ] )
71
+ }
72
+
73
+ const showClearListButton = activeTab === 'downloaded'
74
+
72
75
/*
73
76
Other Keys:
74
77
t('queue.label.empty', 'Nothing to download')
@@ -79,17 +82,29 @@ export default React.memo(function DownloadManager(): JSX.Element | null {
79
82
return (
80
83
< >
81
84
< Background style = { { position : 'absolute' } } > </ Background >
82
- < div className = " contentContainer" >
85
+ < div className = { ' contentContainer' } >
83
86
< h3 className = { styles . title } >
84
87
{ t ( 'download-manager.title_dm' , 'Download Manager' ) }
85
88
</ h3 >
86
89
< Tabs
87
- defaultValue = "downloading"
90
+ value = { activeTab }
91
+ onChange = { setActiveTab }
88
92
classNames = { getTabsClassNames (
89
93
{ list : styles . tabsList , panel : styles . tabsPanel } ,
90
94
{ list : 'outline' }
91
95
) }
92
96
>
97
+ { showClearListButton ? (
98
+ < Button
99
+ className = { styles . clearButton }
100
+ onClick = { ( ) => handleClearList ( ) }
101
+ type = "tertiary"
102
+ leftIcon = { < FontAwesomeIcon icon = { faTrash } /> }
103
+ size = "small"
104
+ >
105
+ { t ( 'queue.label.clear' , 'Clear List' ) }
106
+ </ Button >
107
+ ) : null }
93
108
< Tabs . List >
94
109
< Tabs . Tab value = "downloading" > Downloading</ Tabs . Tab >
95
110
< Tabs . Tab value = "queued" > Queued</ Tabs . Tab >
@@ -111,22 +126,32 @@ export default React.memo(function DownloadManager(): JSX.Element | null {
111
126
/>
112
127
</ div >
113
128
</ div >
129
+ < ProgressHeader state = { state } appName = { appName } />
114
130
</ Tabs . Panel >
115
131
116
132
< Tabs . Panel value = "queued" >
117
133
< div className = { styles . dmItemList } >
118
134
< DownloadTable elements = { queuedElements } time = "queued" />
135
+ { queuedElements . length === 0 && (
136
+ < h5 className = { styles . empty } >
137
+ { t ( 'queue.label.empty.queue' , 'Nothing to download' ) }
138
+ </ h5 >
139
+ ) }
119
140
</ div >
120
141
</ Tabs . Panel >
121
142
< Tabs . Panel value = "downloaded" >
122
143
< div className = { styles . downloadManager } >
123
144
< div className = { styles . downloadList } >
124
145
< DownloadTable elements = { doneElements } time = "finished" />
146
+ { doneElements . length === 0 && (
147
+ < h5 className = { styles . empty } >
148
+ { t ( 'queue.label.empty.finished' , 'Nothing downloaded' ) }
149
+ </ h5 >
150
+ ) }
125
151
</ div >
126
152
</ div >
127
153
</ Tabs . Panel >
128
154
</ Tabs >
129
- < ProgressHeader state = { state } appName = { appName } />
130
155
</ div >
131
156
</ >
132
157
)
0 commit comments