Unify Pipelines Checks / Terminal scrolling experience + bolder icons (#559)

This commit is contained in:
Tan Nhu 2023-09-19 23:27:46 +00:00 committed by Harness
parent 32a5999555
commit c00c3c0947
7 changed files with 28 additions and 50 deletions

View File

@ -73,7 +73,7 @@ const App: React.FC<AppProps> = React.memo(function App({
}}> }}>
<IconoirProvider <IconoirProvider
iconProps={{ iconProps={{
strokeWidth: 1, strokeWidth: 1.5,
width: '16px', width: '16px',
height: '16px' height: '16px'
}}> }}>

View File

@ -6,7 +6,7 @@ import css from './LogViewer.module.scss'
export interface LogViewerProps { export interface LogViewerProps {
search?: string search?: string
content: string content?: string
className?: string className?: string
} }
@ -14,7 +14,7 @@ const LogTerminal: React.FC<LogViewerProps> = ({ content, className }) => {
const ref = useRef<HTMLDivElement | null>(null) const ref = useRef<HTMLDivElement | null>(null)
useEffect(() => { useEffect(() => {
content.split(/\r?\n/).forEach(line => ref.current?.appendChild(lineElement(line))) content?.split(/\r?\n/).forEach(line => ref.current?.appendChild(lineElement(line)))
}, [content]) }, [content])
return <Container ref={ref} className={cx(css.main, className)} /> return <Container ref={ref} className={cx(css.main, className)} />

View File

@ -92,7 +92,7 @@ const CheckPipelineStep: React.FC<CheckPipelineStepsProps & { step: TypesStep }>
eventSourceRef.current.onmessage = event => { eventSourceRef.current.onmessage = event => {
try { try {
const scrollParent = containerRef.current?.closest(`.${css.pipelineSteps}`) as HTMLDivElement const scrollParent = containerRef.current?.closest(`.${css.content}`) as HTMLDivElement
const autoScroll = const autoScroll =
scrollParent && scrollParent.scrollTop === scrollParent.scrollHeight - scrollParent.offsetHeight scrollParent && scrollParent.scrollTop === scrollParent.scrollHeight - scrollParent.offsetHeight
@ -153,11 +153,7 @@ const CheckPipelineStep: React.FC<CheckPipelineStepsProps & { step: TypesStep }>
onClick={() => { onClick={() => {
setExpanded(!expanded) setExpanded(!expanded)
}}> }}>
<NavArrowRight <NavArrowRight color={Utils.getRealCSSColor(Color.GREY_500)} className={cx(css.noShrink, css.chevron)} />
color={Utils.getRealCSSColor(Color.GREY_500)}
className={cx(css.noShrink, css.chevron)}
strokeWidth="1.5"
/>
<ExecutionStatus <ExecutionStatus
className={cx(css.status, css.noShrink)} className={cx(css.status, css.noShrink)}
@ -184,7 +180,7 @@ const CheckPipelineStep: React.FC<CheckPipelineStepsProps & { step: TypesStep }>
</Render> </Render>
</Layout.Horizontal> </Layout.Horizontal>
<Render when={expanded}> <Render when={expanded}>
<Container className={css.stepLogViewer} ref={containerRef}></Container> <Container className={css.stepLogContainer} ref={containerRef}></Container>
</Render> </Render>
</Container> </Container>
) )

View File

@ -111,6 +111,7 @@
.content { .content {
background-color: var(--black); background-color: var(--black);
overflow: auto;
&.markdown { &.markdown {
:global { :global {
@ -120,22 +121,13 @@
} }
padding: 0 var(--spacing-large) var(--spacing-medium); padding: 0 var(--spacing-large) var(--spacing-medium);
overflow: auto;
} }
&.terminal { &.terminal {
overflow: hidden;
.header { .header {
padding: var(--spacing-medium) var(--spacing-large) 0; padding: var(--spacing-medium) var(--spacing-large) 0;
} }
:global {
.terminal.xterm {
padding: var(--spacing-small) var(--spacing-large) 0;
}
}
span[data-icon='execution-success'] svg { span[data-icon='execution-success'] svg {
circle { circle {
color: transparent !important; color: transparent !important;
@ -149,6 +141,7 @@
top: 0; top: 0;
background-color: var(--black); background-color: var(--black);
height: var(--log-content-header-height); height: var(--log-content-header-height);
z-index: 3;
.headerLayout { .headerLayout {
border-bottom: 1px solid var(--grey-800); border-bottom: 1px solid var(--grey-800);
@ -162,14 +155,8 @@
padding-left: var(--spacing-small); padding-left: var(--spacing-small);
} }
.terminalContainer { .logViewer {
height: calc(100% - var(--log-content-header-height)); padding: var(--spacing-medium) var(--spacing-medium) var(--spacing-medium) var(--spacing-xxlarge);
.logViewer {
padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) var(--spacing-xxlarge);
overflow: auto;
height: 100%;
}
} }
} }
} }
@ -204,8 +191,6 @@
} }
.pipelineSteps { .pipelineSteps {
height: 100%;
overflow: auto;
padding: 10px 20px 0 !important; padding: 10px 20px 0 !important;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -228,7 +213,7 @@
border-radius: 6px; border-radius: 6px;
padding: 0 10px 0 6px; padding: 0 10px 0 6px;
position: sticky; position: sticky;
top: 0; top: 74px;
z-index: 2; z-index: 2;
background-color: var(--black); background-color: var(--black);
@ -263,7 +248,7 @@
} }
} }
.stepLogViewer { .stepLogContainer {
padding: 15px 36px; padding: 15px 36px;
flex-shrink: 0; flex-shrink: 0;

View File

@ -25,9 +25,8 @@ export declare const selected: string
export declare const spinner: string export declare const spinner: string
export declare const status: string export declare const status: string
export declare const stepHeader: string export declare const stepHeader: string
export declare const stepLogViewer: string export declare const stepLogContainer: string
export declare const subMenu: string export declare const subMenu: string
export declare const terminal: string export declare const terminal: string
export declare const terminalContainer: string
export declare const text: string export declare const text: string
export declare const uid: string export declare const uid: string

View File

@ -115,22 +115,20 @@ export const Checks: React.FC<ChecksProps> = ({ repoMetadata, pullRequestMetadat
</Container> </Container>
</Truthy> </Truthy>
<Falsy> <Falsy>
<Container className={css.terminalContainer}> <Match expr={selectedStage}>
<Match expr={selectedStage}> <Truthy>
<Truthy> <CheckPipelineSteps
<CheckPipelineSteps repoMetadata={repoMetadata}
repoMetadata={repoMetadata} pullRequestMetadata={pullRequestMetadata}
pullRequestMetadata={pullRequestMetadata} pipelineName={selectedItemData?.uid as string}
pipelineName={selectedItemData?.uid as string} stage={selectedStage as TypesStage}
stage={selectedStage as TypesStage} executionNumber={get(selectedItemData, 'payload.data.execution_number', '')}
executionNumber={get(selectedItemData, 'payload.data.execution_number', '')} />
/> </Truthy>
</Truthy> <Falsy>
<Falsy> <LogViewer content={logContent} className={css.logViewer} />
<LogViewer content={logContent} className={css.logViewer} /> </Falsy>
</Falsy> </Match>
</Match>
</Container>
</Falsy> </Falsy>
</Match> </Match>
</Container> </Container>

View File

@ -88,7 +88,7 @@ export interface SourceCodeEditorProps {
autoHeight?: boolean autoHeight?: boolean
wordWrap?: boolean wordWrap?: boolean
onChange?: (value: string) => void onChange?: (value: string) => void
schema?: Record<string, any> schema?: Record<string, unknown>
} }
// Monaco editor has a bug where when its value is set, the value // Monaco editor has a bug where when its value is set, the value