Skip to content

Commit bb03269

Browse files
committed
feat: introduce missing sync write hooks
Exposes useConnectSyncServers, useDisconnectSyncServers, and useSetAutostopDataSyncTimeout.
1 parent 6842c70 commit bb03269

File tree

4 files changed

+107
-1
lines changed

4 files changed

+107
-1
lines changed

docs/API.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
- [useDataSyncProgress](#usedatasyncprogress)
2727
- [useStartSync](#usestartsync)
2828
- [useStopSync](#usestopsync)
29+
- [useConnectSyncServers](#useconnectsyncservers)
30+
- [useDisconnectSyncServers](#usedisconnectsyncservers)
31+
- [useSetAutostopDataSyncTimeout](#usesetautostopdatasynctimeout)
2932
- [useSingleDocByDocId](#usesingledocbydocid)
3033
- [useSingleDocByVersionId](#usesingledocbyversionid)
3134
- [useManyDocs](#usemanydocs)
@@ -526,6 +529,24 @@ Provides the progress of data sync for sync-enabled connected peers
526529
| ---------- | ---------- |
527530
| `useStopSync` | `({ projectId }: { projectId: string; }) => { error: Error; mutate: UseMutateFunction<void, Error, void, unknown>; mutateAsync: UseMutateAsyncFunction<void, Error, void, unknown>; reset: () => void; status: "error"; } or { ...; }` |
528531

532+
### useConnectSyncServers
533+
534+
| Function | Type |
535+
| ---------- | ---------- |
536+
| `useConnectSyncServers` | `({ projectId }: { projectId: string; }) => { error: Error; mutate: UseMutateFunction<void, Error, void, unknown>; mutateAsync: UseMutateAsyncFunction<void, Error, void, unknown>; reset: () => void; status: "error"; } or { ...; }` |
537+
538+
### useDisconnectSyncServers
539+
540+
| Function | Type |
541+
| ---------- | ---------- |
542+
| `useDisconnectSyncServers` | `({ projectId }: { projectId: string; }) => { error: Error; mutate: UseMutateFunction<void, Error, void, unknown>; mutateAsync: UseMutateAsyncFunction<void, Error, void, unknown>; reset: () => void; status: "error"; } or { ...; }` |
543+
544+
### useSetAutostopDataSyncTimeout
545+
546+
| Function | Type |
547+
| ---------- | ---------- |
548+
| `useSetAutostopDataSyncTimeout` | `({ projectId, }: { projectId: string; }) => { error: Error; mutate: UseMutateFunction<void, Error, { after: number or null; }, unknown>; mutateAsync: UseMutateAsyncFunction<void, Error, { ...; }, unknown>; reset: () => void; status: "error"; } or { ...; }` |
549+
529550
### useSingleDocByDocId
530551

531552
Retrieve a single document from the database based on the document's document ID.

src/hooks/projects.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ import { useSyncExternalStore } from 'react'
1414
import {
1515
addServerPeerMutationOptions,
1616
attachmentUrlQueryOptions,
17+
connectSyncServersMutationOptions,
1718
createBlobMutationOptions,
1819
createProjectMutationOptions,
20+
disconnectSyncServersMutationOptions,
1921
documentCreatedByQueryOptions,
2022
iconUrlQueryOptions,
2123
importProjectConfigMutationOptions,
@@ -27,6 +29,7 @@ import {
2729
projectSettingsQueryOptions,
2830
projectsQueryOptions,
2931
removeServerPeerMutationOptions,
32+
setAutostopDataSyncTimeoutMutationOptions,
3033
startSyncMutationOptions,
3134
stopSyncMutationOptions,
3235
updateProjectSettingsMutationOptions,
@@ -567,3 +570,43 @@ export function useStopSync({ projectId }: { projectId: string }) {
567570
? { error, mutate, mutateAsync, reset, status }
568571
: { error: null, mutate, mutateAsync, reset, status }
569572
}
573+
574+
export function useConnectSyncServers({ projectId }: { projectId: string }) {
575+
const { data: projectApi } = useSingleProject({ projectId })
576+
577+
const { error, mutate, mutateAsync, reset, status } = useMutation(
578+
connectSyncServersMutationOptions({ projectApi }),
579+
)
580+
581+
return status === 'error'
582+
? { error, mutate, mutateAsync, reset, status }
583+
: { error: null, mutate, mutateAsync, reset, status }
584+
}
585+
586+
export function useDisconnectSyncServers({ projectId }: { projectId: string }) {
587+
const { data: projectApi } = useSingleProject({ projectId })
588+
589+
const { error, mutate, mutateAsync, reset, status } = useMutation(
590+
disconnectSyncServersMutationOptions({ projectApi }),
591+
)
592+
593+
return status === 'error'
594+
? { error, mutate, mutateAsync, reset, status }
595+
: { error: null, mutate, mutateAsync, reset, status }
596+
}
597+
598+
export function useSetAutostopDataSyncTimeout({
599+
projectId,
600+
}: {
601+
projectId: string
602+
}) {
603+
const { data: projectApi } = useSingleProject({ projectId })
604+
605+
const { error, mutate, mutateAsync, reset, status } = useMutation(
606+
setAutostopDataSyncTimeoutMutationOptions({ projectApi }),
607+
)
608+
609+
return status === 'error'
610+
? { error, mutate, mutateAsync, reset, status }
611+
: { error: null, mutate, mutateAsync, reset, status }
612+
}

src/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@ export {
1616
} from './hooks/documents.js'
1717
export {
1818
useAcceptInvite,
19-
useSetUpInvitesListeners,
2019
useManyInvites,
2120
useRejectInvite,
2221
useRequestCancelInvite,
2322
useSendInvite,
23+
useSetUpInvitesListeners,
2424
useSingleInvite,
2525
} from './hooks/invites.js'
2626
export { useMapStyleUrl } from './hooks/maps.js'
2727
export {
2828
useAddServerPeer,
2929
useAttachmentUrl,
30+
useConnectSyncServers,
3031
useCreateBlob,
3132
useCreateProject,
3233
useDataSyncProgress,
34+
useDisconnectSyncServers,
3335
useDocumentCreatedBy,
3436
useIconUrl,
3537
useImportProjectConfig,
@@ -39,6 +41,7 @@ export {
3941
useOwnRoleInProject,
4042
useProjectSettings,
4143
useRemoveServerPeer,
44+
useSetAutostopDataSyncTimeout,
4245
useSingleMember,
4346
useSingleProject,
4447
useStartSync,

src/lib/react-query/projects.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,3 +476,42 @@ export function stopSyncMutationOptions({
476476
},
477477
} satisfies UseMutationOptions<void, Error, void>
478478
}
479+
480+
export function connectSyncServersMutationOptions({
481+
projectApi,
482+
}: {
483+
projectApi: MapeoProjectApi
484+
}) {
485+
return {
486+
...baseMutationOptions(),
487+
mutationFn: async () => {
488+
return projectApi.$sync.connectServers()
489+
},
490+
} satisfies UseMutationOptions<void, Error, void>
491+
}
492+
493+
export function disconnectSyncServersMutationOptions({
494+
projectApi,
495+
}: {
496+
projectApi: MapeoProjectApi
497+
}) {
498+
return {
499+
...baseMutationOptions(),
500+
mutationFn: async () => {
501+
return projectApi.$sync.disconnectServers()
502+
},
503+
} satisfies UseMutationOptions<void, Error, void>
504+
}
505+
506+
export function setAutostopDataSyncTimeoutMutationOptions({
507+
projectApi,
508+
}: {
509+
projectApi: MapeoProjectApi
510+
}) {
511+
return {
512+
...baseMutationOptions(),
513+
mutationFn: async ({ after }) => {
514+
return projectApi.$sync.setAutostopDataSyncTimeout(after)
515+
},
516+
} satisfies UseMutationOptions<void, Error, { after: number | null }>
517+
}

0 commit comments

Comments
 (0)