()
| 39 | } |
| 40 | |
| 41 | export function useClient() { |
| 42 | const { serverClients, selectedClient, setSelectedClient } = |
| 43 | React.useContext(ClientContext); |
| 44 | const updateClientOptions = useCallback( |
| 45 | async (params: { serverUrl?: string; token?: string } | undefined) => { |
| 46 | if (!params) { |
| 47 | // delete |
| 48 | setSelectedClient(undefined); |
| 49 | return; |
| 50 | } |
| 51 | // No changes |
| 52 | let { serverUrl, token } = params; |
| 53 | serverUrl = serverUrl ?? selectedClient?.serverUrl; |
| 54 | token = token ?? selectedClient?.token; |
| 55 | if (!serverUrl || !token) { |
| 56 | throw new Error('Both serverUrl and token must be provided'); |
| 57 | } |
| 58 | const clientId = createClientId(serverUrl, token); |
| 59 | if (!serverClients.has(clientId)) { |
| 60 | const serverSchema = await fetchSchema(serverUrl); |
| 61 | const newClient = new TriplitClient({ |
| 62 | token, |
| 63 | serverUrl, |
| 64 | schema: serverSchema?.collections, |
| 65 | roles: serverSchema?.roles, |
| 66 | }); |
| 67 | if (newClient.awaitReady) await newClient.awaitReady; |
| 68 | serverClients.set(clientId, newClient); |
| 69 | } |
| 70 | setSelectedClient(serverClients.get(clientId)); |
| 71 | }, |
| 72 | [selectedClient] |
| 73 | ); |
| 74 | |
| 75 | return [selectedClient, updateClientOptions] as const; |
| 76 | } |
no test coverage detected