diff --git a/packages/core-components/src/components/LogViewer/LogLine.tsx b/packages/core-components/src/components/LogViewer/LogLine.tsx index 8f3a2ce65c..c8ff5cbceb 100644 --- a/packages/core-components/src/components/LogViewer/LogLine.tsx +++ b/packages/core-components/src/components/LogViewer/LogLine.tsx @@ -15,7 +15,6 @@ */ import React, { useMemo } from 'react'; -import Typography from '@material-ui/core/Typography'; import { AnsiChunk, AnsiLine, ChunkModifiers } from './AnsiProcessor'; import startCase from 'lodash/startCase'; import classnames from 'classnames'; @@ -159,8 +158,8 @@ export function LogLine({ const elements = useMemo( () => chunks.map(({ text, modifiers, highlight }, index) => ( - {text} - + )), [chunks, highlightResultIndex, classes], ); diff --git a/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx similarity index 82% rename from plugins/scaffolder/src/next/TaskPage/TaskPage.tsx rename to plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx index 87d5d35453..feed582745 100644 --- a/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx @@ -20,8 +20,9 @@ import { useParams } from 'react-router-dom'; import { Box, Paper } from '@material-ui/core'; import { TaskSteps } from './TaskSteps'; import { TaskBorder } from './TaskBorder'; +import { TaskLogStream } from './TaskLogStream'; -export const TaskPage = () => { +export const OngoingTask = () => { const { taskId } = useParams(); // check that task Id actually exists, and that it's valid. otherwise redirect to something more useful. const taskStream = useTaskEventStream(taskId!); @@ -44,12 +45,19 @@ export const TaskPage = () => { return 0; }, [steps]); + const templateName = + taskStream.task?.spec.templateInfo?.entity?.metadata.name; + return ( + Run of {templateName} + + } + subtitle={`Task ${taskId}`} /> @@ -59,7 +67,7 @@ export const TaskPage = () => { /> - {/* */} + diff --git a/plugins/scaffolder/src/next/TaskPage/TaskBorder.tsx b/plugins/scaffolder/src/next/OngoingTask/TaskBorder.tsx similarity index 100% rename from plugins/scaffolder/src/next/TaskPage/TaskBorder.tsx rename to plugins/scaffolder/src/next/OngoingTask/TaskBorder.tsx diff --git a/plugins/scaffolder/src/next/OngoingTask/TaskLogStream.tsx b/plugins/scaffolder/src/next/OngoingTask/TaskLogStream.tsx new file mode 100644 index 0000000000..0060a9c9be --- /dev/null +++ b/plugins/scaffolder/src/next/OngoingTask/TaskLogStream.tsx @@ -0,0 +1,39 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { LogViewer } from '@backstage/core-components'; +import { makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles({ + root: { + width: '100%', + height: '200px', + position: 'relative', + }, +}); + +export const TaskLogStream = (opts: { logs: { [k: string]: string[] } }) => { + const styles = useStyles(); + return ( + + l.join('\n')) + .join('\n')} + /> + + ); +}; diff --git a/plugins/scaffolder/src/next/TaskPage/TaskSteps/StepIcon.tsx b/plugins/scaffolder/src/next/OngoingTask/TaskSteps/StepIcon.tsx similarity index 100% rename from plugins/scaffolder/src/next/TaskPage/TaskSteps/StepIcon.tsx rename to plugins/scaffolder/src/next/OngoingTask/TaskSteps/StepIcon.tsx diff --git a/plugins/scaffolder/src/next/TaskPage/TaskSteps/StepTime.tsx b/plugins/scaffolder/src/next/OngoingTask/TaskSteps/StepTime.tsx similarity index 85% rename from plugins/scaffolder/src/next/TaskPage/TaskSteps/StepTime.tsx rename to plugins/scaffolder/src/next/OngoingTask/TaskSteps/StepTime.tsx index f2d3116854..746007a7d3 100644 --- a/plugins/scaffolder/src/next/TaskPage/TaskSteps/StepTime.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/TaskSteps/StepTime.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import useInterval from 'react-use/lib/useInterval'; import { DateTime, Interval } from 'luxon'; import humanizeDuration from 'humanize-duration'; @@ -31,7 +31,7 @@ export const StepTime = ({ }) => { const [time, setTime] = useState(''); - useInterval(() => { + const calculate = useCallback(() => { if (!step.startedAt) { setTime(''); return; @@ -47,7 +47,11 @@ export const StepTime = ({ .valueOf(); setTime(humanizeDuration(formatted, { round: true })); - }, 1000); + }, [step.endedAt, step.startedAt]); + + useMemo(() => calculate(), [calculate]); + + useInterval(() => !step.endedAt && calculate(), 1000); return {time}; }; diff --git a/plugins/scaffolder/src/next/TaskPage/TaskSteps/TaskSteps.tsx b/plugins/scaffolder/src/next/OngoingTask/TaskSteps/TaskSteps.tsx similarity index 100% rename from plugins/scaffolder/src/next/TaskPage/TaskSteps/TaskSteps.tsx rename to plugins/scaffolder/src/next/OngoingTask/TaskSteps/TaskSteps.tsx diff --git a/plugins/scaffolder/src/next/TaskPage/TaskSteps/index.ts b/plugins/scaffolder/src/next/OngoingTask/TaskSteps/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TaskPage/TaskSteps/index.ts rename to plugins/scaffolder/src/next/OngoingTask/TaskSteps/index.ts diff --git a/plugins/scaffolder/src/next/TaskPage/index.ts b/plugins/scaffolder/src/next/OngoingTask/index.ts similarity index 93% rename from plugins/scaffolder/src/next/TaskPage/index.ts rename to plugins/scaffolder/src/next/OngoingTask/index.ts index 9b6e502fed..f0c7e2a6cc 100644 --- a/plugins/scaffolder/src/next/TaskPage/index.ts +++ b/plugins/scaffolder/src/next/OngoingTask/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { TaskPage } from './TaskPage'; +export { OngoingTask } from './OngoingTask'; diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 8de9ac57e4..b9c18f9d02 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -34,7 +34,7 @@ import { nextSelectedTemplateRouteRef, } from '../routes'; import { ErrorPage } from '@backstage/core-components'; -import { TaskPage } from '../TaskPage'; +import { OngoingTask } from '../OngoingTask'; /** * The Props for the Scaffolder Router @@ -97,7 +97,7 @@ export const Router = (props: PropsWithChildren) => { } /> - } /> + } /> }
{templateName}