- {selectedPet.photoUrl ? (
-

+ {selectedPet.photoKey ? (
+
🐾
) : (
🐾
)}
{selectedPet.name}
-
{selectedPet.breed} · {selectedPet.weight} lbs
+
{selectedPet.breed ?? "Unknown breed"} · {selectedPet.weightKg ? `${selectedPet.weightKg} kg` : "Unknown weight"}
- Born {selectedPet.birthDate ? new Date(selectedPet.birthDate).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "Unknown"}
+ Born {selectedPet.dateOfBirth ? new Date(selectedPet.dateOfBirth).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "Unknown"}
{!readOnly && (
@@ -213,7 +202,7 @@ export function PetProfiles({ sessionId, readOnly }: Props) {
);
}
-function InfoRow({ label, value }: { label: string; value: string }) {
+function InfoRow({ label, value }: { label: string; value: React.ReactNode }) {
return (
{label}
@@ -222,14 +211,59 @@ function InfoRow({ label, value }: { label: string; value: string }) {
);
}
+function SeverityBadge({ severity }: { severity: "low" | "medium" | "high" }) {
+ const classes = {
+ low: "bg-green-100 text-green-700",
+ medium: "bg-amber-100 text-amber-700",
+ high: "bg-red-100 text-red-700",
+ };
+ return (
+
+ {severity.charAt(0).toUpperCase() + severity.slice(1)}
+
+ );
+}
+
function BasicInfoTab({ pet, readOnly }: { pet: Pet; readOnly: boolean }) {
+ const score = pet.temperamentScore;
+ const flags = pet.temperamentFlags ?? [];
+
return (
-
-
-
+
+
+
+ {/* Temperament (staff-set, read-only) */}
+ {(score != null || flags.length > 0) && (
+
+
Temperament
+
+ {score != null && (
+
+ {[1, 2, 3, 4, 5].map(s => (
+
+ ))}
+ ({score}/5 · staff-set)
+
+ )}
+ {flags.length > 0 && (
+
+ {flags.map(flag => (
+ {flag}
+ ))}
+
+ )}
+
+
+ )}
+
+
{!readOnly && (