Skip to content

Commit d6ee162

Browse files
luannmoreiragustavosbarreto
authored andcommitted
refactor(ui): replace page titles in admin with PageHeader component
Standardized layout across admin views by replacing static <h1> tags and custom headers with the reusable PageHeader component. Updated icons and descriptions to improve clarity and visual hierarchy. Also updated the Namespaces sidebar icon to match its new visual identity.
1 parent 22c64cb commit d6ee162

28 files changed

Lines changed: 577 additions & 242 deletions

File tree

ui/admin/src/components/Settings/SettingsAuthentication.vue

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
data-test="configure-sso-dialog"
55
/>
66

7-
<div class="pb-2">
8-
<h1 data-test="auth-header">
9-
Authentication
10-
</h1>
11-
</div>
7+
<PageHeader
8+
icon="mdi-shield-account"
9+
title="Authentication"
10+
overline="Admin Settings"
11+
description="Control how administrators authenticate to the ShellHub console, including SAML SSO."
12+
icon-color="primary"
13+
title-test-id="auth-header"
14+
/>
1215
<v-card
1316
class="w-100 pa-4 bg-background border"
1417
data-test="auth-card"
@@ -163,6 +166,7 @@ import useInstanceStore from "@admin/store/modules/instance";
163166
import useSnackbar from "@/helpers/snackbar";
164167
import ConfigureSSO from "../Instance/SSO/ConfigureSSO.vue";
165168
import CopyWarning from "@/components/User/CopyWarning.vue";
169+
import PageHeader from "@/components/PageHeader.vue";
166170
167171
const showSSODialog = ref(false);
168172
const snackbar = useSnackbar();

ui/admin/src/components/Settings/SettingsLicense.vue

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
<template>
22
<v-alert
33
v-if="licenseAlert"
4-
class="mt-4 pl-4 pr-4 d-flex justify-center align-center"
4+
class="my-4 pl-4 pr-4 d-flex justify-center align-center"
55
variant="outlined"
66
:type="licenseAlert.type"
77
:text="licenseAlert.message"
88
/>
9-
<h1 class="pb-2">
10-
License Details
11-
</h1>
9+
<PageHeader
10+
icon="mdi-license"
11+
title="License Details"
12+
overline="Admin Settings"
13+
description="Review the current license scope and upload a new file when your subscription changes."
14+
icon-color="primary"
15+
title-test-id="license-header"
16+
/>
1217
<v-card
1318
class="w-100 pa-4 bg-background border"
1419
data-test="license-card"
@@ -153,6 +158,7 @@ import { AdminLicenseFeatures } from "@admin/interfaces/ILicense";
153158
import CopyWarning from "@/components/User/CopyWarning.vue";
154159
import useSnackbar from "@/helpers/snackbar";
155160
import handleError from "@/utils/handleError";
161+
import PageHeader from "@/components/PageHeader.vue";
156162
157163
const licenseStore = useLicenseStore();
158164
const snackbar = useSnackbar();

ui/admin/src/layouts/AppLayout.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ const items = reactive([
288288
path: "/firewall-rules",
289289
},
290290
{
291-
icon: "mdi-login",
291+
icon: "mdi-cloud-braces",
292292
title: "Namespaces",
293293
path: "/namespaces",
294294
},

ui/admin/src/views/Announcements.vue

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
<template>
2-
<div class="d-flex flex-column justify-space-between align-center flex-md-row mb-2">
3-
<h1 data-test="announcement-title">
4-
Announcements
5-
</h1>
6-
<v-spacer />
7-
<v-btn
8-
:tabindex="0"
9-
data-test="new-announcement-btn"
10-
color="primary"
11-
append-icon="mdi-plus"
12-
text="New"
13-
@click="goToNewAnnouncement"
14-
/>
15-
</div>
2+
<PageHeader
3+
icon="mdi-bullhorn"
4+
title="Announcements"
5+
overline="Platform Messaging"
6+
description="Share important system broadcasts with every namespace administrator."
7+
icon-color="primary"
8+
data-test="announcement-title"
9+
>
10+
<template #actions>
11+
<v-btn
12+
:tabindex="0"
13+
data-test="new-announcement-btn"
14+
color="primary"
15+
append-icon="mdi-plus"
16+
text="New"
17+
@click="goToNewAnnouncement"
18+
/>
19+
</template>
20+
</PageHeader>
1621
<AnnouncementList />
1722
</template>
1823

1924
<script setup lang="ts">
2025
import { useRouter } from "vue-router";
26+
import PageHeader from "@/components/PageHeader.vue";
2127
import AnnouncementList from "../components/Announcement/AnnouncementList.vue";
2228
2329
const router = useRouter();

ui/admin/src/views/Dashboard.vue

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
11
<template>
22
<div v-if="!hasStatus">
3-
<v-card
4-
class="bg-transparent mb-12"
5-
elevation="0"
6-
>
7-
<div class="d-flex align-start">
8-
<v-avatar
9-
color="primary"
10-
size="48"
11-
class="mr-4"
12-
>
13-
<v-icon
14-
size="32"
15-
icon="mdi-view-dashboard"
16-
/>
17-
</v-avatar>
18-
<div>
19-
<h1 class="text-overline text-medium-emphasis mb-1">
20-
Admin Dashboard
21-
</h1>
22-
<h2 class="text-h5 font-weight-bold mb-2">
23-
System Overview
24-
</h2>
25-
<p class="text-body-2 text-medium-emphasis">
26-
Monitor and manage your ShellHub instance metrics and statistics
27-
</p>
28-
</div>
29-
</div>
30-
</v-card>
3+
<PageHeader
4+
icon="mdi-home"
5+
title="System Overview"
6+
overline="Admin Dashboard"
7+
description="Monitor and manage your ShellHub instance metrics and statistics."
8+
icon-color="primary"
9+
/>
3110

3211
<v-row class="d-flex align-center mb-2 pa-3">
3312
<v-icon
@@ -111,7 +90,7 @@
11190
<StatCard
11291
title="Active Sessions"
11392
:stat="stats.active_sessions ?? 0"
114-
icon="mdi-console-network"
93+
icon="mdi-history"
11594
button-label="View all Sessions"
11695
path="sessions"
11796
/>
@@ -137,6 +116,7 @@ import useStatsStore from "@admin/store/modules/stats";
137116
import { IAdminStats } from "@admin/interfaces/IStats";
138117
import useSnackbar from "@/helpers/snackbar";
139118
import StatCard from "@/components/StatCard.vue";
119+
import PageHeader from "@/components/PageHeader.vue";
140120
141121
const snackbar = useSnackbar();
142122
const statsStore = useStatsStore();

ui/admin/src/views/Device.vue

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
<template>
2-
<div class="d-flex flex-column justify-space-between align-center flex-sm-row mb-2">
3-
<h1>Devices</h1>
4-
<v-spacer />
2+
<PageHeader
3+
icon="mdi-developer-board"
4+
title="Devices"
5+
overline="Fleet Oversight"
6+
description="Audit every registered device across all namespaces and quickly find specific hosts."
7+
icon-color="primary"
8+
>
59
<v-text-field
610
v-model.trim="filter"
7-
class="w-50"
11+
class="w-100 w-md-50"
812
label="Search by hostname"
913
color="primary"
1014
single-line
@@ -13,13 +17,13 @@
1317
density="compact"
1418
@keyup="searchDevices"
1519
/>
16-
<v-spacer />
17-
</div>
20+
</PageHeader>
1821
<DeviceList />
1922
</template>
2023

2124
<script setup lang="ts">
2225
import { ref } from "vue";
26+
import PageHeader from "@/components/PageHeader.vue";
2327
import useDevicesStore from "@admin/store/modules/devices";
2428
import useSnackbar from "@/helpers/snackbar";
2529
import DeviceList from "../components/Device/DeviceList.vue";
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
<template>
2-
<h1 class="mb-2">
3-
Firewall Rules
4-
</h1>
5-
<FirewallRulesList />
2+
<PageHeader
3+
icon="mdi-security"
4+
title="Firewall Rules"
5+
overline="Security Controls"
6+
description="Review every policy applied across namespaces and confirm access is locked down."
7+
icon-color="primary"
8+
data-test="firewall-rules"
9+
/>
10+
<FirewallRulesList data-test="firewall-rules-list" />
611
</template>
712

813
<script setup lang="ts">
14+
import PageHeader from "@/components/PageHeader.vue";
915
import FirewallRulesList from "../components/FirewallRules/FirewallRulesList.vue";
1016
</script>

ui/admin/src/views/Namespaces.vue

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
<template>
2-
<div class="d-flex flex-column justify-space-between align-center flex-md-row mb-2">
3-
<h1>Namespaces</h1>
4-
<v-spacer />
2+
<PageHeader
3+
icon="mdi-cloud-braces"
4+
title="Namespaces"
5+
overline="Namespace Management"
6+
description="Track every tenant, search by name, and export namespace data for audits."
7+
icon-color="primary"
8+
>
9+
<template #actions>
10+
<NamespaceExport />
11+
</template>
12+
513
<v-text-field
614
v-model.trim="filter"
715
label="Search by name"
816
color="primary"
9-
class="w-50"
17+
class="w-100 w-md-50"
1018
single-line
1119
hide-details
1220
append-inner-icon="mdi-magnify"
1321
density="compact"
1422
@keyup="searchNamespaces"
1523
/>
16-
<v-spacer />
17-
<NamespaceExport />
18-
</div>
24+
</PageHeader>
1925
<NamespaceList />
2026
</template>
2127

2228
<script setup lang="ts">
2329
import { ref } from "vue";
30+
import PageHeader from "@/components/PageHeader.vue";
2431
import useNamespacesStore from "@admin/store/modules/namespaces";
2532
import NamespaceList from "../components/Namespace/NamespaceList.vue";
2633
import NamespaceExport from "../components/Namespace/NamespaceExport.vue";

ui/admin/src/views/NewAnnouncement.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
<template>
2-
<h1>Create new Announcement</h1>
2+
<PageHeader
3+
icon="mdi-bullhorn"
4+
title="Create new Announcement"
5+
overline="Platform Messaging"
6+
description="Compose a system-wide update to keep every namespace informed about critical changes."
7+
icon-color="primary"
8+
data-test="announcement-title"
9+
/>
310

411
<v-card class="pa-4 mt-2 bg-background border">
512
<v-card-item>
@@ -74,6 +81,7 @@ import useAnnouncementStore from "@admin/store/modules/announcement";
7481
import useSnackbar from "@/helpers/snackbar";
7582
import { envVariables } from "@/envVariables";
7683
import handleError from "@/utils/handleError";
84+
import PageHeader from "@/components/PageHeader.vue";
7785
7886
const router = useRouter();
7987
const snackbar = useSnackbar();

ui/admin/src/views/Sessions.vue

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
<template>
2-
<h1 class="mb-2">
3-
Sessions
4-
</h1>
2+
<PageHeader
3+
icon="mdi-history"
4+
title="Sessions"
5+
overline="Activity Monitoring"
6+
description="Track live and historical sessions happening across every namespace."
7+
icon-color="primary"
8+
/>
59
<SessionList />
610
</template>
711

812
<script setup lang="ts">
13+
import PageHeader from "@/components/PageHeader.vue";
914
import SessionList from "../components/Sessions/SessionList.vue";
1015
</script>

0 commit comments

Comments
 (0)