diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index 15c0849b415..71f310cca27 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). + +## [2025-10-22] - v1.153.1 + +### Fixed: + +- VPC IP range errors not being surfaced on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004)) +- Unexpected VPC IPv4 auto-assign checkbox behavior on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004)) +- VPC Dual Stack error on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004)) + ## [2025-10-21] - v1.153.0 diff --git a/packages/manager/package.json b/packages/manager/package.json index 63dfc860138..75b0d51f78d 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -2,7 +2,7 @@ "name": "linode-manager", "author": "Linode", "description": "The Linode Manager website", - "version": "1.153.0", + "version": "1.153.1", "private": true, "type": "module", "bugs": { diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Networking/VPC.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Networking/VPC.tsx index bdfecf6d7c4..0c3619ecfe3 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Networking/VPC.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Networking/VPC.tsx @@ -100,6 +100,11 @@ export const VPC = ({ index }: Props) => { // Otherwise, just clear the selected subnet resetField(`linodeInterfaces.${index}.vpc.subnet_id`); } + + // Clear any previously selected dual-stack values if the current vpc is not dual-stack + if (isDualStackEnabled && !vpc?.ipv6) { + resetField(`linodeInterfaces.${index}.vpc.ipv6`); + } }} options={vpcs ?? []} placeholder="None" @@ -145,6 +150,7 @@ export const VPC = ({ index }: Props) => { name={`linodeInterfaces.${index}.vpc.ipv4.addresses.0.address`} render={({ field, fieldState }) => ( { setValue('interfaces.0.subnet_id', null); } + // Clear any previously selected dual-stack values if the current vpc is not dual-stack + if (isDualStackEnabled && !vpc?.ipv6) { + setValue(`interfaces.0.ipv6`, undefined); + } + // Capture analytics if (!vpc?.id) { sendLinodeCreateFormInputEvent({ @@ -232,6 +237,7 @@ export const VPC = () => { name="interfaces.0.ipv4.vpc" render={({ field, fieldState }) => ( { sx={(theme) => ({ marginTop: theme.spacingFunction(16) })} /> - {formState.errors.interfaces?.[1] && - formState.errors.interfaces[1] && - 'ip_ranges' in formState.errors.interfaces[1] && ( + {formState.errors.interfaces?.[0] && + formState.errors.interfaces[0] && + 'ip_ranges' in formState.errors.interfaces[0] && ( )} diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/AddInterfaceDrawer/VPC/AddVPCIPv4Address.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/AddInterfaceDrawer/VPC/AddVPCIPv4Address.tsx index 91e0f1d56e1..f5e023a3650 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/AddInterfaceDrawer/VPC/AddVPCIPv4Address.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/AddInterfaceDrawer/VPC/AddVPCIPv4Address.tsx @@ -32,6 +32,7 @@ export const AddVPCIPv4Address = (props: Props) => { name={`vpc.ipv4.addresses.${index}.address`} render={({ field, fieldState }) => ( { name={`vpc.ipv4.addresses.${index}.address`} render={({ field, fieldState }) => ( void; - onChange: (ipv4Address: string) => void; + onChange: (ipv4Address: null | string) => void; } export const VPCIPv4Address = (props: Props) => { - const { errorMessage, fieldValue, onBlur, disabled, onChange, ipv4Address } = - props; + const { + errorMessage, + fieldValue, + onBlur, + disabled, + onChange, + ipv4Address, + autoAssignValue, + } = props; + + // Auto-assign should be checked if any of the following are true + // - field value matches the identifier + // - field value is undefined (because the API's default behavior is to auto-assign) + const shouldAutoAssign = fieldValue === autoAssignValue || fieldValue === undefined; return ( } disabled={disabled} label="Auto-assign VPC IPv4" onChange={(e, checked) => - onChange(checked ? 'auto' : (ipv4Address ?? '')) + onChange(checked ? autoAssignValue : (ipv4Address ?? '')) } sx={{ pl: 0.4, mr: 0 }} /> - {fieldValue !== 'auto' && ( + {!shouldAutoAssign && (