@dev.smartpricing/message-composer-layer 4.0.2 → 4.0.3

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.
@@ -6,6 +6,7 @@ import type {
6
6
  PostEntity,
7
7
  MessageGroup,
8
8
  RenderType,
9
+ DuplicateMessageGroupBody,
9
10
  } from '@dev.smartpricing/message-composer-utils/types'
10
11
  import { apiClient } from './client'
11
12
 
@@ -46,4 +47,10 @@ export const messageGroupsApi = {
46
47
 
47
48
  validate: (id: string) =>
48
49
  apiClient<MessageGroupValidationResponse>(`/message-groups/${id}/validate`),
50
+
51
+ duplicate: (id: string, data?: DuplicateMessageGroupBody) =>
52
+ apiClient<MessageGroupFromDb & { tags: string[] }>(`/message-groups/${id}/duplicate`, {
53
+ method: 'POST',
54
+ body: data,
55
+ }),
49
56
  }
@@ -4,10 +4,9 @@ import {
4
4
  useUpdateMessageGroupMutation,
5
5
  useCreateMessageMutation,
6
6
  useUpdateMessageMutation,
7
+ useDuplicateMessageGroupMutation,
7
8
  } from '~/queries'
8
- import { messageGroupsApi } from '~/api'
9
9
  import type {
10
- MessageFromDb,
11
10
  MessageGroupCategory,
12
11
  Message,
13
12
  PostEntity,
@@ -25,24 +24,7 @@ interface UseTemplateOperationsOptions {
25
24
  onError?: (error: Error) => void
26
25
  }
27
26
 
28
- function transformMessagesForCreation(
29
- messages: MessageFromDb[],
30
- ): Record<string, PostEntity<Message>> {
31
- return messages.reduce(
32
- (acc, message) => {
33
- // Remove DB-specific fields, keep message group content
34
-
35
- const { id, message_group_id, created_at, updated_at, ...messageGroupMessage } = message
36
- acc[message.language_id] = { ...messageGroupMessage, message_group_id: '', metadata: {} }
37
-
38
- return acc
39
- },
40
- {} as Record<string, PostEntity<Message>>,
41
- )
42
- }
43
-
44
27
  export function useTemplateOperations(options: UseTemplateOperationsOptions = {}) {
45
- const { t } = useI18n()
46
28
  const saving = ref(false)
47
29
  const saved = ref(false)
48
30
 
@@ -51,6 +33,7 @@ export function useTemplateOperations(options: UseTemplateOperationsOptions = {}
51
33
  const { mutateAsync: createMessage } = useCreateMessageMutation()
52
34
  const { mutateAsync: updateMessageGroup } = useUpdateMessageGroupMutation()
53
35
  const { mutateAsync: updateMessage } = useUpdateMessageMutation()
36
+ const { mutateAsync: duplicateMessageGroup } = useDuplicateMessageGroupMutation()
54
37
 
55
38
  // Create new message group(used by Create + Duplicate)
56
39
  async function createTemplate(data: TemplateData, status: MessageStatus = 'draft') {
@@ -117,26 +100,19 @@ export function useTemplateOperations(options: UseTemplateOperationsOptions = {}
117
100
  async function duplicateTemplate(sourceId: string, newName?: string) {
118
101
  saving.value = true
119
102
  try {
120
- const sourceTemplate = await messageGroupsApi.getById(sourceId)
121
-
122
- if (!sourceTemplate) {
123
- throw new Error('Source message group not found')
124
- }
103
+ const result = await duplicateMessageGroup({
104
+ id: sourceId,
105
+ data: newName ? { name: newName } : undefined,
106
+ })
125
107
 
126
- const templateData: TemplateData = {
127
- messageGroup: {
128
- name: newName || t('common.copy_of', { name: sourceTemplate.name }),
129
- category: sourceTemplate.category,
130
- brand_id: sourceTemplate.brand_id,
131
- },
132
- messages: transformMessagesForCreation(sourceTemplate.messages),
133
- }
134
-
135
- const result = await createTemplate(templateData, 'draft')
108
+ saved.value = true
109
+ options.onSuccess?.()
136
110
  return result
137
111
  } catch (error) {
138
112
  options.onError?.(error as Error)
139
113
  throw error
114
+ } finally {
115
+ saving.value = false
140
116
  }
141
117
  }
142
118
 
@@ -1,5 +1,6 @@
1
1
  import { useQuery, useMutation, useQueryCache } from '@pinia/colada'
2
2
  import type {
3
+ DuplicateMessageGroupBody,
3
4
  MessageGroup,
4
5
  MessageGroupWithMessageSummary,
5
6
  PostEntity,
@@ -82,6 +83,18 @@ export function useUnpublishMessageGroupMutation() {
82
83
  })
83
84
  }
84
85
 
86
+ export function useDuplicateMessageGroupMutation() {
87
+ const queryCache = useQueryCache()
88
+
89
+ return useMutation({
90
+ mutation: ({ id, data }: { id: string; data?: DuplicateMessageGroupBody }) =>
91
+ messageGroupsApi.duplicate(id, data),
92
+ onSuccess: () => {
93
+ queryCache.invalidateQueries({ key: ['message-groups'] })
94
+ },
95
+ })
96
+ }
97
+
85
98
  export function useDeleteMessageGroupMutation() {
86
99
  const queryCache = useQueryCache()
87
100
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev.smartpricing/message-composer-layer",
3
- "version": "4.0.2",
3
+ "version": "4.0.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./nuxt.config.ts",
@@ -38,7 +38,7 @@
38
38
  "vue-router": "^5.0.7",
39
39
  "vue3-emoji-picker": "^1.1.8",
40
40
  "zod": "^4.4.3",
41
- "@dev.smartpricing/message-composer-utils": "4.0.3"
41
+ "@dev.smartpricing/message-composer-utils": "4.0.4"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@nuxt/eslint": "^1.15.2",