feat(directories): add create dialogs for communities and DoH profiles
CI / changes (push) Successful in 6s
CI / commitlint (push) Skipped
CI / go (push) Skipped
CI / bird2 (push) Skipped
CI / openapi (push) Successful in 41s
CI / web (push) Successful in 1m13s
CI / release (push) Successful in 4m35s

На странице Справочники добавлены кнопки «Добавить» и FormDrawer
для POST /v1/communities и /v1/doh-profiles. Доступ ограничен
bgp:directories:write (sessionCanWriteDirectories).

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-08-12 12:24:10 +07:00
co-authored by Cursor
parent 821f342476
commit fc4f234cc5
5 changed files with 314 additions and 11 deletions
+40 -3
View File
@@ -1,6 +1,15 @@
import { queryOptions } from '@tanstack/react-query'
import { apiJSON } from '@/lib/api-client'
import type { CommunitiesResponse, DohProfilesResponse } from '@/types/api'
import { queryOptions, useMutation, useQueryClient } from '@tanstack/react-query'
import { toast } from 'sonner'
import { apiJSON, apiMutate } from '@/lib/api-client'
import type {
BgpCommunity,
BgpCommunityCreate,
CommunitiesResponse,
DohProfile,
DohProfileCreate,
DohProfilesResponse,
} from '@/types/api'
export const directoriesKeys = {
all: ['directories'] as const,
@@ -23,3 +32,31 @@ export function directoriesDohQueryOptions() {
staleTime: 30_000,
})
}
export function useCreateCommunityMutation() {
const qc = useQueryClient()
return useMutation({
mutationFn: (body: BgpCommunityCreate) =>
apiMutate<BgpCommunity>('/v1/communities', 'POST', body, { idempotent: false }),
onSuccess: () => {
toast.success('Сообщество создано')
void qc.invalidateQueries({ queryKey: directoriesKeys.communities() })
},
onError: (e) =>
toast.error(e instanceof Error ? e.message : 'Не удалось создать сообщество'),
})
}
export function useCreateDohProfileMutation() {
const qc = useQueryClient()
return useMutation({
mutationFn: (body: DohProfileCreate) =>
apiMutate<DohProfile>('/v1/doh-profiles', 'POST', body, { idempotent: false }),
onSuccess: () => {
toast.success('DoH-профиль создан')
void qc.invalidateQueries({ queryKey: directoriesKeys.doh() })
},
onError: (e) =>
toast.error(e instanceof Error ? e.message : 'Не удалось создать DoH-профиль'),
})
}