diff --git a/app/pages/project/instances/AntiAffinityCard.tsx b/app/pages/project/instances/AntiAffinityCard.tsx index d9accb606..68ff2e7c2 100644 --- a/app/pages/project/instances/AntiAffinityCard.tsx +++ b/app/pages/project/instances/AntiAffinityCard.tsx @@ -25,6 +25,7 @@ import { Affinity24Icon } from '@oxide/design-system/icons/react' import { AffinityPolicyHeader } from '~/components/AffinityDocsPopover' import { ComboboxField } from '~/components/form/fields/ComboboxField' import { HL } from '~/components/HL' +import { antiAffinityGroupList } from '~/forms/affinity-util' import { useInstanceSelector } from '~/hooks/use-params' import { AffinityGroupPolicyBadge } from '~/pages/project/affinity/AffinityPage' import { confirmAction } from '~/stores/confirm-action' @@ -49,17 +50,6 @@ export const instanceAntiAffinityGroups = ({ project, instance }: PP.Instance) = query: { project, limit: ALL_ISH }, }) -export const allAntiAffinityGroups = ({ project }: PP.Project) => - apiq('antiAffinityGroupList', { - query: { project, limit: ALL_ISH }, - }) - -const instanceView = ({ project, instance }: PP.Instance) => - apiq('instanceView', { - path: { instance }, - query: { project }, - }) - const colHelper = createColumnHelper() const staticCols = [ colHelper.accessor('description', Columns.description), @@ -76,8 +66,10 @@ export function AntiAffinityCard() { const { data: memberGroups } = usePrefetchedQuery( instanceAntiAffinityGroups(instanceSelector) ) - const { data: allGroups } = usePrefetchedQuery(allAntiAffinityGroups(instanceSelector)) - const { data: instanceData } = usePrefetchedQuery(instanceView(instanceSelector)) + const { data: allGroups } = usePrefetchedQuery(antiAffinityGroupList(instanceSelector)) + const { data: instanceData } = usePrefetchedQuery( + apiq('instanceView', { path: { instance }, query: { project } }) + ) const nonMemberGroups = useMemo( () => R.differenceWith(allGroups.items, memberGroups.items, (a, b) => a.id === b.id), diff --git a/app/pages/project/instances/InstancePage.tsx b/app/pages/project/instances/InstancePage.tsx index d1f5b4599..22af8dd51 100644 --- a/app/pages/project/instances/InstancePage.tsx +++ b/app/pages/project/instances/InstancePage.tsx @@ -297,11 +297,9 @@ export function ResizeInstanceModal({ const { project } = useProjectSelector() const instanceUpdate = useApiMutation('instanceUpdate', { onSuccess(_updatedInstance) { - if (onListView) { - apiQueryClient.invalidateQueries('instanceList') - } else { - apiQueryClient.invalidateQueries('instanceView') - } + apiQueryClient.invalidateQueries('instanceList') + apiQueryClient.invalidateQueries('instanceView') + onDismiss() addToast({ content: ( diff --git a/app/pages/project/instances/SettingsTab.tsx b/app/pages/project/instances/SettingsTab.tsx index 1a8515110..4f80a321a 100644 --- a/app/pages/project/instances/SettingsTab.tsx +++ b/app/pages/project/instances/SettingsTab.tsx @@ -10,13 +10,10 @@ import { type LoaderFunctionArgs } from 'react-router' import { queryClient } from '@oxide/api' +import { antiAffinityGroupList } from '~/forms/affinity-util' import { getInstanceSelector } from '~/hooks/use-params' -import { - allAntiAffinityGroups, - AntiAffinityCard, - instanceAntiAffinityGroups, -} from './AntiAffinityCard' +import { AntiAffinityCard, instanceAntiAffinityGroups } from './AntiAffinityCard' import { AutoRestartCard } from './AutoRestartCard' export const handle = { crumb: 'Settings' } @@ -25,7 +22,7 @@ export async function clientLoader({ params }: LoaderFunctionArgs) { const { project, instance } = getInstanceSelector(params) await Promise.all([ queryClient.prefetchQuery(instanceAntiAffinityGroups({ project, instance })), - queryClient.prefetchQuery(allAntiAffinityGroups({ project })), + queryClient.prefetchQuery(antiAffinityGroupList({ project })), ]) return null } diff --git a/app/util/links.ts b/app/util/links.ts index 1113b1488..1200a6163 100644 --- a/app/util/links.ts +++ b/app/util/links.ts @@ -10,9 +10,8 @@ const remoteAccess = 'https://docs.oxide.computer/guides/remote-access' export const links = { accessDocs: 'https://docs.oxide.computer/guides/configuring-access', - // TODO: make sure this is right before merging affinityDocs: - 'https://docs.oxide.computer/guides/deploying-workloads#_anti_affinity_groups', + 'https://docs.oxide.computer/guides/deploying-workloads#_affinity_and_anti_affinity', cloudInitFormat: 'https://cloudinit.readthedocs.io/en/latest/explanation/format.html', cloudInitExamples: 'https://cloudinit.readthedocs.io/en/latest/reference/examples.html', disksDocs: 'https://docs.oxide.computer/guides/managing-disks-and-snapshots',