Mutation Structure
Mutations are defined using thegql template tag, similar to queries:
Common Mutation Patterns
Create Mutation
Create a new resource:packages/codegen/query/organization.ts
Update Mutation
Update an existing resource:packages/codegen/query/user.ts
Delete Mutation
Delete a resource:packages/codegen/query/organization.ts
Bulk Create Mutation
Create multiple resources at once:packages/codegen/query/organization.ts
Update Nested Resource
Update a nested resource like settings:packages/codegen/query/user.ts
Transfer Ownership Mutation
Special mutation for transferring resource ownership:packages/codegen/query/organization.ts
Using Mutations in Components
Real example from the codebase:apps/console/src/components/pages/protected/profile/user-settings/profile-name-form.tsx
Mutation Hook Options
Mutation hooks return several useful properties:Synchronous Mutation
Asynchronous Mutation
File Upload Mutations
Some mutations support file uploads:apps/console/src/lib/graphql-hooks/user.ts
Cache Invalidation
Mutations automatically invalidate related queries:apps/console/src/lib/graphql-hooks/user.ts
Invalidation Patterns
Optimistic Updates
Update UI immediately before server responds:Error Handling
Handle GraphQL errors gracefully:Response Extensions
Some mutations return custom extensions:apps/console/src/lib/graphql-hooks/organization.ts
Best Practices
Handle All States
Always handle pending, error, and success states in your UI.
Invalidate Related Queries
Invalidate query cache after mutations to keep data fresh.
Use Optimistic Updates
For better UX, update the UI optimistically before the server responds.
Parse Error Messages
Use utility functions to extract user-friendly error messages from GraphQL errors.
Disable During Submission
Disable form submission while mutations are pending to prevent duplicate requests.
Show User Feedback
Always show success/error notifications after mutations complete.