@dev.smartpricing/message-composer-layer 1.0.7 → 1.0.8
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/app/api/messages.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { PostEntity, EmailMessage } from '@dev.smartpricing/message-composer-utils/types'
|
|
3
3
|
import { isEmail } from '@dev.smartpricing/message-composer-utils/utils'
|
|
4
|
+
import { useQuery } from '@pinia/colada'
|
|
4
5
|
import { useSendTestEmailMutation } from '~/queries'
|
|
6
|
+
import { messageGroupsApi, messagesApi } from '~/api'
|
|
5
7
|
import { z } from 'zod'
|
|
6
8
|
|
|
7
9
|
defineOptions({
|
|
@@ -9,13 +11,73 @@ defineOptions({
|
|
|
9
11
|
})
|
|
10
12
|
|
|
11
13
|
const props = defineProps<{
|
|
12
|
-
message
|
|
14
|
+
message?: PostEntity<EmailMessage>
|
|
15
|
+
messageId?: string
|
|
16
|
+
messageGroupId?: string
|
|
17
|
+
language?: string
|
|
13
18
|
}>()
|
|
14
19
|
|
|
15
20
|
const emit = defineEmits<{
|
|
16
21
|
'test-sent': [payload: { to_recipients: number }]
|
|
17
22
|
}>()
|
|
18
23
|
|
|
24
|
+
// --- Resolve message from props (priority: message > messageId > messageGroupId+language) ---
|
|
25
|
+
|
|
26
|
+
const mode = computed(() => {
|
|
27
|
+
if (props.message) return 'direct' as const
|
|
28
|
+
if (props.messageId) return 'byId' as const
|
|
29
|
+
if (props.messageGroupId) return 'byGroup' as const
|
|
30
|
+
return 'none' as const
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
if (import.meta.dev) {
|
|
34
|
+
const propSources = [props.message, props.messageId, props.messageGroupId].filter(Boolean)
|
|
35
|
+
if (propSources.length > 1) {
|
|
36
|
+
console.warn(
|
|
37
|
+
'[SendTestEmailModal] Multiple message sources provided. Priority: message > messageId > messageGroupId+language',
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const { data: fetchedMessage, isLoading: isLoadingMessage } = useQuery({
|
|
43
|
+
key: () => ['messages', props.messageId ?? ''],
|
|
44
|
+
query: () => messagesApi.getById(props.messageId!),
|
|
45
|
+
enabled: () => mode.value === 'byId',
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
const { data: messageGroup, isLoading: isLoadingGroup } = useQuery({
|
|
49
|
+
key: () => ['message-groups', props.messageGroupId ?? ''],
|
|
50
|
+
query: () => messageGroupsApi.getById(props.messageGroupId!),
|
|
51
|
+
enabled: () => mode.value === 'byGroup',
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const resolvedMessage = computed<PostEntity<EmailMessage> | undefined>(() => {
|
|
55
|
+
if (props.message) return props.message
|
|
56
|
+
|
|
57
|
+
if (mode.value === 'byId' && fetchedMessage.value) {
|
|
58
|
+
return fetchedMessage.value as unknown as PostEntity<EmailMessage>
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (mode.value === 'byGroup' && messageGroup.value) {
|
|
62
|
+
const messages = messageGroup.value.messages
|
|
63
|
+
const msg =
|
|
64
|
+
messages.find((m) => m.language_id === props.language) ||
|
|
65
|
+
messages.find((m) => m.language_id === 'en') ||
|
|
66
|
+
messages[0]
|
|
67
|
+
return msg as unknown as PostEntity<EmailMessage> | undefined
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return undefined
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
const isResolvingMessage = computed(
|
|
74
|
+
() =>
|
|
75
|
+
(mode.value === 'byId' && isLoadingMessage.value) ||
|
|
76
|
+
(mode.value === 'byGroup' && isLoadingGroup.value),
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
// --- Form ---
|
|
80
|
+
|
|
19
81
|
const { t } = useI18n()
|
|
20
82
|
const toast = useToast()
|
|
21
83
|
const { mutate: sendTest, isLoading: isSending, status } = useSendTestEmailMutation()
|
|
@@ -43,8 +105,9 @@ const schema = z.object({
|
|
|
43
105
|
type Schema = z.output<typeof schema>
|
|
44
106
|
|
|
45
107
|
function onSubmit() {
|
|
108
|
+
if (!resolvedMessage.value) return
|
|
46
109
|
sendTest({
|
|
47
|
-
message:
|
|
110
|
+
message: resolvedMessage.value,
|
|
48
111
|
to: state.value.to,
|
|
49
112
|
})
|
|
50
113
|
}
|
|
@@ -112,7 +175,8 @@ watch(status, (newStatus) => {
|
|
|
112
175
|
:label="$t('pages.email.send_test')"
|
|
113
176
|
size="sm"
|
|
114
177
|
color="primary"
|
|
115
|
-
:loading="isSending"
|
|
178
|
+
:loading="isSending || isResolvingMessage"
|
|
179
|
+
:disabled="!resolvedMessage"
|
|
116
180
|
@click="formRef.submit()"
|
|
117
181
|
:data-testid="sendTestEmailModalTestIds.sendButton"
|
|
118
182
|
/>
|
package/app/queries/messages.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { useMutation, useQueryCache } from '@pinia/colada'
|
|
1
|
+
import { useMutation, useQuery, useQueryCache } from '@pinia/colada'
|
|
2
2
|
import type { Message, PostEntity } from '@dev.smartpricing/message-composer-utils/types'
|
|
3
|
+
import type { MaybeRefOrGetter } from 'vue'
|
|
3
4
|
import { messagesApi } from '~/api'
|
|
4
5
|
|
|
6
|
+
export function useMessageQuery(
|
|
7
|
+
id: MaybeRefOrGetter<string>,
|
|
8
|
+
options?: { enabled?: MaybeRefOrGetter<boolean> },
|
|
9
|
+
) {
|
|
10
|
+
return useQuery({
|
|
11
|
+
key: () => ['messages', toValue(id)],
|
|
12
|
+
query: () => messagesApi.getById(toValue(id)),
|
|
13
|
+
enabled: options?.enabled,
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
export function useCreateMessageMutation() {
|
|
6
18
|
const queryCache = useQueryCache()
|
|
7
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dev.smartpricing/message-composer-layer",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./nuxt.config.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"vue-router": "^5.0.6",
|
|
40
40
|
"vue3-emoji-picker": "^1.1.8",
|
|
41
41
|
"zod": "^4.4.1",
|
|
42
|
-
"@dev.smartpricing/message-composer-utils": "3.1.
|
|
42
|
+
"@dev.smartpricing/message-composer-utils": "3.1.8"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@nuxt/eslint": "^1.15.2",
|