import { useId } from "react" import { Controller, useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { z } from "zod" import { ExternalLink, Inbox, KeyRound, Loader2, Plus, Trash2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldSet, } from "@/components/ui/field" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { useAccounts, useCreateAccount, useDeleteAccount } from "@/hooks/useApi" const createAccountSchema = z.object({ provider: z.literal("selectel"), secret: z.string().min(1, "Укажите API-ключ"), comment: z.string().min(1, "Укажите комментарий"), }) type CreateAccountForm = z.infer export function AccountsPage() { const accounts = useAccounts() const createAccount = useCreateAccount() const deleteAccount = useDeleteAccount() const secretFieldId = useId() const commentFieldId = useId() const accountList = accounts.data ?? [] const { control, handleSubmit, reset, formState: { errors }, } = useForm({ resolver: zodResolver(createAccountSchema), defaultValues: { provider: "selectel", secret: "", comment: "" }, }) function onSubmit(values: CreateAccountForm) { createAccount.mutate(values, { onSuccess: () => reset({ provider: "selectel", secret: "", comment: "" }), }) } function onDelete(id: string, comment: string) { if (window.confirm(`Удалить учётную запись «${comment}»? Действие необратимо.`)) { deleteAccount.mutate(id) } } return (
providers

Учётные записи

API-ключ Selectel ( )} /> Комментарий ( )} /> Провайдер: selectel. Ключ создаётся в панели управления Selectel — раздел «API-ключи» — и используется только для запроса, храниться в открытом виде он не будет.{" "} Получить ключ на my.selectel.ru
{createAccount.isError && ( {createAccount.error.message} )}
{deleteAccount.isError && ( {deleteAccount.error.message} )} {accountList.length === 0 ? (
Учётных записей пока нет — добавьте первую выше.
) : ( Провайдер Комментарий Действия {accountList.map((a) => ( {a.provider} {a.comment} ))}
)}
) }