+
-
{artifact.stepName}
-
{artifact.path}
-
-
+
+ {artifact.stepName}
+
+
+ {artifact.path}
+
+
+
+
+
))}
diff --git a/ui/src/workflows/components/workflow-details/workflow-details.scss b/ui/src/workflows/components/workflow-details/workflow-details.scss
index 1023243f539e..fb3a442280f0 100644
--- a/ui/src/workflows/components/workflow-details/workflow-details.scss
+++ b/ui/src/workflows/components/workflow-details/workflow-details.scss
@@ -109,18 +109,18 @@
display: grid;
grid-template-columns: auto minmax(50%, 1fr);
- & > * {
+ &>* {
align-items: center;
display: flex;
min-height: 50px;
padding: 14px 0;
}
- & > *:nth-child(odd) {
+ &>*:nth-child(odd) {
padding-right: 4em;
}
- & > *:not(:nth-last-child(-n+2)) {
+ &>*:not(:nth-last-child(-n+2)) {
border-bottom: 1px solid $argo-color-gray-3;
}
@@ -149,3 +149,87 @@
font-weight: bold;
min-height: 2em;
}
+
+.row.header {
+ color: $argo-color-gray-8;
+ background-color: $argo-color-gray-1;
+ border-bottom: 1px solid $argo-color-gray-5;
+ display: flex;
+ line-height: 1.2em;
+ padding: 4px 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+ }
+
+ .columns {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: break-word;
+ word-break: break-all;
+ overflow-wrap: break-word;
+ text-align: left;
+ padding-left: 0;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+
+ }
+ }
+}
+
+
+.hoverable {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ transition: all 0.2s ease-in-out;
+ word-wrap: break-word;
+ word-break: break-all;
+ overflow-wrap: break-word;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+ position: relative;
+ z-index: 1;
+ }
+}
+
+.artifact-row {
+ color: $argo-color-gray-8;
+ display: flex;
+ border-bottom: 1px solid $argo-color-gray-5;
+ padding: 8px 0;
+ text-align: left;
+
+ &:hover {
+ background-color: $argo-color-gray-3;
+ }
+
+ .columns {
+ padding-left: 0;
+
+ &.artifact-name {
+ display: flex;
+
+ a {
+ margin-right: 1em;
+ text-decoration: none;
+ }
+
+ .artifact-name-text {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ui/src/workflows/components/workflow-node-info/workflow-node-info.scss b/ui/src/workflows/components/workflow-node-info/workflow-node-info.scss
index 2063135a63f5..ff63a3ea41c4 100644
--- a/ui/src/workflows/components/workflow-node-info/workflow-node-info.scss
+++ b/ui/src/workflows/components/workflow-node-info/workflow-node-info.scss
@@ -1,7 +1,6 @@
@import 'node_modules/argo-ui/src/styles/config';
.workflow-node-info {
-
height: calc(100vh - 2 * #{$top-bar-height});
overflow-y: auto;
@@ -73,4 +72,88 @@
padding: 1em 0;
}
}
-}
+
+ .row.header {
+ color: $argo-color-gray-8;
+ background-color: $argo-color-gray-1;
+ border-bottom: 1px solid $argo-color-gray-5;
+ display: flex;
+ line-height: 1.2em;
+ padding: 4px 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+ }
+
+ .columns {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: break-word;
+ word-break: break-all;
+ overflow-wrap: break-word;
+ text-align: left;
+ padding-left: 0;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+
+ }
+ }
+ }
+
+
+ .hoverable {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ transition: all 0.2s ease-in-out;
+ word-wrap: break-word;
+ word-break: break-all;
+ overflow-wrap: break-word;
+
+ &:hover {
+ overflow: visible;
+ white-space: normal;
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ .artifact-row {
+ color: $argo-color-gray-8;
+ display: flex;
+ border-bottom: 1px solid $argo-color-gray-5;
+ padding: 8px 0;
+ text-align: left;
+
+ &:hover {
+ background-color: $argo-color-gray-3;
+ }
+
+ .columns {
+ padding-left: 0;
+
+ &.artifact-name {
+ display: flex;
+
+ a {
+ margin-right: 1em;
+ text-decoration: none;
+ }
+
+ .artifact-name-text {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ui/src/workflows/components/workflow-node-info/workflow-node-info.tsx b/ui/src/workflows/components/workflow-node-info/workflow-node-info.tsx
index 7a03babd9aed..d0d0034dc4fe 100644
--- a/ui/src/workflows/components/workflow-node-info/workflow-node-info.tsx
+++ b/ui/src/workflows/components/workflow-node-info/workflow-node-info.tsx
@@ -11,14 +11,14 @@ import {InlineTable} from '../../../shared/components/inline-table/inline-table'
import LinkifiedText from '../../../shared/components/linkified-text';
import {Links} from '../../../shared/components/links';
import {Phase} from '../../../shared/components/phase';
-import {Timestamp} from '../../../shared/components/timestamp';
+import {Timestamp, TimestampSwitch} from '../../../shared/components/timestamp';
import * as models from '../../../shared/models';
import {Artifact, NodeStatus, Workflow} from '../../../shared/models';
import {getPodName} from '../../../shared/pod-name';
import {ResourcesDuration} from '../../../shared/resources-duration';
import {services} from '../../../shared/services';
import {getResolvedTemplates} from '../../../shared/template-resolution';
-import {TIMESTAMP_KEYS} from '../../../shared/use-timestamp';
+import useTimestamp, {TIMESTAMP_KEYS} from '../../../shared/use-timestamp';
import './workflow-node-info.scss';
@@ -412,6 +412,7 @@ function WorkflowNodeContainers(props: Props) {
}
function WorkflowNodeArtifacts(props: {workflow: Workflow; node: NodeStatus; archived: boolean; isInput: boolean; artifacts: Artifact[]}) {
+ const [storedDisplayISOFormat, setStoredDisplayISOFormat] = useTimestamp(TIMESTAMP_KEYS.WORKFLOW_NODE_ARTIFACT_CREATED);
const artifacts =
(props.artifacts &&
props.artifacts.map(artifact =>
@@ -423,6 +424,7 @@ function WorkflowNodeArtifacts(props: {workflow: Workflow; node: NodeStatus; arc
})
)) ||
[];
+
return (
{artifacts.length === 0 && (
@@ -435,30 +437,40 @@ function WorkflowNodeArtifacts(props: {workflow: Workflow; node: NodeStatus; arc
Artifacts for archived workflows may be overwritten by a more recent workflow with the same name.
)}
- {artifacts.map(artifact => (
-
-
-
-
{artifact.name}
-
-
- {artifact.nodeName}
-
-
- {artifact.path}
-
-
-
-
+ {artifacts.length > 0 && (
+
+
+
Artifact Name
+
Node Name
+
Path
+
+ Created at
+
+ {artifacts.map(artifact => (
+
+
+
+
+
+
{artifact.name}
+
+
+ {artifact.nodeName}
+
+
+ {artifact.path}
+
+
+
+
+
+
+
+ ))}
- ))}
+ )}
);
}