Skip to content

Commit 1590ef4

Browse files
committed
Add initial group for network routes
1 parent 0a75b79 commit 1590ef4

File tree

4 files changed

+47
-18
lines changed

4 files changed

+47
-18
lines changed

src/modules/exit-node/AddExitNodeButton.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,21 @@ import { IconCirclePlus, IconDirectionSign } from "@tabler/icons-react";
44
import * as React from "react";
55
import { useState } from "react";
66
import { usePermissions } from "@/contexts/PermissionsProvider";
7+
import { Group } from "@/interfaces/Group";
78
import { Peer } from "@/interfaces/Peer";
89
import { ExitNodeHelpTooltip } from "@/modules/exit-node/ExitNodeHelpTooltip";
910
import { RouteModalContent } from "@/modules/routes/RouteModal";
1011

1112
type Props = {
1213
peer?: Peer;
1314
firstTime?: boolean;
15+
distributionGroups?: Group[];
1416
};
15-
export const AddExitNodeButton = ({ peer, firstTime = false }: Props) => {
17+
export const AddExitNodeButton = ({
18+
peer,
19+
firstTime = false,
20+
distributionGroups,
21+
}: Props) => {
1622
const [modal, setModal] = useState(false);
1723
const { permission } = usePermissions();
1824

@@ -42,6 +48,7 @@ export const AddExitNodeButton = ({ peer, firstTime = false }: Props) => {
4248
<RouteModalContent
4349
onSuccess={() => setModal(false)}
4450
peer={peer}
51+
distributionGroups={distributionGroups}
4552
isFirstExitNode={firstTime}
4653
exitNode={true}
4754
/>

src/modules/groups/details/GroupNetworkRoutesSection.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DataTableRowsPerPage } from "@components/table/DataTableRowsPerPage";
44
import { usePortalElement } from "@hooks/usePortalElement";
55
import { ColumnDef } from "@tanstack/react-table";
66
import React from "react";
7+
import { useGroupContext } from "@/contexts/GroupProvider";
78
import { Route } from "@/interfaces/Route";
89
import { GroupDetailsTableContainer } from "@/modules/groups/details/GroupDetailsTableContainer";
910
import PeerRouteNameCell from "@/modules/peer/PeerRouteNameCell";
@@ -63,6 +64,7 @@ export const GroupNetworkRoutesTableColumns: ColumnDef<Route>[] = [
6364

6465
export const GroupNetworkRoutesSection = ({ routes }: { routes?: Route[] }) => {
6566
const groupedRoutes = useGroupedRoutes({ routes });
67+
const { group } = useGroupContext();
6668

6769
return (
6870
<GroupDetailsTableContainer>
@@ -71,6 +73,7 @@ export const GroupNetworkRoutesSection = ({ routes }: { routes?: Route[] }) => {
7173
isLoading={false}
7274
groupedRoutes={groupedRoutes}
7375
routes={routes}
76+
distributionGroups={[group]}
7477
/>
7578
</GroupDetailsTableContainer>
7679
);

src/modules/route-group/NetworkRoutesTable.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import NetworkRoutesIcon from "@/assets/icons/NetworkRoutesIcon";
1919
import GroupRouteProvider from "@/contexts/GroupRouteProvider";
2020
import { usePermissions } from "@/contexts/PermissionsProvider";
2121
import { useLocalStorage } from "@/hooks/useLocalStorage";
22+
import { Group } from "@/interfaces/Group";
2223
import { GroupedRoute, Route } from "@/interfaces/Route";
2324
import { AddExitNodeButton } from "@/modules/exit-node/AddExitNodeButton";
2425
import GroupedRouteActionCell from "@/modules/route-group/GroupedRouteActionCell";
@@ -118,6 +119,7 @@ type Props = {
118119
routes?: Route[];
119120
headingTarget?: HTMLHeadingElement | null;
120121
isGroupPage?: boolean;
122+
distributionGroups?: Group[];
121123
};
122124

123125
export default function NetworkRoutesTable({
@@ -126,6 +128,7 @@ export default function NetworkRoutesTable({
126128
routes,
127129
headingTarget,
128130
isGroupPage = false,
131+
distributionGroups,
129132
}: Props) {
130133
const { permission } = usePermissions();
131134
const { mutate } = useSWRConfig();
@@ -155,7 +158,11 @@ export default function NetworkRoutesTable({
155158

156159
return (
157160
<RouteAddRoutingPeerProvider>
158-
<RouteModal open={routeModal} setOpen={setRouteModal} />
161+
<RouteModal
162+
open={routeModal}
163+
setOpen={setRouteModal}
164+
distributionGroups={distributionGroups}
165+
/>
159166
<DataTable
160167
headingTarget={headingTarget}
161168
isLoading={isLoading}
@@ -202,7 +209,7 @@ export default function NetworkRoutesTable({
202209
}
203210
>
204211
<div className={"gap-x-4 flex items-center justify-center mt-4"}>
205-
<AddExitNodeButton />
212+
<AddExitNodeButton distributionGroups={distributionGroups} />
206213
<Button
207214
variant={"primary"}
208215
className={""}
@@ -234,7 +241,7 @@ export default function NetworkRoutesTable({
234241
}
235242
button={
236243
<div className={"gap-x-4 flex items-center justify-center"}>
237-
<AddExitNodeButton />
244+
<AddExitNodeButton distributionGroups={distributionGroups} />
238245
<Button
239246
variant={"primary"}
240247
className={""}
@@ -267,7 +274,7 @@ export default function NetworkRoutesTable({
267274
<>
268275
{routes && routes?.length > 0 && (
269276
<div className={"gap-x-4 ml-auto flex"}>
270-
<AddExitNodeButton />
277+
<AddExitNodeButton distributionGroups={distributionGroups} />
271278
<Button
272279
variant={"primary"}
273280
className={""}

src/modules/routes/RouteModal.tsx

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import React, { useEffect, useMemo, useReducer, useRef, useState } from "react";
4949
import NetworkRoutesIcon from "@/assets/icons/NetworkRoutesIcon";
5050
import { useDialog } from "@/contexts/DialogProvider";
5151
import { useRoutes } from "@/contexts/RoutesProvider";
52+
import { Group } from "@/interfaces/Group";
5253
import { OperatingSystem } from "@/interfaces/OperatingSystem";
5354
import { Peer } from "@/interfaces/Peer";
5455
import { Policy } from "@/interfaces/Policy";
@@ -61,9 +62,15 @@ type Props = {
6162
children?: React.ReactNode;
6263
open?: boolean;
6364
setOpen?: (open: boolean) => void;
65+
distributionGroups?: Group[];
6466
};
6567

66-
export default function RouteModal({ children, open, setOpen }: Props) {
68+
export default function RouteModal({
69+
children,
70+
open,
71+
setOpen,
72+
distributionGroups,
73+
}: Props) {
6774
const { confirm } = useDialog();
6875
const router = useRouter();
6976
const [routePolicyModal, setRoutePolicyModal] = useState(false);
@@ -116,6 +123,7 @@ export default function RouteModal({ children, open, setOpen }: Props) {
116123
await handleCreatePolicyPrompt(r);
117124
setOpen?.(false);
118125
}}
126+
distributionGroups={distributionGroups}
119127
/>
120128
)}
121129
</Modal>
@@ -139,13 +147,15 @@ type ModalProps = {
139147
peer?: Peer;
140148
exitNode?: boolean;
141149
isFirstExitNode?: boolean;
150+
distributionGroups?: Group[];
142151
};
143152

144153
export function RouteModalContent({
145154
onSuccess,
146155
peer,
147156
exitNode,
148157
isFirstExitNode = false,
158+
distributionGroups,
149159
}: ModalProps) {
150160
const { createRoute } = useRoutes();
151161
const [tab, setTab] = useState(
@@ -207,7 +217,7 @@ export function RouteModalContent({
207217
* Distribution Groups
208218
*/
209219
const [groups, setGroups, { getGroupsToUpdate }] = useGroupHelper({
210-
initial: [],
220+
initial: distributionGroups ?? [],
211221
});
212222

213223
/**
@@ -721,17 +731,19 @@ export function RouteModalContent({
721731
/>
722732

723733
{exitNode && (
724-
<FancyToggleSwitch
725-
value={isForced}
726-
onChange={setIsForced}
727-
label={
728-
<>
729-
<IconDirectionSign size={15} />
730-
Auto Apply Route
731-
</>
732-
}
733-
helpText={"Automatically apply this exit node to your distribution groups. This requires NetBird client v0.55.0 or higher."}
734-
/>
734+
<FancyToggleSwitch
735+
value={isForced}
736+
onChange={setIsForced}
737+
label={
738+
<>
739+
<IconDirectionSign size={15} />
740+
Auto Apply Route
741+
</>
742+
}
743+
helpText={
744+
"Automatically apply this exit node to your distribution groups. This requires NetBird client v0.55.0 or higher."
745+
}
746+
/>
735747
)}
736748

737749
{!exitNode && (

0 commit comments

Comments
 (0)