Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(renterd): assume autopilot always exists #816

Merged
merged 1 commit into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/quiet-pots-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@siafoundation/renterd-js': patch
'@siafoundation/renterd-react': patch
'@siafoundation/renterd-types': patch
---

Fixed missing fields and structure of bus and autopilot state types.
5 changes: 5 additions & 0 deletions .changeset/thirty-countries-cover.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'renterd': minor
---

The app was refactored to assume there is a singular autopilot and its API always exists, even if it is disabled.
68 changes: 30 additions & 38 deletions apps/renterd/components/CmdRoot/ConfigCmdGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { useDialog } from '../../contexts/dialog'
import { CommandGroup, CommandItemNav, CommandItemSearch } from './Item'
import { Page } from './types'
import { useConfig } from '../../contexts/config'
import { useApp } from '../../contexts/app'

const commandPage = {
namespace: 'configuration',
Expand All @@ -21,7 +20,6 @@ export function ConfigCmdGroup({ currentPage, parentPage, pushPage }: Props) {
const router = useRouter()
const { configViewMode } = useConfig()
const { closeDialog } = useDialog()
const { autopilotInfo } = useApp()
return (
<CommandGroup currentPage={currentPage} commandPage={commandPage}>
<CommandItemNav
Expand All @@ -44,18 +42,16 @@ export function ConfigCmdGroup({ currentPage, parentPage, pushPage }: Props) {
>
Open configuration
</CommandItemSearch>
{autopilotInfo.data?.isAutopilotEnabled && (
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.storage)
closeDialog()
}}
>
Configure storage
</CommandItemSearch>
)}
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.storage)
closeDialog()
}}
>
Configure storage
</CommandItemSearch>
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
Expand All @@ -68,30 +64,26 @@ export function ConfigCmdGroup({ currentPage, parentPage, pushPage }: Props) {
</CommandItemSearch>
{configViewMode === 'advanced' && (
<>
{autopilotInfo.data?.isAutopilotEnabled && (
<>
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.hosts)
closeDialog()
}}
>
Configure hosts
</CommandItemSearch>
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.wallet)
closeDialog()
}}
>
Configure wallet
</CommandItemSearch>
</>
)}
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.hosts)
closeDialog()
}}
>
Configure hosts
</CommandItemSearch>
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
onSelect={() => {
router.push(routes.config.wallet)
closeDialog()
}}
>
Configure wallet
</CommandItemSearch>
<CommandItemSearch
currentPage={currentPage}
commandPage={commandPage}
Expand Down
61 changes: 27 additions & 34 deletions apps/renterd/components/Config/RebalancePrices.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import {
downloadWeight,
uploadWeight,
} from '../../contexts/config/spendingConfig'
import { useApp } from '../../contexts/app'
import { useRedundancyMultiplier } from '../../contexts/config/useRedundancyMultiplier'
import { useFormExchangeRate } from '../../contexts/config/useFormExchangeRate'
import { useSpendingEstimate } from '../../contexts/config/useSpendingEstimate'
Expand Down Expand Up @@ -89,7 +88,6 @@ function useSpendingDerivedPricingFromEnabledFields({
maxUploadPriceTBPinned?: BigNumber
}> {
const { form } = useConfig()
const { isAutopilotEnabled } = useApp()
const storageTB = form.watch('storageTB')
const downloadTBMonth = form.watch('downloadTBMonth')
const uploadTBMonth = form.watch('uploadTBMonth')
Expand All @@ -99,40 +97,35 @@ function useSpendingDerivedPricingFromEnabledFields({
})
const { rate } = useFormExchangeRate(form)
const values = useMemo(() => {
if (isAutopilotEnabled) {
const derivedPricing = derivePricingFromSpendingEstimate({
estimatedSpendingPerMonth,
maxPricingFactor,
storageTB,
downloadTBMonth,
uploadTBMonth,
redundancyMultiplier,
storageWeight,
downloadWeight,
uploadWeight,
})
if (!derivedPricing) {
return undefined
}
// Convert derived siacoin prices to pinned fiat prices.
const pinnedPricing = rate
? {
maxStoragePriceTBMonthPinned:
derivedPricing?.maxStoragePriceTBMonth.times(rate),
maxDownloadPriceTBPinned:
derivedPricing?.maxDownloadPriceTB.times(rate),
maxUploadPriceTBPinned:
derivedPricing?.maxUploadPriceTB.times(rate),
}
: undefined
return {
...derivedPricing,
...pinnedPricing,
}
const derivedPricing = derivePricingFromSpendingEstimate({
estimatedSpendingPerMonth,
maxPricingFactor,
storageTB,
downloadTBMonth,
uploadTBMonth,
redundancyMultiplier,
storageWeight,
downloadWeight,
uploadWeight,
})
if (!derivedPricing) {
return undefined
}
// Convert derived siacoin prices to pinned fiat prices.
const pinnedPricing = rate
? {
maxStoragePriceTBMonthPinned:
derivedPricing?.maxStoragePriceTBMonth.times(rate),
maxDownloadPriceTBPinned:
derivedPricing?.maxDownloadPriceTB.times(rate),
maxUploadPriceTBPinned: derivedPricing?.maxUploadPriceTB.times(rate),
}
: undefined
return {
...derivedPricing,
...pinnedPricing,
}
return undefined
}, [
isAutopilotEnabled,
estimatedSpendingPerMonth,
storageTB,
downloadTBMonth,
Expand Down
6 changes: 0 additions & 6 deletions apps/renterd/components/Config/Recommendations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@ import {
CheckmarkFilled20,
PendingFilled20,
} from '@siafoundation/react-icons'
import { useApp } from '../../contexts/app'
import { routes } from '../../config/routes'
import { useConfig } from '../../contexts/config'
import { pluralize } from '@siafoundation/units'
import { HangingNavItem } from './HangingNavItem'

export function Recommendations() {
const { autopilotInfo } = useApp()
const { form, fields, evaluation } = useConfig()
const {
hostMargin50,
Expand All @@ -33,10 +31,6 @@ export function Recommendations() {
usableHostsAfterRecommendation,
} = evaluation

if (!autopilotInfo.data?.isAutopilotEnabled) {
return null
}

const tip = (
<div className="flex flex-col gap-1 px-3 py-2">
<Text size="14" color="subtle">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { useApp } from '../../../contexts/app'
import { useAutopilotState } from '@siafoundation/renterd-react'

export function useAutopilotNotConfigured() {
const { autopilotInfo } = useApp()
const autopilotState = useAutopilotState()
return {
active:
autopilotInfo.data?.isAutopilotEnabled &&
!autopilotInfo.data?.state?.configured,
active: !autopilotState.data?.configured,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { AllowBlockCmdGroup } from './AllowBlock'
import { ServerFilterItem } from '@siafoundation/design-system'
import { ContractsCmdGroup } from './Contracts'
import { UsableCmdGroup } from './Usable'
import { useApp } from '../../../../../contexts/app'
import { PublicKeyCmdGroup } from './PublicKey'

type Props = {
Expand All @@ -14,12 +13,9 @@ type Props = {
}

export function ContractFilterCmdGroups({ currentPage, select }: Props) {
const { isAutopilotEnabled } = useApp()
return (
<>
{isAutopilotEnabled && (
<UsableCmdGroup currentPage={currentPage} select={select} />
)}
<UsableCmdGroup currentPage={currentPage} select={select} />
<ContractsCmdGroup currentPage={currentPage} select={select} />
<AddressCmdGroup currentPage={currentPage} select={select} />
<PublicKeyCmdGroup currentPage={currentPage} select={select} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { ServerFilterItem } from '@siafoundation/design-system'
import { hostsFilterContractsPage } from '../HostsFilterCmdGroups/Contracts'
import { hostsFilterUsablePage } from '../HostsFilterCmdGroups/Usable'
import { PublicKeyCmdNav } from '../HostsFilterCmdGroups/PublicKey'
import { useApp } from '../../../../../contexts/app'

export const commandPage = {
namespace: 'hosts',
Expand All @@ -26,21 +25,18 @@ export function HostsFilterNav({
pushPage,
select,
}: Props) {
const { isAutopilotEnabled } = useApp()
return (
<>
{isAutopilotEnabled && (
<CommandItemNav
currentPage={currentPage}
parentPage={parentPage}
commandPage={commandPage}
onSelect={() => {
pushPage(hostsFilterUsablePage)
}}
>
{hostsFilterUsablePage.label}
</CommandItemNav>
)}
<CommandItemNav
currentPage={currentPage}
parentPage={parentPage}
commandPage={commandPage}
onSelect={() => {
pushPage(hostsFilterUsablePage)
}}
>
{hostsFilterUsablePage.label}
</CommandItemNav>
<PublicKeyCmdNav
currentPage={currentPage}
parentPage={parentPage}
Expand Down
9 changes: 4 additions & 5 deletions apps/renterd/components/OnboardingBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@ import {
PendingFilled16,
Subtract24,
} from '@siafoundation/react-icons'
import { useApp } from '../contexts/app'
import { useSyncStatus } from '../hooks/useSyncStatus'
import { routes } from '../config/routes'
import { useDialog } from '../contexts/dialog'
import { useNotEnoughContracts } from './Files/checks/useNotEnoughContracts'
import { useWallet } from '@siafoundation/renterd-react'
import { useAutopilotState, useWallet } from '@siafoundation/renterd-react'
import BigNumber from 'bignumber.js'
import { humanSiacoin } from '@siafoundation/units'
import { useAppSettings } from '@siafoundation/react-core'
Expand All @@ -29,7 +28,7 @@ import { useSpendingEstimate } from '../contexts/config/useSpendingEstimate'

export function OnboardingBar() {
const { isUnlockedAndAuthedRoute } = useAppSettings()
const { isAutopilotEnabled, autopilotInfo } = useApp()
const autopilotState = useAutopilotState()
const { openDialog } = useDialog()
const wallet = useWallet()
const [maximized, setMaximized] = useLocalStorageState<boolean>(
Expand All @@ -43,15 +42,15 @@ export function OnboardingBar() {
const notEnoughContracts = useNotEnoughContracts()
const { estimatedSpendingPerMonth } = useSpendingEstimate()

if (!isUnlockedAndAuthedRoute || !isAutopilotEnabled) {
if (!isUnlockedAndAuthedRoute) {
return null
}

const walletBalance = new BigNumber(
wallet.data ? wallet.data.confirmed + wallet.data.unconfirmed : 0
)

const step1Configured = autopilotInfo.data?.state?.configured
const step1Configured = autopilotState.data?.configured
const step2Synced = syncStatus.isSynced
const step3Funded = walletBalance.gt(0)
const step4Contracts = !notEnoughContracts.active
Expand Down
5 changes: 0 additions & 5 deletions apps/renterd/contexts/app/index.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
import React, { createContext, useContext } from 'react'
import { useAutopilotInfo } from './useAutopilotInfo'
import { useBusSdk } from './useBusSdk'

function useAppMain() {
const autopilotInfo = useAutopilotInfo()
const bus = useBusSdk()
const isAutopilotEnabled = !!autopilotInfo.data?.isAutopilotEnabled

return {
bus,
autopilotInfo,
isAutopilotEnabled,
}
}

Expand Down
41 changes: 0 additions & 41 deletions apps/renterd/contexts/app/useAutopilotInfo.tsx

This file was deleted.

Loading
Loading