diff --git a/apps/webapp/app/components/navigation/SideMenu.tsx b/apps/webapp/app/components/navigation/SideMenu.tsx index 36d341d0e..3241c3b12 100644 --- a/apps/webapp/app/components/navigation/SideMenu.tsx +++ b/apps/webapp/app/components/navigation/SideMenu.tsx @@ -166,6 +166,10 @@ export function SideMenu({ user, project, organization, organizations }: SideMen icon="folder" to={organizationPath(organization)} data-action="projects" + secondaryAction={{ + icon: "plus", + to: newProjectPath(organization), + }} /> ); })} - ))} @@ -375,6 +378,7 @@ function SideMenuItem({ count, target, subItem = false, + secondaryAction, }: { icon?: IconNames | React.ComponentType; iconColor?: string; @@ -384,6 +388,10 @@ function SideMenuItem({ count?: number; target?: AnchorHTMLAttributes["target"]; subItem?: boolean; + secondaryAction?: { + icon: IconNames | React.ComponentType; + to: string; + }; }) { const pathName = usePathName(); const isActive = pathName === to; @@ -407,6 +415,15 @@ function SideMenuItem({ {name}
{count !== undefined && count > 0 && } + {secondaryAction && ( + + )} {typeof hasWarning === "string" ? ( diff --git a/apps/webapp/app/presenters/OrganizationsPresenter.server.ts b/apps/webapp/app/presenters/OrganizationsPresenter.server.ts index d34e93e5c..6e3641a1f 100644 --- a/apps/webapp/app/presenters/OrganizationsPresenter.server.ts +++ b/apps/webapp/app/presenters/OrganizationsPresenter.server.ts @@ -2,6 +2,7 @@ import { PrismaClient } from "@trigger.dev/database"; import { prisma } from "~/db.server"; import { getCurrentProjectId } from "~/services/currentProject.server"; import { ProjectPresenter } from "./ProjectPresenter.server"; +import { logger } from "~/services/logger.server"; type Org = Awaited>[number]; @@ -27,6 +28,12 @@ export class OrganizationsPresenter { const organization = organizations.find((o) => o.slug === organizationSlug); if (!organization) { + logger.info("Not Found: organization", { + organizationSlug, + projectSlug, + request, + organization, + }); throw new Response("Not Found", { status: 404 }); } @@ -103,6 +110,11 @@ export class OrganizationsPresenter { const projectId = await getCurrentProjectId(request); const orgProject = organization.projects.find((p) => p.id === projectId); if (!orgProject) { + logger.info("Not Found: proj 1", { + projectId, + organization, + projectSlug: projectSlug ?? null, + }); throw new Response("Not Found", { status: 404 }); } projectSlug = orgProject.slug; @@ -110,6 +122,7 @@ export class OrganizationsPresenter { const project = await projectPresenter.call({ userId, slug: projectSlug }); if (!project) { + logger.info("Not Found: proj 2", { projectSlug, organization, project }); throw new Response("Not Found", { status: 404 }); } return project;