import { useState } from 'react' import { Link, useNavigate } from 'react-router-dom' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { getEntities, createEntity, deleteEntity, VirtualEntityCreateDto, } from '../api/entitiesApi' const DEFAULT_CONTEXT_WINDOW_DAYS = 3 const initialFormState: VirtualEntityCreateDto = { name: '', email: '', jobTitle: '', personality: '', contextWindowDays: DEFAULT_CONTEXT_WINDOW_DAYS, } export default function EntitiesPage() { const navigate = useNavigate() const queryClient = useQueryClient() const { data: entities = [] } = useQuery({ queryKey: ['entities'], queryFn: getEntities }) const [dialogOpen, setDialogOpen] = useState(false) const [form, setForm] = useState(initialFormState) const createMutation = useMutation({ mutationFn: createEntity, onSuccess: (createdEntity) => { queryClient.invalidateQueries({ queryKey: ['entities'] }) setDialogOpen(false) setForm(initialFormState) navigate(`/entities/${createdEntity.id}`) }, }) const deleteMutation = useMutation({ mutationFn: (id: string) => deleteEntity(id), onSuccess: (_data, id) => { queryClient.setQueryData( ['entities'], (currentEntities: Awaited> | undefined) => currentEntities?.filter((entity) => entity.id !== id) ?? [] ) }, }) return (

Virtual Entities

    {entities.map((entity) => (
  • {entity.name}

    {entity.jobTitle} - {entity.email}

    Open details
  • ))} {entities.length === 0 && (
  • No entities yet.
  • )}
{dialogOpen && (

New Entity

{ e.preventDefault() createMutation.mutate(form) }} className="space-y-3" >
setForm({ ...form, name: e.target.value })} className="block w-full rounded border border-slate-700 bg-slate-900 px-3 py-2 text-sm text-slate-100" required />
setForm({ ...form, email: e.target.value })} className="block w-full rounded border border-slate-700 bg-slate-900 px-3 py-2 text-sm text-slate-100" required />
setForm({ ...form, jobTitle: e.target.value })} className="block w-full rounded border border-slate-700 bg-slate-900 px-3 py-2 text-sm text-slate-100" required />