import { CSSProperties, useMemo } from 'react' import { getURLsFromString } from '~/utils/url' import { Prisma } from '@prisma/client' import { ActionMode } from '~/utils/types' import classNames from 'classnames' import ChronologicalScrollableFeed from '~/components/ChronologicalScrollableFeed' export default function Logs(props: { logs: Prisma.JsonValue | string[] className?: string isCompleted: boolean isFocused?: boolean mode: ActionMode style?: CSSProperties }) { const logs = useMemo((): string[] => { if (!Array.isArray(props.logs)) return [] if (!props.logs || !props.logs.length) return [] const lines = [...props.logs.map(String)] if (props.isCompleted) { lines.push('\n✔ Transaction completed') } return lines }, [props.logs, props.isCompleted]) return (
{logs.length === 0 ? ( props.mode === 'console' ? (

No logs received yet. Use ctx.log() in your action to print output here.

) : ( No logs received yet ) ) : ( )}
) } function LogLines({ logs }: { logs: string[] }) { return ( <> {logs.map((line, i) => { const urlMatches = getURLsFromString(line) line = line.replace(//, '>') if (urlMatches?.length) { let lineWithUrls = line for (let i = 0; i < urlMatches.length; i++) { const url = urlMatches[i] lineWithUrls = lineWithUrls.replace( url, `${url}` ) } return (
) } return
{line}
})} ) }