2a1273b683
* Added the new colours to the Tailwind config * Fixed Tsailwind compile errors * WIP Geist working in the app * WIP Storybook * Storybook is working again… ouch * Use Geist mono for CodeMirror * Some find/replace class changes * Resizable colours improved * WIP on primary button * Minor style improvements * Improve the side menu header styling * Improved v2 breadcrumbs * Account side menu tweaks * The page now works with the NavBar and UpgradePrompt * Removed unused import * Refactored the buttons to be dry-er * Removed the breadcrumbs * WIP on nav bar * WIP updating the button styles * Fix for the old test page * Fix for type errors * Removed console.log * Colour change in the resizable handle * New loading bar divider * Removed the design plugin * Creating our own storybook pages * Added some “storybook” pages * Added DetailCell storybook * WIP new animation for the loading page * Added the new loading divider * Fix for the time frame filter having a green border * Style improvements to the new test page * Small style improvements * Improvements to the list pagination components * Nav bar back button improved * Improvements to the run page * Lots of v2 style improvements * Help looks better * Improvements to the regenerate API key modal * More general improvements * Added section titles to our storybook * Added form stories * Fix for missing key prop * Loading bar is working * Fixed button submitting state * Fix for the test button icon * Code bg improved * Improved oauth buttons * Integration page header fix * Various improvements, mainly changing button variants * Segmented control style updates * Added an outline of 3px for the segment control * Fixes for the billing pages * More pricing improvements * Added dialog to storybook * Typography now in storybook * Free usage bar added to storybook * Added inline clode to storybook * Separated menu types into a sub section in storybook * NamedIcon now in storybook * Added page header to storybook * Added pricing callout to storybook * Added radio groups to storybook * Added segmented controllers to storybook * Added shortcuts to storybook * Added switches to storybook * Added toast to storybook * Added tooltips to storybook * Added tree view to storybook * Added usage charts to storybook * Tarted up the environment variables page * Fix for the FreePlanUsage panel bg colours * Added new badge variants * Added the <TaskPath /> to the tasks table * Span header improvements * Started work on the timeline * Started work on the timeline * Fix for the run page header * Timeline tick marks are working * Timeline working * Got the durations showing on hover * Button improvements * Experimenting with how the duration should be shown * Lots of refinements to the timeline * Much nicer API for the Timeline * The switch is now purple to match the design, with inverted thumb when on * Removed old stuff * Export the props * Added the span with duration back in * Simplified more and fixed the span durations * Put in some decent dummy data * Rendering defaults * Wip with the mouse cursor * Improvements to the story * Added Slider primitive * Integrated the icons into the slider * Lots of layout improvements * Cleaned up imports * “Root” indicator * Animated background on partials * Pull the styles through to the spans and log dots * Fixed some bugs in the TreeView when nodes get created or destroyed * Fix for incorrect parentTask reference * Added run streaming endpoint for live refreshing * Added the tabs to Storybook * Fix for status font size mismatch * Fix for the misaligned run filter status * Set a minimum duration on the timeline * The TreeView now re-calculates if the number of nodes has changed * Partials now render to the end * Improved the durations gutter * The duration is calculated using the current time if there are partial events * Added the environment label to storybook * Improved the environment label style * Removed bottom margin from badge * Button style improvements * Callouts style fits the new design better * Got the scrollbars to appear on the tree/timeline * Added scroll support * Synced scrolling working * Close button and exit icon for the detail panel * secure field shows start of env * Clipboard improvements * Latest lockfile * Fix for the durations wrapping --------- Co-authored-by: James Ritchie <james@jamesritchie.co.uk>
127 lines
3.9 KiB
TypeScript
127 lines
3.9 KiB
TypeScript
import { StopIcon } from "@heroicons/react/24/outline";
|
||
import { CheckIcon } from "@heroicons/react/24/solid";
|
||
import { RuntimeEnvironmentType } from "@trigger.dev/database";
|
||
import { EnvironmentLabel } from "../environments/EnvironmentLabel";
|
||
import { DateTime } from "../primitives/DateTime";
|
||
import { Paragraph } from "../primitives/Paragraph";
|
||
import { Spinner } from "../primitives/Spinner";
|
||
import {
|
||
Table,
|
||
TableBlankRow,
|
||
TableBody,
|
||
TableCell,
|
||
TableHeader,
|
||
TableHeaderCell,
|
||
TableRow,
|
||
} from "../primitives/Table";
|
||
import { RunStatus } from "./RunStatuses";
|
||
import { formatDuration } from "@trigger.dev/core/v3";
|
||
|
||
type RunTableItem = {
|
||
id: string;
|
||
number: number;
|
||
environment: {
|
||
type: RuntimeEnvironmentType;
|
||
};
|
||
error: string | null;
|
||
createdAt: Date | null;
|
||
deliveredAt: Date | null;
|
||
verified: boolean;
|
||
};
|
||
|
||
type RunsTableProps = {
|
||
total: number;
|
||
hasFilters: boolean;
|
||
runs: RunTableItem[];
|
||
isLoading?: boolean;
|
||
runsParentPath: string;
|
||
};
|
||
|
||
export function WebhookDeliveryRunsTable({
|
||
total,
|
||
hasFilters,
|
||
runs,
|
||
isLoading = false,
|
||
runsParentPath,
|
||
}: RunsTableProps) {
|
||
return (
|
||
<Table>
|
||
<TableHeader>
|
||
<TableRow>
|
||
<TableHeaderCell>Run</TableHeaderCell>
|
||
<TableHeaderCell>Env</TableHeaderCell>
|
||
<TableHeaderCell>Status</TableHeaderCell>
|
||
<TableHeaderCell>Last Error</TableHeaderCell>
|
||
<TableHeaderCell>Started</TableHeaderCell>
|
||
<TableHeaderCell>Duration</TableHeaderCell>
|
||
<TableHeaderCell>Verified</TableHeaderCell>
|
||
<TableHeaderCell>Created at</TableHeaderCell>
|
||
</TableRow>
|
||
</TableHeader>
|
||
<TableBody>
|
||
{total === 0 && !hasFilters ? (
|
||
<TableBlankRow colSpan={8}>
|
||
<NoRuns title="No runs found for this job" />
|
||
</TableBlankRow>
|
||
) : runs.length === 0 ? (
|
||
<TableBlankRow colSpan={8}>
|
||
<NoRuns title="No runs match your filters" />
|
||
</TableBlankRow>
|
||
) : (
|
||
runs.map((run) => {
|
||
return (
|
||
<TableRow key={run.id}>
|
||
<TableCell>#{run.number}</TableCell>
|
||
<TableCell>
|
||
<EnvironmentLabel environment={run.environment} />
|
||
</TableCell>
|
||
<TableCell>
|
||
<RunStatus
|
||
status={
|
||
!run.deliveredAt
|
||
? "STARTED"
|
||
: run.error || !run.verified
|
||
? "FAILURE"
|
||
: "SUCCESS"
|
||
}
|
||
/>
|
||
</TableCell>
|
||
<TableCell>{run.error?.slice(0, 30) ?? "–"}</TableCell>
|
||
<TableCell>{run.createdAt ? <DateTime date={run.createdAt} /> : "–"}</TableCell>
|
||
<TableCell>
|
||
{formatDuration(run.createdAt, run.deliveredAt, {
|
||
style: "short",
|
||
})}
|
||
</TableCell>
|
||
<TableCell>
|
||
{run.verified ? (
|
||
<CheckIcon className="h-4 w-4 text-charcoal-400" />
|
||
) : (
|
||
<StopIcon className="h-4 w-4 text-charcoal-850" />
|
||
)}
|
||
</TableCell>
|
||
<TableCell>{run.createdAt ? <DateTime date={run.createdAt} /> : "–"}</TableCell>
|
||
</TableRow>
|
||
);
|
||
})
|
||
)}
|
||
{isLoading && (
|
||
<TableBlankRow
|
||
colSpan={8}
|
||
className="absolute left-0 top-0 flex h-full w-full items-center justify-center gap-2 bg-charcoal-900/90"
|
||
>
|
||
<Spinner /> <span className="text-text-dimmed">Loading…</span>
|
||
</TableBlankRow>
|
||
)}
|
||
</TableBody>
|
||
</Table>
|
||
);
|
||
}
|
||
function NoRuns({ title }: { title: string }) {
|
||
return (
|
||
<div className="flex items-center justify-center">
|
||
<Paragraph className="w-auto">{title}</Paragraph>
|
||
</div>
|
||
);
|
||
}
|