From 0bc051fb51ad3789e91e5e371a114b8894642668 Mon Sep 17 00:00:00 2001 From: Tanushree Bhattacharji Date: Tue, 24 Mar 2026 13:56:37 +0530 Subject: [PATCH 1/3] upcoming: [UIE-10429] - Reserved IP: Implement Empty Landing state. --- .../ReservedIpsLanding/ReservedIpsLanding.tsx | 8 +++ .../ReservedIpsLandingEmptyState.tsx | 37 ++++++++++++ .../ReservedIpsLandingEmptyStateData.ts | 56 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyState.tsx create mode 100644 packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts diff --git a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLanding.tsx b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLanding.tsx index 5b0824ce308..a51b489f1a3 100644 --- a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLanding.tsx +++ b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLanding.tsx @@ -3,7 +3,15 @@ import * as React from 'react'; import { LandingHeader } from 'src/components/LandingHeader'; +import { ReservedIpsLandingEmptyState } from './ReservedIpsLandingEmptyState'; + export const ReservedIpsLanding = () => { + // TODO: Replace with actual data check once API queries are implemented + const showEmptyState = true; + + if (showEmptyState) { + return ; + } return ( <> { + return ( + + + { + // TODO: Open Reserve IP create drawer once ready + }, + }, + ]} + descriptionMaxWidth={500} + gettingStartedGuidesData={gettingStartedGuides} + headers={headers} + icon={NetworkingIcon} + linkAnalyticsEvent={linkAnalyticsEvent} + wide={true} + youtubeLinkData={youtubeLinkData} + /> + + ); +}; diff --git a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts new file mode 100644 index 00000000000..9840d5270f0 --- /dev/null +++ b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts @@ -0,0 +1,56 @@ +import { + docsLink, + youtubeChannelLink, + youtubeMoreLinkText, +} from 'src/utilities/emptyStateLandingUtils'; + +import type { + ResourcesHeaders, + ResourcesLinks, + ResourcesLinkSection, +} from 'src/components/EmptyLandingPageResources/ResourcesLinksTypes'; + +export const headers: ResourcesHeaders = { + description: + 'Reserve and manage public IPv4 addresses across regions, and assign them to resources like Linodes or NodeBalancers when needed.', + subtitle: 'Dedicated IP addressing for your cloud resources', + title: 'Reserved IP Addresses', +}; + +export const gettingStartedGuides: ResourcesLinkSection = { + links: [ + { + text: 'Overview of Reserved IPs', + to: 'https://www.linode.com/docs/', // To be updated with actual Reserved IPs documentation link once available + }, + { + text: 'Getting Started with Reserved IPs', + to: 'https://www.linode.com/docs/', // To be updated with actual Reserved IPs documentation link once available + }, + { + text: 'Managing and Assigning Reserved IPs', + to: 'https://www.linode.com/docs/', // To be updated with actual Reserved IPs documentation link once available + }, + ], + moreInfo: { + text: 'View additional Reserved IP documentation', + to: docsLink, + }, + title: 'Getting Started Guides', +}; + +export const youtubeLinkData: ResourcesLinkSection = { + links: [ + // To be added once we have Reserved IPs specific YouTube content + ], + moreInfo: { + text: youtubeMoreLinkText, + to: youtubeChannelLink, + }, + title: 'Video Playlist', +}; + +export const linkAnalyticsEvent: ResourcesLinks['linkAnalyticsEvent'] = { + action: 'Click:link', + category: 'Reserved IPs landing page empty', +}; From d9f811d8c1f996a78f37d08f18a84bf08ea11b78 Mon Sep 17 00:00:00 2001 From: Tanushree Bhattacharji Date: Tue, 24 Mar 2026 14:09:42 +0530 Subject: [PATCH 2/3] Added changeset: Implement Empty Landing State for Reserve IP --- .../.changeset/pr-13521-upcoming-features-1774341582397.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/manager/.changeset/pr-13521-upcoming-features-1774341582397.md diff --git a/packages/manager/.changeset/pr-13521-upcoming-features-1774341582397.md b/packages/manager/.changeset/pr-13521-upcoming-features-1774341582397.md new file mode 100644 index 00000000000..cf6086c2a66 --- /dev/null +++ b/packages/manager/.changeset/pr-13521-upcoming-features-1774341582397.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Implement Empty Landing State for Reserve IP ([#13521](https://github.com/linode/manager/pull/13521)) From d9078c1e35cf17ac9720c7ff7a094c621674e8ae Mon Sep 17 00:00:00 2001 From: Tanushree Bhattacharji Date: Wed, 25 Mar 2026 21:09:20 +0530 Subject: [PATCH 3/3] Address review comments. --- .../ReservedIpsLandingEmptyState.tsx | 2 -- .../ReservedIpsLandingEmptyStateData.ts | 17 +---------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyState.tsx b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyState.tsx index 14f9a753f42..c842234ce89 100644 --- a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyState.tsx +++ b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyState.tsx @@ -8,7 +8,6 @@ import { gettingStartedGuides, headers, linkAnalyticsEvent, - youtubeLinkData, } from './ReservedIpsLandingEmptyStateData'; export const ReservedIpsLandingEmptyState = () => { @@ -30,7 +29,6 @@ export const ReservedIpsLandingEmptyState = () => { icon={NetworkingIcon} linkAnalyticsEvent={linkAnalyticsEvent} wide={true} - youtubeLinkData={youtubeLinkData} /> ); diff --git a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts index 9840d5270f0..5b4d920cf54 100644 --- a/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts +++ b/packages/manager/src/features/ReservedIps/ReservedIpsLanding/ReservedIpsLandingEmptyStateData.ts @@ -1,8 +1,4 @@ -import { - docsLink, - youtubeChannelLink, - youtubeMoreLinkText, -} from 'src/utilities/emptyStateLandingUtils'; +import { docsLink } from 'src/utilities/emptyStateLandingUtils'; import type { ResourcesHeaders, @@ -39,17 +35,6 @@ export const gettingStartedGuides: ResourcesLinkSection = { title: 'Getting Started Guides', }; -export const youtubeLinkData: ResourcesLinkSection = { - links: [ - // To be added once we have Reserved IPs specific YouTube content - ], - moreInfo: { - text: youtubeMoreLinkText, - to: youtubeChannelLink, - }, - title: 'Video Playlist', -}; - export const linkAnalyticsEvent: ResourcesLinks['linkAnalyticsEvent'] = { action: 'Click:link', category: 'Reserved IPs landing page empty',