@live-change/user-frontend 0.9.132 → 0.9.134
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 +86 -1
- package/front/locales/pl.json +86 -1
- package/front/src/locale/LocaleSettings.vue +1 -1
- package/front/src/message-auth/email/ConnectEmail.vue +24 -17
- package/front/src/message-auth/email/ResetPasswordEmail.vue +24 -17
- package/front/src/message-auth/email/SignInEmail.vue +24 -17
- package/front/src/message-auth/email/SignUpEmail.vue +24 -17
- package/front/src/message-auth/sms/ConnectSms.vue +13 -5
- package/front/src/message-auth/sms/ResetPasswordSms.vue +13 -5
- package/front/src/message-auth/sms/SignInSms.vue +12 -4
- package/front/src/message-auth/sms/SignUpSms.vue +12 -4
- package/front/src/nav/UserMenu.vue +8 -5
- package/front/src/notifications/NotificationButtons.vue +9 -6
- package/front/src/notifications/NotificationsList.vue +10 -7
- package/front/src/notifications/NotificationsSettings.vue +3 -3
- package/front/src/notifications/UnknownNotification.vue +4 -1
- package/front/src/password/ChangePassword.vue +3 -3
- package/front/src/settings/Settings.vue +1 -1
- package/front/src/sign/SignInFinished.vue +10 -7
- package/front/src/sign/SignOutFinished.vue +5 -2
- package/front/src/sign/SignUpFinished.vue +18 -18
- package/package.json +26 -26
package/front/locales/en.json
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"newPassword": "New password",
|
|
15
15
|
"reenterPassword": "Re-enter password",
|
|
16
16
|
"resetPassword": "Reset password",
|
|
17
|
+
"changePassword": "Change password",
|
|
18
|
+
"setPassword": "Set password",
|
|
17
19
|
"passwordChanged": "Password changed",
|
|
18
20
|
"passwordChangedSuccess": "You have successfully set your password.",
|
|
19
21
|
"passwordResetSuccess": "You have successfully changed your password.",
|
|
@@ -27,6 +29,7 @@
|
|
|
27
29
|
"suggestionLowercase": "At least one lowercase",
|
|
28
30
|
"suggestionUppercase": "At least one uppercase",
|
|
29
31
|
"suggestionNumeric": "At least one numeric",
|
|
32
|
+
"suggestionMinLength": "Minimum 8 characters",
|
|
30
33
|
"alreadyHaveAccount": "Already have an account?",
|
|
31
34
|
"signInToday": "Sign in today!",
|
|
32
35
|
"signUpWithEmail": "Sign Up with email",
|
|
@@ -39,7 +42,20 @@
|
|
|
39
42
|
"goBack": "Go back",
|
|
40
43
|
"tryAgain": "Try again",
|
|
41
44
|
"confirmEmail": "Confirm email",
|
|
42
|
-
"confirmPhone": "Confirm phone"
|
|
45
|
+
"confirmPhone": "Confirm phone",
|
|
46
|
+
"signedIn": "Signed In",
|
|
47
|
+
"signInSuccess": "Congratulations! You have successfully logged in to your account.",
|
|
48
|
+
"signedUp": "Signed Up",
|
|
49
|
+
"signUpSuccess": "Congratulations! You have successfully created your account.",
|
|
50
|
+
"canSetPassword": "You can now set password to secure your account.",
|
|
51
|
+
"setupProfile": "Setup your",
|
|
52
|
+
"profile": "profile",
|
|
53
|
+
"orReturnTo": "or return to the",
|
|
54
|
+
"indexPage": "index page",
|
|
55
|
+
"returnToIndex": "Return to",
|
|
56
|
+
"redirectIn": "Redirect in {seconds}...",
|
|
57
|
+
"signedOut": "Signed Out",
|
|
58
|
+
"signOutSuccess": "You have successfully signed out from your account."
|
|
43
59
|
},
|
|
44
60
|
"errors": {
|
|
45
61
|
"emailTaken": "Email is already registered, try to sign-in.",
|
|
@@ -135,6 +151,7 @@
|
|
|
135
151
|
"view": "View",
|
|
136
152
|
"close": "Close",
|
|
137
153
|
"ok": "OK",
|
|
154
|
+
"next": "Next",
|
|
138
155
|
"testIndex": "Test Index",
|
|
139
156
|
"addTestNotification": "Add test notification",
|
|
140
157
|
"rejected": "Rejected",
|
|
@@ -150,5 +167,73 @@
|
|
|
150
167
|
"send": "Send",
|
|
151
168
|
"feedbackSent": "Feedback sent",
|
|
152
169
|
"thankYou": "Thank you for your feedback."
|
|
170
|
+
},
|
|
171
|
+
"nav": {
|
|
172
|
+
"profile": "Profile",
|
|
173
|
+
"signUp": "Sign Up",
|
|
174
|
+
"signIn": "Sign In",
|
|
175
|
+
"settings": "Settings",
|
|
176
|
+
"signOut": "Sign Out"
|
|
177
|
+
},
|
|
178
|
+
"notifications": {
|
|
179
|
+
"notificationsSettings": "Notifications settings",
|
|
180
|
+
"web": "Web",
|
|
181
|
+
"settingsSaved": "Notification settings saved",
|
|
182
|
+
"notifications": "Notifications",
|
|
183
|
+
"markAllAsRead": "Mark all as read",
|
|
184
|
+
"notificationsRead": "Notifications read",
|
|
185
|
+
"allMarkedAsRead": "All notifications have been marked as read",
|
|
186
|
+
"deleteAll": "Delete all",
|
|
187
|
+
"notificationsDeleted": "Notifications deleted",
|
|
188
|
+
"allDeleted": "All notifications have been deleted",
|
|
189
|
+
"notificationRead": "Notification read",
|
|
190
|
+
"markedAsRead": "Notification has been marked as read",
|
|
191
|
+
"notificationUnread": "Notification unread",
|
|
192
|
+
"markedAsUnread": "Notification has been marked as unread",
|
|
193
|
+
"notificationDeleted": "Notification deleted",
|
|
194
|
+
"hasBeenDeleted": "Notification has been deleted",
|
|
195
|
+
"unknownNotification": "Unknown notification {type}!",
|
|
196
|
+
"types": {
|
|
197
|
+
"accessControl_Invitation": {
|
|
198
|
+
"name": "Access Control Invitation"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
"emailTemplates": {
|
|
203
|
+
"hello": "Hello!",
|
|
204
|
+
"clickButtonBelow": "Or click the button below:",
|
|
205
|
+
"confirmEmail": "Confirm email",
|
|
206
|
+
"copyAddressInstruction": "Or copy this address to your browser address bar:",
|
|
207
|
+
"clickLinkInstruction": "Or please click link below or copy address to your browser address bar:",
|
|
208
|
+
"letUsKnow": "Let us know in case it's not you.",
|
|
209
|
+
"seeYouSoon": "See you soon",
|
|
210
|
+
"teamSignature": "{brandName} Team",
|
|
211
|
+
"signUp": {
|
|
212
|
+
"subject": "Confirm your email address.",
|
|
213
|
+
"description": "We are glad to see you have just signed up with your email. In order to confirm that, please enter secret code:",
|
|
214
|
+
"textDescription": "We are glad to see you have just signed up with your email. In order to confirm that, please enter secret code:"
|
|
215
|
+
},
|
|
216
|
+
"signIn": {
|
|
217
|
+
"subject": "Confirm your email address.",
|
|
218
|
+
"description": "We are glad to see you have just signed in with your email. In order to confirm that, please enter secret code:",
|
|
219
|
+
"textDescription": "We are glad to see you have just signed in with your email. In order to confirm that, please enter secret code:"
|
|
220
|
+
},
|
|
221
|
+
"connect": {
|
|
222
|
+
"subject": "Confirm your email address.",
|
|
223
|
+
"description": "You are trying to connect this email address to your account. In order to confirm that, please enter secret code:",
|
|
224
|
+
"textDescription": "You are trying to connect this email address to your account. In order to confirm that, please enter secret code:"
|
|
225
|
+
},
|
|
226
|
+
"resetPassword": {
|
|
227
|
+
"subject": "Confirm your email address.",
|
|
228
|
+
"description": "You are trying to reset password to your account. In order to confirm that, please enter secret code:",
|
|
229
|
+
"textDescription": "You are trying to reset password to your account. In order to confirm that, please enter secret code:"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"smsTemplates": {
|
|
233
|
+
"hello": "Hello!",
|
|
234
|
+
"enterCode": "Enter authentication code:",
|
|
235
|
+
"openLink": "Or open authentication link:",
|
|
236
|
+
"seeYouSoon": "See you soon",
|
|
237
|
+
"teamSignature": "{brandName} Team"
|
|
153
238
|
}
|
|
154
239
|
}
|
package/front/locales/pl.json
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"newPassword": "Nowe hasło",
|
|
15
15
|
"reenterPassword": "Powtórz hasło",
|
|
16
16
|
"resetPassword": "Resetuj hasło",
|
|
17
|
+
"changePassword": "Zmień hasło",
|
|
18
|
+
"setPassword": "Ustaw hasło",
|
|
17
19
|
"passwordChanged": "Hasło zmienione",
|
|
18
20
|
"passwordChangedSuccess": "Pomyślnie ustawiłeś swoje hasło.",
|
|
19
21
|
"passwordResetSuccess": "Pomyślnie zmieniłeś swoje hasło.",
|
|
@@ -27,6 +29,7 @@
|
|
|
27
29
|
"suggestionLowercase": "Co najmniej jedna mała litera",
|
|
28
30
|
"suggestionUppercase": "Co najmniej jedna wielka litera",
|
|
29
31
|
"suggestionNumeric": "Co najmniej jedna cyfra",
|
|
32
|
+
"suggestionMinLength": "Minimum 8 znaków",
|
|
30
33
|
"alreadyHaveAccount": "Masz już konto?",
|
|
31
34
|
"signInToday": "Zaloguj się dzisiaj!",
|
|
32
35
|
"signUpWithEmail": "Zarejestruj się przez email",
|
|
@@ -39,7 +42,20 @@
|
|
|
39
42
|
"goBack": "Wróć",
|
|
40
43
|
"tryAgain": "Spróbuj ponownie",
|
|
41
44
|
"confirmEmail": "Potwierdź email",
|
|
42
|
-
"confirmPhone": "Potwierdź telefon"
|
|
45
|
+
"confirmPhone": "Potwierdź telefon",
|
|
46
|
+
"signedIn": "Zalogowany",
|
|
47
|
+
"signInSuccess": "Gratulacje! Pomyślnie zalogowałeś się do swojego konta.",
|
|
48
|
+
"signedUp": "Zarejestrowany",
|
|
49
|
+
"signUpSuccess": "Gratulacje! Pomyślnie utworzyłeś swoje konto.",
|
|
50
|
+
"canSetPassword": "Możesz teraz ustawić hasło, aby zabezpieczyć swoje konto.",
|
|
51
|
+
"setupProfile": "Skonfiguruj swój",
|
|
52
|
+
"profile": "profil",
|
|
53
|
+
"orReturnTo": "lub wróć do",
|
|
54
|
+
"indexPage": "strony głównej",
|
|
55
|
+
"returnToIndex": "Wróć do",
|
|
56
|
+
"redirectIn": "Przekierowanie za {seconds}...",
|
|
57
|
+
"signedOut": "Wylogowany",
|
|
58
|
+
"signOutSuccess": "Pomyślnie wylogowałeś się ze swojego konta."
|
|
43
59
|
},
|
|
44
60
|
"errors": {
|
|
45
61
|
"emailTaken": "Email jest już zarejestrowany, spróbuj się zalogować.",
|
|
@@ -135,6 +151,7 @@
|
|
|
135
151
|
"view": "Pokaż",
|
|
136
152
|
"close": "Zamknij",
|
|
137
153
|
"ok": "OK",
|
|
154
|
+
"next": "Dalej",
|
|
138
155
|
"testIndex": "Indeks testowy",
|
|
139
156
|
"addTestNotification": "Dodaj testowe powiadomienie",
|
|
140
157
|
"rejected": "Odrzucone",
|
|
@@ -150,5 +167,73 @@
|
|
|
150
167
|
"send": "Wyślij",
|
|
151
168
|
"feedbackSent": "Opinia wysłana",
|
|
152
169
|
"thankYou": "Dziękujemy za Twoją opinię."
|
|
170
|
+
},
|
|
171
|
+
"nav": {
|
|
172
|
+
"profile": "Profil",
|
|
173
|
+
"signUp": "Zarejestruj się",
|
|
174
|
+
"signIn": "Zaloguj się",
|
|
175
|
+
"settings": "Ustawienia",
|
|
176
|
+
"signOut": "Wyloguj się"
|
|
177
|
+
},
|
|
178
|
+
"notifications": {
|
|
179
|
+
"notificationsSettings": "Ustawienia powiadomień",
|
|
180
|
+
"web": "Sieć",
|
|
181
|
+
"settingsSaved": "Ustawienia powiadomień zapisane",
|
|
182
|
+
"notifications": "Powiadomienia",
|
|
183
|
+
"markAllAsRead": "Oznacz wszystkie jako przeczytane",
|
|
184
|
+
"notificationsRead": "Powiadomienia przeczytane",
|
|
185
|
+
"allMarkedAsRead": "Wszystkie powiadomienia zostały oznaczone jako przeczytane",
|
|
186
|
+
"deleteAll": "Usuń wszystkie",
|
|
187
|
+
"notificationsDeleted": "Powiadomienia usunięte",
|
|
188
|
+
"allDeleted": "Wszystkie powiadomienia zostały usunięte",
|
|
189
|
+
"notificationRead": "Powiadomienie przeczytane",
|
|
190
|
+
"markedAsRead": "Powiadomienie zostało oznaczone jako przeczytane",
|
|
191
|
+
"notificationUnread": "Powiadomienie nieprzeczytane",
|
|
192
|
+
"markedAsUnread": "Powiadomienie zostało oznaczone jako nieprzeczytane",
|
|
193
|
+
"notificationDeleted": "Powiadomienie usunięte",
|
|
194
|
+
"hasBeenDeleted": "Powiadomienie zostało usunięte",
|
|
195
|
+
"unknownNotification": "Nieznane powiadomienie {type}!",
|
|
196
|
+
"types": {
|
|
197
|
+
"accessControl_Invitation": {
|
|
198
|
+
"name": "Zaproszenie do kontroli dostępu"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
"emailTemplates": {
|
|
203
|
+
"hello": "Witaj!",
|
|
204
|
+
"clickButtonBelow": "Lub kliknij przycisk poniżej:",
|
|
205
|
+
"confirmEmail": "Potwierdź email",
|
|
206
|
+
"copyAddressInstruction": "Lub skopiuj ten adres do paska adresu przeglądarki:",
|
|
207
|
+
"clickLinkInstruction": "Lub kliknij link poniżej albo skopiuj adres do paska adresu przeglądarki:",
|
|
208
|
+
"letUsKnow": "Daj nam znać, jeśli to nie ty.",
|
|
209
|
+
"seeYouSoon": "Do zobaczenia",
|
|
210
|
+
"teamSignature": "Zespół {brandName}",
|
|
211
|
+
"signUp": {
|
|
212
|
+
"subject": "Potwierdź swój adres email.",
|
|
213
|
+
"description": "Cieszymy się, że właśnie zarejestrowałeś się swoim emailem. Aby to potwierdzić, wprowadź tajny kod:",
|
|
214
|
+
"textDescription": "Cieszymy się, że właśnie zarejestrowałeś się swoim emailem. Aby to potwierdzić, wprowadź tajny kod:"
|
|
215
|
+
},
|
|
216
|
+
"signIn": {
|
|
217
|
+
"subject": "Potwierdź swój adres email.",
|
|
218
|
+
"description": "Cieszymy się, że właśnie zalogowałeś się swoim emailem. Aby to potwierdzić, wprowadź tajny kod:",
|
|
219
|
+
"textDescription": "Cieszymy się, że właśnie zalogowałeś się swoim emailem. Aby to potwierdzić, wprowadź tajny kod:"
|
|
220
|
+
},
|
|
221
|
+
"connect": {
|
|
222
|
+
"subject": "Potwierdź swój adres email.",
|
|
223
|
+
"description": "Próbujesz połączyć ten adres email ze swoim kontem. Aby to potwierdzić, wprowadź tajny kod:",
|
|
224
|
+
"textDescription": "Próbujesz połączyć ten adres email ze swoim kontem. Aby to potwierdzić, wprowadź tajny kod:"
|
|
225
|
+
},
|
|
226
|
+
"resetPassword": {
|
|
227
|
+
"subject": "Potwierdź swój adres email.",
|
|
228
|
+
"description": "Próbujesz zresetować hasło do swojego konta. Aby to potwierdzić, wprowadź tajny kod:",
|
|
229
|
+
"textDescription": "Próbujesz zresetować hasło do swojego konta. Aby to potwierdzić, wprowadź tajny kod:"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"smsTemplates": {
|
|
233
|
+
"hello": "Witaj!",
|
|
234
|
+
"enterCode": "Wprowadź kod uwierzytelniania:",
|
|
235
|
+
"openLink": "Lub otwórz link uwierzytelniania:",
|
|
236
|
+
"seeYouSoon": "Do zobaczenia",
|
|
237
|
+
"teamSignature": "Zespół {brandName}"
|
|
153
238
|
}
|
|
154
239
|
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
const { t, availableLocales, getLocaleMessage } = useI18n()
|
|
58
58
|
|
|
59
59
|
function languageLabel(option) {
|
|
60
|
-
console.log("LANGUAGE LABEL", option)
|
|
60
|
+
//console.log("LANGUAGE LABEL", option)
|
|
61
61
|
if(!option) return `${t('settings.autoDetect')} (${navigator.language})`
|
|
62
62
|
return getLocaleMessage(option).languageName ?? option
|
|
63
63
|
}
|
|
@@ -2,51 +2,49 @@
|
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<div data-html class="message m-12">
|
|
4
4
|
<p class="text-lg">
|
|
5
|
-
|
|
5
|
+
{{ t('emailTemplates.hello') }}
|
|
6
6
|
</p>
|
|
7
7
|
<p>
|
|
8
|
-
|
|
9
|
-
In order to confirm that, please enter secret code:
|
|
8
|
+
{{ t('emailTemplates.connect.description') }}
|
|
10
9
|
</p>
|
|
11
10
|
<p class="text-3xl font-medium">{{ code }}</p>
|
|
12
11
|
<p>
|
|
13
|
-
|
|
12
|
+
{{ t('emailTemplates.clickButtonBelow') }}
|
|
14
13
|
</p>
|
|
15
14
|
<div>
|
|
16
15
|
<a :href="linkAddress" class="no-underline">
|
|
17
|
-
<Button label="
|
|
16
|
+
<Button :label="t('emailTemplates.confirmEmail')" class="p-button-lg cursor-pointer" />
|
|
18
17
|
</a>
|
|
19
18
|
</div>
|
|
20
19
|
<p>
|
|
21
|
-
|
|
20
|
+
{{ t('emailTemplates.copyAddressInstruction') }}<br>
|
|
22
21
|
<a :href="linkAddress">
|
|
23
22
|
{{ linkAddress }}
|
|
24
23
|
</a>
|
|
25
24
|
</p>
|
|
26
25
|
<p>
|
|
27
|
-
|
|
26
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
28
27
|
</p>
|
|
29
28
|
<p>
|
|
30
|
-
|
|
31
|
-
{{ brandName }}
|
|
29
|
+
{{ t('emailTemplates.seeYouSoon') }}<br>
|
|
30
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
32
31
|
</p>
|
|
33
32
|
<img src="/images/logo128.png">
|
|
34
33
|
</div>
|
|
35
34
|
<pre class="message" data-text>
|
|
36
|
-
|
|
35
|
+
{{ t('emailTemplates.hello') }}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
In order to confirm that, please enter secret code:
|
|
37
|
+
{{ t('emailTemplates.connect.textDescription') }}
|
|
40
38
|
{{ code }}
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
{{ t('emailTemplates.clickLinkInstruction') }}
|
|
43
41
|
|
|
44
42
|
{{ linkAddress }}
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
{{ brandName }}
|
|
46
|
+
{{ t('emailTemplates.seeYouSoon') }}
|
|
47
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
50
48
|
</pre>
|
|
51
49
|
</template>
|
|
52
50
|
|
|
@@ -74,6 +72,15 @@
|
|
|
74
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
75
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
76
74
|
|
|
75
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
76
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
77
|
+
const locale = useLocale()
|
|
78
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
79
|
+
await Promise.all([localePromise])
|
|
80
|
+
import { useI18n } from 'vue-i18n'
|
|
81
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
82
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
83
|
+
|
|
77
84
|
import { useHead } from '@vueuse/head'
|
|
78
85
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
79
86
|
|
|
@@ -86,7 +93,7 @@
|
|
|
86
93
|
|
|
87
94
|
const metadata = {
|
|
88
95
|
from: `${brandName} <admin@${brandDomain}>`,
|
|
89
|
-
subject: '
|
|
96
|
+
subject: t('emailTemplates.connect.subject'),
|
|
90
97
|
to: contact
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -2,51 +2,49 @@
|
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<div data-html class="message m-12">
|
|
4
4
|
<p class="text-lg">
|
|
5
|
-
|
|
5
|
+
{{ t('emailTemplates.hello') }}
|
|
6
6
|
</p>
|
|
7
7
|
<p>
|
|
8
|
-
|
|
9
|
-
In order to confirm that, please enter secret code:
|
|
8
|
+
{{ t('emailTemplates.resetPassword.description') }}
|
|
10
9
|
</p>
|
|
11
10
|
<p class="text-3xl font-medium">{{ code }}</p>
|
|
12
11
|
<p>
|
|
13
|
-
|
|
12
|
+
{{ t('emailTemplates.clickButtonBelow') }}
|
|
14
13
|
</p>
|
|
15
14
|
<div>
|
|
16
15
|
<a :href="linkAddress" class="no-underline">
|
|
17
|
-
<Button label="
|
|
16
|
+
<Button :label="t('emailTemplates.confirmEmail')" class="p-button-lg cursor-pointer" />
|
|
18
17
|
</a>
|
|
19
18
|
</div>
|
|
20
19
|
<p>
|
|
21
|
-
|
|
20
|
+
{{ t('emailTemplates.copyAddressInstruction') }}<br>
|
|
22
21
|
<a :href="linkAddress">
|
|
23
22
|
{{ linkAddress }}
|
|
24
23
|
</a>
|
|
25
24
|
</p>
|
|
26
25
|
<p>
|
|
27
|
-
|
|
26
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
28
27
|
</p>
|
|
29
28
|
<p>
|
|
30
|
-
|
|
31
|
-
{{ brandName }}
|
|
29
|
+
{{ t('emailTemplates.seeYouSoon') }}<br>
|
|
30
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
32
31
|
</p>
|
|
33
32
|
<img src="/images/logo128.png">
|
|
34
33
|
</div>
|
|
35
34
|
<pre class="message" data-text>
|
|
36
|
-
|
|
35
|
+
{{ t('emailTemplates.hello') }}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
In order to confirm that, please enter secret code:
|
|
37
|
+
{{ t('emailTemplates.resetPassword.textDescription') }}
|
|
40
38
|
{{ code }}
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
{{ t('emailTemplates.clickLinkInstruction') }}
|
|
43
41
|
|
|
44
42
|
{{ linkAddress }}
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
{{ brandName }}
|
|
46
|
+
{{ t('emailTemplates.seeYouSoon') }}
|
|
47
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
50
48
|
</pre>
|
|
51
49
|
</template>
|
|
52
50
|
|
|
@@ -74,6 +72,15 @@
|
|
|
74
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
75
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
76
74
|
|
|
75
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
76
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
77
|
+
const locale = useLocale()
|
|
78
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
79
|
+
await Promise.all([localePromise])
|
|
80
|
+
import { useI18n } from 'vue-i18n'
|
|
81
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
82
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
83
|
+
|
|
77
84
|
import { useHead } from '@vueuse/head'
|
|
78
85
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
79
86
|
|
|
@@ -86,7 +93,7 @@
|
|
|
86
93
|
|
|
87
94
|
const metadata = {
|
|
88
95
|
from: `${brandName} <admin@${brandDomain}>`,
|
|
89
|
-
subject: '
|
|
96
|
+
subject: t('emailTemplates.resetPassword.subject'),
|
|
90
97
|
to: contact
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -2,51 +2,49 @@
|
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<div data-html class="message m-12">
|
|
4
4
|
<p class="text-lg">
|
|
5
|
-
|
|
5
|
+
{{ t('emailTemplates.hello') }}
|
|
6
6
|
</p>
|
|
7
7
|
<p>
|
|
8
|
-
|
|
9
|
-
In order to confirm that, please enter secret code:
|
|
8
|
+
{{ t('emailTemplates.signIn.description') }}
|
|
10
9
|
</p>
|
|
11
10
|
<p class="text-3xl font-medium">{{ code }}</p>
|
|
12
11
|
<p>
|
|
13
|
-
|
|
12
|
+
{{ t('emailTemplates.clickButtonBelow') }}
|
|
14
13
|
</p>
|
|
15
14
|
<div>
|
|
16
15
|
<a :href="linkAddress" class="no-underline">
|
|
17
|
-
<Button label="
|
|
16
|
+
<Button :label="t('emailTemplates.confirmEmail')" class="p-button-lg cursor-pointer" />
|
|
18
17
|
</a>
|
|
19
18
|
</div>
|
|
20
19
|
<p>
|
|
21
|
-
|
|
20
|
+
{{ t('emailTemplates.copyAddressInstruction') }}<br>
|
|
22
21
|
<a :href="linkAddress">
|
|
23
22
|
{{ linkAddress }}
|
|
24
23
|
</a>
|
|
25
24
|
</p>
|
|
26
25
|
<p>
|
|
27
|
-
|
|
26
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
28
27
|
</p>
|
|
29
28
|
<p>
|
|
30
|
-
|
|
31
|
-
{{ brandName }}
|
|
29
|
+
{{ t('emailTemplates.seeYouSoon') }}<br>
|
|
30
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
32
31
|
</p>
|
|
33
32
|
<img src="/images/logo128.png">
|
|
34
33
|
</div>
|
|
35
34
|
<pre class="message" data-text>
|
|
36
|
-
|
|
35
|
+
{{ t('emailTemplates.hello') }}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
In order to confirm that, please enter secret code:
|
|
37
|
+
{{ t('emailTemplates.signIn.textDescription') }}
|
|
40
38
|
{{ code }}
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
{{ t('emailTemplates.clickLinkInstruction') }}
|
|
43
41
|
|
|
44
42
|
{{ linkAddress }}
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
{{ brandName }}
|
|
46
|
+
{{ t('emailTemplates.seeYouSoon') }}
|
|
47
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
50
48
|
</pre>
|
|
51
49
|
</template>
|
|
52
50
|
|
|
@@ -74,6 +72,15 @@
|
|
|
74
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
75
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
76
74
|
|
|
75
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
76
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
77
|
+
const locale = useLocale()
|
|
78
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
79
|
+
await Promise.all([localePromise])
|
|
80
|
+
import { useI18n } from 'vue-i18n'
|
|
81
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
82
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
83
|
+
|
|
77
84
|
import { useHead } from '@vueuse/head'
|
|
78
85
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
79
86
|
|
|
@@ -86,7 +93,7 @@
|
|
|
86
93
|
|
|
87
94
|
const metadata = {
|
|
88
95
|
from: `${brandName} <admin@${brandDomain}>`,
|
|
89
|
-
subject: '
|
|
96
|
+
subject: t('emailTemplates.signIn.subject'),
|
|
90
97
|
to: contact
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -2,51 +2,49 @@
|
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<div data-html class="message m-12">
|
|
4
4
|
<p class="text-lg">
|
|
5
|
-
|
|
5
|
+
{{ t('emailTemplates.hello') }}
|
|
6
6
|
</p>
|
|
7
7
|
<p>
|
|
8
|
-
|
|
9
|
-
In order to confirm that, please enter secret code:
|
|
8
|
+
{{ t('emailTemplates.signUp.description') }}
|
|
10
9
|
</p>
|
|
11
10
|
<p class="text-3xl font-medium">{{ code }}</p>
|
|
12
11
|
<p>
|
|
13
|
-
|
|
12
|
+
{{ t('emailTemplates.clickButtonBelow') }}
|
|
14
13
|
</p>
|
|
15
14
|
<div>
|
|
16
15
|
<a :href="linkAddress" class="no-underline">
|
|
17
|
-
<Button label="
|
|
16
|
+
<Button :label="t('emailTemplates.confirmEmail')" class="p-button-lg cursor-pointer" />
|
|
18
17
|
</a>
|
|
19
18
|
</div>
|
|
20
19
|
<p>
|
|
21
|
-
|
|
20
|
+
{{ t('emailTemplates.copyAddressInstruction') }}<br>
|
|
22
21
|
<a :href="linkAddress">
|
|
23
22
|
{{ linkAddress }}
|
|
24
23
|
</a>
|
|
25
24
|
</p>
|
|
26
25
|
<p>
|
|
27
|
-
|
|
26
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
28
27
|
</p>
|
|
29
28
|
<p>
|
|
30
|
-
|
|
31
|
-
{{ brandName }}
|
|
29
|
+
{{ t('emailTemplates.seeYouSoon') }}<br>
|
|
30
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
32
31
|
</p>
|
|
33
32
|
<img src="/images/logo128.png">
|
|
34
33
|
</div>
|
|
35
34
|
<pre class="message" data-text>
|
|
36
|
-
|
|
35
|
+
{{ t('emailTemplates.hello') }}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
In order to confirm that, please enter secret code:
|
|
37
|
+
{{ t('emailTemplates.signUp.textDescription') }}
|
|
40
38
|
{{ code }}
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
{{ t('emailTemplates.clickLinkInstruction') }}
|
|
43
41
|
|
|
44
42
|
{{ linkAddress }}
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
{{ t('emailTemplates.letUsKnow') }}
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
{{ brandName }}
|
|
46
|
+
{{ t('emailTemplates.seeYouSoon') }}
|
|
47
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
50
48
|
</pre>
|
|
51
49
|
</template>
|
|
52
50
|
|
|
@@ -74,6 +72,15 @@
|
|
|
74
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
75
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
76
74
|
|
|
75
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
76
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
77
|
+
const locale = useLocale()
|
|
78
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
79
|
+
await Promise.all([localePromise])
|
|
80
|
+
import { useI18n } from 'vue-i18n'
|
|
81
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
82
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
83
|
+
|
|
77
84
|
import { useHead } from '@vueuse/head'
|
|
78
85
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
79
86
|
|
|
@@ -86,7 +93,7 @@
|
|
|
86
93
|
|
|
87
94
|
const metadata = {
|
|
88
95
|
from: `${brandName} <admin@${brandDomain}>`,
|
|
89
|
-
subject: '
|
|
96
|
+
subject: t('emailTemplates.signUp.subject'),
|
|
90
97
|
to: contact
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<pre class="message" data-text>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{{ brandName }}
|
|
4
|
+
{{ t('smsTemplates.hello') }} {{ t('smsTemplates.enterCode') }} {{ code }}
|
|
5
|
+
{{ t('smsTemplates.openLink') }} {{ linkAddress }}
|
|
6
|
+
{{ t('smsTemplates.seeYouSoon') }}
|
|
7
|
+
{{ t('smsTemplates.teamSignature', { brandName }) }}
|
|
8
8
|
</pre>
|
|
9
9
|
</template>
|
|
10
10
|
|
|
@@ -30,9 +30,17 @@
|
|
|
30
30
|
const secrets = data.secrets
|
|
31
31
|
|
|
32
32
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
33
|
-
|
|
34
33
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
35
34
|
|
|
35
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
36
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
37
|
+
const locale = useLocale()
|
|
38
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
39
|
+
await Promise.all([localePromise])
|
|
40
|
+
import { useI18n } from 'vue-i18n'
|
|
41
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
42
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
43
|
+
|
|
36
44
|
import { useApi } from '@live-change/vue3-ssr'
|
|
37
45
|
const api = useApi()
|
|
38
46
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<pre class="message" data-text>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{{ brandName }}
|
|
4
|
+
{{ t('smsTemplates.hello') }} {{ t('smsTemplates.enterCode') }} {{ code }}
|
|
5
|
+
{{ t('smsTemplates.openLink') }} {{ linkAddress }}
|
|
6
|
+
{{ t('smsTemplates.seeYouSoon') }}
|
|
7
|
+
{{ t('smsTemplates.teamSignature', { brandName }) }}
|
|
8
8
|
</pre>
|
|
9
9
|
</template>
|
|
10
10
|
|
|
@@ -28,9 +28,17 @@
|
|
|
28
28
|
const secrets = data.secrets
|
|
29
29
|
|
|
30
30
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
31
|
-
|
|
32
31
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
33
32
|
|
|
33
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
34
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
35
|
+
const locale = useLocale()
|
|
36
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
37
|
+
await Promise.all([localePromise])
|
|
38
|
+
import { useI18n } from 'vue-i18n'
|
|
39
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
40
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
41
|
+
|
|
34
42
|
import { useApi } from '@live-change/vue3-ssr'
|
|
35
43
|
const api = useApi()
|
|
36
44
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<pre class="message" data-text>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{{ brandName }}
|
|
4
|
+
{{ t('smsTemplates.hello') }} {{ t('smsTemplates.enterCode') }} {{ code }}
|
|
5
|
+
{{ t('smsTemplates.openLink') }} {{ linkAddress }}
|
|
6
|
+
{{ t('smsTemplates.seeYouSoon') }}
|
|
7
|
+
{{ t('smsTemplates.teamSignature', { brandName }) }}
|
|
8
8
|
</pre>
|
|
9
9
|
</template>
|
|
10
10
|
|
|
@@ -30,6 +30,14 @@
|
|
|
30
30
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
31
31
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
32
32
|
|
|
33
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
34
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
35
|
+
const locale = useLocale()
|
|
36
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
37
|
+
await Promise.all([localePromise])
|
|
38
|
+
import { useI18n } from 'vue-i18n'
|
|
39
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
40
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
33
41
|
|
|
34
42
|
import { useApi } from '@live-change/vue3-ssr'
|
|
35
43
|
const api = useApi()
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
3
|
<pre class="message" data-text>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{{ brandName }}
|
|
4
|
+
{{ t('smsTemplates.hello') }} {{ t('smsTemplates.enterCode') }} {{ code }}
|
|
5
|
+
{{ t('smsTemplates.openLink') }} {{ linkAddress }}
|
|
6
|
+
{{ t('smsTemplates.seeYouSoon') }}
|
|
7
|
+
{{ t('smsTemplates.teamSignature', { brandName }) }}
|
|
8
8
|
</pre>
|
|
9
9
|
</template>
|
|
10
10
|
|
|
@@ -30,6 +30,14 @@
|
|
|
30
30
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
31
31
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
32
32
|
|
|
33
|
+
const owner = { sessionOrUserType: 'user_User', sessionOrUser: data.user }
|
|
34
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
35
|
+
const locale = useLocale()
|
|
36
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
37
|
+
await Promise.all([localePromise])
|
|
38
|
+
import { useI18n } from 'vue-i18n'
|
|
39
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
40
|
+
if(locale.localeRef.value?.language) i18nLocale.value = locale.localeRef.value?.language
|
|
33
41
|
|
|
34
42
|
import { useApi } from '@live-change/vue3-ssr'
|
|
35
43
|
const api = useApi()
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
transition-colors duration-300 ease-in-out"
|
|
11
11
|
>
|
|
12
12
|
<i class="pi pi-user mr-3"></i>
|
|
13
|
-
<span>
|
|
13
|
+
<span>{{ t('nav.profile') }}</span>
|
|
14
14
|
</router-link>
|
|
15
15
|
</li>
|
|
16
16
|
<li v-if="!client.user">
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
transition-colors duration-300 ease-in-out"
|
|
24
24
|
>
|
|
25
25
|
<i class="pi pi-user-plus mr-3"></i>
|
|
26
|
-
<span>
|
|
26
|
+
<span>{{ t('nav.signUp') }}</span>
|
|
27
27
|
</router-link>
|
|
28
28
|
</li>
|
|
29
29
|
<li v-if="!client.user">
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
transition-colors duration-300 ease-in-out"
|
|
37
37
|
>
|
|
38
38
|
<i class="pi pi-key mr-3"></i>
|
|
39
|
-
<span>
|
|
39
|
+
<span>{{ t('nav.signIn') }}</span>
|
|
40
40
|
</router-link>
|
|
41
41
|
</li>
|
|
42
42
|
<li v-if="client.user">
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
transition-colors duration-300 ease-in-out"
|
|
50
50
|
>
|
|
51
51
|
<i class="pi pi-cog mr-3"></i>
|
|
52
|
-
<span>
|
|
52
|
+
<span>{{ t('nav.settings') }}</span>
|
|
53
53
|
</router-link>
|
|
54
54
|
</li>
|
|
55
55
|
<li v-if="client.user">
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
transition-colors duration-300 ease-in-out"
|
|
63
63
|
>
|
|
64
64
|
<i class="pi pi-power-off mr-3"></i>
|
|
65
|
-
<span>
|
|
65
|
+
<span>{{ t('nav.signOut') }}</span>
|
|
66
66
|
</router-link>
|
|
67
67
|
</li>
|
|
68
68
|
</ul>
|
|
@@ -74,6 +74,9 @@
|
|
|
74
74
|
import { client as useClient } from '@live-change/vue3-ssr'
|
|
75
75
|
import { toRefs } from '@vueuse/core'
|
|
76
76
|
|
|
77
|
+
import { useI18n } from 'vue-i18n'
|
|
78
|
+
const { t } = useI18n()
|
|
79
|
+
|
|
77
80
|
const client = useClient()
|
|
78
81
|
|
|
79
82
|
</script>
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
|
|
22
22
|
import { inject, defineProps, defineExpose } from "vue"
|
|
23
23
|
|
|
24
|
+
import { useI18n } from 'vue-i18n'
|
|
25
|
+
const { t } = useI18n()
|
|
26
|
+
|
|
24
27
|
const { notification } = defineProps({
|
|
25
28
|
notification: {
|
|
26
29
|
type: Object,
|
|
@@ -36,8 +39,8 @@
|
|
|
36
39
|
workingZone.addPromise('markNotificationRead', (async () => {
|
|
37
40
|
await notificationApi.markRead({ notification: notification.to || notification.id })
|
|
38
41
|
toast.add({
|
|
39
|
-
severity: 'success', summary: '
|
|
40
|
-
detail:
|
|
42
|
+
severity: 'success', summary: t('notifications.notificationRead'),
|
|
43
|
+
detail: t('notifications.markedAsRead'), life: 3000
|
|
41
44
|
})
|
|
42
45
|
})())
|
|
43
46
|
}
|
|
@@ -46,8 +49,8 @@
|
|
|
46
49
|
workingZone.addPromise('markNotificationUnread', (async () => {
|
|
47
50
|
await notificationApi.markUnread({ notification: notification.to || notification.id })
|
|
48
51
|
toast.add({
|
|
49
|
-
severity: 'success', summary: '
|
|
50
|
-
detail:
|
|
52
|
+
severity: 'success', summary: t('notifications.notificationUnread'),
|
|
53
|
+
detail: t('notifications.markedAsUnread'), life: 3000
|
|
51
54
|
})
|
|
52
55
|
})())
|
|
53
56
|
}
|
|
@@ -56,8 +59,8 @@
|
|
|
56
59
|
workingZone.addPromise('deleteNotification', (async () => {
|
|
57
60
|
await notificationApi.delete({ notification: notification.to || notification.id })
|
|
58
61
|
toast.add({
|
|
59
|
-
severity: 'warn', summary: '
|
|
60
|
-
detail: '
|
|
62
|
+
severity: 'warn', summary: t('notifications.notificationDeleted'),
|
|
63
|
+
detail: t('notifications.hasBeenDeleted'), life: 3000
|
|
61
64
|
})
|
|
62
65
|
})())
|
|
63
66
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
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">
|
|
3
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">{{ t('notifications.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" />
|
|
@@ -42,6 +42,9 @@
|
|
|
42
42
|
|
|
43
43
|
import { ref, inject } from 'vue'
|
|
44
44
|
|
|
45
|
+
import { useI18n } from 'vue-i18n'
|
|
46
|
+
const { t } = useI18n()
|
|
47
|
+
|
|
45
48
|
const workingZone = inject('workingZone')
|
|
46
49
|
|
|
47
50
|
import { notificationTypes } from "./notificationTypes.js"
|
|
@@ -66,27 +69,27 @@
|
|
|
66
69
|
|
|
67
70
|
const menuItems = [
|
|
68
71
|
{
|
|
69
|
-
label: '
|
|
72
|
+
label: t('notifications.markAllAsRead'),
|
|
70
73
|
icon: 'pi pi-check',
|
|
71
74
|
command: () => {
|
|
72
75
|
workingZone.addPromise('markNotification', (async () => {
|
|
73
76
|
await notificationApi.markAllAsRead({ })
|
|
74
77
|
toast.add({
|
|
75
|
-
severity: 'success', summary:
|
|
76
|
-
detail:'
|
|
78
|
+
severity: 'success', summary: t('notifications.notificationsRead'),
|
|
79
|
+
detail: t('notifications.allMarkedAsRead'), life: 3000
|
|
77
80
|
})
|
|
78
81
|
})())
|
|
79
82
|
}
|
|
80
83
|
},
|
|
81
84
|
{
|
|
82
|
-
label: '
|
|
85
|
+
label: t('notifications.deleteAll'),
|
|
83
86
|
icon: 'pi pi-times',
|
|
84
87
|
command: () => {
|
|
85
88
|
workingZone.addPromise('markNotification', (async () => {
|
|
86
89
|
await notificationApi.deleteAll({ })
|
|
87
90
|
toast.add({
|
|
88
|
-
severity: 'warn', summary: '
|
|
89
|
-
detail: '
|
|
91
|
+
severity: 'warn', summary: t('notifications.notificationsDeleted'),
|
|
92
|
+
detail: t('notifications.allDeleted'), life: 3000
|
|
90
93
|
})
|
|
91
94
|
})())
|
|
92
95
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
3
|
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
|
|
4
4
|
<div>
|
|
5
|
-
<h1>
|
|
5
|
+
<h1>{{ t('notifications.notificationsSettings') }}</h1>
|
|
6
6
|
</div>
|
|
7
7
|
<!-- <pre>{{ settings }}</pre>
|
|
8
8
|
<pre>{{ clientConfig }}</pre> -->
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
phone: 'pi-phone'
|
|
57
57
|
}
|
|
58
58
|
function contactText(contact, type) {
|
|
59
|
-
if(type === 'web') return '
|
|
59
|
+
if(type === 'web') return t('notifications.web')
|
|
60
60
|
return contact
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
notificationType, notification: notificationType
|
|
108
108
|
},
|
|
109
109
|
recursive: true,
|
|
110
|
-
onSave: () => toast.add({ severity: 'info', summary: '
|
|
110
|
+
onSave: () => toast.add({ severity: 'info', summary: t('notifications.settingsSaved'), life: 1500 })
|
|
111
111
|
}).value
|
|
112
112
|
return {
|
|
113
113
|
contactType,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<SimpleNotification :notification="notification">
|
|
3
3
|
<div class="text-orange-600 text-2xl">
|
|
4
|
-
|
|
4
|
+
{{ t('notifications.unknownNotification', { type: notification.notificationType }) }}
|
|
5
5
|
</div>
|
|
6
6
|
<pre class="w-full overflow-hidden">{{ notification }}</pre>
|
|
7
7
|
</SimpleNotification>
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
import { toRefs, watch } from 'vue'
|
|
15
15
|
|
|
16
|
+
import { useI18n } from 'vue-i18n'
|
|
17
|
+
const { t } = useI18n()
|
|
18
|
+
|
|
16
19
|
const props = defineProps({
|
|
17
20
|
notification: {
|
|
18
21
|
type: Object,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
|
|
5
5
|
<div class="text-center mb-8">
|
|
6
6
|
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
7
|
-
{{ passwordExists ? '
|
|
7
|
+
{{ passwordExists ? t('auth.changePassword') : t('auth.setPassword') }}
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<li>{{ t('auth.suggestionLowercase') }}</li>
|
|
39
39
|
<li>{{ t('auth.suggestionUppercase') }}</li>
|
|
40
40
|
<li>{{ t('auth.suggestionNumeric') }}</li>
|
|
41
|
-
<li>
|
|
41
|
+
<li>{{ t('auth.suggestionMinLength') }}</li>
|
|
42
42
|
</ul>
|
|
43
43
|
</template>
|
|
44
44
|
</Password>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
</template>
|
|
59
59
|
|
|
60
|
-
<Button :label="passwordExists ? '
|
|
60
|
+
<Button :label="passwordExists ? t('auth.changePassword') : t('auth.setPassword')"
|
|
61
61
|
type="submit"
|
|
62
62
|
icon="pi pi-key" class="w-full"></Button>
|
|
63
63
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="flex relative lg:static bg-surface-50 dark:bg-surface-950"
|
|
3
|
-
style="height: calc(100vh - 88px)">
|
|
3
|
+
style="min-height: calc(100vh - 88px)">
|
|
4
4
|
<div id="settings-menu"
|
|
5
5
|
class="bg-surface-0 dark:bg-surface-950 flex-shrink-0 absolute left-0 h-full
|
|
6
6
|
top-0 z-1 border-r-1 border-r-surface-300 dark:border-r-surface-700 select-none
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
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">
|
|
5
|
-
<p class="mt-0 p-0 leading-normal">
|
|
4
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">{{ t('auth.signedIn') }}</div>
|
|
5
|
+
<p class="mt-0 p-0 leading-normal">{{ t('auth.signInSuccess') }}</p>
|
|
6
6
|
<div v-if="afterSignIn" class="flex flex-row justify-center items-center">
|
|
7
7
|
<router-link :to="afterSignIn" class="no-underline">
|
|
8
|
-
<Button label="
|
|
8
|
+
<Button :label="t('common.next')" v-ripple />
|
|
9
9
|
</router-link>
|
|
10
10
|
<p class="ml-6" v-if="isMounted && redirectTime">
|
|
11
|
-
|
|
11
|
+
{{ t('auth.redirectIn', { seconds: pluralize('second', Math.ceil((redirectTime - currentTime) / 1000), true) }) }}
|
|
12
12
|
</p>
|
|
13
13
|
</div>
|
|
14
14
|
<div v-else>
|
|
15
|
-
|
|
15
|
+
{{ t('auth.returnToIndex') }} <router-link to="/">{{ t('auth.indexPage') }}</router-link>.
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
@@ -40,6 +40,9 @@
|
|
|
40
40
|
import { useToast } from 'primevue/usetoast'
|
|
41
41
|
const toast = useToast()
|
|
42
42
|
|
|
43
|
+
import { useI18n } from 'vue-i18n'
|
|
44
|
+
const { t } = useI18n()
|
|
45
|
+
|
|
43
46
|
const userClientConfig = api.getServiceDefinition('user')?.clientConfig
|
|
44
47
|
|
|
45
48
|
const afterSignIn = ref()
|
|
@@ -61,8 +64,8 @@
|
|
|
61
64
|
setTimeout(() => { // it could be next tick
|
|
62
65
|
toast.add({
|
|
63
66
|
severity: 'info', life: 6000,
|
|
64
|
-
summary: '
|
|
65
|
-
detail: '
|
|
67
|
+
summary: t('auth.signedIn'),
|
|
68
|
+
detail: t('auth.signInSuccess')
|
|
66
69
|
})
|
|
67
70
|
router.push(route)
|
|
68
71
|
}, 100)
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
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">
|
|
5
|
-
<p class="mt-0 p-0 leading-normal">
|
|
4
|
+
<div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">{{ t('auth.signedOut') }}</div>
|
|
5
|
+
<p class="mt-0 p-0 leading-normal">{{ t('auth.signOutSuccess') }}</p>
|
|
6
6
|
</div>
|
|
7
7
|
</div>
|
|
8
8
|
</template>
|
|
9
9
|
|
|
10
10
|
<script setup>
|
|
11
11
|
|
|
12
|
+
import { useI18n } from 'vue-i18n'
|
|
13
|
+
const { t } = useI18n()
|
|
14
|
+
|
|
12
15
|
</script>
|
|
13
16
|
|
|
14
17
|
<style>
|
|
@@ -3,26 +3,26 @@
|
|
|
3
3
|
<div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
|
|
4
4
|
<div class="text-center mb-8">
|
|
5
5
|
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
6
|
-
|
|
6
|
+
{{ t('auth.signedUp') }}
|
|
7
7
|
</div>
|
|
8
8
|
</div>
|
|
9
9
|
<p class="mt-0 p-0 leading-normal">
|
|
10
|
-
|
|
10
|
+
{{ t('auth.signUpSuccess') }}
|
|
11
11
|
<span v-if="needPassword && !afterSignIn">
|
|
12
|
-
|
|
12
|
+
{{ t('auth.canSetPassword') }}
|
|
13
13
|
</span>
|
|
14
14
|
<div v-else-if="afterSignIn" class="flex flex-row justify-center items-center">
|
|
15
15
|
<router-link :to="afterSignIn" class="no-underline">
|
|
16
|
-
<Button label="
|
|
16
|
+
<Button :label="t('common.next')" v-ripple />
|
|
17
17
|
</router-link>
|
|
18
18
|
<p class="ml-6" v-if="isMounted && redirectTime">
|
|
19
|
-
|
|
19
|
+
{{ t('auth.redirectIn', { seconds: pluralize('second', Math.ceil((redirectTime - currentTime) / 1000), true) }) }}
|
|
20
20
|
</p>
|
|
21
21
|
</div>
|
|
22
22
|
<p v-else>
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
{{ t('auth.setupProfile') }} <router-link :to="{ name: 'user:identification' }">{{ t('auth.profile') }}</router-link>
|
|
25
|
+
{{ t('auth.orReturnTo') }} <router-link to="/">{{ t('auth.indexPage') }}</router-link>.
|
|
26
26
|
</p>
|
|
27
27
|
</p>
|
|
28
28
|
</div>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border mt-2" v-if="needPassword && !afterSignIn">
|
|
31
31
|
<div class="text-center mb-8">
|
|
32
32
|
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
33
|
-
{{ passwordExists ? '
|
|
33
|
+
{{ passwordExists ? t('auth.changePassword') : t('auth.setPassword') }}
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
36
36
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
<div class="p-field mb-4">
|
|
44
44
|
<label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
45
|
-
|
|
45
|
+
{{ t('auth.newPassword') }}
|
|
46
46
|
</label>
|
|
47
47
|
<Password id="newPassword" class="w-full" inputClass="w-full"
|
|
48
48
|
toggleMask v-model:masked="masked"
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
v-model="data.passwordHash">
|
|
51
51
|
<template #footer>
|
|
52
52
|
<Divider />
|
|
53
|
-
<p class="p-mt-2">
|
|
53
|
+
<p class="p-mt-2">{{ t('auth.passwordSuggestions') }}</p>
|
|
54
54
|
<ul class="p-pl-2 p-ml-2 p-mt-0" style="line-height: 1.5">
|
|
55
|
-
<li>
|
|
56
|
-
<li>
|
|
57
|
-
<li>
|
|
58
|
-
<li>
|
|
55
|
+
<li>{{ t('auth.suggestionLowercase') }}</li>
|
|
56
|
+
<li>{{ t('auth.suggestionUppercase') }}</li>
|
|
57
|
+
<li>{{ t('auth.suggestionNumeric') }}</li>
|
|
58
|
+
<li>{{ t('auth.suggestionMinLength') }}</li>
|
|
59
59
|
</ul>
|
|
60
60
|
</template>
|
|
61
61
|
</Password>
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
</div>
|
|
66
66
|
|
|
67
67
|
<div class="p-field mb-4">
|
|
68
|
-
<label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
68
|
+
<label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.reenterPassword') }}</label>
|
|
69
69
|
<Password id="reenterPassword" class="w-full" inputClass="w-full"
|
|
70
70
|
toggleMask v-model:masked="masked"
|
|
71
71
|
v-model="secondPassword"
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
|
|
75
75
|
</template>
|
|
76
76
|
|
|
77
|
-
<Button :label="passwordExists ? '
|
|
77
|
+
<Button :label="passwordExists ? t('auth.changePassword') : t('auth.setPassword')"
|
|
78
78
|
type="submit"
|
|
79
79
|
icon="pi pi-key" class="w-full"></Button>
|
|
80
80
|
|
|
@@ -158,8 +158,8 @@
|
|
|
158
158
|
console.log("DO REDIRECT AFTER SIGN UP!", route)
|
|
159
159
|
toast.add({
|
|
160
160
|
severity: 'info', life: 6000,
|
|
161
|
-
summary: '
|
|
162
|
-
detail: '
|
|
161
|
+
summary: t('auth.signedUp'),
|
|
162
|
+
detail: t('auth.signUpSuccess')
|
|
163
163
|
})
|
|
164
164
|
localStorage.removeItem('redirectAfterSignIn')
|
|
165
165
|
router.push(route)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/user-frontend",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.134",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"memDev": "tsx --inspect --expose-gc server/start.js memDev --enableSessions --initScript ./init.js --dbAccess",
|
|
6
6
|
"localDevInit": "tsx server/start.js localDev --enableSessions --initScript ./init.js --dbAccess",
|
|
@@ -36,29 +36,29 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@live-change/cli": "^0.9.
|
|
40
|
-
"@live-change/dao": "^0.9.
|
|
41
|
-
"@live-change/dao-vue3": "^0.9.
|
|
42
|
-
"@live-change/dao-websocket": "^0.9.
|
|
43
|
-
"@live-change/email-service": "^0.9.
|
|
44
|
-
"@live-change/framework": "^0.9.
|
|
45
|
-
"@live-change/identicon-service": "^0.9.
|
|
46
|
-
"@live-change/image-frontend": "^0.9.
|
|
47
|
-
"@live-change/message-authentication-service": "^0.9.
|
|
48
|
-
"@live-change/notification-service": "^0.9.
|
|
49
|
-
"@live-change/password-authentication-service": "^0.9.
|
|
50
|
-
"@live-change/pattern": "^0.9.
|
|
51
|
-
"@live-change/secret-code-service": "^0.9.
|
|
52
|
-
"@live-change/secret-link-service": "^0.9.
|
|
53
|
-
"@live-change/security-frontend": "^0.9.
|
|
54
|
-
"@live-change/security-service": "^0.9.
|
|
55
|
-
"@live-change/session-service": "^0.9.
|
|
56
|
-
"@live-change/timer-service": "^0.9.
|
|
57
|
-
"@live-change/upload-service": "^0.9.
|
|
58
|
-
"@live-change/user-identification-service": "^0.9.
|
|
59
|
-
"@live-change/user-service": "^0.9.
|
|
60
|
-
"@live-change/vue3-components": "^0.9.
|
|
61
|
-
"@live-change/vue3-ssr": "^0.9.
|
|
39
|
+
"@live-change/cli": "^0.9.134",
|
|
40
|
+
"@live-change/dao": "^0.9.134",
|
|
41
|
+
"@live-change/dao-vue3": "^0.9.134",
|
|
42
|
+
"@live-change/dao-websocket": "^0.9.134",
|
|
43
|
+
"@live-change/email-service": "^0.9.134",
|
|
44
|
+
"@live-change/framework": "^0.9.134",
|
|
45
|
+
"@live-change/identicon-service": "^0.9.134",
|
|
46
|
+
"@live-change/image-frontend": "^0.9.134",
|
|
47
|
+
"@live-change/message-authentication-service": "^0.9.134",
|
|
48
|
+
"@live-change/notification-service": "^0.9.134",
|
|
49
|
+
"@live-change/password-authentication-service": "^0.9.134",
|
|
50
|
+
"@live-change/pattern": "^0.9.134",
|
|
51
|
+
"@live-change/secret-code-service": "^0.9.134",
|
|
52
|
+
"@live-change/secret-link-service": "^0.9.134",
|
|
53
|
+
"@live-change/security-frontend": "^0.9.134",
|
|
54
|
+
"@live-change/security-service": "^0.9.134",
|
|
55
|
+
"@live-change/session-service": "^0.9.134",
|
|
56
|
+
"@live-change/timer-service": "^0.9.134",
|
|
57
|
+
"@live-change/upload-service": "^0.9.134",
|
|
58
|
+
"@live-change/user-identification-service": "^0.9.134",
|
|
59
|
+
"@live-change/user-service": "^0.9.134",
|
|
60
|
+
"@live-change/vue3-components": "^0.9.134",
|
|
61
|
+
"@live-change/vue3-ssr": "^0.9.134",
|
|
62
62
|
"@vueuse/core": "^12.3.0",
|
|
63
63
|
"codeceptjs-assert": "^0.0.5",
|
|
64
64
|
"codeceptjs-video-helper": "0.1.3",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"wtfnode": "^0.9.1"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@live-change/codeceptjs-helper": "^0.9.
|
|
82
|
+
"@live-change/codeceptjs-helper": "^0.9.134",
|
|
83
83
|
"codeceptjs": "^3.6.10",
|
|
84
84
|
"generate-password": "1.7.1",
|
|
85
85
|
"playwright": "1.49.1",
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
"author": "Michał Łaszczewski <michal@laszczewski.pl>",
|
|
91
91
|
"license": "BSD-3-Clause",
|
|
92
92
|
"description": "",
|
|
93
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "88129d6b8fff7cca15c5d7c63834fd16cb372160"
|
|
94
94
|
}
|