@fishawack/lab-velocity 1.11.1 → 2.0.0-beta.10

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.
Files changed (138) hide show
  1. package/README.md +177 -49
  2. package/_Build/vue/components/Icon.vue +33 -0
  3. package/_Build/vue/components/Svg.vue +45 -0
  4. package/{basic → _Build/vue/components/basic}/Button.vue +17 -19
  5. package/{basic → _Build/vue/components/basic}/link.vue +8 -7
  6. package/{form → _Build/vue/components/form}/Cascader.vue +13 -13
  7. package/{form → _Build/vue/components/form}/CheckboxGroup.vue +28 -6
  8. package/{form → _Build/vue/components/form}/DatePicker.vue +23 -7
  9. package/{form → _Build/vue/components/form}/InputNumber.vue +1 -2
  10. package/{form → _Build/vue/components/form}/Select.vue +10 -11
  11. package/_Build/vue/components/form/Spinner.vue +5 -0
  12. package/{form → _Build/vue/components/form}/Switch.vue +2 -2
  13. package/{form → _Build/vue/components/form}/Upload.vue +4 -6
  14. package/{form → _Build/vue/components/form}/Wysiwyg.vue +14 -14
  15. package/_Build/vue/components/form/Wysiwyg2.vue +577 -0
  16. package/{form → _Build/vue/components/form}/basic.vue +25 -7
  17. package/{form → _Build/vue/components/form}/file.vue +1 -1
  18. package/{form → _Build/vue/components/form}/input.js +2 -2
  19. package/{form → _Build/vue/components/form}/input.vue +31 -11
  20. package/{layout → _Build/vue/components/layout}/Alert.vue +10 -10
  21. package/_Build/vue/components/layout/Footer.vue +50 -0
  22. package/{layout → _Build/vue/components/layout}/Header.vue +5 -7
  23. package/_Build/vue/components/layout/Loader.vue +59 -0
  24. package/{layout → _Build/vue/components/layout}/Tooltip.vue +12 -12
  25. package/{layout → _Build/vue/components/layout}/pageTitle.vue +4 -4
  26. package/{layout → _Build/vue/components/layout}/sideBar.vue +4 -6
  27. package/{navigation → _Build/vue/components/navigation}/Breadcrumbs.vue +15 -10
  28. package/{navigation → _Build/vue/components/navigation}/BreadcrumbsItem.vue +6 -6
  29. package/_Build/vue/components/navigation/Menu.vue +14 -0
  30. package/_Build/vue/components/navigation/MenuItem.vue +20 -0
  31. package/_Build/vue/components/navigation/MenuItemGroup.vue +20 -0
  32. package/_Build/vue/components/navigation/SubMenu.vue +20 -0
  33. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/Upload/upload.vue +259 -0
  34. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/create.vue +62 -0
  35. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/edit.vue +98 -0
  36. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/index.vue +90 -0
  37. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/partials/form.vue +181 -0
  38. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/show.vue +267 -0
  39. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/parent.vue +36 -0
  40. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/create.vue +113 -0
  41. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/edit.vue +101 -0
  42. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/index.vue +112 -0
  43. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/partials/form.vue +174 -0
  44. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/show.vue +123 -0
  45. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/parent.vue +36 -0
  46. package/{AuthModule → _Build/vue/modules/AuthModule}/components/AuthModal.vue +30 -35
  47. package/_Build/vue/modules/AuthModule/components/Chip.vue +70 -0
  48. package/_Build/vue/modules/AuthModule/components/Chips.vue +26 -0
  49. package/_Build/vue/modules/AuthModule/components/FormRole.vue +117 -0
  50. package/_Build/vue/modules/AuthModule/components/VBreadcrumbs.vue +33 -0
  51. package/_Build/vue/modules/AuthModule/components/VFormFooter.vue +52 -0
  52. package/_Build/vue/modules/AuthModule/components/VPageHeader.vue +38 -0
  53. package/_Build/vue/modules/AuthModule/components/VPasswordValidation.vue +106 -0
  54. package/_Build/vue/modules/AuthModule/components/VRoleLegend.vue +43 -0
  55. package/_Build/vue/modules/AuthModule/components/VTable.vue +136 -0
  56. package/_Build/vue/modules/AuthModule/components/VTableSorter.vue +252 -0
  57. package/_Build/vue/modules/AuthModule/js/FakeAPI.js +78 -0
  58. package/_Build/vue/modules/AuthModule/js/axios.js +81 -0
  59. package/_Build/vue/modules/AuthModule/js/router.js +295 -0
  60. package/_Build/vue/modules/AuthModule/js/store.js +62 -0
  61. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/account-exists.vue +6 -8
  62. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/change-password.vue +39 -38
  63. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/container.vue +4 -8
  64. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/expired-reset.vue +17 -15
  65. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/expired-verification.vue +21 -20
  66. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/force-reset.vue +45 -40
  67. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/forgot.vue +15 -11
  68. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/login.vue +27 -26
  69. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/logincallback.vue +6 -13
  70. package/_Build/vue/modules/AuthModule/routes/loginheadless.vue +21 -0
  71. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/loginsso.vue +34 -29
  72. package/_Build/vue/modules/AuthModule/routes/logout.vue +19 -0
  73. package/_Build/vue/modules/AuthModule/routes/logoutheadless.vue +25 -0
  74. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/register.vue +52 -37
  75. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/reset.vue +29 -19
  76. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/success-forgot.vue +22 -19
  77. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/success-reset.vue +6 -6
  78. package/_Build/vue/modules/AuthModule/routes/success-verify.vue +30 -0
  79. package/{AuthModule → _Build/vue/modules/AuthModule}/routes/verify.vue +26 -26
  80. package/_base.scss +0 -1
  81. package/_defaults.scss +3 -15
  82. package/_variables.scss +24 -21
  83. package/components/_alert.scss +2 -2
  84. package/components/_auth.scss +163 -0
  85. package/components/_basic.scss +5 -4
  86. package/components/_breadcrumbs.scss +7 -8
  87. package/components/_button.scss +11 -12
  88. package/components/_cascader.scss +1 -1
  89. package/components/_checkbox.scss +27 -26
  90. package/components/_chip.scss +24 -0
  91. package/components/_collapse.scss +2 -3
  92. package/components/_datepicker.scss +7 -6
  93. package/components/_footer.scss +1 -1
  94. package/components/_form.scss +6 -4
  95. package/components/_header.scss +4 -5
  96. package/components/_icon.scss +4 -3
  97. package/components/_inputNumber.scss +4 -3
  98. package/components/_link.scss +7 -7
  99. package/components/_loader.scss +3 -4
  100. package/components/_menu.scss +22 -22
  101. package/{modules → components}/_modal.scss +3 -3
  102. package/components/_pageTitle.scss +3 -3
  103. package/components/_permissionLegend.scss +18 -0
  104. package/components/_select.scss +3 -2
  105. package/components/_sidebar.scss +5 -6
  106. package/components/_switch.scss +2 -2
  107. package/components/_table.scss +3 -3
  108. package/components/_tooltip.scss +2 -2
  109. package/components/_typography.scss +71 -62
  110. package/components/_upload.scss +1 -1
  111. package/components/_wysiwyg.scss +3 -2
  112. package/components/_wysiwyg2.scss +37 -31
  113. package/general.scss +1 -2
  114. package/index.js +38 -30
  115. package/package.json +104 -102
  116. package/vendor.scss +2 -3
  117. package/AuthModule/components/VPasswordValidation.vue +0 -66
  118. package/AuthModule/js/AuthAxios.js +0 -59
  119. package/AuthModule/js/AuthRoutes.js +0 -186
  120. package/AuthModule/js/AuthStore.js +0 -99
  121. package/AuthModule/js/FakeAPI.js +0 -84
  122. package/AuthModule/routes/loginheadless.vue +0 -16
  123. package/AuthModule/routes/logout.vue +0 -21
  124. package/AuthModule/routes/success-verify.vue +0 -29
  125. package/Icon.vue +0 -33
  126. package/Svg.vue +0 -40
  127. package/components/_input.scss +0 -0
  128. package/form/Wysiwyg2.vue +0 -278
  129. package/layout/Footer.vue +0 -35
  130. package/layout/Loader.vue +0 -39
  131. package/modules/_AuthModule.scss +0 -209
  132. package/modules/_AuthVariables.scss +0 -7
  133. package/navigation/Menu.vue +0 -16
  134. package/navigation/MenuItem.vue +0 -20
  135. package/navigation/MenuItemGroup.vue +0 -20
  136. package/navigation/SubMenu.vue +0 -20
  137. /package/{form → _Build/vue/components/form}/Checkbox.vue +0 -0
  138. /package/{form → _Build/vue/components/form}/color.vue +0 -0
@@ -0,0 +1,78 @@
1
+ import axios from "axios";
2
+
3
+ axios.interceptors.request.use(
4
+ (request) => {
5
+ throw { isLocal: true, data: retrieveResponse(request) };
6
+ },
7
+ (error) => {
8
+ return Promise.resolve(error);
9
+ },
10
+ );
11
+
12
+ axios.interceptors.response.use(
13
+ (response) => {
14
+ return response;
15
+ },
16
+ (error) => {
17
+ return Promise.resolve(error);
18
+ },
19
+ );
20
+
21
+ function retrieveResponse(request) {
22
+ return fakes[request.url][request.method];
23
+ }
24
+
25
+ const fakes = {
26
+ "/api/users/self": {
27
+ get: {
28
+ data: {
29
+ id: 2,
30
+ company_id: 1,
31
+ created_at: "2025-04-14T15:11:11.000000Z",
32
+ updated_at: "2025-04-16T16:45:55.000000Z",
33
+ newsletter: null,
34
+ admin: 1,
35
+ name: "Jeremy Viner",
36
+ email: "jeremy.viner@avalerehealth.com",
37
+ email_verified_at: "2025-04-16T16:45:55.000000Z",
38
+ brands: [],
39
+ company: {
40
+ id: 1,
41
+ name: "Company 0",
42
+ created_at: "2025-04-14T15:08:50.000000Z",
43
+ updated_at: "2025-04-14T15:08:50.000000Z",
44
+ domains: [
45
+ "okuneva.com",
46
+ "bogisich.info",
47
+ "avalerehealth.com",
48
+ ],
49
+ brands: [1],
50
+ events: [],
51
+ therapy_areas: [],
52
+ event_therapy_areas: [],
53
+ event_therapy_area_media_types: [],
54
+ users_count: null,
55
+ sso_client_id: "5ea409fc-8dcf-423e-b7fa-867422859ea4",
56
+ sso_client_secret:
57
+ "aSS8Q~ss0r-uh.fPLHUXVXp2kIs5IfwTjzomrb_I",
58
+ sso_tenant: "4a33c544-865e-44a4-836f-bc51800f6c5e",
59
+ sso_type: "azure",
60
+ },
61
+ },
62
+ },
63
+ },
64
+ "/user/password": {
65
+ put: {},
66
+ },
67
+ "/logged-in": {
68
+ get: { "logged-in": true },
69
+ },
70
+ "/logout": {
71
+ post: {},
72
+ },
73
+ "/login": {
74
+ post: {
75
+ two_factor: false,
76
+ },
77
+ },
78
+ };
@@ -0,0 +1,81 @@
1
+ import axios from "axios";
2
+ import debounce from "lodash/debounce";
3
+
4
+ import { ElNotification } from "element-plus";
5
+
6
+ const displayErrorNotification = debounce(async function errors(e) {
7
+ if (e.response && !e.response.data.errors) {
8
+ ElNotification.error({
9
+ title: "Error",
10
+ message:
11
+ e.response.data.message ||
12
+ `${e.response.status}: ${
13
+ e.response.statusText || "Please try again later!"
14
+ }`,
15
+ duration: 10000,
16
+ });
17
+ }
18
+ }, 250);
19
+
20
+ function setAxiosDefaults(baseUrl, router) {
21
+ axios.defaults.baseURL = baseUrl;
22
+ axios.defaults.withCredentials = true;
23
+ axios.defaults.withXSRFToken = true;
24
+
25
+ // Some libraries will utilize the globally available version of axios so make sure it's our exact axios instance
26
+ window.axios = axios;
27
+
28
+ // Redirect to login page if 401
29
+ axios.interceptors.response.use(null, (error) => {
30
+ if (error.response) {
31
+ if (
32
+ error.response.status === 401 &&
33
+ router.currentRoute.value.name !== "auth.logout"
34
+ ) {
35
+ router.push({
36
+ name: "auth.logout",
37
+ });
38
+ }
39
+
40
+ if (error.response.status === 404) {
41
+ router.push({ name: "index" });
42
+ }
43
+ }
44
+
45
+ displayErrorNotification(error);
46
+
47
+ return Promise.reject(error);
48
+ });
49
+
50
+ // Pull all paginated data
51
+ window.axios.getAll = (url, options = {}) => {
52
+ // eslint-disable-next-line no-async-promise-executor
53
+ return new Promise(async (resolve, reject) => {
54
+ try {
55
+ const arr = { data: { data: [] } };
56
+ let page = 0;
57
+
58
+ while (true) {
59
+ const res = await window.axios.get(
60
+ `${url}${url.includes("?") ? "&" : "?"}page=${++page}`,
61
+ options,
62
+ );
63
+ arr.data.data = arr.data.data.concat(res.data.data);
64
+ if (
65
+ res.data.next_page_url === null ||
66
+ (res.data.links && res.data.links.next === null)
67
+ )
68
+ break;
69
+ }
70
+
71
+ resolve(arr);
72
+ } catch (e) {
73
+ reject(e);
74
+ }
75
+ });
76
+ };
77
+ }
78
+
79
+ export default {
80
+ setAxiosDefaults,
81
+ };
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+
3
+ import { h } from "vue";
4
+ import { RouterView } from "vue-router";
5
+
6
+ // Admin routes export - minimal auth flow (headless login only)
7
+ export function adminRoutes(node) {
8
+ return [
9
+ {
10
+ path: "/auth",
11
+ name: "auth",
12
+ component: { render: () => h(RouterView) },
13
+ redirect: () => ({ name: "auth.login" }),
14
+ props: true,
15
+ meta: {
16
+ guest: true,
17
+ },
18
+ children: [
19
+ {
20
+ path: "login",
21
+ component: node
22
+ ? ""
23
+ : require("../routes/loginheadless.vue").default,
24
+ name: "auth.login",
25
+ },
26
+ {
27
+ path: "logout",
28
+ component: node
29
+ ? ""
30
+ : require("../routes/logoutheadless.vue").default,
31
+ name: "auth.logout",
32
+ },
33
+ {
34
+ path: "callback",
35
+ component: node
36
+ ? ""
37
+ : require("../routes/logincallback.vue").default,
38
+ name: "auth.callback",
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ path: "/users",
44
+ component: node
45
+ ? ""
46
+ : require("../adminRoutes/PUsers/parent.vue").default,
47
+ children: [
48
+ {
49
+ path: "",
50
+ component: node
51
+ ? ""
52
+ : require("../adminRoutes/PUsers/Children/index.vue")
53
+ .default,
54
+ name: "users.index",
55
+ },
56
+ {
57
+ path: "create",
58
+ component: node
59
+ ? ""
60
+ : require("../adminRoutes/PUsers/Children/create.vue")
61
+ .default,
62
+ name: "users.create",
63
+ },
64
+ {
65
+ path: ":id",
66
+ component: node
67
+ ? ""
68
+ : require("../adminRoutes/PUsers/Children/show.vue")
69
+ .default,
70
+ name: "users.show",
71
+ },
72
+ {
73
+ path: ":id/edit",
74
+ component: node
75
+ ? ""
76
+ : require("../adminRoutes/PUsers/Children/edit.vue")
77
+ .default,
78
+ name: "users.edit",
79
+ },
80
+ ],
81
+ },
82
+ {
83
+ path: "/companies",
84
+ component: node
85
+ ? ""
86
+ : require("../adminRoutes/PCompanies/parent.vue").default,
87
+ children: [
88
+ {
89
+ path: "",
90
+ component: node
91
+ ? ""
92
+ : require("../adminRoutes/PCompanies/Children/index.vue")
93
+ .default,
94
+ name: "companies.index",
95
+ },
96
+ {
97
+ path: "create",
98
+ component: node
99
+ ? ""
100
+ : require("../adminRoutes/PCompanies/Children/create.vue")
101
+ .default,
102
+ name: "companies.create",
103
+ },
104
+ {
105
+ path: ":id",
106
+ component: node
107
+ ? ""
108
+ : require("../adminRoutes/PCompanies/Children/show.vue")
109
+ .default,
110
+ name: "companies.show",
111
+ },
112
+ {
113
+ path: ":id/edit",
114
+ component: node
115
+ ? ""
116
+ : require("../adminRoutes/PCompanies/Children/edit.vue")
117
+ .default,
118
+ name: "companies.edit",
119
+ },
120
+ {
121
+ path: ":id/upload",
122
+ component: node
123
+ ? ""
124
+ : require("../adminRoutes/PCompanies/Children/Upload/upload.vue")
125
+ .default,
126
+ name: "companies.upload",
127
+ },
128
+ ],
129
+ },
130
+ ];
131
+ }
132
+
133
+ // Standard routes export - full auth flow
134
+ export function routes(node) {
135
+ return [
136
+ {
137
+ path: "/auth",
138
+ name: "auth",
139
+ component: require("../routes/container.vue").default,
140
+ redirect: () => ({ name: "auth.login" }),
141
+ props: true,
142
+ meta: {
143
+ guest: true,
144
+ },
145
+ children: [
146
+ {
147
+ path: "login-creds",
148
+ component: node
149
+ ? ""
150
+ : require("../routes/login.vue").default,
151
+ name: "auth.logincreds",
152
+ },
153
+ {
154
+ path: "login",
155
+ component: node
156
+ ? ""
157
+ : require("../routes/loginsso.vue").default,
158
+ name: "auth.login",
159
+ },
160
+ {
161
+ path: "callback",
162
+ component: node
163
+ ? ""
164
+ : require("../routes/logincallback.vue").default,
165
+ name: "auth.callback",
166
+ },
167
+ {
168
+ path: "forgot",
169
+ component: require("../routes/forgot.vue").default,
170
+ name: "auth.forgot",
171
+ },
172
+ {
173
+ path: "reset",
174
+ component: require("../routes/reset.vue").default,
175
+ name: "auth.reset",
176
+ props: true,
177
+ },
178
+ {
179
+ path: "force-reset",
180
+ component: require("../routes/force-reset.vue").default,
181
+ name: "auth.force-reset",
182
+ props: true,
183
+ },
184
+ {
185
+ path: "register",
186
+ component: require("../routes/register.vue").default,
187
+ name: "auth.register",
188
+ },
189
+ {
190
+ path: "verify",
191
+ component: require("../routes/verify.vue").default,
192
+ name: "auth.verify",
193
+ },
194
+ {
195
+ path: "verified",
196
+ component: require("../routes/success-verify.vue").default,
197
+ name: "auth.success-verify",
198
+ },
199
+ {
200
+ path: "expired-verification",
201
+ component: require("../routes/expired-verification.vue")
202
+ .default,
203
+ name: "auth.expired-verification",
204
+ },
205
+ {
206
+ path: "expired-reset",
207
+ component: require("../routes/expired-reset.vue").default,
208
+ name: "auth.expired-reset",
209
+ },
210
+ {
211
+ path: "success-reset",
212
+ component: require("../routes/success-reset.vue").default,
213
+ name: "auth.success-reset",
214
+ },
215
+ {
216
+ path: "success-forgot",
217
+ component: require("../routes/success-forgot.vue").default,
218
+ name: "auth.success-forgot",
219
+ },
220
+ {
221
+ path: "account-exists",
222
+ component: require("../routes/account-exists.vue").default,
223
+ name: "auth.account-exists",
224
+ },
225
+ {
226
+ path: "logout",
227
+ component: require("../routes/logout.vue").default,
228
+ name: "auth.logout",
229
+ },
230
+ ],
231
+ },
232
+ {
233
+ path: "/admin",
234
+ component: require("../routes/loginheadless.vue").default,
235
+ name: "admin",
236
+ meta: {
237
+ guest: true,
238
+ },
239
+ },
240
+ ];
241
+ }
242
+
243
+ export function beforeEach(router, store) {
244
+ router.beforeEach(async (to, from, next) => {
245
+ // If authenticated query param is present, assume authentication has happened elsewhere and attempt to fetch user data
246
+ if (to.query.authenticated && !store.getters.authenticated) {
247
+ await store.dispatch("getUser", {
248
+ errors: (e) => console.error(e),
249
+ });
250
+ }
251
+
252
+ const { user, redirect } = store.state.auth;
253
+
254
+ // User verification handling and redirect if user alrady verified but accessing an expired verification route
255
+ if (
256
+ to.query.verified ||
257
+ (to.name === "auth.expired-verification" && user?.email_verified_at)
258
+ ) {
259
+ next({ name: "auth.success-verify" });
260
+ } else if (store.getters.authenticated) {
261
+ // User is authenticated - check permissions and redirect appropriately
262
+ if (user.force_password_change && to.name !== "auth.force-reset") {
263
+ // User needs to change password - redirect to force reset
264
+ next({ name: "auth.force-reset" });
265
+ } else if (to.name === "auth.login") {
266
+ // Already logged in user hitting login
267
+ next({ name: redirect });
268
+ } else if (
269
+ !user?.email_verified_at &&
270
+ to.matched.some((d) => d.meta.guest) !== true
271
+ ) {
272
+ // User needs email verification and trying to access protected route
273
+ next({ name: "auth.verify" });
274
+ } else {
275
+ // User is authenticated and authorized - proceed
276
+ next();
277
+ }
278
+ } else {
279
+ // User is not authenticated - handle guest routes and login redirects
280
+ if (to.matched.some((d) => d.meta.guest) === true) {
281
+ // Route allows guest access - proceed
282
+ next();
283
+ } else {
284
+ // Protected route requires authentication - redirect to standard login
285
+ next({ name: "auth.login" });
286
+ }
287
+ }
288
+ });
289
+ }
290
+
291
+ export default {
292
+ routes,
293
+ adminRoutes,
294
+ beforeEach,
295
+ };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ import axios from "axios";
3
+
4
+ const store = {
5
+ state() {
6
+ return {
7
+ intended: null,
8
+ user: null,
9
+ redirect: process.env.HYDRATE_REDIRECT ?? "index",
10
+ contact:
11
+ process.env.HYDRATE_CONTACT ?? "mailto:det@avalerehealth.com",
12
+ };
13
+ },
14
+
15
+ getters: {
16
+ authenticated: (state) => !!state.user,
17
+ can: (state) => (permission) => {
18
+ return state.user?.permissions
19
+ .map(({ name }) => name)
20
+ .includes(permission);
21
+ },
22
+ hasRole: (state) => (role) => {
23
+ return state.user?.roles.map(({ name }) => name).includes(role);
24
+ },
25
+ },
26
+
27
+ mutations: {
28
+ setUser(state, value) {
29
+ state.user = value;
30
+
31
+ if (window.dataLayer) {
32
+ window.dataLayer.push({ event: "logic", user: value });
33
+ }
34
+ },
35
+ setIntended(state, value) {
36
+ state.intended = value;
37
+ },
38
+ },
39
+
40
+ actions: {
41
+ getUser({ commit }, { errors = console.log, query = "", params } = {}) {
42
+ return axios
43
+ .get(`/api/users/self${query}`, {
44
+ params,
45
+ })
46
+ .then((res) => {
47
+ commit("setUser", res.data.data);
48
+
49
+ return res.data.data;
50
+ })
51
+ .catch(errors);
52
+ },
53
+
54
+ logout({ commit }) {
55
+ commit("setUser", null);
56
+
57
+ return axios.post("/logout");
58
+ },
59
+ },
60
+ };
61
+
62
+ export default store;
@@ -2,17 +2,15 @@
2
2
  <div class="relative">
3
3
  <section id="resetPasswordForm">
4
4
  <h1 class="h2">Account already exists</h1>
5
-
6
- <p class="mt AM-mb-0 color-21">
5
+
6
+ <p class="mt mb-0 color-21">
7
7
  <strong class="">Company: {{ $route.query.company }}</strong>
8
8
  </p>
9
- <p class="AM-mt-0.5">
10
- Your company already has an active account.
11
- </p>
9
+ <p class="mt-0.5">Your company already has an active account.</p>
12
10
 
13
11
  <elButton
14
12
  tag="router-link"
15
- :to="{name: `${$store.state.auth.authBase}.login`}"
13
+ :to="{ name: 'auth.login' }"
16
14
  type="primary"
17
15
  >
18
16
  <span v-text="'Sign in'" />
@@ -29,7 +27,7 @@ export default {
29
27
  };
30
28
  },
31
29
  components: {
32
- elButton: require('../../basic/Button.vue').default,
33
- }
30
+ elButton: require("../../../components/basic/Button.vue").default,
31
+ },
34
32
  };
35
33
  </script>