Skip to content

Commit 8379209

Browse files
committed
fix: avoid es connections when it is not installed
1 parent b60f506 commit 8379209

File tree

5 files changed

+51
-30
lines changed

5 files changed

+51
-30
lines changed

src/components/EventStream.tsx renamed to src/components/eventStream/EventStream.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,20 @@ import {
99
import { useAtom } from "jotai";
1010
import { useSnackbar } from "notistack";
1111

12-
import { useASAuthorizationStatus } from "../hooks/useIsAuthorized";
13-
import { getMessageFromEvent, protoBlobToText } from "../protobuf/protobuf";
14-
import { eventStreamEnabledAtom } from "../state/eventStream";
15-
import { EventMessage } from "./eventMessages/EventMessage";
12+
import { useASAuthorizationStatus } from "../../hooks/useIsAuthorized";
13+
import { getMessageFromEvent, protoBlobToText } from "../../protobuf/protobuf";
14+
import { eventStreamEnabledAtom } from "../../state/eventStream";
15+
import { EventMessage } from "../eventMessages/EventMessage";
16+
import { useIsEventStreamInstalled } from "./useIsEventStreamInstalled";
1617

1718
export const EventStream = () => {
19+
const isEventStreamInstalled = useIsEventStreamInstalled();
1820
const [location, setLocation] = useState<string | null>(null);
1921
const { enqueueSnackbar } = useSnackbar();
2022
const asRole = useASAuthorizationStatus();
23+
2124
const { data, error: streamError } = useGetEventStream({
22-
query: { select: (data) => data.location, enabled: !!asRole },
25+
query: { select: (data) => data.location, enabled: !!asRole && isEventStreamInstalled },
2326
});
2427
const { mutate: createEventStream } = useCreateEventStream({
2528
mutation: {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* EventStreamToggle renders a switch to enable or disable the event stream (alpha feature).
3+
*/
4+
5+
import { FormControlLabel, Switch } from "@mui/material";
6+
import { useAtom } from "jotai";
7+
8+
import { eventStreamEnabledAtom } from "../../state/eventStream";
9+
import { useIsEventStreamInstalled } from "./useIsEventStreamInstalled";
10+
11+
export const EventStreamToggle = () => {
12+
const isEventStreamInstalled = useIsEventStreamInstalled();
13+
14+
const [eventStreamEnabled, setEventStreamEnabled] = useAtom(eventStreamEnabledAtom);
15+
return (
16+
<FormControlLabel
17+
control={
18+
<Switch
19+
checked={eventStreamEnabled}
20+
color="primary"
21+
disabled={!isEventStreamInstalled}
22+
onChange={(_, checked) => setEventStreamEnabled(checked)}
23+
/>
24+
}
25+
label={`Event stream ${isEventStreamInstalled ? "(alpha)" : "(not available)"}`}
26+
sx={{ mb: 2 }}
27+
/>
28+
);
29+
};
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { EventStreamVersionGetResponseProtocol } from "@squonk/account-server-client";
2+
import { useGetEventStreamVersion } from "@squonk/account-server-client/event-stream";
3+
4+
export const useIsEventStreamInstalled = () => {
5+
const { data: protocol } = useGetEventStreamVersion({
6+
query: { select: (data) => data.protocol },
7+
});
8+
return protocol === EventStreamVersionGetResponseProtocol.WEBSOCKET;
9+
};

src/layouts/navigation/UserMenuContent.tsx

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
11
import { Person as PersonIcon } from "@mui/icons-material";
2-
import {
3-
Alert,
4-
Box,
5-
Chip,
6-
FormControlLabel,
7-
Switch,
8-
Typography,
9-
useMediaQuery,
10-
useTheme,
11-
} from "@mui/material";
12-
import { useAtom } from "jotai";
2+
import { Alert, Box, Chip, Typography, useMediaQuery, useTheme } from "@mui/material";
133

144
import { AuthButton } from "../../components/auth/AuthButton";
155
import { CenterLoader } from "../../components/CenterLoader";
166
import { Chips } from "../../components/Chips";
177
import { ColourSchemeSelection } from "../../components/ColourSchemeSelection";
8+
import { EventStreamToggle } from "../../components/eventStream/EventStreamToggle";
189
import { useASAuthorizationStatus, useDMAuthorizationStatus } from "../../hooks/useIsAuthorized";
1910
import { useKeycloakUser } from "../../hooks/useKeycloakUser";
20-
import { eventStreamEnabledAtom } from "../../state/eventStream";
2111

2212
/**
2313
* Content of the user menu
2414
*/
2515
export const UserMenuContent = () => {
2616
const theme = useTheme();
2717
const biggerThanMd = useMediaQuery(theme.breakpoints.up("md"));
28-
const [eventStreamEnabled, setEventStreamEnabled] = useAtom(eventStreamEnabledAtom);
18+
// Removed eventStreamEnabledAtom usage, now handled in EventStreamToggle
2919

3020
return (
3121
<Box sx={{ textAlign: biggerThanMd ? "center" : undefined }}>
@@ -34,17 +24,7 @@ export const UserMenuContent = () => {
3424
</Typography>
3525
<UserMenuContentInner />
3626
<ColourSchemeSelection />
37-
<FormControlLabel
38-
control={
39-
<Switch
40-
checked={eventStreamEnabled}
41-
color="primary"
42-
onChange={(_, checked) => setEventStreamEnabled(checked)}
43-
/>
44-
}
45-
label="Event stream (alpha)"
46-
sx={{ mb: 2 }}
47-
/>
27+
<EventStreamToggle />
4828
</Box>
4929
);
5030
};

src/pages/_app.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Head from "next/head";
1717
import { ConfiguredSnackbarProvider } from "../components/app/ConfiguredSnackbarProvider";
1818
import { ThemeProviders } from "../components/app/ThemeProviders";
1919
import { TopLevelHooks } from "../components/app/TopLevelHooks";
20-
import { EventStream } from "../components/EventStream";
20+
import { EventStream } from "../components/eventStream/EventStream";
2121
import { openSansFont } from "../constants/fonts";
2222
import { AS_API_URL, DM_API_URL } from "../constants/proxies";
2323
import { MDXComponentProvider } from "../context/MDXComponentProvider";

0 commit comments

Comments
 (0)