@live-change/user-frontend 0.9.185 → 0.9.187
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 +24 -0
- package/front/locales/pl.json +24 -0
- package/front/src/delete/DeleteFinished.vue +40 -9
- package/front/src/feedback/email/FeedbackEmail.vue +151 -0
- package/front/src/feedback/routes.js +13 -0
- package/front/src/message-auth/email/ConnectEmail.vue +7 -6
- package/front/src/message-auth/email/ResetPasswordEmail.vue +6 -5
- package/front/src/message-auth/email/SignInEmail.vue +6 -5
- package/front/src/message-auth/email/SignUpEmail.vue +7 -6
- package/front/src/message-auth/sms/ConnectSms.vue +6 -6
- package/front/src/message-auth/sms/ResetPasswordSms.vue +6 -4
- package/front/src/message-auth/sms/SignInSms.vue +6 -4
- package/front/src/message-auth/sms/SignUpSms.vue +7 -6
- package/front/src/router.js +2 -0
- package/package.json +26 -26
package/front/locales/en.json
CHANGED
|
@@ -218,6 +218,30 @@
|
|
|
218
218
|
"subject": "Confirm your email address.",
|
|
219
219
|
"description": "You are trying to reset password to your account. In order to confirm that, please enter secret code:",
|
|
220
220
|
"textDescription": "You are trying to reset password to your account. In order to confirm that, please enter secret code:"
|
|
221
|
+
},
|
|
222
|
+
"feedbackReceived": {
|
|
223
|
+
"subject": {
|
|
224
|
+
"feedback": "New feedback received",
|
|
225
|
+
"error": "Error report received",
|
|
226
|
+
"delete": "Feedback after account deletion received"
|
|
227
|
+
},
|
|
228
|
+
"description": "You have received {type} from a user.",
|
|
229
|
+
"textDescription": "You have received {type} from a user.",
|
|
230
|
+
"contentLabel": "Content",
|
|
231
|
+
"contactLabel": "Contact Information",
|
|
232
|
+
"userProvidedEmailLabel": "User provided email",
|
|
233
|
+
"userContactLabel": "User contact",
|
|
234
|
+
"detailsLabel": "Details",
|
|
235
|
+
"typeLabel": "Type",
|
|
236
|
+
"ipLabel": "IP Address",
|
|
237
|
+
"sessionLabel": "Session",
|
|
238
|
+
"userAgentLabel": "User Agent",
|
|
239
|
+
"traceLabel": "Trace",
|
|
240
|
+
"types": {
|
|
241
|
+
"feedback": "feedback",
|
|
242
|
+
"error": "error report",
|
|
243
|
+
"delete": "feedback after account deletion"
|
|
244
|
+
}
|
|
221
245
|
}
|
|
222
246
|
},
|
|
223
247
|
"smsTemplates": {
|
package/front/locales/pl.json
CHANGED
|
@@ -218,6 +218,30 @@
|
|
|
218
218
|
"subject": "Potwierdź swój adres email.",
|
|
219
219
|
"description": "Próbujesz zresetować hasło do swojego konta. Aby to potwierdzić, wprowadź tajny kod:",
|
|
220
220
|
"textDescription": "Próbujesz zresetować hasło do swojego konta. Aby to potwierdzić, wprowadź tajny kod:"
|
|
221
|
+
},
|
|
222
|
+
"feedbackReceived": {
|
|
223
|
+
"subject": {
|
|
224
|
+
"feedback": "Otrzymano nowy feedback",
|
|
225
|
+
"error": "Otrzymano zgłoszenie błędu",
|
|
226
|
+
"delete": "Otrzymano feedback po usunięciu konta"
|
|
227
|
+
},
|
|
228
|
+
"description": "Otrzymałeś {type} od użytkownika.",
|
|
229
|
+
"textDescription": "Otrzymałeś {type} od użytkownika.",
|
|
230
|
+
"contentLabel": "Treść",
|
|
231
|
+
"contactLabel": "Informacje kontaktowe",
|
|
232
|
+
"userProvidedEmailLabel": "Email podany przez użytkownika",
|
|
233
|
+
"userContactLabel": "Kontakt użytkownika",
|
|
234
|
+
"detailsLabel": "Szczegóły",
|
|
235
|
+
"typeLabel": "Typ",
|
|
236
|
+
"ipLabel": "Adres IP",
|
|
237
|
+
"sessionLabel": "Sesja",
|
|
238
|
+
"userAgentLabel": "User Agent",
|
|
239
|
+
"traceLabel": "Trace",
|
|
240
|
+
"types": {
|
|
241
|
+
"feedback": "feedback",
|
|
242
|
+
"error": "zgłoszenie błędu",
|
|
243
|
+
"delete": "feedback po usunięciu konta"
|
|
244
|
+
}
|
|
221
245
|
}
|
|
222
246
|
},
|
|
223
247
|
"smsTemplates": {
|
|
@@ -1,33 +1,64 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]"
|
|
2
|
+
<div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]"
|
|
3
|
+
v-shared-element:form="{ duration: '300ms', includeChildren: true }">
|
|
3
4
|
<div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
|
|
4
5
|
<div class="text-center mb-8">
|
|
5
|
-
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
6
|
+
<div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
|
|
7
|
+
{{ t('deleteAccount.accountDeleted') }}
|
|
8
|
+
</div>
|
|
6
9
|
</div>
|
|
7
10
|
|
|
8
11
|
<div class="mb-4">
|
|
9
12
|
{{ t('deleteAccount.feedbackRequest') }}
|
|
10
13
|
</div>
|
|
14
|
+
<command-form v-if="isMounted" service="feedback" action="leaveFeedback" v-slot="{ data }"
|
|
15
|
+
:parameters="{ type: 'delete', userAgent: ua }"
|
|
16
|
+
@done="handleDone">
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
<Textarea v-model="data.content" class="w-full" :autoResize="true" rows="4" cols="30" :error="data.contentError" />
|
|
19
|
+
<small v-if="data.contentError" class="text-red-500 dark:text-red-400">
|
|
20
|
+
{{ t(`errors.${data.contentError}`) }}
|
|
21
|
+
</small>
|
|
22
|
+
|
|
23
|
+
<div class="flex flex-row items-end">
|
|
24
|
+
<Button type="submit" :label="t('deleteAccount.send')" icon="pi pi-send" class="ml-auto p-button-lg" />
|
|
25
|
+
</div>
|
|
26
|
+
</command-form>
|
|
16
27
|
|
|
17
28
|
</div>
|
|
18
29
|
</div>
|
|
19
30
|
</template>
|
|
20
31
|
|
|
21
32
|
<script setup>
|
|
22
|
-
import InputText from "primevue/inputtext"
|
|
23
|
-
import Checkbox from "primevue/checkbox"
|
|
24
33
|
import Button from "primevue/button"
|
|
25
|
-
import Divider from "primevue/divider"
|
|
26
34
|
import Textarea from "primevue/textarea"
|
|
27
35
|
|
|
28
36
|
import { useI18n } from 'vue-i18n'
|
|
29
37
|
const { t } = useI18n()
|
|
30
38
|
|
|
39
|
+
import { onMounted, ref } from "vue"
|
|
40
|
+
const isMounted = ref(false)
|
|
41
|
+
onMounted(() => isMounted.value = true)
|
|
42
|
+
|
|
43
|
+
import { useToast } from 'primevue/usetoast'
|
|
44
|
+
const toast = useToast()
|
|
45
|
+
|
|
46
|
+
const ua = ref()
|
|
47
|
+
onMounted(() => {
|
|
48
|
+
ua.value = navigator.userAgent
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
function handleDone({ parameters, result }) {
|
|
52
|
+
console.log("DONE PARAMETERS", parameters)
|
|
53
|
+
console.log("DONE RESULT", result)
|
|
54
|
+
toast.add({
|
|
55
|
+
severity: 'info', life: 6000,
|
|
56
|
+
summary: t('deleteAccount.feedbackSent'),
|
|
57
|
+
detail: t('deleteAccount.thankYou')
|
|
58
|
+
})
|
|
59
|
+
router.push({ name: 'user:deleteFeedbackSent' })
|
|
60
|
+
}
|
|
61
|
+
|
|
31
62
|
</script>
|
|
32
63
|
|
|
33
64
|
<style>
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<pre data-headers>{{ JSON.stringify(metadata, null, ' ') }}</pre>
|
|
3
|
+
<div data-html class="message m-12">
|
|
4
|
+
<p class="text-lg">
|
|
5
|
+
{{ t('emailTemplates.hello') }}
|
|
6
|
+
</p>
|
|
7
|
+
<p>
|
|
8
|
+
{{ t('emailTemplates.feedbackReceived.description', { type: t(`emailTemplates.feedbackReceived.types.${feedbackType}`) }) }}
|
|
9
|
+
</p>
|
|
10
|
+
<div class="feedback-content">
|
|
11
|
+
<p class="font-medium">{{ t('emailTemplates.feedbackReceived.contentLabel') }}: </p>
|
|
12
|
+
<p class="bg-gray-100 p-4 rounded">{{ data.content }}</p>
|
|
13
|
+
</div>
|
|
14
|
+
<div v-if="data.email || userEmails.length > 0" class="feedback-contact mt-4">
|
|
15
|
+
<p class="font-medium">{{ t('emailTemplates.feedbackReceived.contactLabel') }}: </p>
|
|
16
|
+
<ul class="list-none pl-0">
|
|
17
|
+
<li v-if="data.email">
|
|
18
|
+
<strong>{{ t('emailTemplates.feedbackReceived.userProvidedEmailLabel') }}: </strong>
|
|
19
|
+
<a :href="'mailto:' + data.email">{{ data.email }}</a>
|
|
20
|
+
</li>
|
|
21
|
+
<li v-for="contact in userEmails" :key="contact.email">
|
|
22
|
+
<strong>{{ t('emailTemplates.feedbackReceived.userContactLabel') }}: </strong>
|
|
23
|
+
<a :href="'mailto:' + contact.email">{{ contact.email }}</a>
|
|
24
|
+
</li>
|
|
25
|
+
</ul>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="feedback-details mt-4">
|
|
28
|
+
<p class="font-medium">{{ t('emailTemplates.feedbackReceived.detailsLabel') }}:</p>
|
|
29
|
+
<ul class="list-none pl-0">
|
|
30
|
+
<li><strong>{{ t('emailTemplates.feedbackReceived.typeLabel') }}:</strong> {{ t(`emailTemplates.feedbackReceived.types.${feedbackType}`) }}</li>
|
|
31
|
+
<li><strong>{{ t('emailTemplates.feedbackReceived.ipLabel') }}:</strong> {{ data.ip }}</li>
|
|
32
|
+
<li><strong>{{ t('emailTemplates.feedbackReceived.sessionLabel') }}:</strong> {{ data.session }}</li>
|
|
33
|
+
<li><strong>{{ t('emailTemplates.feedbackReceived.userAgentLabel') }}:</strong> {{ data.userAgent }}</li>
|
|
34
|
+
<li v-if="data.trace"><strong>{{ t('emailTemplates.feedbackReceived.traceLabel') }}:</strong> <code style="white-space: pre-wrap; display: block; background: #f5f5f5; padding: 0.5rem; margin-top: 0.5rem;">{{ data.trace }}</code></li>
|
|
35
|
+
</ul>
|
|
36
|
+
</div>
|
|
37
|
+
<p>
|
|
38
|
+
{{ t('emailTemplates.seeYouSoon') }}<br>
|
|
39
|
+
{{ t('emailTemplates.teamSignature', { brandName }) }}
|
|
40
|
+
</p>
|
|
41
|
+
<img src="/images/logo128.png">
|
|
42
|
+
</div>
|
|
43
|
+
<pre class="message" data-text>{{ textVersion }}</pre>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script setup>
|
|
47
|
+
const { contact, json } = defineProps({
|
|
48
|
+
contact: {
|
|
49
|
+
type: String,
|
|
50
|
+
required: true
|
|
51
|
+
},
|
|
52
|
+
json: {
|
|
53
|
+
type: String,
|
|
54
|
+
required: true
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const data = JSON.parse(json)
|
|
59
|
+
|
|
60
|
+
import { useI18n } from 'vue-i18n'
|
|
61
|
+
const { locale: i18nLocale, t } = useI18n()
|
|
62
|
+
|
|
63
|
+
import { useHead } from '@vueuse/head'
|
|
64
|
+
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
65
|
+
|
|
66
|
+
import { useApi, live, usePath } from '@live-change/vue3-ssr'
|
|
67
|
+
const api = useApi()
|
|
68
|
+
|
|
69
|
+
const {
|
|
70
|
+
brandName, brandDomain
|
|
71
|
+
} = api.metadata.config.value
|
|
72
|
+
|
|
73
|
+
const feedbackType = data.type || 'feedback'
|
|
74
|
+
const subjectKey = `emailTemplates.feedbackReceived.subject.${feedbackType}`
|
|
75
|
+
|
|
76
|
+
const userEmailsPath = usePath().email.userEmails({ user: data.user })
|
|
77
|
+
|
|
78
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
79
|
+
const locale = useLocale()
|
|
80
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
81
|
+
|
|
82
|
+
const [userEmails, _] = await Promise.all([live(userEmailsPath), localePromise])
|
|
83
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
84
|
+
|
|
85
|
+
console.log('userEmails', userEmails.value)
|
|
86
|
+
|
|
87
|
+
// Determine replyTo - prefer user-provided email, then first user contact
|
|
88
|
+
const replyToEmail = data.email || (userEmails.value.length > 0 ? userEmails.value[0].email : null)
|
|
89
|
+
|
|
90
|
+
const metadata = {
|
|
91
|
+
from: `${brandName} <admin@${brandDomain}>`,
|
|
92
|
+
subject: t(subjectKey),
|
|
93
|
+
to: contact,
|
|
94
|
+
...(replyToEmail ? { replyTo: replyToEmail } : {})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
import { computed } from 'vue'
|
|
98
|
+
const textVersion = computed(() => {
|
|
99
|
+
const lines = [
|
|
100
|
+
t('emailTemplates.hello'),
|
|
101
|
+
'',
|
|
102
|
+
t('emailTemplates.feedbackReceived.textDescription', { type: t(`emailTemplates.feedbackReceived.types.${feedbackType}`) }),
|
|
103
|
+
'',
|
|
104
|
+
t('emailTemplates.feedbackReceived.contentLabel') + ':',
|
|
105
|
+
data.content,
|
|
106
|
+
''
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
// Add contact information
|
|
110
|
+
if (data.email || userEmails.value.length > 0) {
|
|
111
|
+
lines.push(t('emailTemplates.feedbackReceived.contactLabel') + ':')
|
|
112
|
+
if (data.email) {
|
|
113
|
+
lines.push(t('emailTemplates.feedbackReceived.userProvidedEmailLabel') + ': ' + data.email)
|
|
114
|
+
}
|
|
115
|
+
userEmails.value.forEach(contact => {
|
|
116
|
+
lines.push(t('emailTemplates.feedbackReceived.userContactLabel') + ': ' + contact.email)
|
|
117
|
+
})
|
|
118
|
+
lines.push('')
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
lines.push(
|
|
122
|
+
t('emailTemplates.feedbackReceived.detailsLabel') + ':',
|
|
123
|
+
t('emailTemplates.feedbackReceived.typeLabel') + ': ' + t(`emailTemplates.feedbackReceived.types.${feedbackType}`),
|
|
124
|
+
t('emailTemplates.feedbackReceived.ipLabel') + ': ' + data.ip,
|
|
125
|
+
t('emailTemplates.feedbackReceived.sessionLabel') + ': ' + data.session,
|
|
126
|
+
t('emailTemplates.feedbackReceived.userAgentLabel') + ': ' + data.userAgent
|
|
127
|
+
)
|
|
128
|
+
if (data.trace) {
|
|
129
|
+
lines.push(t('emailTemplates.feedbackReceived.traceLabel') + ': ' + data.trace)
|
|
130
|
+
}
|
|
131
|
+
lines.push('', t('emailTemplates.seeYouSoon'), t('emailTemplates.teamSignature', { brandName }))
|
|
132
|
+
return lines.join('\n')
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
</script>
|
|
136
|
+
|
|
137
|
+
<style scoped>
|
|
138
|
+
img {
|
|
139
|
+
width: 100%;
|
|
140
|
+
max-width: 100px;
|
|
141
|
+
}
|
|
142
|
+
.message {
|
|
143
|
+
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
|
144
|
+
color: #495057;
|
|
145
|
+
font-weight: 400;
|
|
146
|
+
}
|
|
147
|
+
pre {
|
|
148
|
+
border-top: 1px solid black;
|
|
149
|
+
border-bottom: 1px solid black;
|
|
150
|
+
}
|
|
151
|
+
</style>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
export function routes(config = {}) {
|
|
3
|
+
const { prefix = '/', route = (r) => r } = config
|
|
4
|
+
|
|
5
|
+
return [
|
|
6
|
+
|
|
7
|
+
route({ name: 'user:email:feedbackReceived', path: '/_email/feedbackReceived/:contact/:json', props: true,
|
|
8
|
+
meta: { raw: true, lightMode: true }, component: () => import("./email/FeedbackEmail.vue") }),
|
|
9
|
+
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default routes
|
|
@@ -71,14 +71,9 @@
|
|
|
71
71
|
|
|
72
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
73
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
74
|
-
|
|
75
|
-
import { useLocale } from "@live-change/vue3-components"
|
|
76
|
-
const locale = useLocale()
|
|
77
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
78
|
-
await Promise.all([localePromise])
|
|
74
|
+
|
|
79
75
|
import { useI18n } from 'vue-i18n'
|
|
80
76
|
const { locale: i18nLocale, t } = useI18n()
|
|
81
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
82
77
|
|
|
83
78
|
import { useHead } from '@vueuse/head'
|
|
84
79
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
@@ -107,6 +102,12 @@
|
|
|
107
102
|
|
|
108
103
|
const code = secretCode.secret.secretCode
|
|
109
104
|
|
|
105
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
106
|
+
const locale = useLocale()
|
|
107
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
108
|
+
await Promise.all([localePromise])
|
|
109
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
110
|
+
|
|
110
111
|
</script>
|
|
111
112
|
|
|
112
113
|
<style scoped>
|
|
@@ -72,13 +72,8 @@
|
|
|
72
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
73
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
74
74
|
|
|
75
|
-
import { useLocale } from "@live-change/vue3-components"
|
|
76
|
-
const locale = useLocale()
|
|
77
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
78
|
-
await Promise.all([localePromise])
|
|
79
75
|
import { useI18n } from 'vue-i18n'
|
|
80
76
|
const { locale: i18nLocale, t } = useI18n()
|
|
81
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
82
77
|
|
|
83
78
|
import { useHead } from '@vueuse/head'
|
|
84
79
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
@@ -107,6 +102,12 @@
|
|
|
107
102
|
|
|
108
103
|
const code = secretCode.secret.secretCode
|
|
109
104
|
|
|
105
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
106
|
+
const locale = useLocale()
|
|
107
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
108
|
+
await Promise.all([localePromise])
|
|
109
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
110
|
+
|
|
110
111
|
</script>
|
|
111
112
|
|
|
112
113
|
<style scoped>
|
|
@@ -72,13 +72,9 @@
|
|
|
72
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
73
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
const locale = useLocale()
|
|
77
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
78
|
-
await Promise.all([localePromise])
|
|
75
|
+
|
|
79
76
|
import { useI18n } from 'vue-i18n'
|
|
80
77
|
const { locale: i18nLocale, t } = useI18n()
|
|
81
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
82
78
|
|
|
83
79
|
import { useHead } from '@vueuse/head'
|
|
84
80
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
@@ -107,6 +103,11 @@
|
|
|
107
103
|
|
|
108
104
|
const code = secretCode.secret.secretCode
|
|
109
105
|
|
|
106
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
107
|
+
const locale = useLocale()
|
|
108
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
109
|
+
await Promise.all([localePromise])
|
|
110
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
110
111
|
</script>
|
|
111
112
|
|
|
112
113
|
<style scoped>
|
|
@@ -72,14 +72,8 @@
|
|
|
72
72
|
const secretLink = secrets.find(secret => secret.type === 'link')
|
|
73
73
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
74
74
|
|
|
75
|
-
const owner = { sessionOrUserType: 'session_Session', sessionOrUser: data.session }
|
|
76
|
-
import { useLocale } from "@live-change/vue3-components"
|
|
77
|
-
const locale = useLocale()
|
|
78
|
-
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
79
|
-
await Promise.all([localePromise])
|
|
80
75
|
import { useI18n } from 'vue-i18n'
|
|
81
76
|
const { locale: i18nLocale, t } = useI18n()
|
|
82
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
83
77
|
|
|
84
78
|
import { useHead } from '@vueuse/head'
|
|
85
79
|
useHead({ htmlAttrs: { class: 'email-rendering' } })
|
|
@@ -108,6 +102,13 @@
|
|
|
108
102
|
|
|
109
103
|
const code = secretCode.secret.secretCode
|
|
110
104
|
|
|
105
|
+
const owner = { sessionOrUserType: 'session_Session', sessionOrUser: data.session }
|
|
106
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
107
|
+
const locale = useLocale()
|
|
108
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
109
|
+
await Promise.all([localePromise])
|
|
110
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
111
|
+
|
|
111
112
|
</script>
|
|
112
113
|
|
|
113
114
|
<style scoped>
|
|
@@ -45,12 +45,6 @@
|
|
|
45
45
|
import { useRouter } from 'vue-router'
|
|
46
46
|
const router = useRouter()
|
|
47
47
|
|
|
48
|
-
import { useLocale } from "@live-change/vue3-components"
|
|
49
|
-
const locale = useLocale()
|
|
50
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
51
|
-
await Promise.all([localePromise])
|
|
52
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
53
|
-
|
|
54
48
|
const linkAddress = baseHref + router.resolve({
|
|
55
49
|
name: 'user:link',
|
|
56
50
|
params: {
|
|
@@ -60,6 +54,12 @@
|
|
|
60
54
|
|
|
61
55
|
const code = secretCode.secret.secretCode
|
|
62
56
|
|
|
57
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
58
|
+
const locale = useLocale()
|
|
59
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
60
|
+
await Promise.all([localePromise])
|
|
61
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
62
|
+
|
|
63
63
|
</script>
|
|
64
64
|
|
|
65
65
|
<style scoped>
|
|
@@ -31,12 +31,8 @@
|
|
|
31
31
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
32
32
|
|
|
33
33
|
import { useLocale } from "@live-change/vue3-components"
|
|
34
|
-
const locale = useLocale()
|
|
35
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
36
|
-
await Promise.all([localePromise])
|
|
37
34
|
import { useI18n } from 'vue-i18n'
|
|
38
35
|
const { locale: i18nLocale, t } = useI18n()
|
|
39
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
40
36
|
|
|
41
37
|
import { useApi } from '@live-change/vue3-ssr'
|
|
42
38
|
const api = useApi()
|
|
@@ -61,6 +57,12 @@
|
|
|
61
57
|
|
|
62
58
|
const code = secretCode.secret.secretCode
|
|
63
59
|
|
|
60
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
61
|
+
const locale = useLocale()
|
|
62
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
63
|
+
await Promise.all([localePromise])
|
|
64
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
65
|
+
|
|
64
66
|
</script>
|
|
65
67
|
|
|
66
68
|
<style scoped>
|
|
@@ -31,12 +31,8 @@
|
|
|
31
31
|
const secretCode = secrets.find(secret => secret.type === 'code')
|
|
32
32
|
|
|
33
33
|
import { useLocale } from "@live-change/vue3-components"
|
|
34
|
-
const locale = useLocale()
|
|
35
|
-
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
36
|
-
await Promise.all([localePromise])
|
|
37
34
|
import { useI18n } from 'vue-i18n'
|
|
38
35
|
const { locale: i18nLocale, t } = useI18n()
|
|
39
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
40
36
|
|
|
41
37
|
import { useApi } from '@live-change/vue3-ssr'
|
|
42
38
|
const api = useApi()
|
|
@@ -61,6 +57,12 @@
|
|
|
61
57
|
|
|
62
58
|
const code = secretCode.secret.secretCode
|
|
63
59
|
|
|
60
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
61
|
+
const locale = useLocale()
|
|
62
|
+
const localePromise = locale.getOtherUserOrSessionLocale(data.user, data.client?.session)
|
|
63
|
+
await Promise.all([localePromise])
|
|
64
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
65
|
+
|
|
64
66
|
</script>
|
|
65
67
|
|
|
66
68
|
<style scoped>
|
|
@@ -30,14 +30,8 @@
|
|
|
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: 'session_Session', sessionOrUser: data.session }
|
|
34
|
-
import { useLocale } from "@live-change/vue3-components"
|
|
35
|
-
const locale = useLocale()
|
|
36
|
-
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
37
|
-
await Promise.all([localePromise])
|
|
38
33
|
import { useI18n } from 'vue-i18n'
|
|
39
34
|
const { locale: i18nLocale, t } = useI18n()
|
|
40
|
-
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
41
35
|
|
|
42
36
|
import { useApi } from '@live-change/vue3-ssr'
|
|
43
37
|
const api = useApi()
|
|
@@ -62,6 +56,13 @@
|
|
|
62
56
|
|
|
63
57
|
const code = secretCode.secret.secretCode
|
|
64
58
|
|
|
59
|
+
const owner = { sessionOrUserType: 'session_Session', sessionOrUser: data.session }
|
|
60
|
+
import { useLocale } from "@live-change/vue3-components"
|
|
61
|
+
const locale = useLocale()
|
|
62
|
+
const localePromise = locale.getOtherOwnerLocale(owner)
|
|
63
|
+
await Promise.all([localePromise])
|
|
64
|
+
if(locale.getLanguage()) i18nLocale.value = locale.getLanguage()
|
|
65
|
+
|
|
65
66
|
</script>
|
|
66
67
|
|
|
67
68
|
<style scoped>
|
package/front/src/router.js
CHANGED
|
@@ -10,6 +10,7 @@ import connectedRoutes from "./connected/routes.js"
|
|
|
10
10
|
import identificationRoutes from "./identification/routes.js"
|
|
11
11
|
import deleteRoutes from "./delete/routes.js"
|
|
12
12
|
import googleAccessRoutes from "./google-access/routes.js"
|
|
13
|
+
import feedbackRoutes from "./feedback/routes.js"
|
|
13
14
|
import { passwordResetRoutes, passwordChangeRoutes } from "./password/routes.js"
|
|
14
15
|
import { notificationsSettingsRoutes, notificationsRoutes } from "./notifications/routes.js"
|
|
15
16
|
import localeSettingsRoutes from "./locale/routes.js"
|
|
@@ -25,6 +26,7 @@ export function userRoutes(config = {}) {
|
|
|
25
26
|
...passwordResetRoutes(config),
|
|
26
27
|
...notificationsRoutes(config),
|
|
27
28
|
...googleAccessRoutes(config),
|
|
29
|
+
...feedbackRoutes(config),
|
|
28
30
|
|
|
29
31
|
route({
|
|
30
32
|
path: prefix + 'settings', meta: { pageType: 'wide' },
|
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.187",
|
|
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.187",
|
|
40
|
+
"@live-change/dao": "^0.9.187",
|
|
41
|
+
"@live-change/dao-vue3": "^0.9.187",
|
|
42
|
+
"@live-change/dao-websocket": "^0.9.187",
|
|
43
|
+
"@live-change/email-service": "^0.9.187",
|
|
44
|
+
"@live-change/framework": "^0.9.187",
|
|
45
|
+
"@live-change/identicon-service": "^0.9.187",
|
|
46
|
+
"@live-change/image-frontend": "^0.9.187",
|
|
47
|
+
"@live-change/message-authentication-service": "^0.9.187",
|
|
48
|
+
"@live-change/notification-service": "^0.9.187",
|
|
49
|
+
"@live-change/password-authentication-service": "^0.9.187",
|
|
50
|
+
"@live-change/pattern": "^0.9.187",
|
|
51
|
+
"@live-change/secret-code-service": "^0.9.187",
|
|
52
|
+
"@live-change/secret-link-service": "^0.9.187",
|
|
53
|
+
"@live-change/security-frontend": "^0.9.187",
|
|
54
|
+
"@live-change/security-service": "^0.9.187",
|
|
55
|
+
"@live-change/session-service": "^0.9.187",
|
|
56
|
+
"@live-change/timer-service": "^0.9.187",
|
|
57
|
+
"@live-change/upload-service": "^0.9.187",
|
|
58
|
+
"@live-change/user-identification-service": "^0.9.187",
|
|
59
|
+
"@live-change/user-service": "^0.9.187",
|
|
60
|
+
"@live-change/vue3-components": "^0.9.187",
|
|
61
|
+
"@live-change/vue3-ssr": "^0.9.187",
|
|
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.187",
|
|
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": "9cb9fc01eebdafb342a419cde03eafdf467eaa32"
|
|
94
94
|
}
|