Commit cc1af393 authored by Paul Slaughter's avatar Paul Slaughter

Merge branch '301029-move-mixin-logic' into 'master'

Remove timeago mixin logic

See merge request gitlab-org/gitlab!83325
parents e3280031 364f470d
<script> <script>
import { GlIcon, GlTooltipDirective } from '@gitlab/ui'; import { GlIcon, GlTooltipDirective } from '@gitlab/ui';
import timeagoMixin from '~/vue_shared/mixins/timeago'; import { formatDate, getTimeago, durationTimeFormatted } from '~/lib/utils/datetime_utility';
export default { export default {
iconSize: 12, iconSize: 12,
...@@ -10,7 +10,6 @@ export default { ...@@ -10,7 +10,6 @@ export default {
components: { components: {
GlIcon, GlIcon,
}, },
mixins: [timeagoMixin],
props: { props: {
job: { job: {
type: Object, type: Object,
...@@ -24,6 +23,15 @@ export default { ...@@ -24,6 +23,15 @@ export default {
duration() { duration() {
return this.job?.duration; return this.job?.duration;
}, },
timeFormatted() {
return getTimeago().format(this.finishedTime);
},
tooltipTitle() {
return formatDate(this.finishedTime);
},
durationFormatted() {
return durationTimeFormatted(this.duration);
},
}, },
}; };
</script> </script>
...@@ -32,18 +40,18 @@ export default { ...@@ -32,18 +40,18 @@ export default {
<div> <div>
<div v-if="duration" data-testid="job-duration"> <div v-if="duration" data-testid="job-duration">
<gl-icon name="timer" :size="$options.iconSize" data-testid="duration-icon" /> <gl-icon name="timer" :size="$options.iconSize" data-testid="duration-icon" />
{{ durationTimeFormatted(duration) }} {{ durationFormatted }}
</div> </div>
<div v-if="finishedTime" data-testid="job-finished-time"> <div v-if="finishedTime" data-testid="job-finished-time">
<gl-icon name="calendar" :size="$options.iconSize" data-testid="finished-time-icon" /> <gl-icon name="calendar" :size="$options.iconSize" data-testid="finished-time-icon" />
<time <time
v-gl-tooltip v-gl-tooltip
:title="tooltipTitle(finishedTime)" :title="tooltipTitle"
:datetime="finishedTime" :datetime="finishedTime"
data-placement="top" data-placement="top"
data-container="body" data-container="body"
> >
{{ timeFormatted(finishedTime) }} {{ timeFormatted }}
</time> </time>
</div> </div>
</div> </div>
......
...@@ -386,3 +386,23 @@ export const formatTimeAsSummary = ({ seconds, hours, days, minutes, weeks, mont ...@@ -386,3 +386,23 @@ export const formatTimeAsSummary = ({ seconds, hours, days, minutes, weeks, mont
} }
return '-'; return '-';
}; };
export const durationTimeFormatted = (duration) => {
const date = new Date(duration * 1000);
let hh = date.getUTCHours();
let mm = date.getUTCMinutes();
let ss = date.getSeconds();
if (hh < 10) {
hh = `0${hh}`;
}
if (mm < 10) {
mm = `0${mm}`;
}
if (ss < 10) {
ss = `0${ss}`;
}
return `${hh}:${mm}:${ss}`;
};
<script> <script>
import { GlIcon, GlTooltipDirective } from '@gitlab/ui'; import { GlIcon, GlTooltipDirective } from '@gitlab/ui';
import timeagoMixin from '~/vue_shared/mixins/timeago'; import { formatDate, getTimeago, durationTimeFormatted } from '~/lib/utils/datetime_utility';
export default { export default {
directives: { directives: {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
}, },
components: { GlIcon }, components: { GlIcon },
mixins: [timeagoMixin],
props: { props: {
pipeline: { pipeline: {
type: Object, type: Object,
...@@ -28,24 +27,7 @@ export default { ...@@ -28,24 +27,7 @@ export default {
return this.pipeline.flags.stuck; return this.pipeline.flags.stuck;
}, },
durationFormatted() { durationFormatted() {
const date = new Date(this.duration * 1000); return durationTimeFormatted(this.duration);
let hh = date.getUTCHours();
let mm = date.getUTCMinutes();
let ss = date.getSeconds();
// left pad
if (hh < 10) {
hh = `0${hh}`;
}
if (mm < 10) {
mm = `0${mm}`;
}
if (ss < 10) {
ss = `0${ss}`;
}
return `${hh}:${mm}:${ss}`;
}, },
showInProgress() { showInProgress() {
return !this.duration && !this.finishedTime && !this.skipped; return !this.duration && !this.finishedTime && !this.skipped;
...@@ -53,6 +35,12 @@ export default { ...@@ -53,6 +35,12 @@ export default {
showSkipped() { showSkipped() {
return !this.duration && !this.finishedTime && this.skipped; return !this.duration && !this.finishedTime && this.skipped;
}, },
timeFormatted() {
return getTimeago().format(this.finishedTime);
},
tooltipTitle() {
return formatDate(this.finishedTime);
},
}, },
}; };
</script> </script>
...@@ -85,12 +73,12 @@ export default { ...@@ -85,12 +73,12 @@ export default {
<time <time
v-gl-tooltip v-gl-tooltip
:title="tooltipTitle(finishedTime)" :title="tooltipTitle"
:datetime="finishedTime" :datetime="finishedTime"
data-placement="top" data-placement="top"
data-container="body" data-container="body"
> >
{{ timeFormatted(finishedTime) }} {{ timeFormatted }}
</time> </time>
</p> </p>
</div> </div>
......
...@@ -14,25 +14,5 @@ export default { ...@@ -14,25 +14,5 @@ export default {
tooltipTitle(time) { tooltipTitle(time) {
return formatDate(time); return formatDate(time);
}, },
durationTimeFormatted(duration) {
const date = new Date(duration * 1000);
let hh = date.getUTCHours();
let mm = date.getUTCMinutes();
let ss = date.getSeconds();
if (hh < 10) {
hh = `0${hh}`;
}
if (mm < 10) {
mm = `0${mm}`;
}
if (ss < 10) {
ss = `0${ss}`;
}
return `${hh}:${mm}:${ss}`;
},
}, },
}; };
...@@ -133,3 +133,15 @@ describe('formatTimeAsSummary', () => { ...@@ -133,3 +133,15 @@ describe('formatTimeAsSummary', () => {
expect(utils.formatTimeAsSummary({ [unit]: value })).toBe(result); expect(utils.formatTimeAsSummary({ [unit]: value })).toBe(result);
}); });
}); });
describe('durationTimeFormatted', () => {
it.each`
duration | expectedOutput
${87} | ${'00:01:27'}
${141} | ${'00:02:21'}
${12} | ${'00:00:12'}
${60} | ${'00:01:00'}
`('returns $expectedOutput when provided $duration', ({ duration, expectedOutput }) => {
expect(utils.durationTimeFormatted(duration)).toBe(expectedOutput);
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment