File tree Expand file tree Collapse file tree 5 files changed +86
-0
lines changed Expand file tree Collapse file tree 5 files changed +86
-0
lines changed Original file line number Diff line number Diff line change
1
+ import { useMemo } from 'react'
2
+ import { useContracts } from '../../../contexts/contracts'
3
+ import { BulkRescanHosts } from '../../bulkActions/BulkRescanHosts'
4
+
5
+ export function ContractsRescanHosts ( ) {
6
+ const { multiSelect } = useContracts ( )
7
+
8
+ const publicKeys = useMemo (
9
+ ( ) =>
10
+ Object . entries ( multiSelect . selection ) . map ( ( [ _ , item ] ) => item . hostKey ) ,
11
+ [ multiSelect . selection ]
12
+ )
13
+
14
+ return < BulkRescanHosts multiSelect = { multiSelect } publicKeys = { publicKeys } />
15
+ }
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import { ContractsAddBlocklist } from './ContractsAddBlocklist'
5
5
import { ContractsAddAllowlist } from './ContractsAddAllowlist'
6
6
import { ContractsRemoveBlocklist } from './ContractsRemoveBlocklist'
7
7
import { ContractsRemoveAllowlist } from './ContractsRemoveAllowlist'
8
+ import { ContractsRescanHosts } from './ContractsRescanHosts'
8
9
9
10
export function ContractsBulkMenu ( ) {
10
11
const { multiSelect } = useContracts ( )
@@ -19,6 +20,7 @@ export function ContractsBulkMenu() {
19
20
< ContractsRemoveAllowlist />
20
21
< ContractsRemoveBlocklist />
21
22
</ div >
23
+ < ContractsRescanHosts />
22
24
< ContractsBulkDelete />
23
25
</ MultiSelectionMenu >
24
26
)
Original file line number Diff line number Diff line change
1
+ import { useMemo } from 'react'
2
+ import { BulkRescanHosts } from '../../bulkActions/BulkRescanHosts'
3
+ import { useHosts } from '../../../contexts/hosts'
4
+
5
+ export function HostsRescan ( ) {
6
+ const { multiSelect } = useHosts ( )
7
+
8
+ const publicKeys = useMemo (
9
+ ( ) =>
10
+ Object . entries ( multiSelect . selection ) . map ( ( [ _ , item ] ) => item . publicKey ) ,
11
+ [ multiSelect . selection ]
12
+ )
13
+
14
+ return < BulkRescanHosts multiSelect = { multiSelect } publicKeys = { publicKeys } />
15
+ }
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import { HostsAddAllowlist } from './HostsAddAllowlist'
5
5
import { HostsRemoveBlocklist } from './HostsRemoveBlocklist'
6
6
import { HostsRemoveAllowlist } from './HostsRemoveAllowlist'
7
7
import { useHosts } from '../../../contexts/hosts'
8
+ import { HostsRescan } from './HostsRescan'
8
9
9
10
export function HostsBulkMenu ( ) {
10
11
const { multiSelect } = useHosts ( )
@@ -19,6 +20,7 @@ export function HostsBulkMenu() {
19
20
< HostsRemoveAllowlist />
20
21
< HostsRemoveBlocklist />
21
22
</ div >
23
+ < HostsRescan />
22
24
< HostsResetLostSectorCount />
23
25
</ MultiSelectionMenu >
24
26
)
Original file line number Diff line number Diff line change
1
+ import {
2
+ Button ,
3
+ handleBatchOperation ,
4
+ MultiSelect ,
5
+ MultiSelectRow ,
6
+ } from '@siafoundation/design-system'
7
+ import { DataView16 } from '@siafoundation/react-icons'
8
+ import { useHostScan } from '@siafoundation/renterd-react'
9
+ import { useCallback } from 'react'
10
+ import { pluralize , secondsInMilliseconds } from '@siafoundation/units'
11
+
12
+ export function BulkRescanHosts < T extends MultiSelectRow > ( {
13
+ multiSelect,
14
+ publicKeys,
15
+ } : {
16
+ multiSelect : MultiSelect < T >
17
+ publicKeys : string [ ]
18
+ } ) {
19
+ const scan = useHostScan ( )
20
+ const scanAll = useCallback ( async ( ) => {
21
+ await handleBatchOperation (
22
+ publicKeys . map ( ( publicKey ) =>
23
+ scan . post ( {
24
+ params : {
25
+ hostkey : publicKey ,
26
+ } ,
27
+ payload : {
28
+ timeout : secondsInMilliseconds ( 30 ) ,
29
+ } ,
30
+ } )
31
+ ) ,
32
+ {
33
+ toastError : ( { successCount, errorCount, totalCount } ) => ( {
34
+ title : `Rescanning ${ pluralize ( successCount , 'host' ) } ` ,
35
+ body : `Error starting rescan for ${ errorCount } /${ totalCount } of total hosts.` ,
36
+ } ) ,
37
+ toastSuccess : ( { totalCount } ) => ( {
38
+ title : `Rescanning ${ pluralize ( totalCount , 'host' ) } ` ,
39
+ } ) ,
40
+ after : ( ) => {
41
+ multiSelect . deselectAll ( )
42
+ } ,
43
+ }
44
+ )
45
+ } , [ multiSelect , publicKeys , scan ] )
46
+
47
+ return (
48
+ < Button aria-label = "rescan hosts" tip = "Rescan hosts" onClick = { scanAll } >
49
+ < DataView16 />
50
+ </ Button >
51
+ )
52
+ }
You can’t perform that action at this time.
0 commit comments