Files
supabase/apps/studio/data/config/postgres-config-mutation.ts
Joshen Lim 0044bb8e4f Add log configuration in database settings (#47212)
## Context

Adds a log configuration section under database settings, which exposes
2 toggles:
- Log connections
- Log disconnections

<img width="757" height="336" alt="image"
src="https://github.com/user-attachments/assets/e2615baf-f01b-43e2-b2a5-b106aacc59d9"
/>

UI changes are flagged for internal on prod

## To test
- [ ] Can toggle + save either options
- [ ] Configuration should load correctly with a refresh
- [ ] Should only be for hosted

Related docs PR: https://github.com/supabase/supabase/pull/47199

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added connection logging configuration for database projects, allowing
users to toggle logging of database connections and disconnections.
* The new settings UI is available on supported platforms and only when
the feature flag is enabled.
* Included backend-backed retrieval and updates for the PostgreSQL
configuration, with save/cancel behavior, form defaults, and
permission-aware controls.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-23 19:50:43 +08:00

68 lines
1.8 KiB
TypeScript

import { useMutation, useQueryClient } from '@tanstack/react-query'
import { toast } from 'sonner'
import { configKeys } from './keys'
import { handleError, put } from '@/data/fetchers'
import type { ResponseError, UseCustomMutationOptions } from '@/types'
export type PostgresConfigurationUpdateVariables = {
projectRef: string
payload: {
log_connections: boolean
log_disconnections: boolean
}
}
export async function updatePostgresConfiguration({
projectRef,
payload,
}: PostgresConfigurationUpdateVariables) {
const { data, error } = await put('/v1/projects/{ref}/config/database/postgres', {
params: { path: { ref: projectRef } },
body: payload,
})
if (error) handleError(error)
return data
}
type PostgresConfigurationUpdateData = Awaited<ReturnType<typeof updatePostgresConfiguration>>
export const usePostgresConfigurationUpdateMutation = ({
onSuccess,
onError,
...options
}: Omit<
UseCustomMutationOptions<
PostgresConfigurationUpdateData,
ResponseError,
PostgresConfigurationUpdateVariables
>,
'mutationFn'
> = {}) => {
const queryClient = useQueryClient()
return useMutation<
PostgresConfigurationUpdateData,
ResponseError,
PostgresConfigurationUpdateVariables
>({
mutationFn: (vars) => updatePostgresConfiguration(vars),
async onSuccess(data, variables, context) {
const { projectRef } = variables
await queryClient.invalidateQueries({
queryKey: configKeys.postgresConfig(projectRef),
})
await onSuccess?.(data, variables, context)
},
async onError(data, variables, context) {
if (onError === undefined) {
toast.error(`Failed to update postgres configuration: ${data.message}`)
} else {
onError(data, variables, context)
}
},
...options,
})
}