Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 33 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,52 @@ npm install react @tanstack/react-query@5 @comapeo/core-react @comapeo/core @com

Wrap your application with `ComapeoCoreProvider` and a React Query `QueryClientProvider`. You will need to be running an instance of [`@comapeo/map-server`](https://github.com/digidem/comapeo-map-server) and provide a `getMapServerBaseUrl` function that returns a Promise resolving to the base URL of your map server:

```tsx
In the server:

```ts
import { ComapeoCoreProvider } from '@comapeo/core-react'
import {
createComapeoCoreServer,
createComapeoServicesServer,
} from '@comapeo/ipc/server.js'
import { createServer } from '@comapeo/map-server'

const mapServer = createServer()
const listenPromise = mapServer.listen()

const servicesServer = createComapeoServicesServer(
{
mapServer: {
getBaseUrl: async () => {
const { localPort } = await listenPromise()
return `http://localhost:${localPort}`
},
},
},
port,
)
```

In the client:

```tsx
import {
createComapeoCoreClient,
createComapeoServicesClient,
} from '@comapeo/ipc/client.js'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'

const queryClient = new QueryClient()

const server = createServer()
const listenPromise = server.listen()

const getMapServerBaseUrl = async () => {
const { localPort } = await listenPromise
return new URL(`http://localhost:${localPort}/`)
}
const servicesClient = createComapeoServicesClient(port)

function App() {
return (
<QueryClientProvider client={queryClient}>
<ComapeoCoreProvider
clientApi={clientApi}
queryClient={queryClient}
getMapServerBaseUrl={getMapServerBaseUrl}
getMapServerBaseUrl={servicesClient.mapServer.getBaseUrl}
>
<MyApp />
</ComapeoCoreProvider>
Expand Down
2 changes: 1 addition & 1 deletion docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -1462,7 +1462,7 @@ function SentShareStatus({ shareId }: { shareId: string }) {

| Type | Type |
| ---------- | ---------- |
| `MapServerApiOptions` | `{ getBaseUrl(): Promise<URL> /** * We assume the passed fetch implementation will only accept a `string` as * input, not a `URL` or `Request`, because right now the expo/fetch * implementation will only accept a `string`. Adding this restriction will * catch potential issues if we try to pass a URL in our code. Can be relaxed * when https://github.com/expo/expo/issues/43193 is fixed upstream. */ fetch?(input: string, options?: RequestInit): Promise<Response> }` |
| `MapServerApiOptions` | `{ getBaseUrl(): Promise<URL or string> /** * We assume the passed fetch implementation will only accept a `string` as * input, not a `URL` or `Request`, because right now the expo/fetch * implementation will only accept a `string`. Adding this restriction will * catch potential issues if we try to pass a URL in our code. Can be relaxed * when https://github.com/expo/expo/issues/43193 is fixed upstream. */ fetch?(input: string, options?: RequestInit): Promise<Response> }` |

### MapServerApi

Expand Down
2 changes: 1 addition & 1 deletion src/contexts/ComapeoCore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { MapServerProvider, type MapServerProviderProps } from './MapServer.js'

type ComapeoCoreProviderProps = ClientApiProviderProps &
Omit<MapServerProviderProps, 'getBaseUrl'> & {
getMapServerBaseUrl(): Promise<URL>
getMapServerBaseUrl(): Promise<URL | string>
}

export function ComapeoCoreProvider({
Expand Down
2 changes: 1 addition & 1 deletion src/contexts/MapServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
} from './MapShares.js'

export type MapServerApiOptions = {
getBaseUrl(): Promise<URL>
getBaseUrl(): Promise<URL | string>
/**
* We assume the passed fetch implementation will only accept a `string` as
* input, not a `URL` or `Request`, because right now the expo/fetch
Expand Down
2 changes: 1 addition & 1 deletion test/helpers/react.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export function createWrapper({
}: {
clientApi?: ComapeoCoreClientApi
queryClient?: QueryClient
getMapServerBaseUrl?: () => Promise<URL>
getMapServerBaseUrl?: () => Promise<URL | string>
} = {}) {
return ({ children }: PropsWithChildren<unknown>) => {
return (
Expand Down
Loading