Skip to content

Commit

Permalink
Merge branch 'master' into fix/distinguish-canary-error-and-wfstatus
Browse files Browse the repository at this point in the history
  • Loading branch information
sauljabin authored Feb 24, 2025
2 parents cb66457 + a0484cf commit 968a8c9
Show file tree
Hide file tree
Showing 12 changed files with 151 additions and 154 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export const TaskDetails: FC<{
</Entry>
}
<Entry label="Worker Log Output:">
<div className={"bg-gray-300 rounded-lg text-center border border-black max-w-52 text-nowrap min-h-5"} >
<div className={"bg-gray-300 rounded-lg text-center border border-black w-full text-nowrap min-h-5"} >
<OverflowText text={taskRunData.attempts[taskAttemptIndex].logOutput?.str ?? "-"} className="text-xs" variant={resultString === "ERROR" ? "error" : undefined} />
</div>
</Entry>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use client'
import { FC, useEffect, useRef, useState } from 'react'
import { cn } from '@/components/utils'
import { tryFormatAsJson } from '@/app/utils/tryFormatAsJson'
import { Button } from '@/components/ui/button'
import { ChevronRight } from 'lucide-react'
import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog'
import { cn } from '@/components/utils'
import { ChevronRight } from 'lucide-react'
import { FC, useEffect, useRef, useState } from 'react'
import { CopyButton } from './CopyButton'
import { tryFormatAsJson } from '@/app/utils/tryFormatAsJson'

type OverflowTextProps = {
text: string
Expand Down Expand Up @@ -37,7 +37,7 @@ export const OverflowText: FC<OverflowTextProps> = ({ text, className, variant }
className
)}
>
<span className="truncate">{formattedText}</span>
<span className="truncate font-code">{formattedText}</span>
<div className="flex flex-shrink-0 items-center gap-1 text-xs text-muted-foreground text-nowrap">
View
<ChevronRight className="h-4 w-4 opacity-50" />
Expand All @@ -51,14 +51,14 @@ export const OverflowText: FC<OverflowTextProps> = ({ text, className, variant }
'bg-status-failed text-red-500': variant === 'error',
})}
>
<div className="max-w-full whitespace-pre-wrap break-words p-4">{formattedText}</div>
<div className="max-w-full whitespace-pre-wrap break-words p-4 font-code">{formattedText}</div>
</div>
</DialogContent>
</Dialog>
)
}
return (
<div ref={textRef} className={cn(className, "flex items-center justify-center h-full")}>
<div ref={textRef} className={cn(className, "flex items-center justify-center h-full font-code")}>
{formattedText}
</div>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
import { useWhoAmI } from '@/contexts/WhoAmIContext'
import {
DropdownMenu,
DropdownMenuSeparator,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { useWhoAmI } from '@/contexts/WhoAmIContext'
import { signOut } from 'next-auth/react'
import { FC, Fragment } from 'react'
import { FC } from 'react'
function classNames(...classes: Array<string | boolean>) {
return classes.filter(Boolean).join(' ')
}

export const Principal: FC = () => {
const { user } = useWhoAmI()
const isAuthEnabled = process.env.LHD_OAUTH_ENABLED === 'true'

return (
<DropdownMenu>
<DropdownMenuTrigger className="inline-flex w-full justify-center gap-x-1.5 px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm">
Expand All @@ -25,9 +27,11 @@ export const Principal: FC = () => {
<DropdownMenuContent className="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none">
<DropdownMenuLabel>{user?.name}</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => signOut()} className="block w-full px-4 py-2 text-left text-sm">
Sign out
</DropdownMenuItem>
{isAuthEnabled && (
<DropdownMenuItem onClick={() => signOut()} className="block w-full px-4 py-2 text-left text-sm">
Sign out
</DropdownMenuItem>
)}
</DropdownMenuContent>
</DropdownMenu>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use client'
import { SEARCH_DEFAULT_LIMIT, SEARCH_ENTITIES, SearchType } from '@/app/constants'
import useSWRInfinite from 'swr/infinite'
import { RefreshCwIcon } from 'lucide-react'
import { useParams, useSearchParams } from 'next/navigation'
import { FC, useState } from 'react'
import useSWRInfinite from 'swr/infinite'
import { SearchFooter } from './SearchFooter'
import { SearchHeader } from './SearchHeader'
import { SearchResponse, search } from './searchAction'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { TagIcon } from "lucide-react";

export default function VersionTag({ label }: { label: string }) {
return (
<div className="flex items-center gap-2 rounded bg-blue-200 px-2 font-mono text-sm text-gray-500">
<TagIcon className="h-4 w-4 fill-none stroke-gray-500 stroke-1" />{label}
</div>
)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { ExternalEventDefId } from 'littlehorse-client/proto'
import LinkWithTenant from '../LinkWithTenant'
import { FC, Fragment } from 'react'
import { SearchResultProps } from '.'
import { SelectionLink } from '../SelectionLink'

export const ExternalEventDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
if (pages.length === 0) {
if (pages.every(page => page.results.length === 0)) {
return <div className="flex min-h-[360px] items-center justify-center text-center italic">No ExternalEventDefs</div>
}

Expand All @@ -13,11 +13,9 @@ export const ExternalEventDefTable: FC<SearchResultProps> = ({ pages = [] }) =>
{pages.map((page, i) => (
<Fragment key={i}>
{page.results.map(({ name }: ExternalEventDefId) => (
<div key={name} className="my-2 flex gap-2">
<LinkWithTenant className="underline hover:no-underline" href={`/externalEventDef/${name}`}>
{name}
</LinkWithTenant>
</div>
<SelectionLink key={name} href={`/externalEventDef/${name}`}>
<p className="group">{name}</p>
</SelectionLink>
))}
</Fragment>
))}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { TaskDefId } from 'littlehorse-client/proto'
import { useParams } from 'next/navigation'
import { FC, Fragment } from 'react'
import { SearchResultProps } from '.'
import { useParams } from 'next/navigation'
import LinkWithTenant from '../LinkWithTenant'
import { SelectionLink } from '../SelectionLink'

export const TaskDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
const { tenantId } = useParams()

if (pages.length === 0) {
if (pages.every(page => page.results.length === 0)) {
return <div className="flex min-h-[360px] items-center justify-center text-center italic">No TaskDefs</div>
}

Expand All @@ -16,11 +16,9 @@ export const TaskDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
{pages.map((page, i) => (
<Fragment key={i}>
{page.results.map(({ name }: TaskDefId) => (
<div key={name} className="my-2 flex gap-2">
<LinkWithTenant className="underline hover:no-underline" href={`/taskDef/${name}`}>
{name}
</LinkWithTenant>
</div>
<SelectionLink key={name} href={`/taskDef/${name}`}>
<p className="group">{name}</p>
</SelectionLink>
))}
</Fragment>
))}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { Separator } from '@/components/ui/separator'
import { UserTaskDefId } from 'littlehorse-client/proto'
import { TagIcon } from 'lucide-react'
import { FC, Fragment } from 'react'
import { SearchResultProps } from '.'
import LinkWithTenant from '../LinkWithTenant'
import { SelectionLink } from '../SelectionLink'
import VersionTag from '../VersionTag'

export const UserTaskDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
if (pages.length === 0) {
if (pages.every(page => page.results.length === 0)) {
return <div className="flex min-h-[360px] items-center justify-center text-center italic">No UserTaskDefs</div>
}

Expand All @@ -15,16 +14,10 @@ export const UserTaskDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
{pages.map((page, i) => (
<Fragment key={i}>
{page.results.map(({ name, version }: UserTaskDefId) => (
<Fragment key={`${name}.${version}`}>
<div className="my-2 flex gap-2">
<LinkWithTenant className="underline hover:no-underline" href={`/userTaskDef/${name}/${version}`}>
{name}
</LinkWithTenant>
<div className="flex items-center gap-2 rounded bg-blue-200 px-2 font-mono text-sm text-gray-500">
<TagIcon className="h-4 w-4 fill-none stroke-gray-500 stroke-1" />v{version}
</div>
</div>
</Fragment>
<SelectionLink key={`${name}.${version}`} href={`/userTaskDef/${name}/${version}`}>
<p className="group">{name}</p>
<VersionTag label={`Latest: v${version}`} />
</SelectionLink>
))}
</Fragment>
))}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { getLatestWfSpecs } from '@/app/actions/getLatestWfSpec'
import { Separator } from '@/components/ui/separator'
import { WfSpecData } from '@/types'
import { TagIcon } from 'lucide-react'
import { useParams, useRouter } from 'next/navigation'
import { FC, Fragment, useEffect, useState } from 'react'
import { FC, useEffect, useState } from 'react'
import { SearchResultProps } from '.'
import { SelectionLink } from '../SelectionLink'

import VersionTag from '../VersionTag'
export const WfSpecTable: FC<SearchResultProps> = ({ pages = [] }) => {
const router = useRouter()
const tenantId = useParams().tenantId as string
Expand All @@ -17,24 +16,18 @@ export const WfSpecTable: FC<SearchResultProps> = ({ pages = [] }) => {
getLatestWfSpecs(tenantId, wfSpecNames).then(setWfSpecs)
}, [pages, tenantId])

if (pages.length === 0) {
if (pages.every(page => page.results.length === 0)) {
return <div className="flex min-h-[360px] items-center justify-center text-center italic">No WfSpecs</div>
}

return (
<div className="py-4">
<div className="flex max-h-[600px] flex-col overflow-auto">
{wfSpecs.map(wfSpec => (
<Fragment key={wfSpec.name}>
<SelectionLink href={`/wfSpec/${wfSpec.name}/${wfSpec.latestVersion}`}>
<p className="group">{wfSpec.name}</p>
<div className="flex items-center gap-2 rounded bg-blue-200 px-2 font-mono text-sm text-gray-500">
<TagIcon className="h-4 w-4 fill-none stroke-gray-500 stroke-1" />
Latest: v{wfSpec.latestVersion}
</div>
</SelectionLink>
<Separator />
</Fragment>
<SelectionLink key={wfSpec.name} href={`/wfSpec/${wfSpec.name}/${wfSpec.latestVersion}`}>
<p className="group">{wfSpec.name}</p>
<VersionTag label={`Latest: v${wfSpec.latestVersion}`} />
</SelectionLink>
))}
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { WorkflowEventDefId } from 'littlehorse-client/proto'
import { useParams } from 'next/navigation'
import { FC, Fragment } from 'react'
import { SearchResultProps } from '.'
import { useParams } from 'next/navigation'
import LinkWithTenant from '../LinkWithTenant'
import { SelectionLink } from '../SelectionLink'

export const WorkflowEventDefTable: FC<SearchResultProps> = ({ pages = [] }) => {
const { tenantId } = useParams()

if (pages.length === 0) {
if (pages.every(page => page.results.length === 0)) {
return <div className="flex min-h-[360px] items-center justify-center text-center italic">No WorkflowEventDefs</div>
}

Expand All @@ -16,11 +17,9 @@ export const WorkflowEventDefTable: FC<SearchResultProps> = ({ pages = [] }) =>
{pages.map((page, i) => (
<Fragment key={i}>
{page.results.map(({ name }: WorkflowEventDefId) => (
<div key={name} className="my-2 flex gap-2">
<LinkWithTenant className="underline hover:no-underline" href={`/workflowEventDef/${name}`}>
{name}
</LinkWithTenant>
</div>
<SelectionLink key={name} href={`/workflowEventDef/${name}`}>
<p className="group">{name}</p>
</SelectionLink>
))}
</Fragment>
))}
Expand Down
6 changes: 3 additions & 3 deletions dashboard/src/app/(authenticated)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { Toaster } from '@/components/ui/sonner'
import { WhoAmIContext } from '@/contexts/WhoAmIContext'
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import { Header } from './[tenantId]/components/Header'
import { QueryProvider } from './[tenantId]/components/QueryProvider'
import { SWRConfig } from 'swr'
import getWhoAmI from '../getWhoami'
import '../globals.css'
import { SWRConfig } from 'swr'
import { Header } from './[tenantId]/components/Header'
import { QueryProvider } from './[tenantId]/components/QueryProvider'

const inter = Inter({ subsets: ['latin'] })

Expand Down
Loading

0 comments on commit 968a8c9

Please sign in to comment.