Skip to content

Commit b29d471

Browse files
feat: improve error page layout and mobile responsiveness
- Replace sad face icon with alert icon - Add LibreSign logo header - Use NcEmptyContent component - Add card container with shadow - Improve mobile responsiveness - Clean up CSS and remove redundant styles Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent a655f2a commit b29d471

1 file changed

Lines changed: 72 additions & 50 deletions

File tree

src/views/DefaultPageError.vue

Lines changed: 72 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,31 @@
44
-->
55

66
<template>
7-
<div class="container">
8-
<div id="img" />
9-
<div class="content">
10-
<h1>404</h1>
11-
<h2>
12-
{{ t('libresign', 'Page not found') }}
13-
</h2>
14-
<p>{{ paragrath }}</p>
15-
<NcNoteCard v-for="(error, index) in errors"
16-
:key="index"
17-
type="error"
18-
heading="Error">
19-
{{ error.message }}
20-
</NcNoteCard>
7+
<div class="error-page">
8+
<!-- Logo Header -->
9+
<div class="logo-header">
10+
<img :src="logoLibreSign"
11+
:alt="t('libresign', 'LibreSign')"
12+
class="logo-icon">
13+
</div>
14+
15+
<!-- Error Container Card -->
16+
<div class="error-container">
17+
<NcEmptyContent :name="t('libresign', 'Page not found')"
18+
:description="paragrath">
19+
<template #icon>
20+
<AlertCircleOutline :size="80" class="alert-icon" />
21+
</template>
22+
<template #action>
23+
<div v-if="errors.length" class="error-messages">
24+
<NcNoteCard v-for="(error, index) in errors"
25+
:key="index"
26+
type="error">
27+
{{ error.message }}
28+
</NcNoteCard>
29+
</div>
30+
</template>
31+
</NcEmptyContent>
2132
</div>
2233
</div>
2334
</template>
@@ -26,16 +37,23 @@
2637
import { loadState } from '@nextcloud/initial-state'
2738
import { translate as t } from '@nextcloud/l10n'
2839
40+
import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
2941
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
42+
import AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue'
43+
44+
import logoLibreSign from '../../img/logo-gray.svg'
3045
3146
export default {
3247
name: 'DefaultPageError',
3348
components: {
49+
NcEmptyContent,
3450
NcNoteCard,
51+
AlertCircleOutline,
3552
},
3653
3754
data() {
3855
return {
56+
logoLibreSign,
3957
paragrath: t('libresign', 'Sorry but the page you are looking for does not exist, has been removed, moved or is temporarily unavailable.'),
4058
}
4159
},
@@ -47,7 +65,7 @@ export default {
4765
}
4866
const errorMessage = loadState('libresign', 'error', {})?.message
4967
if (errorMessage) {
50-
return [errorMessage]
68+
return [{ message: errorMessage }]
5169
}
5270
return []
5371
},
@@ -57,49 +75,53 @@ export default {
5775
</script>
5876
5977
<style lang="scss" scoped>
60-
.container{
78+
.error-page {
6179
display: flex;
62-
flex-direction: row;
80+
flex-direction: column;
6381
align-items: center;
6482
justify-content: center;
65-
height: 100%;
66-
67-
#img{
68-
background-image: url('../../img/sad-face-in-rounded-square.svg');
69-
height: 140px;
70-
width: 140px;
71-
background-repeat: no-repeat;
72-
background-size: cover;
73-
line-height: 17.6px;
74-
}
83+
min-height: 100vh;
84+
padding: 40px 20px;
85+
gap: 24px;
86+
background: var(--color-background-dark);
7587
76-
}
88+
.logo-header {
89+
.logo-icon {
90+
height: 80px;
7791
78-
.content{
79-
box-sizing: border-box;
80-
font-family: 'Nunito', sans-serif;
81-
max-width: 560px;
82-
padding-inline-start: 50px;
83-
84-
h1{
85-
font-size: 65px;
86-
font-weight: 700;
87-
line-height: 71.5px;
88-
margin-bottom: 10px;
89-
margin-top: 0px;
92+
@media (max-width: 768px) {
93+
height: 60px;
94+
}
95+
}
9096
}
9197
92-
h2{
93-
font-size: 21px;
94-
font-weight: 400;
95-
line-height: 23.1px;
96-
margin: 0px;
97-
margin-bottom: 10px;
98+
.error-container {
99+
max-width: 800px;
100+
width: 100%;
101+
padding: 48px 32px;
102+
background: var(--color-main-background);
103+
border-radius: var(--border-radius-large);
104+
box-shadow: 0 2px 16px rgba(0, 0, 0, 0.1);
105+
106+
.error-messages {
107+
display: flex;
108+
flex-direction: column;
109+
gap: 12px;
110+
width: 100%;
111+
min-width: 500px;
112+
113+
@media (max-width: 768px) {
114+
min-width: auto;
115+
}
116+
}
117+
118+
@media (max-width: 768px) {
119+
padding: 32px 24px;
120+
}
98121
}
99-
p{
100-
color: var(--color-main-text);
101-
font-weight: 400;
102-
line-height: 17.6px;
122+
123+
.alert-icon {
124+
color: #e53c3c;
103125
}
104126
}
105127
</style>

0 commit comments

Comments
 (0)