@fishawack/lab-velocity 1.0.0 → 1.1.1
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/AuthModule/components/VPasswordValidation.vue +66 -0
- package/AuthModule/js/routes.js +104 -0
- package/AuthModule/routes/account-exists.vue +31 -0
- package/AuthModule/routes/container.vue +40 -0
- package/AuthModule/routes/expired-reset.vue +76 -0
- package/AuthModule/routes/expired-verification.vue +100 -0
- package/AuthModule/routes/force-reset.vue +132 -0
- package/AuthModule/routes/forgot.vue +87 -0
- package/AuthModule/routes/login.vue +137 -0
- package/AuthModule/routes/logincallback.vue +43 -0
- package/AuthModule/routes/loginsso.vue +121 -0
- package/AuthModule/routes/register.vue +152 -0
- package/AuthModule/routes/reset.vue +122 -0
- package/AuthModule/routes/success-forgot.vue +117 -0
- package/AuthModule/routes/success-reset.vue +31 -0
- package/AuthModule/routes/success-verify.vue +25 -0
- package/AuthModule/routes/verify.vue +109 -0
- package/index.js +3 -1
- package/modules/_AuthModule.scss +130 -0
- package/package.json +5 -3
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="relative">
|
|
3
|
+
<section id="resetPasswordForm">
|
|
4
|
+
<h1 class="h2">Success</h1>
|
|
5
|
+
|
|
6
|
+
<p class="mt mb-0 color-21">
|
|
7
|
+
<strong class="">Email: {{ $route.query.email }}</strong>
|
|
8
|
+
</p>
|
|
9
|
+
<p class="mt-0.5">
|
|
10
|
+
Your password has been reset. Please sign in to continue.
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<router-link
|
|
14
|
+
:to="{name: `${$store.state.authBase}.login`}"
|
|
15
|
+
class="button button--primary px-2"
|
|
16
|
+
>
|
|
17
|
+
<span v-text="'Sign in'" />
|
|
18
|
+
</router-link>
|
|
19
|
+
</section>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
export default {
|
|
25
|
+
metaInfo() {
|
|
26
|
+
return {
|
|
27
|
+
title: "Reset Password | Success",
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
</script>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<h1 class="h2">Verification complete</h1>
|
|
3
|
+
<p><strong>Welcome to Expert Partnership, {{ $store.state.user?.name }}!</strong></p>
|
|
4
|
+
<p>Your account has been verified successfully.</p>
|
|
5
|
+
|
|
6
|
+
<router-link
|
|
7
|
+
:to="{name: 'members'}"
|
|
8
|
+
class="button button--primary px-2"
|
|
9
|
+
>
|
|
10
|
+
<span v-text="'Continue'" />
|
|
11
|
+
</router-link>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
export default {
|
|
16
|
+
mounted(){
|
|
17
|
+
this.$store.commit("setAuth", true);
|
|
18
|
+
|
|
19
|
+
this.$store.dispatch("getUser", {
|
|
20
|
+
errors: this.$root.errors,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
// Problem in this file
|
|
24
|
+
};
|
|
25
|
+
</script>
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<h1 class="h2">Verify your email address</h1>
|
|
3
|
+
|
|
4
|
+
<form class="form" @submit.prevent="submit">
|
|
5
|
+
<p class="mt mb-0 color-21">
|
|
6
|
+
<strong class="">Email: {{ user?.email }}</strong>
|
|
7
|
+
</p>
|
|
8
|
+
<p class="mt-0.5">
|
|
9
|
+
<strong>Please check your inbox</strong> for a Verification email from Expert Partnership. Click the link in that email to verify your email address and complete your registration.
|
|
10
|
+
</p>
|
|
11
|
+
<p class="mt-0.5">
|
|
12
|
+
Haven’t received the email after 10 minutes?
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<el-input
|
|
16
|
+
class="mt-2 mb-2.5 hidden"
|
|
17
|
+
v-model="form.email"
|
|
18
|
+
label="Email address"
|
|
19
|
+
name="email"
|
|
20
|
+
:error="form.errors"
|
|
21
|
+
type="email"
|
|
22
|
+
placeholder="Email "
|
|
23
|
+
required
|
|
24
|
+
/>
|
|
25
|
+
|
|
26
|
+
<button
|
|
27
|
+
type="submit"
|
|
28
|
+
:disabled="form.processing"
|
|
29
|
+
:loading="form.processing"
|
|
30
|
+
class="button button--primary"
|
|
31
|
+
>
|
|
32
|
+
Re-send verification link
|
|
33
|
+
</button>
|
|
34
|
+
|
|
35
|
+
<p class="disclaimer mt-1.5">
|
|
36
|
+
Having trouble singing in?
|
|
37
|
+
<a :href="contact" class="underline">Contact us</a>
|
|
38
|
+
</p>
|
|
39
|
+
</form>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script>
|
|
43
|
+
import Form from "form-backend-validation";
|
|
44
|
+
import { default as elInput} from "../../form/basic.vue";
|
|
45
|
+
|
|
46
|
+
export default {
|
|
47
|
+
components: {
|
|
48
|
+
elInput: elInput
|
|
49
|
+
},
|
|
50
|
+
data: () => ({
|
|
51
|
+
user: null,
|
|
52
|
+
form: new Form(
|
|
53
|
+
{
|
|
54
|
+
email: "",
|
|
55
|
+
},
|
|
56
|
+
{ resetOnSuccess: false }
|
|
57
|
+
),
|
|
58
|
+
notification: null,
|
|
59
|
+
contact: process.env.HYDRATE_CONTACT ?? 'mailto:EP@avalerehealth.com',
|
|
60
|
+
}),
|
|
61
|
+
|
|
62
|
+
methods: {
|
|
63
|
+
async submit() {
|
|
64
|
+
try {
|
|
65
|
+
if (this.notification) {
|
|
66
|
+
this.notification.close();
|
|
67
|
+
this.notification = null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
await this.form.post("/email/verification-notification");
|
|
71
|
+
|
|
72
|
+
this.$notify({
|
|
73
|
+
type: "success",
|
|
74
|
+
message: "Email has been re-sent",
|
|
75
|
+
duration: 10000,
|
|
76
|
+
class: 'el-notification--success el-notification--right-override'
|
|
77
|
+
});
|
|
78
|
+
} catch (e) {
|
|
79
|
+
if (e.response && e.response.status === 429) {
|
|
80
|
+
this.notification = this.$notify({
|
|
81
|
+
type: "warning",
|
|
82
|
+
message: 'Please allow 10 minutes before re-requesting',
|
|
83
|
+
duration: 0,
|
|
84
|
+
class: 'el-notification--warning el-notification--right-override'
|
|
85
|
+
});
|
|
86
|
+
} else if (e.response && e.response.status === 422) {
|
|
87
|
+
this.notification = this.$notify({
|
|
88
|
+
type: "error",
|
|
89
|
+
message: e.response.data.message,
|
|
90
|
+
duration: 0,
|
|
91
|
+
class: 'el-notification--error el-notification--right-override'
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.$root.errors(e);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
async mounted() {
|
|
102
|
+
this.user = await this.$store.dispatch("getUser", {
|
|
103
|
+
errors: this.$root.errors,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
this.form.email = this.user.email;
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
</script>
|
package/index.js
CHANGED
|
@@ -29,4 +29,6 @@ export { default as BreadcrumbsItem } from "./navigation/BreadcrumbsItem.vue";
|
|
|
29
29
|
|
|
30
30
|
export { default as Icon } from "./Icon.vue";
|
|
31
31
|
export { default as Svg } from "./Svg.vue";
|
|
32
|
-
export { default as Loader } from "./layout/Loader.vue";
|
|
32
|
+
export { default as Loader } from "./layout/Loader.vue";
|
|
33
|
+
|
|
34
|
+
export {authRoutes} from './AuthModule/js/routes.js';
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// AuthModule
|
|
2
|
+
.AuthModule {
|
|
3
|
+
position: fixed;
|
|
4
|
+
background-color: black;
|
|
5
|
+
height: 100vh;
|
|
6
|
+
width: 100%;
|
|
7
|
+
background: url('../media/content/images/hero-login-large.jpg') center top no-repeat;
|
|
8
|
+
background-size: cover;
|
|
9
|
+
z-index: 10;
|
|
10
|
+
&:after {
|
|
11
|
+
position: absolute;
|
|
12
|
+
content: '';
|
|
13
|
+
top: 0;
|
|
14
|
+
left: 0;
|
|
15
|
+
width: 100%;
|
|
16
|
+
height: 100%;
|
|
17
|
+
background-image: radial-gradient(circle at 15% 105%, #00e677de, rgba(0, 230, 118, 0) 35%);
|
|
18
|
+
z-index: 0;
|
|
19
|
+
@include breakpoint (max-width $mobileMax) {
|
|
20
|
+
background-image: radial-gradient(circle at 15% 90%, #00e677de, rgba(0, 230, 118, 0) 50%);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.logo {
|
|
25
|
+
width: 13.3rem;
|
|
26
|
+
z-index: 99;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.AuthModule__form {
|
|
31
|
+
position: absolute;
|
|
32
|
+
top: 50%;
|
|
33
|
+
left: 50%;
|
|
34
|
+
transform: translate(-50%, -50%);
|
|
35
|
+
background-color: white;
|
|
36
|
+
min-width: 320px;
|
|
37
|
+
width: 460px;
|
|
38
|
+
padding: 48px 40px 40px;
|
|
39
|
+
z-index: 1;
|
|
40
|
+
|
|
41
|
+
@include breakpoint (max-width $mobileMax) {
|
|
42
|
+
top: 84px;
|
|
43
|
+
transform: translate(-50%, 0);
|
|
44
|
+
padding: 24px;
|
|
45
|
+
width: calc(100% - 80px);
|
|
46
|
+
.h2 {
|
|
47
|
+
font-size: 2.4rem;
|
|
48
|
+
line-height: 3.2rem;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
h2, .h2 {
|
|
53
|
+
font-family: $font2;
|
|
54
|
+
line-height: 4.4rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
p {
|
|
58
|
+
font-size: 1.4rem;
|
|
59
|
+
line-height: 2rem;
|
|
60
|
+
margin-bottom: 2rem;
|
|
61
|
+
letter-spacing: -0.1px;
|
|
62
|
+
&.disclaimer {
|
|
63
|
+
font-size: 1.2rem;
|
|
64
|
+
color: rgba($color1, 0.5);
|
|
65
|
+
margin: 0;
|
|
66
|
+
}
|
|
67
|
+
a {
|
|
68
|
+
color: $color1;
|
|
69
|
+
}
|
|
70
|
+
&.form__error {
|
|
71
|
+
font-size: 1.2rem;
|
|
72
|
+
line-height: 1.5;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.button {
|
|
77
|
+
max-width: 200px;
|
|
78
|
+
width: 200px;
|
|
79
|
+
@include breakpoint (max-width $mobileMax) {
|
|
80
|
+
max-width: unset;
|
|
81
|
+
width: 100%;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.form {
|
|
86
|
+
&.error {
|
|
87
|
+
.form__input {
|
|
88
|
+
.el-input__wrapper {
|
|
89
|
+
border: 0.2rem solid $color20;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
.form__input.error {
|
|
93
|
+
border:none;
|
|
94
|
+
.el-input__wrapper {
|
|
95
|
+
border: 0.2rem solid $color10;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
&__icon-container{
|
|
100
|
+
position: absolute;
|
|
101
|
+
top: 50%;
|
|
102
|
+
right: get-ratio($spacing * 1.5);
|
|
103
|
+
transform: translateY(-50%);
|
|
104
|
+
display: flex;
|
|
105
|
+
}
|
|
106
|
+
&__action-icon {
|
|
107
|
+
margin-left: get-ratio($spacing * 0.5);
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.AuthModule__logo__container {
|
|
114
|
+
position: absolute;
|
|
115
|
+
top:48px;
|
|
116
|
+
left:0%;
|
|
117
|
+
}
|
|
118
|
+
.AuthModule__logo {
|
|
119
|
+
position: relative;
|
|
120
|
+
}
|
|
121
|
+
.AuthModule__Content {
|
|
122
|
+
position: absolute;
|
|
123
|
+
z-index: 1;
|
|
124
|
+
top: 50%;
|
|
125
|
+
left: 50%;
|
|
126
|
+
transform: translate(-50%, -50%);
|
|
127
|
+
max-width: 1024px;
|
|
128
|
+
width: 100%;
|
|
129
|
+
height: 100%;
|
|
130
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fishawack/lab-velocity",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Avalere Health branded style system",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"setup": "npm ci || npm i && npm run content",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"mail": "npm run mail --prefix node_modules/@fishawack/core/",
|
|
14
14
|
"story:dev": "histoire dev",
|
|
15
15
|
"story:build": "histoire build",
|
|
16
|
-
"preversion": "cp -r _Build/sass/** ./ && cp -r _Build/vue/components/** ./"
|
|
16
|
+
"preversion": "cp -r _Build/sass/** ./ && cp -r _Build/vue/components/** ./ && cp -r _Build/vue/modules/** ./"
|
|
17
17
|
},
|
|
18
18
|
"license": "BSD-3-Clause",
|
|
19
19
|
"author": {
|
|
@@ -62,7 +62,9 @@
|
|
|
62
62
|
"components",
|
|
63
63
|
"layout",
|
|
64
64
|
"navigation",
|
|
65
|
-
"basic"
|
|
65
|
+
"basic",
|
|
66
|
+
"modules",
|
|
67
|
+
"AuthModule"
|
|
66
68
|
],
|
|
67
69
|
"main": "index.js",
|
|
68
70
|
"release": {
|