diff --git a/web/src/app/app/automations/[id]/page.tsx b/web/src/app/app/automations/[id]/page.tsx index f70a607a..07b96dfd 100644 --- a/web/src/app/app/automations/[id]/page.tsx +++ b/web/src/app/app/automations/[id]/page.tsx @@ -36,7 +36,12 @@ export default function AutomationBuilderPage() { } return ( + // Keyed by id: a param-only navigation (e.g. jump-to-teammate from one + // automation to another) must remount the builder, not hand a seeded + // canvas a different automation — Save would write the old graph into + // the new record. ; + // Keyed by campaign: a param-only navigation (e.g. jump-to-teammate from + // one campaign's steps to another's) must remount the canvas, never reuse + // one seeded from the previous campaign. + return ; } function StepsSkeleton() { diff --git a/web/src/components/app/presence/PresenceAvatars.tsx b/web/src/components/app/presence/PresenceAvatars.tsx index a47083a0..bd91eb6e 100644 --- a/web/src/components/app/presence/PresenceAvatars.tsx +++ b/web/src/components/app/presence/PresenceAvatars.tsx @@ -1,5 +1,5 @@ import { useRef, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { useLocation, useNavigate } from "react-router-dom"; import { AnimatePresence, motion } from "framer-motion"; import { ArrowRightIcon, EyeIcon, PencilIcon, ReplyIcon } from "lucide-react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; @@ -75,6 +75,7 @@ export default function PresenceAvatars() { const [open, setOpen] = useState(false); const ref = useRef(null); const navigate = useNavigate(); + const { pathname } = useLocation(); useClickOutside(ref, () => setOpen(false)); if (members.length === 0) return null; @@ -147,7 +148,9 @@ export default function PresenceAvatars() { {members.map((m) => { const act = activityOf(m); // Click a teammate to jump to the page they are on. - const jumpable = !!m.page; + // Presence pages are teammate-supplied strings, so + // only in-app paths are navigable. + const jumpable = !!m.page && m.page.startsWith("/app"); return (