Skip to content

Commit c219920

Browse files
authored
Merge pull request #571 from epinio/feat/EPINIO-535_about_page_updates
Feat/epinio 535 about page updates
2 parents d4be0e8 + 69f37b5 commit c219920

2 files changed

Lines changed: 149 additions & 124 deletions

File tree

dashboard/pkg/epinio/l10n/en-us.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ epinio:
7171
getBinaries: Get binaries
7272
downloadReport:
7373
title: Cluster Metrics Report
74+
description: View epinio systems and cluster usage data.
7475
action: Download
7576
success: Metrics report downloaded successfully
7677
errors:

dashboard/pkg/epinio/pages/c/_cluster/about.vue

Lines changed: 148 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
<script setup lang="ts">
22
import { onMounted, ref, computed } from 'vue';
33
import { useStore } from 'vuex';
4-
import Banner from '@components/Banner/Banner.vue';
5-
import Checkbox from '@components/Form/Checkbox/Checkbox.vue';
6-
import LabeledInput from '@components/Form/LabeledInput/LabeledInput.vue';
74
import { MANAGEMENT } from '@shell/config/types';
85
import { getVendor } from '@shell/config/private-label';
96
import { downloadFile } from '@shell/utils/download';
@@ -215,7 +212,7 @@ const versionColumns = [
215212
const downloadColumns = [
216213
{
217214
field: 'label',
218-
label: t('about.versions.component'), // re-use "Component" as Platform header
215+
label: t('about.versions.component'),
219216
formatter: (_v: any, row: any) => {
220217
const div = document.createElement('div');
221218
@@ -245,16 +242,30 @@ const downloadColumns = [
245242
}
246243
}
247244
];
245+
246+
const reportStatus = computed(() => {
247+
if (reportSuccess.value) return { message: reportSuccess.value, variant: 'success' };
248+
if (reportError.value) return { message: reportError.value, variant: 'error' };
249+
return null;
250+
});
251+
252+
const bundleStatus = computed(() => {
253+
if (supportBundleSuccess.value) return { message: supportBundleSuccess.value, variant: 'success' };
254+
if (supportBundleError.value) return { message: supportBundleError.value, variant: 'error' };
255+
return null;
256+
});
248257
</script>
249258

250259
<template>
251260
<div class="about">
252-
<Banner
261+
<trailhand-tag
253262
v-if="fetchError"
254-
color="error"
255263
:label="fetchError"
264+
variant="error"
265+
size="md"
256266
class="mb-20"
257267
/>
268+
258269
<template v-if="version">
259270
<h1>
260271
{{ aboutTitleString }}
@@ -291,95 +302,97 @@ const downloadColumns = [
291302
</a>
292303
</template>
293304

294-
<section
305+
<div
295306
v-if="version"
296-
class="download-report"
307+
class="about-cards"
297308
>
298-
<h3>{{ t('epinio.downloadReport.title') }}</h3>
299-
300-
<div class="download-report__actions">
301-
<button
302-
class="btn role-primary"
309+
<trailhand-card
310+
icon-name="info"
311+
class="about-card"
312+
>
313+
<span slot="title">{{ t('epinio.downloadReport.title') }}</span>
314+
<div
315+
slot="description"
316+
class="download__body"
317+
>
318+
<p class="download__description">
319+
{{ t('epinio.downloadReport.description') }}
320+
</p>
321+
</div>
322+
<trailhand-button
323+
slot="action"
324+
variant="secondary"
325+
size="large"
303326
:disabled="reportLoading"
304327
@click="downloadReport"
328+
class="download__button"
305329
>
306-
<i
307-
v-if="reportLoading"
308-
class="icon-spinner animate-spin mr-5"
330+
{{ reportLoading ? 'Downloading...' : t('epinio.downloadReport.action') }}
331+
</trailhand-button>
332+
<span
333+
v-if="reportStatus"
334+
slot="footer"
335+
>
336+
<trailhand-tag
337+
:label="reportStatus.message"
338+
:variant="reportStatus.variant"
339+
size="md"
309340
/>
310-
{{ t('epinio.downloadReport.action') }}
311-
</button>
312-
</div>
313-
314-
<Banner
315-
v-if="reportSuccess"
316-
color="success"
317-
:label="reportSuccess"
318-
/>
319-
<Banner
320-
v-if="reportError"
321-
color="error"
322-
:label="reportError"
323-
/>
324-
</section>
341+
</span>
342+
</trailhand-card>
325343

326-
<section
327-
v-if="version"
328-
class="support-bundle"
329-
>
330-
<h3>{{ t('epinio.supportBundle.title') }}</h3>
331-
<p class="text-muted">
332-
{{ t('epinio.supportBundle.description') }}
333-
</p>
334-
335-
<div class="support-bundle__controls">
336-
<LabeledInput
337-
v-model:value="tailLines"
338-
type="number"
339-
:label="t('epinio.supportBundle.tail.label')"
340-
:tooltip="t('epinio.supportBundle.tail.help')"
341-
:min="1"
342-
:max="10000"
343-
:disabled="supportBundleLoading"
344-
/>
345-
<Checkbox
346-
v-model:value="includeApps"
347-
:label="t('epinio.supportBundle.includeApps')"
348-
:disabled="supportBundleLoading"
349-
/>
350-
</div>
351-
352-
<div class="support-bundle__actions">
353-
<trailhand-button
354-
variant="primary"
355-
:disabled="supportBundleLoading"
356-
@click="downloadSupportBundle"
344+
<trailhand-card
345+
icon-name="tools"
346+
class="about-card bundle-card"
347+
>
348+
<span slot="title">{{ t('epinio.supportBundle.title') }}</span>
349+
<div
350+
slot="description"
351+
class="support-bundle__body"
357352
>
358-
<i
359-
v-if="supportBundleLoading"
360-
class="icon-spinner animate-spin mr-5"
361-
/>
362-
{{ t('epinio.supportBundle.action') }}
363-
</trailhand-button>
353+
<p class="support-bundle__description">
354+
{{ t('epinio.supportBundle.description') }}
355+
</p>
356+
<label class="checkbox-label">
357+
<trailhand-checkbox
358+
:checked="includeApps"
359+
:disabled="supportBundleLoading"
360+
@checkbox-change="includeApps = $event.detail.checked"
361+
/>
362+
{{ t('epinio.supportBundle.includeApps') }}
363+
</label>
364+
<div class="support-bundle__controls">
365+
<div class="input-button-row">
366+
<trailhand-text-input
367+
:label="t('epinio.supportBundle.tail.label')"
368+
:value="String(tailLines)"
369+
size="large"
370+
:disabled="supportBundleLoading"
371+
@text-input-change="tailLines = sanitizeTail($event.detail.value)"
372+
/>
373+
<trailhand-button
374+
variant="secondary"
375+
size="large"
376+
:disabled="supportBundleLoading"
377+
@click="downloadSupportBundle"
378+
>
379+
{{ supportBundleLoading ? t('epinio.supportBundle.collecting') : t('epinio.supportBundle.action') }}
380+
</trailhand-button>
381+
</div>
382+
</div>
383+
</div>
364384
<span
365-
v-if="supportBundleLoading"
366-
class="support-bundle__progress"
385+
v-if="bundleStatus"
386+
slot="footer"
367387
>
368-
{{ t('epinio.supportBundle.collecting') }}
388+
<trailhand-tag
389+
:label="bundleStatus.message"
390+
:variant="bundleStatus.variant"
391+
size="md"
392+
/>
369393
</span>
370-
</div>
371-
372-
<Banner
373-
v-if="supportBundleSuccess"
374-
color="success"
375-
:label="supportBundleSuccess"
376-
/>
377-
<Banner
378-
v-if="supportBundleError"
379-
color="error"
380-
:label="supportBundleError"
381-
/>
382-
</section>
394+
</trailhand-card>
395+
</div>
383396
</div>
384397
</template>
385398

@@ -393,52 +406,63 @@ const downloadColumns = [
393406
}
394407
}
395408
396-
.download-report {
409+
.about-cards {
410+
display: grid;
411+
grid-template-columns: 1fr 1fr;
412+
gap: 20px;
397413
margin-top: 40px;
398-
padding: 16px;
399-
border: 1px solid var(--border);
400-
border-radius: var(--border-radius);
401-
background: var(--default);
402-
403-
&__actions {
404-
display: flex;
405-
align-items: center;
406-
gap: 12px;
407-
margin-top: 16px;
408-
}
414+
align-items: stretch;
415+
}
409416
410-
.banner {
411-
margin-top: 10px;
412-
}
417+
.about-card {
418+
height: 100%;
413419
}
414420
415-
.support-bundle {
416-
margin-top: 40px;
417-
padding: 16px;
418-
border: 1px solid var(--border);
419-
border-radius: var(--border-radius);
420-
background: var(--default);
421-
422-
&__controls {
423-
display: flex;
424-
flex-wrap: wrap;
425-
gap: 16px;
426-
align-items: center;
427-
}
421+
.about-card::part(card) {
422+
height: 100%;
423+
box-sizing: border-box;
424+
}
428425
429-
&__actions {
430-
display: flex;
431-
align-items: center;
432-
gap: 12px;
433-
margin-top: 16px;
434-
}
426+
.bundle-card::part(action) {
427+
margin-bottom: 0;
428+
}
435429
436-
&__progress {
437-
color: var(--muted);
438-
}
430+
.support-bundle__body,
431+
.download__body {
432+
display: flex;
433+
flex-direction: column;
434+
gap: 12px;
435+
}
439436
440-
.banner {
441-
margin-top: 10px;
442-
}
437+
trailhand-button.download__button {
438+
width: 100%;
439+
}
440+
441+
.support-bundle__description,
442+
.download__description {
443+
margin: 0;
444+
font-size: 14px;
445+
color: var(--th-color-text-secondary);
446+
}
447+
448+
.support-bundle__controls {
449+
display: flex;
450+
flex-direction: column;
451+
gap: 12px;
452+
}
453+
454+
.input-button-row {
455+
display: grid;
456+
grid-template-columns: 1fr 1fr;
457+
gap: 16px;
458+
align-items: end;
459+
}
460+
461+
.checkbox-label {
462+
display: flex;
463+
align-items: center;
464+
gap: 8px;
465+
cursor: pointer;
466+
font-size: 14px;
443467
}
444468
</style>

0 commit comments

Comments
 (0)