diff --git a/client/web/src/components/views/subnet-router-view.tsx b/client/web/src/components/views/subnet-router-view.tsx index 3dd26794b..e8febd9e4 100644 --- a/client/web/src/components/views/subnet-router-view.tsx +++ b/client/web/src/components/views/subnet-router-view.tsx @@ -1,7 +1,7 @@ // Copyright (c) Tailscale Inc & AUTHORS // SPDX-License-Identifier: BSD-3-Clause -import React, { useMemo, useState } from "react" +import React, { useCallback, useMemo, useState } from "react" import { ReactComponent as CheckCircle } from "src/assets/icons/check-circle.svg" import { ReactComponent as Clock } from "src/assets/icons/clock.svg" import { ReactComponent as Plus } from "src/assets/icons/plus.svg" @@ -19,9 +19,9 @@ export default function SubnetRouterView({ node: NodeData nodeUpdaters: NodeUpdaters }) { - const [advertisedRoutes, hasUnapprovedRoutes] = useMemo(() => { + const [advertisedRoutes, hasRoutes, hasUnapprovedRoutes] = useMemo(() => { const routes = node.AdvertisedRoutes || [] - return [routes, routes.find((r) => !r.Approved)] + return [routes, routes.length > 0, routes.find((r) => !r.Approved)] }, [node.AdvertisedRoutes]) const [inputOpen, setInputOpen] = useState( @@ -29,6 +29,11 @@ export default function SubnetRouterView({ ) const [inputText, setInputText] = useState("") + const resetInput = useCallback(() => { + setInputText("") + setInputOpen(false) + }, []) + return ( <>

Subnet router

@@ -59,23 +64,23 @@ export default function SubnetRouterView({

Add multiple routes by providing a comma-separated list.

- +
+ + {hasRoutes && } +
) : ( ))}
- {advertisedRoutes.length > 0 ? ( + {hasRoutes ? ( <>
{advertisedRoutes.map((r) => (