UNPKG

@adonis-agora/authkit-react

Version:

Frontend ergonomics over AuthKit for AdonisJS + Inertia + React apps: a typed useAuth() hook, role-gating hooks and gating components.

37 lines (36 loc) 2.37 kB
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { createElement, useState } from 'react'; import { useKeysQueryOptions, useRotateKeysMutationOptions } from '../queries/admin/index.js'; import { authkitKeys } from '../queries/keys.js'; function KeyRotationInner({ className }) { const qc = useQueryClient(); const status = useQuery(useKeysQueryOptions()); const rotate = useMutation({ ...useRotateKeysMutationOptions(), onSuccess: () => qc.invalidateQueries({ queryKey: authkitKeys.admin.keys() }), }); const [retire, setRetire] = useState(false); if (status.isLoading && !status.data) { return createElement('div', { className: 'authkit-keys__loading' }, 'Carregando…'); } if (status.error) { return createElement('p', { className: 'authkit-error', role: 'alert' }, status.error.message); } const data = status.data; const p = data.policy; return createElement('div', { className: ['authkit-card', 'authkit-keys', className].filter(Boolean).join(' ') }, createElement('h3', { className: 'authkit-keys__title' }, 'Chave de assinatura'), createElement('dl', { className: 'authkit-keys__stats' }, createElement('dt', null, 'Idade'), createElement('dd', null, `${data.ageDays} dia(s)`), createElement('dt', null, 'Rotação automática'), createElement('dd', null, p.enabled ? `a cada ${p.maxAgeDays}d (mantém ${p.keep})` : 'desligada'), createElement('dt', null, 'Próxima rotação'), createElement('dd', null, data.nextRotationInDays === null ? '—' : `em ~${data.nextRotationInDays} dia(s)`)), createElement('label', { className: 'authkit-keys__retire' }, createElement('input', { type: 'checkbox', checked: retire, onChange: (e) => setRetire(e.target.checked), }), ' Aposentar as chaves antigas de imediato'), rotate.error ? createElement('p', { className: 'authkit-error', role: 'alert' }, rotate.error.message) : null, createElement('button', { type: 'button', className: 'authkit-button authkit-button--primary', disabled: rotate.isPending, onClick: () => rotate.mutate(retire ? { retire: true } : undefined), }, rotate.isPending ? 'Rotacionando…' : 'Rotacionar agora')); } export function KeyRotation(props) { return createElement(KeyRotationInner, props); }