import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useState } from 'react' import { Link, useParams } from 'react-router-dom' import { getEntity, updateEntity, VirtualEntityCreateDto, VirtualEntityResponse } from '../api/entitiesApi' import { getEmailLookbackLabel, getTasksByEntity } from '../api/tasksApi' function toEntityForm(entity: VirtualEntityResponse): VirtualEntityCreateDto { return { name: entity.name, email: entity.email, jobTitle: entity.jobTitle, personality: entity.personality ?? '', contextWindowDays: entity.contextWindowDays, } } export default function EntityDetailPage() { const { entityId = '' } = useParams() const queryClient = useQueryClient() const [dialogOpen, setDialogOpen] = useState(false) const [form, setForm] = useState(null) const { data: entity, isLoading: isLoadingEntity } = useQuery({ queryKey: ['entity', entityId], queryFn: () => getEntity(entityId), enabled: Boolean(entityId), }) const { data: tasks = [], isLoading: isLoadingTasks } = useQuery({ queryKey: ['entity-tasks', entityId], queryFn: () => getTasksByEntity(entityId), enabled: Boolean(entityId), }) const updateMutation = useMutation({ mutationFn: (data: VirtualEntityCreateDto) => updateEntity(entityId, data), onSuccess: async () => { await Promise.all([ queryClient.invalidateQueries({ queryKey: ['entity', entityId] }), queryClient.invalidateQueries({ queryKey: ['entities'] }), ]) setDialogOpen(false) setForm(null) }, }) if (!entityId) { return
Entity identifier is missing.
} if (isLoadingEntity || isLoadingTasks) { return
Loading entity details...
} if (!entity) { return (

Entity not found.

Back to Entities
) } return (

{entity.name}

{entity.jobTitle} - {entity.email}

New Task

Scheduled Tasks

    {tasks.map((task) => (
  • {task.name}

    {!task.active && ( Inactive )}

    Schedule: {task.scheduleCron}

    Email context: {getEmailLookbackLabel(task.emailLookback)}

    Details
  • ))} {tasks.length === 0 && (
  • No scheduled tasks yet.
  • )}
{dialogOpen && form && (

Edit Entity

{ e.preventDefault() updateMutation.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 />