@live-change/user-frontend 0.9.32 → 0.9.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/front/locales/en.json +3 -1
- package/front/src/App.vue +32 -1
- package/front/src/Index.vue +3 -3
- package/front/src/NavBar.vue +8 -8
- package/front/src/SettingsTabs.vue +1 -1
- package/front/src/config.js +19 -0
- package/front/src/connected/ConnectEmail.vue +13 -10
- package/front/src/connected/ConnectFinished.vue +4 -4
- package/front/src/connected/ConnectPhone.vue +13 -9
- package/front/src/connected/Connected.vue +13 -13
- package/front/src/delete/Delete.vue +5 -5
- package/front/src/delete/DeleteFeedbackSent.vue +4 -4
- package/front/src/delete/DeleteFinished.vue +6 -6
- package/front/src/google-access/GoogleAccess.vue +4 -4
- package/front/src/google-access/GoogleAccessGained.vue +6 -6
- package/front/src/identification/IdentificationSettings.vue +17 -14
- package/front/src/identification/UserIdentification.vue +8 -8
- package/front/src/locale/LocaleSettings.vue +9 -7
- package/front/src/message-auth/MessageLink.vue +12 -12
- package/front/src/message-auth/MessageSent.vue +20 -17
- package/front/src/message-auth/email/ConnectEmail.vue +1 -1
- package/front/src/message-auth/email/ResetPasswordEmail.vue +1 -1
- package/front/src/message-auth/email/SignInEmail.vue +1 -1
- package/front/src/message-auth/email/SignUpEmail.vue +1 -1
- package/front/src/nav/UserIcon.vue +11 -12
- package/front/src/nav/UserMenu.vue +20 -15
- package/front/src/notifications/NotificationButtons.vue +3 -3
- package/front/src/notifications/NotificationListPage.vue +2 -2
- package/front/src/notifications/NotificationsIcon.vue +12 -10
- package/front/src/notifications/NotificationsList.vue +4 -4
- package/front/src/notifications/NotificationsSettings.vue +4 -4
- package/front/src/notifications/SimpleNotification.vue +3 -3
- package/front/src/password/ChangePassword.vue +19 -14
- package/front/src/password/ChangePasswordFinished.vue +4 -4
- package/front/src/password/Password.vue +406 -449
- package/front/src/password/ResetPassword.vue +11 -8
- package/front/src/password/ResetPasswordFinished.vue +4 -4
- package/front/src/password/ResetPasswordForm.vue +22 -19
- package/front/src/phone/CountryInput.vue +13 -15
- package/front/src/phone/PhoneInput.vue +3 -3
- package/front/src/settings/Settings.vue +5 -5
- package/front/src/settings/SettingsIndex.vue +4 -4
- package/front/src/settings/SettingsMenu.vue +10 -10
- package/front/src/sign/GoogleAuth.vue +4 -4
- package/front/src/sign/GoogleAuthReturn.vue +4 -4
- package/front/src/sign/LinkedinAuth.vue +4 -4
- package/front/src/sign/LinkedinAuthReturn.vue +4 -4
- package/front/src/sign/SignInEmail.vue +22 -21
- package/front/src/sign/SignInFinished.vue +6 -6
- package/front/src/sign/SignOut.vue +5 -5
- package/front/src/sign/SignOutFinished.vue +4 -4
- package/front/src/sign/SignUpEmail.vue +14 -13
- package/front/src/sign/SignUpFinished.vue +19 -16
- package/package.json +26 -26
|
@@ -1,37 +1,39 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
-
<div class="surface-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
5
|
-
<p class="mt-0 mb-1 p-0
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
+
<div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="authenticationData?.state === 'used' && !submitted">
|
|
4
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Authentication done</div>
|
|
5
|
+
<p class="mt-0 mb-1 p-0 leading-normal">You authenticated in a different tab.</p>
|
|
6
6
|
</div>
|
|
7
|
-
<div class="surface-
|
|
8
|
-
<div class="text-900 font-medium mb-
|
|
9
|
-
<p class="mt-0 mb-1 p-0
|
|
10
|
-
<p class="mt-0 mb-
|
|
7
|
+
<div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-else>
|
|
8
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Message sent</div>
|
|
9
|
+
<p class="mt-0 mb-1 p-0 leading-normal">We sent special secret message to the contact you already provided.</p>
|
|
10
|
+
<p class="mt-0 mb-6 p-0 leading-normal">Click on the link or enter the code you found in that message.</p>
|
|
11
11
|
<Secured :events="['wrong-secret-code']" :actions="['checkSecretCode']">
|
|
12
12
|
<command-form service="messageAuthentication" action="finishMessageAuthentication"
|
|
13
13
|
:parameters="{ secretType: 'code', authentication }" :key="authentication"
|
|
14
14
|
ref="form"
|
|
15
15
|
@submit="handleSubmit" @done="handleAuthenticated" @error="handleError"
|
|
16
16
|
v-slot="{ data }">
|
|
17
|
-
<div class="flex justify-
|
|
18
|
-
<div class="p-field mx-1 flex flex-
|
|
17
|
+
<div class="flex justify-center flex-col items-center">
|
|
18
|
+
<div class="p-field mx-1 flex flex-col mb-4">
|
|
19
19
|
<label for="code" class="p-sr-only">Code</label>
|
|
20
20
|
<InputOtp id="code" :length="6" class="mb-2"
|
|
21
21
|
v-model="data.secret"
|
|
22
|
-
aria-describedby="code-help" :
|
|
22
|
+
aria-describedby="code-help" :invalid="!!data.secretError" />
|
|
23
23
|
<!-- <InputMask id="code" class="p-inputtext-lg" mask="999999" slotChar="######" placeholder="Enter code"
|
|
24
24
|
v-model="data.secret"
|
|
25
|
-
aria-describedby="code-help" :
|
|
26
|
-
<
|
|
25
|
+
aria-describedby="code-help" :invalid="!!data.secretError" />-->
|
|
26
|
+
<Message v-if="data.secretError" severity="error" variant="simple">
|
|
27
|
+
{{ t(`errors.${data.secretError}`) }}
|
|
28
|
+
</Message>
|
|
27
29
|
</div>
|
|
28
|
-
<div class="flex flex-
|
|
29
|
-
<Button label="OK" type="submit" class="p-button-lg
|
|
30
|
+
<div class="flex flex-col">
|
|
31
|
+
<Button label="OK" type="submit" class="p-button-lg grow-0"
|
|
30
32
|
:disableda="data.secret?.length < 6" />
|
|
31
33
|
</div>
|
|
32
34
|
</div>
|
|
33
|
-
<div v-if="data.secretError === 'codeExpired'" class="mt-
|
|
34
|
-
<p class="mt-0 mb-2 p-0
|
|
35
|
+
<div v-if="data.secretError === 'codeExpired'" class="mt-4 text-center">
|
|
36
|
+
<p class="mt-0 mb-2 p-0 leading-normal">To send another code click button below.</p>
|
|
35
37
|
<Button label="Resend secret code" class="p-button-lg" @click="resend" />
|
|
36
38
|
</div>
|
|
37
39
|
</command-form>
|
|
@@ -44,6 +46,7 @@
|
|
|
44
46
|
import InputMask from "primevue/inputmask"
|
|
45
47
|
import InputOtp from "primevue/inputotp"
|
|
46
48
|
import Button from "primevue/button"
|
|
49
|
+
import Message from "primevue/message"
|
|
47
50
|
|
|
48
51
|
import { Secured } from "@live-change/security-frontend"
|
|
49
52
|
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<a v-ripple
|
|
3
|
-
v-styleclass="{ selector: '@next',
|
|
4
|
-
class="relative shadow-none">
|
|
5
|
-
<span class="flex mx-0 px-3 align-items-center font-medium
|
|
3
|
+
v-styleclass="{ selector: '@next', enterFromClass: 'hidden', leaveToClass: 'hidden', hideOnOutsideClick: true }"
|
|
4
|
+
class="relative shadow-none b shrink-0">
|
|
5
|
+
<span class="flex mx-0 px-3 align-items-center font-medium justify-content-center
|
|
6
6
|
cursor-pointer transition-colors transition-duration-150 border-round">
|
|
7
|
-
<Image v-if="myIdentification?.image" :image="myIdentification.image"
|
|
8
|
-
class="mr-0
|
|
7
|
+
<Image v-if="myIdentification?.image" :image="myIdentification.image" width="56" height="56"
|
|
8
|
+
class="mr-0 rounded-full border-1 border-surface-400 dark:border-surface-600 object-cover w-12 max-w-none" />
|
|
9
9
|
<img v-else-if="ownerData[0] === 'session_Session'" src="/images/empty-user-photo.svg"
|
|
10
|
-
class="mr-0 border-
|
|
10
|
+
class="mr-0 rounded-full border-1 border-surface-400 dark:border-surface-600 w-12 max-w-none" />
|
|
11
11
|
<img v-else :src="identiconUrl"
|
|
12
|
-
class="mr-0
|
|
12
|
+
class="mr-0 rounded-full border-1 border-surface-400 dark:border-surface-600 w-12 max-w-none" />
|
|
13
13
|
</span>
|
|
14
|
-
|
|
15
14
|
</a>
|
|
16
|
-
<div class="align-items-center flex-grow-1 justify-content-between hidden absolute w-full md:w-auto surface-
|
|
17
|
-
right-0 top-
|
|
15
|
+
<div class="align-items-center flex-grow-1 justify-content-between hidden absolute w-full md:w-auto bg-surface-0
|
|
16
|
+
right-0 top-full z-5 shadow">
|
|
18
17
|
<loading-zone suspense>
|
|
19
18
|
<template v-slot:loading>
|
|
20
|
-
<div class="flex
|
|
19
|
+
<div class="flex items-center justify-center top-0 left-0 notifications-loading">
|
|
21
20
|
<ProgressSpinner animationDuration=".5s"/>
|
|
22
21
|
</div>
|
|
23
22
|
</template>
|
|
24
23
|
<template v-slot:default="{ isLoading }">
|
|
25
24
|
<working-zone>
|
|
26
25
|
<template v-slot:working>
|
|
27
|
-
<div class="fixed w-full h-full flex
|
|
26
|
+
<div class="fixed w-full h-full flex items-center justify-center top-0 left-0">
|
|
28
27
|
<ProgressSpinner animationDuration=".5s"/>
|
|
29
28
|
</div>
|
|
30
29
|
</template>
|
|
@@ -1,52 +1,57 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<ul class="list-none p-0 m-0 flex select-none flex-
|
|
2
|
+
<ul class="list-none p-0 m-0 flex select-none flex-col">
|
|
3
3
|
<li>
|
|
4
4
|
<router-link :to="{ name: 'user:identification' }"
|
|
5
5
|
v-ripple
|
|
6
|
-
class="flex px-6 py-2
|
|
6
|
+
class="flex px-6 py-2 items-center text-surface-600 hover:text-surface-900
|
|
7
|
+
hover:bg-surface-100
|
|
7
8
|
font-medium border-round cursor-pointer transition-colors transition-duration-150 p-ripple no-underline"
|
|
8
9
|
>
|
|
9
|
-
<i class="pi pi-user mr-
|
|
10
|
+
<i class="pi pi-user mr-3"></i>
|
|
10
11
|
<span>Profile</span>
|
|
11
12
|
</router-link>
|
|
12
13
|
</li>
|
|
13
14
|
<li v-if="!client.user">
|
|
14
15
|
<router-link :to="{ name: 'user:signUpEmail' }"
|
|
15
16
|
v-ripple
|
|
16
|
-
class="flex px-6 py-2
|
|
17
|
-
|
|
17
|
+
class="flex px-6 py-2 items-center text-surface-600 hover:text-surface-900 hover:bg-surface-100
|
|
18
|
+
font-medium border-round cursor-pointer p-ripple no-underline
|
|
19
|
+
transition-colors duration-300 ease-in-out"
|
|
18
20
|
>
|
|
19
|
-
<i class="pi pi-user-plus mr-
|
|
21
|
+
<i class="pi pi-user-plus mr-3"></i>
|
|
20
22
|
<span>Sign Up</span>
|
|
21
23
|
</router-link>
|
|
22
24
|
</li>
|
|
23
25
|
<li v-if="!client.user">
|
|
24
26
|
<router-link :to="{ name: 'user:signInEmail' }"
|
|
25
27
|
v-ripple
|
|
26
|
-
class="flex px-6 py-2
|
|
27
|
-
|
|
28
|
+
class="flex px-6 py-2 items-center text-surface-600 hover:text-surface-900 hover:bg-surface-100
|
|
29
|
+
font-medium border-round cursor-pointer p-ripple no-underline
|
|
30
|
+
transition-colors duration-300 ease-in-out"
|
|
28
31
|
>
|
|
29
|
-
<i class="pi pi-key mr-
|
|
32
|
+
<i class="pi pi-key mr-3"></i>
|
|
30
33
|
<span>Sign In</span>
|
|
31
34
|
</router-link>
|
|
32
35
|
</li>
|
|
33
36
|
<li v-if="client.user">
|
|
34
37
|
<router-link :to="{ name: 'user:settings' }"
|
|
35
38
|
v-ripple
|
|
36
|
-
class="flex px-6 py-2
|
|
37
|
-
|
|
39
|
+
class="flex px-6 py-2 items-center text-surface-600 hover:text-surface-900 hover:bg-surface-100
|
|
40
|
+
font-medium border-round cursor-pointer p-ripple no-underline
|
|
41
|
+
transition-colors duration-300 ease-in-out"
|
|
38
42
|
>
|
|
39
|
-
<i class="pi pi-cog mr-
|
|
43
|
+
<i class="pi pi-cog mr-3"></i>
|
|
40
44
|
<span>Settings</span>
|
|
41
45
|
</router-link>
|
|
42
46
|
</li>
|
|
43
47
|
<li v-if="client.user">
|
|
44
48
|
<router-link :to="{ name: 'user:signOut' }"
|
|
45
49
|
v-ripple
|
|
46
|
-
class="flex px-6 py-2
|
|
47
|
-
|
|
50
|
+
class="flex px-6 py-2 items-center text-surface-600 hover:text-surface-900 hover:bg-surface-100
|
|
51
|
+
font-medium border-round cursor-pointer p-ripple no-underline
|
|
52
|
+
transition-colors duration-300 ease-in-out"
|
|
48
53
|
>
|
|
49
|
-
<i class="pi pi-power-off mr-
|
|
54
|
+
<i class="pi pi-power-off mr-3"></i>
|
|
50
55
|
<span>Sign Out</span>
|
|
51
56
|
</router-link>
|
|
52
57
|
</li>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="notification-buttons">
|
|
3
3
|
<Button v-if="notification.readState === 'new'" @click="markRead()"
|
|
4
|
-
icon="pi pi-eye" class="p-button-rounded p-button-outlined surface-0 " />
|
|
4
|
+
icon="pi pi-eye" class="p-button-rounded p-button-outlined bg-surface-0 dark:bg-surface-900 " />
|
|
5
5
|
<Button v-if="notification.readState === 'read'" @click="markUnread()"
|
|
6
|
-
icon="pi pi-eye-slash" class="p-button-rounded p-button-outlined surface-0" />
|
|
6
|
+
icon="pi pi-eye-slash" class="p-button-rounded p-button-outlined bg-surface-0 dark:bg-surface-900" />
|
|
7
7
|
<Button @click="deleteNotification()"
|
|
8
|
-
icon="pi pi-trash" class="p-button-rounded p-button-outlined ml-1 surface-0" />
|
|
8
|
+
icon="pi pi-trash" class="p-button-rounded p-button-outlined ml-1 bg-surface-0 dark:bg-surface-900" />
|
|
9
9
|
</div>
|
|
10
10
|
</template>
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9">
|
|
3
|
-
<div v-if="isMounted" class="surface-
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12">
|
|
3
|
+
<div v-if="isMounted" class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
|
|
4
4
|
<NotificationsList />
|
|
5
5
|
</div>
|
|
6
6
|
</div>
|
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<a v-if="unreadNotificationsCount"
|
|
3
3
|
v-ripple
|
|
4
|
-
v-styleclass="{ selector: '@next',
|
|
5
|
-
class="flex mx-0 pl-
|
|
4
|
+
v-styleclass="{ selector: '@next', enterFromClass: 'hidden', leaveToClass: 'hidden', hideOnOutsideClick: true }"
|
|
5
|
+
class="flex mx-0 pl-4 pr-6 pt-3 pb-2 items-center text-surface-500 dark:text-surface-400
|
|
6
|
+
hover:text-surface-900 hover:dark:text-surface-100 overflow-visible
|
|
6
7
|
font-medium border-round cursor-pointer transition-colors transition-duration-150 p-ripple">
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
</
|
|
8
|
+
<OverlayBadge v-if="unreadNotificationsCount?.count" :value="unreadNotificationsCount?.count ?? 0" size="small">
|
|
9
|
+
<i class="pi pi-bell" style="font-size: 1.5rem" />
|
|
10
|
+
</OverlayBadge>
|
|
10
11
|
</a>
|
|
11
12
|
<div
|
|
12
|
-
class="align-items-center flex-grow-1 justify-content-between hidden absolute w-full md:w-auto
|
|
13
|
-
|
|
13
|
+
class="align-items-center flex-grow-1 justify-content-between hidden absolute w-full md:w-auto
|
|
14
|
+
bg-surface-0 dark:bg-surface-950
|
|
15
|
+
right-0 top-full z-1 shadow overflow-x-hidden overflow-y-auto"
|
|
14
16
|
style="max-height: calc(100vh - 8rem)">
|
|
15
17
|
<loading-zone suspense>
|
|
16
18
|
<template v-slot:loading>
|
|
17
|
-
<div class="flex
|
|
19
|
+
<div class="flex items-center justify-center top-0 left-0 notifications-loading">
|
|
18
20
|
<ProgressSpinner animationDuration=".5s"/>
|
|
19
21
|
</div>
|
|
20
22
|
</template>
|
|
21
23
|
<template v-slot:default="{ isLoading }">
|
|
22
24
|
<working-zone>
|
|
23
25
|
<template v-slot:working>
|
|
24
|
-
<div class="fixed w-full h-full flex
|
|
26
|
+
<div class="fixed w-full h-full flex items-center justify-center top-0 left-0">
|
|
25
27
|
<ProgressSpinner animationDuration=".5s"/>
|
|
26
28
|
</div>
|
|
27
29
|
</template>
|
|
@@ -38,7 +40,7 @@
|
|
|
38
40
|
|
|
39
41
|
<script setup>
|
|
40
42
|
|
|
41
|
-
import
|
|
43
|
+
import OverlayBadge from "primevue/overlaybadge"
|
|
42
44
|
import ProgressSpinner from "primevue/progressspinner"
|
|
43
45
|
|
|
44
46
|
import NotificationsList from "./NotificationsList.vue"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="flex
|
|
3
|
-
<div class="text-900 font-medium text-xl">Notifications</div>
|
|
2
|
+
<div class="flex items-center justify-between mb-1 px-4 pt-1">
|
|
3
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">Notifications</div>
|
|
4
4
|
<div>
|
|
5
5
|
<Button @click="$refs.menu.toggle($event)"
|
|
6
6
|
icon="pi pi-ellipsis-v" class="p-button-text p-button-plain p-button-rounded" />
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
:style="{ backgroundz: `hsl(${bucket.id * 11}, 100%, 80%)` }">
|
|
13
13
|
<div v-for="(notification, index) in bucket.data" :key="notification.id"
|
|
14
14
|
:ref="el => bucket.domElements[index] = el"
|
|
15
|
-
class="notification border-
|
|
15
|
+
class="notification border-b border-surface"
|
|
16
16
|
:class="{ selected: selectedNotification === notification.to }">
|
|
17
17
|
<component :is="notificationComponent(notification)" :notification="notification" />
|
|
18
|
-
<div class="notification-more-button flex
|
|
18
|
+
<div class="notification-more-button flex items-end justify-center">
|
|
19
19
|
<Button @click="() => selectNotification(notification)"
|
|
20
20
|
icon="pi pi-ellipsis-h" class="p-button-rounded p-button-text " />
|
|
21
21
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
-
<div class="surface-
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
+
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
|
|
4
4
|
<div>
|
|
5
5
|
<h1>Notifications settings</h1>
|
|
6
6
|
</div>
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
</div>
|
|
13
13
|
<div>
|
|
14
14
|
<div v-for="contact in notificationType.contacts"
|
|
15
|
-
class="flex flex-row
|
|
16
|
-
<div class="
|
|
15
|
+
class="flex flex-row items-center mb-4">
|
|
16
|
+
<div class="grow md:mb-2">
|
|
17
17
|
<i class="pi" :class="contactTypesIcons[contact.contactType]"></i>
|
|
18
18
|
<span class="ml-2">{{ contactText(contact.contact, contact.contactType) }}</span>
|
|
19
19
|
</div>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div :class="['px-
|
|
3
|
-
notification.readState === 'new' ? 'surface-0 hover:surface-100' : 'surface-100 hover:surface-200'] ">
|
|
2
|
+
<div :class="['px-4 py-2 flex items-start justify-between flex-col',
|
|
3
|
+
notification.readState === 'new' ? 'bg-surface-0 dark:bg-surface-900 hover:bg-surface-100 dark:hover:bg-surface-700' : 'bg-surface-100 dark:bg-surface-700 hover:bg-surface-200 dark:hover:bg-surface-600'] ">
|
|
4
4
|
<slot></slot>
|
|
5
|
-
<span class="block text-500 font-medium mt-2">
|
|
5
|
+
<span class="block text-surface-500 dark:text-surface-300 font-medium mt-2">
|
|
6
6
|
{{ DateTime.fromISO(notification.time).toRelative({ base: DateTime.fromMillis(now) }) }}
|
|
7
7
|
</span>
|
|
8
8
|
</div>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9">
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12">
|
|
3
3
|
|
|
4
|
-
<div class="surface-
|
|
5
|
-
<div class="text-center mb-
|
|
6
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
4
|
+
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
|
|
5
|
+
<div class="text-center mb-8">
|
|
6
|
+
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
7
7
|
{{ passwordExists ? 'Change password' : 'Set password' }}
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
@@ -14,20 +14,22 @@
|
|
|
14
14
|
|
|
15
15
|
<template v-if="isMounted">
|
|
16
16
|
|
|
17
|
-
<div class="p-field mb-
|
|
18
|
-
<label for="currentPassword" class="block text-900 font-medium mb-2">Current password</label>
|
|
17
|
+
<div class="p-field mb-4" v-if="passwordExists">
|
|
18
|
+
<label for="currentPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Current password</label>
|
|
19
19
|
<Password id="currentPassword" class="w-full" inputClass="w-full"
|
|
20
20
|
toggle-mask v-model:masked="masked"
|
|
21
|
-
:
|
|
21
|
+
:invalid="!!data.currentPasswordHashError"
|
|
22
22
|
v-model="data.currentPasswordHash" />
|
|
23
|
-
<
|
|
23
|
+
<Message v-if="data.currentPasswordHashError" severity="error" variant="simple" size="small">
|
|
24
|
+
{{ t(`errors.${data.currentPasswordHashError}`) }}
|
|
25
|
+
</Message>
|
|
24
26
|
</div>
|
|
25
27
|
|
|
26
|
-
<div class="p-field mb-
|
|
27
|
-
<label for="newPassword" class="block text-900 font-medium mb-2">New password</label>
|
|
28
|
+
<div class="p-field mb-4">
|
|
29
|
+
<label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">New password</label>
|
|
28
30
|
<Password id="newPassword" class="w-full" inputClass="w-full"
|
|
29
31
|
toggle-mask v-model:masked="masked"
|
|
30
|
-
:
|
|
32
|
+
:invalid="!!data.passwordHashError"
|
|
31
33
|
v-model="data.passwordHash">
|
|
32
34
|
<template #footer>
|
|
33
35
|
<Divider />
|
|
@@ -40,11 +42,13 @@
|
|
|
40
42
|
</ul>
|
|
41
43
|
</template>
|
|
42
44
|
</Password>
|
|
43
|
-
<
|
|
45
|
+
<Message v-if="data.passwordHashError" severity="error" variant="simple" size="small">
|
|
46
|
+
{{ t(`errors.${data.passwordHashError}`) }}
|
|
47
|
+
</Message>
|
|
44
48
|
</div>
|
|
45
49
|
|
|
46
|
-
<div class="p-field mb-
|
|
47
|
-
<label for="reenterPassword" class="block text-900 font-medium mb-2">Re-enter password</label>
|
|
50
|
+
<div class="p-field mb-4">
|
|
51
|
+
<label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Re-enter password</label>
|
|
48
52
|
<Password id="reenterPassword" class="w-full" inputClass="w-full"
|
|
49
53
|
toggle-mask v-model:masked="masked"
|
|
50
54
|
v-model="secondPassword"
|
|
@@ -67,6 +71,7 @@
|
|
|
67
71
|
|
|
68
72
|
import Button from "primevue/button"
|
|
69
73
|
import Divider from "primevue/divider"
|
|
74
|
+
import Message from "primevue/message"
|
|
70
75
|
import Password from "./Password.vue"
|
|
71
76
|
|
|
72
77
|
import { live, path } from '@live-change/vue3-ssr'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
-
<div class="surface-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
5
|
-
<p class="mt-0 p-0
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
|
+
<div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
|
|
4
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Password changed</div>
|
|
5
|
+
<p class="mt-0 p-0 leading-normal">You have successfully set your password.</p>
|
|
6
6
|
</div>
|
|
7
7
|
</div>
|
|
8
8
|
</template>
|