Files
helsinki/Pt8_frontendLibrary/src/index.js
T
2024-09-30 15:32:50 +03:00

53 lines
1.3 KiB
JavaScript
Executable File

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import {
ApolloClient,
InMemoryCache,
ApolloProvider,
createHttpLink,
split,
} from "@apollo/client";
import { setContext } from "@apollo/client/link/context";
import { getMainDefinition } from "@apollo/client/utilities";
import { GraphQLWsLink } from "@apollo/client/link/subscriptions";
import { createClient } from "graphql-ws";
const authLink = setContext((_, { headers }) => {
const token = localStorage.getItem("library-user-token");
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : null,
},
};
});
const httpLink = createHttpLink({
uri: "http://localhost:4000",
});
const wsLink = new GraphQLWsLink(createClient({ url: "ws://localhost:4000" }));
const splitLink = split(
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
authLink.concat(httpLink)
);
const client = new ApolloClient({
cache: new InMemoryCache(),
link: splitLink,
});
ReactDOM.createRoot(document.getElementById("root")).render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>
);