Skip to content

Commit

Permalink
fix: hostd announce button states
Browse files Browse the repository at this point in the history
  • Loading branch information
alexfreska committed Jan 5, 2024
1 parent fa1297b commit 7484cbc
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 15 deletions.
5 changes: 5 additions & 0 deletions .changeset/rotten-dots-reply.md
@@ -0,0 +1,5 @@
---
'hostd': minor
---

The announce button is now disabled unless the net address does not match the last announcement. Closes https://github.com/SiaFoundation/hostd/issues/248
25 changes: 23 additions & 2 deletions apps/hostd/components/Config/AnnounceButton.tsx
@@ -1,12 +1,18 @@
import {
Button,
Paragraph,
minutesInMilliseconds,
triggerErrorToast,
triggerSuccessToast,
} from '@siafoundation/design-system'
import { Bullhorn16 } from '@siafoundation/react-icons'
import { useDialog } from '../../contexts/dialog'
import { useSettingsAnnounce, useTxPoolFee } from '@siafoundation/react-hostd'
import {
useSettings,
useSettingsAnnounce,
useStateHost,
useTxPoolFee,
} from '@siafoundation/react-hostd'
import { humanSiacoin } from '@siafoundation/units'
import { useCallback } from 'react'
import BigNumber from 'bignumber.js'
Expand All @@ -15,6 +21,17 @@ export function AnnounceButton() {
const { openConfirmDialog } = useDialog()
const txpoolFee = useTxPoolFee()
const settingsAnnounce = useSettingsAnnounce()
const host = useStateHost()
const settings = useSettings({
config: {
swr: {
refreshInterval: minutesInMilliseconds(1),
},
},
})

const needsToAnnounce =
host.data.lastAnnouncement?.address !== settings.data?.netAddress

const triggerConfirm = useCallback(
() =>
Expand Down Expand Up @@ -54,7 +71,11 @@ export function AnnounceButton() {
)

return (
<Button tip="Announce host address" onClick={triggerConfirm}>
<Button
tip="Announce host address"
onClick={triggerConfirm}
disabled={!needsToAnnounce}
>
<Bullhorn16 />
Announce
</Button>
Expand Down
1 change: 0 additions & 1 deletion apps/hostd/contexts/config/index.tsx
Expand Up @@ -74,7 +74,6 @@ export function useConfigMain() {

const onValid = useOnValid({
resources,
dirtyFields: form.formState.dirtyFields,
showAdvanced,
revalidateAndResetForm,
})
Expand Down
25 changes: 13 additions & 12 deletions apps/hostd/contexts/config/useOnValid.tsx
@@ -1,26 +1,31 @@
import {
triggerSuccessToast,
triggerErrorToast,
minutesInMilliseconds,
} from '@siafoundation/design-system'
import { useCallback } from 'react'
import { SettingsData, initialValues } from './types'
import { calculateMaxCollateral, transformUp } from './transform'
import { UseFormReturn } from 'react-hook-form'
import { Resources } from './resources'
import { useSettingsUpdate } from '@siafoundation/react-hostd'
import { useSettingsUpdate, useStateHost } from '@siafoundation/react-hostd'

export function useOnValid({
resources,
dirtyFields,
showAdvanced,
revalidateAndResetForm,
}: {
dirtyFields: UseFormReturn<SettingsData>['formState']['dirtyFields']
resources: Resources
showAdvanced: boolean
revalidateAndResetForm: () => Promise<void>
}) {
const settingsUpdate = useSettingsUpdate()
const host = useStateHost({
config: {
swr: {
refreshInterval: minutesInMilliseconds(1),
},
},
})
const onValid = useCallback(
async (values: typeof initialValues) => {
if (!resources) {
Expand All @@ -46,7 +51,9 @@ export function useOnValid({
if (response.error) {
throw Error(response.error)
}
if (dirtyFields.netAddress) {
const needsToAnnounce =
host.data.lastAnnouncement?.address !== values.netAddress
if (needsToAnnounce) {
triggerSuccessToast(
'Settings have been saved. Address has changed, make sure to re-announce the host.',
{
Expand All @@ -62,13 +69,7 @@ export function useOnValid({
console.log(e)
}
},
[
showAdvanced,
resources,
dirtyFields.netAddress,
settingsUpdate,
revalidateAndResetForm,
]
[showAdvanced, resources, settingsUpdate, revalidateAndResetForm, host]
)
return onValid
}
8 changes: 8 additions & 0 deletions libs/react-hostd/src/api.ts
Expand Up @@ -18,20 +18,28 @@ import {
PublicKey,
Currency,
TransactionID,
ChainIndex,
} from '@siafoundation/types'
import useSWR from 'swr'
import { Contract, ContractStatus, WalletTransaction } from './siaTypes'

// state

export type StateHost = {
name?: string
publicKey: string
walletAddress: string
network: 'Mainnet' | 'Zen Testnet'
version: string
commit: string
os: string
startTime: string
buildTime: string
lastAnnouncement?: {
index: ChainIndex
publicKey: string
address: string
}
}

export const stateHostKey = '/state/host'
Expand Down

0 comments on commit 7484cbc

Please sign in to comment.