@comapeo/core-react 6.1.1 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -430,6 +430,47 @@ export declare function useUpdateProjectSettings({ projectId }: {
430
430
  reset: () => void;
431
431
  status: "pending" | "success" | "idle";
432
432
  };
433
+ /**
434
+ * Change a project member's role.
435
+ *
436
+ * @param opts.projectId Project public ID
437
+ *
438
+ * @example
439
+ * ```tsx
440
+ * function BasicExample() {
441
+ * const { mutate } = useChangeMemberRole({ projectId: '...' })
442
+ * // Use one of: COORDINATOR_ROLE_ID, MEMBER_ROLE_ID, BLOCKED_ROLE_ID
443
+ * mutate({ deviceId: '...', roleId: COORDINATOR_ROLE_ID })
444
+ * }
445
+ * ```
446
+ */
447
+ export declare function useChangeMemberRole({ projectId }: {
448
+ projectId: string;
449
+ }): {
450
+ error: Error;
451
+ mutate: import("@tanstack/react-query").UseMutateFunction<void, Error, {
452
+ deviceId: string;
453
+ roleId: import("@comapeo/core", { with: { "resolution-mode": "import" } }).MemberApi.RoleIdAssignableToOthers;
454
+ }, unknown>;
455
+ mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<void, Error, {
456
+ deviceId: string;
457
+ roleId: import("@comapeo/core", { with: { "resolution-mode": "import" } }).MemberApi.RoleIdAssignableToOthers;
458
+ }, unknown>;
459
+ reset: () => void;
460
+ status: "error";
461
+ } | {
462
+ error: null;
463
+ mutate: import("@tanstack/react-query").UseMutateFunction<void, Error, {
464
+ deviceId: string;
465
+ roleId: import("@comapeo/core", { with: { "resolution-mode": "import" } }).MemberApi.RoleIdAssignableToOthers;
466
+ }, unknown>;
467
+ mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<void, Error, {
468
+ deviceId: string;
469
+ roleId: import("@comapeo/core", { with: { "resolution-mode": "import" } }).MemberApi.RoleIdAssignableToOthers;
470
+ }, unknown>;
471
+ reset: () => void;
472
+ status: "pending" | "success" | "idle";
473
+ };
433
474
  /**
434
475
  * Create a blob for a project.
435
476
  *
@@ -15,6 +15,7 @@ exports.useCreateProject = useCreateProject;
15
15
  exports.useLeaveProject = useLeaveProject;
16
16
  exports.useImportProjectConfig = useImportProjectConfig;
17
17
  exports.useUpdateProjectSettings = useUpdateProjectSettings;
18
+ exports.useChangeMemberRole = useChangeMemberRole;
18
19
  exports.useCreateBlob = useCreateBlob;
19
20
  exports.useSyncState = useSyncState;
20
21
  exports.useDataSyncProgress = useDataSyncProgress;
@@ -368,6 +369,28 @@ function useUpdateProjectSettings({ projectId }) {
368
369
  ? { error, mutate, mutateAsync, reset, status }
369
370
  : { error: null, mutate, mutateAsync, reset, status };
370
371
  }
372
+ /**
373
+ * Change a project member's role.
374
+ *
375
+ * @param opts.projectId Project public ID
376
+ *
377
+ * @example
378
+ * ```tsx
379
+ * function BasicExample() {
380
+ * const { mutate } = useChangeMemberRole({ projectId: '...' })
381
+ * // Use one of: COORDINATOR_ROLE_ID, MEMBER_ROLE_ID, BLOCKED_ROLE_ID
382
+ * mutate({ deviceId: '...', roleId: COORDINATOR_ROLE_ID })
383
+ * }
384
+ * ```
385
+ */
386
+ function useChangeMemberRole({ projectId }) {
387
+ const queryClient = (0, react_query_1.useQueryClient)();
388
+ const { data: projectApi } = useSingleProject({ projectId });
389
+ const { error, mutate, mutateAsync, reset, status } = (0, react_query_1.useMutation)((0, projects_js_1.changeMemberRoleMutationOptions)({ projectApi, projectId, queryClient }));
390
+ return status === 'error'
391
+ ? { error, mutate, mutateAsync, reset, status }
392
+ : { error: null, mutate, mutateAsync, reset, status };
393
+ }
371
394
  /**
372
395
  * Create a blob for a project.
373
396
  *
@@ -3,6 +3,6 @@ export { useClientApi, useIsArchiveDevice, useOwnDeviceInfo, useSetIsArchiveDevi
3
3
  export { useCreateDocument, useDeleteDocument, useManyDocs, useSingleDocByDocId, useSingleDocByVersionId, useUpdateDocument, } from './hooks/documents.js';
4
4
  export { useAcceptInvite, useManyInvites, useRejectInvite, useRequestCancelInvite, useSendInvite, useSetUpInvitesListeners, useSingleInvite, } from './hooks/invites.js';
5
5
  export { useMapStyleUrl } from './hooks/maps.js';
6
- export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
6
+ export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useChangeMemberRole, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
7
7
  export { type SyncState } from './lib/sync.js';
8
8
  export { type WriteableDocument, type WriteableDocumentType, type WriteableValue, } from './lib/types.js';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useExportZipFile = exports.useExportGeoJSON = exports.useUpdateProjectSettings = exports.useSyncState = exports.useStopSync = exports.useStartSync = exports.useSingleProject = exports.useSingleMember = exports.useSetAutostopDataSyncTimeout = exports.useRemoveServerPeer = exports.useProjectSettings = exports.useOwnRoleInProject = exports.useManyProjects = exports.useManyMembers = exports.useLeaveProject = exports.useImportProjectConfig = exports.useIconUrl = exports.useDocumentCreatedBy = exports.useDisconnectSyncServers = exports.useDataSyncProgress = exports.useCreateProject = exports.useCreateBlob = exports.useConnectSyncServers = exports.useAttachmentUrl = exports.useAddServerPeer = exports.useMapStyleUrl = exports.useSingleInvite = exports.useSetUpInvitesListeners = exports.useSendInvite = exports.useRequestCancelInvite = exports.useRejectInvite = exports.useManyInvites = exports.useAcceptInvite = exports.useUpdateDocument = exports.useSingleDocByVersionId = exports.useSingleDocByDocId = exports.useManyDocs = exports.useDeleteDocument = exports.useCreateDocument = exports.useSetOwnDeviceInfo = exports.useSetIsArchiveDevice = exports.useOwnDeviceInfo = exports.useIsArchiveDevice = exports.useClientApi = exports.ClientApiProvider = exports.ClientApiContext = void 0;
3
+ exports.useExportZipFile = exports.useExportGeoJSON = exports.useChangeMemberRole = exports.useUpdateProjectSettings = exports.useSyncState = exports.useStopSync = exports.useStartSync = exports.useSingleProject = exports.useSingleMember = exports.useSetAutostopDataSyncTimeout = exports.useRemoveServerPeer = exports.useProjectSettings = exports.useOwnRoleInProject = exports.useManyProjects = exports.useManyMembers = exports.useLeaveProject = exports.useImportProjectConfig = exports.useIconUrl = exports.useDocumentCreatedBy = exports.useDisconnectSyncServers = exports.useDataSyncProgress = exports.useCreateProject = exports.useCreateBlob = exports.useConnectSyncServers = exports.useAttachmentUrl = exports.useAddServerPeer = exports.useMapStyleUrl = exports.useSingleInvite = exports.useSetUpInvitesListeners = exports.useSendInvite = exports.useRequestCancelInvite = exports.useRejectInvite = exports.useManyInvites = exports.useAcceptInvite = exports.useUpdateDocument = exports.useSingleDocByVersionId = exports.useSingleDocByDocId = exports.useManyDocs = exports.useDeleteDocument = exports.useCreateDocument = exports.useSetOwnDeviceInfo = exports.useSetIsArchiveDevice = exports.useOwnDeviceInfo = exports.useIsArchiveDevice = exports.useClientApi = exports.ClientApiProvider = exports.ClientApiContext = void 0;
4
4
  var ClientApi_js_1 = require("./contexts/ClientApi.js");
5
5
  Object.defineProperty(exports, "ClientApiContext", { enumerable: true, get: function () { return ClientApi_js_1.ClientApiContext; } });
6
6
  Object.defineProperty(exports, "ClientApiProvider", { enumerable: true, get: function () { return ClientApi_js_1.ClientApiProvider; } });
@@ -51,5 +51,6 @@ Object.defineProperty(exports, "useStartSync", { enumerable: true, get: function
51
51
  Object.defineProperty(exports, "useStopSync", { enumerable: true, get: function () { return projects_js_1.useStopSync; } });
52
52
  Object.defineProperty(exports, "useSyncState", { enumerable: true, get: function () { return projects_js_1.useSyncState; } });
53
53
  Object.defineProperty(exports, "useUpdateProjectSettings", { enumerable: true, get: function () { return projects_js_1.useUpdateProjectSettings; } });
54
+ Object.defineProperty(exports, "useChangeMemberRole", { enumerable: true, get: function () { return projects_js_1.useChangeMemberRole; } });
54
55
  Object.defineProperty(exports, "useExportGeoJSON", { enumerable: true, get: function () { return projects_js_1.useExportGeoJSON; } });
55
56
  Object.defineProperty(exports, "useExportZipFile", { enumerable: true, get: function () { return projects_js_1.useExportZipFile; } });
@@ -1,4 +1,4 @@
1
- import type { BlobApi } from '@comapeo/core' with { 'resolution-mode': 'import' };
1
+ import type { BlobApi, MemberApi } from '@comapeo/core' with { 'resolution-mode': 'import' };
2
2
  import type { MapeoClientApi, MapeoProjectApi } from '@comapeo/ipc' with { 'resolution-mode': 'import' };
3
3
  import type { ProjectSettings } from '@comapeo/schema' with { 'resolution-mode': 'import' };
4
4
  import { type QueryClient, type UnusedSkipTokenOptions } from '@tanstack/react-query';
@@ -186,6 +186,19 @@ export declare function updateProjectSettingsMutationOptions({ projectApi, query
186
186
  networkMode: "always";
187
187
  retry: false;
188
188
  };
189
+ export declare function changeMemberRoleMutationOptions({ projectApi, projectId, queryClient, }: {
190
+ projectApi: MapeoProjectApi;
191
+ projectId: string;
192
+ queryClient: QueryClient;
193
+ }): {
194
+ mutationFn: ({ deviceId, roleId }: {
195
+ deviceId: string;
196
+ roleId: MemberApi.RoleIdAssignableToOthers;
197
+ }) => Promise<void>;
198
+ onSuccess: () => void;
199
+ networkMode: "always";
200
+ retry: false;
201
+ };
189
202
  export declare function createBlobMutationOptions({ projectApi, }: {
190
203
  projectApi: MapeoProjectApi;
191
204
  }): {
@@ -22,6 +22,7 @@ exports.createProjectMutationOptions = createProjectMutationOptions;
22
22
  exports.leaveProjectMutationOptions = leaveProjectMutationOptions;
23
23
  exports.importProjectConfigMutationOptions = importProjectConfigMutationOptions;
24
24
  exports.updateProjectSettingsMutationOptions = updateProjectSettingsMutationOptions;
25
+ exports.changeMemberRoleMutationOptions = changeMemberRoleMutationOptions;
25
26
  exports.createBlobMutationOptions = createBlobMutationOptions;
26
27
  exports.startSyncMutationOptions = startSyncMutationOptions;
27
28
  exports.stopSyncMutationOptions = stopSyncMutationOptions;
@@ -247,6 +248,22 @@ function updateProjectSettingsMutationOptions({ projectApi, queryClient, }) {
247
248
  },
248
249
  };
249
250
  }
251
+ function changeMemberRoleMutationOptions({ projectApi, projectId, queryClient, }) {
252
+ return {
253
+ ...(0, shared_js_1.baseMutationOptions)(),
254
+ mutationFn: async ({ deviceId, roleId }) => {
255
+ return projectApi.$member.assignRole(deviceId, roleId);
256
+ },
257
+ onSuccess: () => {
258
+ queryClient.invalidateQueries({
259
+ queryKey: getMembersQueryKey({ projectId }),
260
+ });
261
+ queryClient.invalidateQueries({
262
+ queryKey: getProjectRoleQueryKey({ projectId }),
263
+ });
264
+ },
265
+ };
266
+ }
250
267
  function createBlobMutationOptions({ projectApi, }) {
251
268
  return {
252
269
  ...(0, shared_js_1.baseMutationOptions)(),
@@ -430,6 +430,47 @@ export declare function useUpdateProjectSettings({ projectId }: {
430
430
  reset: () => void;
431
431
  status: "pending" | "success" | "idle";
432
432
  };
433
+ /**
434
+ * Change a project member's role.
435
+ *
436
+ * @param opts.projectId Project public ID
437
+ *
438
+ * @example
439
+ * ```tsx
440
+ * function BasicExample() {
441
+ * const { mutate } = useChangeMemberRole({ projectId: '...' })
442
+ * // Use one of: COORDINATOR_ROLE_ID, MEMBER_ROLE_ID, BLOCKED_ROLE_ID
443
+ * mutate({ deviceId: '...', roleId: COORDINATOR_ROLE_ID })
444
+ * }
445
+ * ```
446
+ */
447
+ export declare function useChangeMemberRole({ projectId }: {
448
+ projectId: string;
449
+ }): {
450
+ error: Error;
451
+ mutate: import("@tanstack/react-query").UseMutateFunction<void, Error, {
452
+ deviceId: string;
453
+ roleId: import("@comapeo/core").MemberApi.RoleIdAssignableToOthers;
454
+ }, unknown>;
455
+ mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<void, Error, {
456
+ deviceId: string;
457
+ roleId: import("@comapeo/core").MemberApi.RoleIdAssignableToOthers;
458
+ }, unknown>;
459
+ reset: () => void;
460
+ status: "error";
461
+ } | {
462
+ error: null;
463
+ mutate: import("@tanstack/react-query").UseMutateFunction<void, Error, {
464
+ deviceId: string;
465
+ roleId: import("@comapeo/core").MemberApi.RoleIdAssignableToOthers;
466
+ }, unknown>;
467
+ mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<void, Error, {
468
+ deviceId: string;
469
+ roleId: import("@comapeo/core").MemberApi.RoleIdAssignableToOthers;
470
+ }, unknown>;
471
+ reset: () => void;
472
+ status: "pending" | "success" | "idle";
473
+ };
433
474
  /**
434
475
  * Create a blob for a project.
435
476
  *
@@ -1,6 +1,6 @@
1
1
  import { useMutation, useQueryClient, useSuspenseQuery, } from '@tanstack/react-query';
2
2
  import { useSyncExternalStore } from 'react';
3
- import { addServerPeerMutationOptions, connectSyncServersMutationOptions, createBlobMutationOptions, createProjectMutationOptions, disconnectSyncServersMutationOptions, documentCreatedByQueryOptions, exportGeoJSONMutationOptions, exportZipFileMutationOptions, importProjectConfigMutationOptions, leaveProjectMutationOptions, mediaServerOriginQueryOptions, projectByIdQueryOptions, projectMemberByIdQueryOptions, projectMembersQueryOptions, projectOwnRoleQueryOptions, projectSettingsQueryOptions, projectsQueryOptions, removeServerPeerMutationOptions, setAutostopDataSyncTimeoutMutationOptions, startSyncMutationOptions, stopSyncMutationOptions, updateProjectSettingsMutationOptions, } from '../lib/react-query/projects.js';
3
+ import { addServerPeerMutationOptions, changeMemberRoleMutationOptions, connectSyncServersMutationOptions, createBlobMutationOptions, createProjectMutationOptions, disconnectSyncServersMutationOptions, documentCreatedByQueryOptions, exportGeoJSONMutationOptions, exportZipFileMutationOptions, importProjectConfigMutationOptions, leaveProjectMutationOptions, mediaServerOriginQueryOptions, projectByIdQueryOptions, projectMemberByIdQueryOptions, projectMembersQueryOptions, projectOwnRoleQueryOptions, projectSettingsQueryOptions, projectsQueryOptions, removeServerPeerMutationOptions, setAutostopDataSyncTimeoutMutationOptions, startSyncMutationOptions, stopSyncMutationOptions, updateProjectSettingsMutationOptions, } from '../lib/react-query/projects.js';
4
4
  import { SyncStore } from '../lib/sync.js';
5
5
  import { getBlobUrl, getIconUrl } from '../lib/urls.js';
6
6
  import { useClientApi } from './client.js';
@@ -341,6 +341,28 @@ export function useUpdateProjectSettings({ projectId }) {
341
341
  ? { error, mutate, mutateAsync, reset, status }
342
342
  : { error: null, mutate, mutateAsync, reset, status };
343
343
  }
344
+ /**
345
+ * Change a project member's role.
346
+ *
347
+ * @param opts.projectId Project public ID
348
+ *
349
+ * @example
350
+ * ```tsx
351
+ * function BasicExample() {
352
+ * const { mutate } = useChangeMemberRole({ projectId: '...' })
353
+ * // Use one of: COORDINATOR_ROLE_ID, MEMBER_ROLE_ID, BLOCKED_ROLE_ID
354
+ * mutate({ deviceId: '...', roleId: COORDINATOR_ROLE_ID })
355
+ * }
356
+ * ```
357
+ */
358
+ export function useChangeMemberRole({ projectId }) {
359
+ const queryClient = useQueryClient();
360
+ const { data: projectApi } = useSingleProject({ projectId });
361
+ const { error, mutate, mutateAsync, reset, status } = useMutation(changeMemberRoleMutationOptions({ projectApi, projectId, queryClient }));
362
+ return status === 'error'
363
+ ? { error, mutate, mutateAsync, reset, status }
364
+ : { error: null, mutate, mutateAsync, reset, status };
365
+ }
344
366
  /**
345
367
  * Create a blob for a project.
346
368
  *
@@ -3,6 +3,6 @@ export { useClientApi, useIsArchiveDevice, useOwnDeviceInfo, useSetIsArchiveDevi
3
3
  export { useCreateDocument, useDeleteDocument, useManyDocs, useSingleDocByDocId, useSingleDocByVersionId, useUpdateDocument, } from './hooks/documents.js';
4
4
  export { useAcceptInvite, useManyInvites, useRejectInvite, useRequestCancelInvite, useSendInvite, useSetUpInvitesListeners, useSingleInvite, } from './hooks/invites.js';
5
5
  export { useMapStyleUrl } from './hooks/maps.js';
6
- export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
6
+ export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useChangeMemberRole, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
7
7
  export { type SyncState } from './lib/sync.js';
8
8
  export { type WriteableDocument, type WriteableDocumentType, type WriteableValue, } from './lib/types.js';
package/dist/esm/index.js CHANGED
@@ -3,4 +3,4 @@ export { useClientApi, useIsArchiveDevice, useOwnDeviceInfo, useSetIsArchiveDevi
3
3
  export { useCreateDocument, useDeleteDocument, useManyDocs, useSingleDocByDocId, useSingleDocByVersionId, useUpdateDocument, } from './hooks/documents.js';
4
4
  export { useAcceptInvite, useManyInvites, useRejectInvite, useRequestCancelInvite, useSendInvite, useSetUpInvitesListeners, useSingleInvite, } from './hooks/invites.js';
5
5
  export { useMapStyleUrl } from './hooks/maps.js';
6
- export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
6
+ export { useAddServerPeer, useAttachmentUrl, useConnectSyncServers, useCreateBlob, useCreateProject, useDataSyncProgress, useDisconnectSyncServers, useDocumentCreatedBy, useIconUrl, useImportProjectConfig, useLeaveProject, useManyMembers, useManyProjects, useOwnRoleInProject, useProjectSettings, useRemoveServerPeer, useSetAutostopDataSyncTimeout, useSingleMember, useSingleProject, useStartSync, useStopSync, useSyncState, useUpdateProjectSettings, useChangeMemberRole, useExportGeoJSON, useExportZipFile, } from './hooks/projects.js';
@@ -1,4 +1,4 @@
1
- import type { BlobApi } from '@comapeo/core' with { 'resolution-mode': 'import' };
1
+ import type { BlobApi, MemberApi } from '@comapeo/core' with { 'resolution-mode': 'import' };
2
2
  import type { MapeoClientApi, MapeoProjectApi } from '@comapeo/ipc' with { 'resolution-mode': 'import' };
3
3
  import type { ProjectSettings } from '@comapeo/schema' with { 'resolution-mode': 'import' };
4
4
  import { type QueryClient, type UnusedSkipTokenOptions } from '@tanstack/react-query';
@@ -186,6 +186,19 @@ export declare function updateProjectSettingsMutationOptions({ projectApi, query
186
186
  networkMode: "always";
187
187
  retry: false;
188
188
  };
189
+ export declare function changeMemberRoleMutationOptions({ projectApi, projectId, queryClient, }: {
190
+ projectApi: MapeoProjectApi;
191
+ projectId: string;
192
+ queryClient: QueryClient;
193
+ }): {
194
+ mutationFn: ({ deviceId, roleId }: {
195
+ deviceId: string;
196
+ roleId: MemberApi.RoleIdAssignableToOthers;
197
+ }) => Promise<void>;
198
+ onSuccess: () => void;
199
+ networkMode: "always";
200
+ retry: false;
201
+ };
189
202
  export declare function createBlobMutationOptions({ projectApi, }: {
190
203
  projectApi: MapeoProjectApi;
191
204
  }): {
@@ -215,6 +215,22 @@ export function updateProjectSettingsMutationOptions({ projectApi, queryClient,
215
215
  },
216
216
  };
217
217
  }
218
+ export function changeMemberRoleMutationOptions({ projectApi, projectId, queryClient, }) {
219
+ return {
220
+ ...baseMutationOptions(),
221
+ mutationFn: async ({ deviceId, roleId }) => {
222
+ return projectApi.$member.assignRole(deviceId, roleId);
223
+ },
224
+ onSuccess: () => {
225
+ queryClient.invalidateQueries({
226
+ queryKey: getMembersQueryKey({ projectId }),
227
+ });
228
+ queryClient.invalidateQueries({
229
+ queryKey: getProjectRoleQueryKey({ projectId }),
230
+ });
231
+ },
232
+ };
233
+ }
218
234
  export function createBlobMutationOptions({ projectApi, }) {
219
235
  return {
220
236
  ...baseMutationOptions(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comapeo/core-react",
3
- "version": "6.1.1",
3
+ "version": "6.2.0",
4
4
  "description": "React wrapper for working with @comapeo/core",
5
5
  "repository": {
6
6
  "type": "git",
@@ -57,16 +57,16 @@
57
57
  "types": "tsc"
58
58
  },
59
59
  "peerDependencies": {
60
- "@comapeo/core": "^4.1.3",
60
+ "@comapeo/core": "^4.3.0",
61
61
  "@comapeo/ipc": "^5.0.0",
62
62
  "@comapeo/schema": "*",
63
63
  "@tanstack/react-query": "^5",
64
64
  "react": "^18 || ^19"
65
65
  },
66
66
  "devDependencies": {
67
- "@comapeo/core": "4.1.3",
67
+ "@comapeo/core": "4.3.0",
68
68
  "@comapeo/ipc": "5.0.0",
69
- "@comapeo/schema": "2.0.0",
69
+ "@comapeo/schema": "2.1.1",
70
70
  "@eslint/compat": "1.3.0",
71
71
  "@eslint/js": "9.29.0",
72
72
  "@ianvs/prettier-plugin-sort-imports": "4.4.2",
@@ -84,6 +84,7 @@
84
84
  "eslint-plugin-testing-library": "7.5.3",
85
85
  "fastify": "4.29.1",
86
86
  "globals": "16.2.0",
87
+ "happy-dom": "18.0.1",
87
88
  "husky": "9.1.7",
88
89
  "lint-staged": "15.5.1",
89
90
  "npm-run-all2": "7.0.2",