@dev.smartpricing/message-composer-layer 4.0.1 → 4.0.2-templates.1

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.
@@ -0,0 +1,132 @@
1
+ import { useQuery, useMutation, useQueryCache } from '@pinia/colada'
2
+ import type { RenderType } from '@dev.smartpricing/message-composer-utils/types'
3
+ import type {
4
+ TemplateWithMessageSummary,
5
+ CreateTemplatePayload,
6
+ UpdateTemplatePayload,
7
+ PromoteTemplatePayload,
8
+ } from '@dev.smartpricing/message-composer-utils/types'
9
+ import { templatesApi } from '~/api/templates'
10
+
11
+ // QUERIES
12
+
13
+ export function useTemplatesQuery(
14
+ options?: MaybeRefOrGetter<{
15
+ renderType?: RenderType
16
+ scope?: 'system' | 'mine' | 'all'
17
+ tags?: string[]
18
+ tagsMode?: 'and' | 'or'
19
+ }>,
20
+ ) {
21
+ return useQuery({
22
+ key: () => ['templates', JSON.stringify(toValue(options))],
23
+ query: () => templatesApi.getAll(toValue(options)),
24
+ staleTime: 0,
25
+ })
26
+ }
27
+
28
+ export function useTemplateQuery(id: MaybeRefOrGetter<string>) {
29
+ return useQuery({
30
+ key: () => ['templates', toValue(id)],
31
+ query: () => templatesApi.getById(toValue(id)),
32
+ staleTime: 2 * 60 * 1000,
33
+ })
34
+ }
35
+
36
+ // MUTATIONS
37
+
38
+ export function useCreateTemplateMutation() {
39
+ const queryCache = useQueryCache()
40
+
41
+ return useMutation({
42
+ mutation: (data: CreateTemplatePayload) => templatesApi.create(data),
43
+ onSuccess: () => {
44
+ queryCache.invalidateQueries({ key: ['templates'] })
45
+ },
46
+ })
47
+ }
48
+
49
+ export function useUpdateTemplateMutation() {
50
+ const queryCache = useQueryCache()
51
+
52
+ return useMutation({
53
+ mutation: ({ id, data }: { id: string; data: UpdateTemplatePayload }) =>
54
+ templatesApi.update(id, data),
55
+ onSuccess: (_, { id }) => {
56
+ queryCache.invalidateQueries({ key: ['templates', id] })
57
+ queryCache.invalidateQueries({ key: ['templates'] })
58
+ },
59
+ })
60
+ }
61
+
62
+ export function useDeleteTemplateMutation() {
63
+ const queryCache = useQueryCache()
64
+
65
+ return useMutation({
66
+ mutation: templatesApi.delete,
67
+ onMutate: async (id) => {
68
+ queryCache.cancelQueries({ key: ['templates'] })
69
+ const previous = queryCache.getQueryData(['templates'])
70
+
71
+ queryCache.setQueryData(['templates'], (old: TemplateWithMessageSummary[] | undefined) =>
72
+ old?.filter((t) => t.id !== id),
73
+ )
74
+
75
+ return { previous }
76
+ },
77
+ onError: (_, __, context) => {
78
+ if (context?.previous) {
79
+ queryCache.setQueryData(['templates'], context.previous)
80
+ }
81
+ },
82
+ onSuccess: () => {
83
+ queryCache.invalidateQueries({ key: ['templates'] })
84
+ },
85
+ })
86
+ }
87
+
88
+ export function usePublishTemplateMutation() {
89
+ const queryCache = useQueryCache()
90
+
91
+ return useMutation({
92
+ mutation: templatesApi.publish,
93
+ onSuccess: () => {
94
+ queryCache.invalidateQueries({ key: ['templates'] })
95
+ },
96
+ })
97
+ }
98
+
99
+ export function useUnpublishTemplateMutation() {
100
+ const queryCache = useQueryCache()
101
+
102
+ return useMutation({
103
+ mutation: templatesApi.unpublish,
104
+ onSuccess: () => {
105
+ queryCache.invalidateQueries({ key: ['templates'] })
106
+ },
107
+ })
108
+ }
109
+
110
+ export function usePromoteTemplateMutation() {
111
+ const queryCache = useQueryCache()
112
+
113
+ return useMutation({
114
+ mutation: ({ id, data }: { id: string; data: PromoteTemplatePayload }) =>
115
+ templatesApi.promote(id, data),
116
+ onSuccess: () => {
117
+ queryCache.invalidateQueries({ key: ['templates'] })
118
+ },
119
+ })
120
+ }
121
+
122
+ export function useSaveAsTemplateMutation() {
123
+ const queryCache = useQueryCache()
124
+
125
+ return useMutation({
126
+ mutation: ({ messageGroupId, name }: { messageGroupId: string; name?: string }) =>
127
+ templatesApi.saveFromMessageGroup(messageGroupId, name),
128
+ onSuccess: () => {
129
+ queryCache.invalidateQueries({ key: ['templates'] })
130
+ },
131
+ })
132
+ }
@@ -520,6 +520,7 @@ export const templateListTableTestIds = {
520
520
  rowDuplicateAction: 'template-list-table-row-duplicate',
521
521
  rowPublishAction: 'template-list-table-row-publish',
522
522
  rowUnpublishAction: 'template-list-table-row-unpublish',
523
+ rowSaveAsTemplateAction: 'template-list-table-row-save-as-template',
523
524
  } as const
524
525
 
525
526
  export const templateListStatusCellTestIds = {
@@ -43,6 +43,7 @@ export default {
43
43
  save: 'Speichern',
44
44
  remove: 'Entfernen',
45
45
  reset_defaults: 'Auf Standardwerte zurücksetzen',
46
+ confirm: 'Bestätigen',
46
47
  },
47
48
  internal: 'Intern',
48
49
  imageUpload: {
@@ -831,6 +832,48 @@ Diese Nachrichten müssen funktional sein, nicht werblich.
831
832
  no_preview: 'Keine Vorschau verfügbar',
832
833
  subject: 'Betreff',
833
834
  },
835
+ templates: {
836
+ title: 'Vorlagen',
837
+ my_templates: 'Meine Vorlagen',
838
+ system_templates: 'Systemvorlagen',
839
+ add_template: 'Neue Vorlage',
840
+ create_template: 'Vorlage erstellen',
841
+ edit_template: 'Vorlage bearbeiten',
842
+ use_template: 'Diese Vorlage verwenden',
843
+ start_from_scratch: 'Neu beginnen',
844
+ pick_template: 'Vorlage auswählen',
845
+ save_as_template: 'Als Vorlage speichern',
846
+ system_template: 'Systemvorlage',
847
+ template_name: 'Vorlagenname',
848
+ template_name_placeholder: 'Vorlagenname eingeben',
849
+ no_templates: 'Keine Vorlagen verfügbar',
850
+ new_message_email: 'Neue E-Mail-Nachricht',
851
+ new_message_whatsapp: 'Neue WhatsApp-Nachricht',
852
+ dialogs: {
853
+ delete: {
854
+ title: 'Vorlage löschen',
855
+ message:
856
+ 'Diese Aktion kann nicht rückgängig gemacht werden. Möchten Sie {name} wirklich löschen?',
857
+ success: '"{name}" wurde gelöscht.',
858
+ },
859
+ publish: {
860
+ title: 'Vorlage veröffentlichen',
861
+ message: '"{name}" veröffentlichen, um sie allen Benutzern zugänglich zu machen?',
862
+ success: '"{name}" wurde veröffentlicht.',
863
+ },
864
+ unpublish: {
865
+ title: 'Vorlage verbergen',
866
+ message: '"{name}" verbergen? Sie wird für andere Benutzer nicht mehr sichtbar sein.',
867
+ success: '"{name}" wurde verborgen.',
868
+ },
869
+ save_as_template: {
870
+ title: 'Als Vorlage speichern',
871
+ message: 'Diese Nachricht als wiederverwendbare Vorlage speichern?',
872
+ success: 'Vorlage erfolgreich gespeichert.',
873
+ },
874
+ },
875
+ copy_success: 'Nachricht aus Vorlage erstellt.',
876
+ },
834
877
  public: {
835
878
  select_message: {
836
879
  choose_message: 'Nachricht auswählen...',
@@ -43,6 +43,7 @@ export default {
43
43
  save: 'Save',
44
44
  remove: 'Remove',
45
45
  reset_defaults: 'Reset to defaults',
46
+ confirm: 'Confirm',
46
47
  },
47
48
  internal: 'Internal',
48
49
  imageUpload: {
@@ -822,6 +823,58 @@ These messages must be functional, not promotional.
822
823
  no_preview: 'No preview available',
823
824
  subject: 'Subject',
824
825
  },
826
+ templates: {
827
+ title: 'Templates',
828
+ my_templates: 'My templates',
829
+ system_templates: 'System templates',
830
+ add_template: 'New template',
831
+ create_template: 'Create template',
832
+ edit_template: 'Edit template',
833
+ use_template: 'Use this template',
834
+ start_from_scratch: 'Start from scratch',
835
+ pick_template: 'Choose a template',
836
+ save_as_template: 'Save as template',
837
+ system_template: 'System template',
838
+ template_name: 'Template name',
839
+ template_name_placeholder: 'Enter template name',
840
+ no_templates: 'No templates available',
841
+ new_message_email: 'New email message',
842
+ new_message_whatsapp: 'New WhatsApp message',
843
+ dialogs: {
844
+ delete: {
845
+ title: 'Delete template',
846
+ message: "This action can't be undone. Are you sure you want to delete {name}?",
847
+ success: '"{name}" has been deleted.',
848
+ },
849
+ publish: {
850
+ title: 'Publish template',
851
+ message: 'Publish "{name}" to make it available to all users?',
852
+ success: '"{name}" has been published.',
853
+ },
854
+ unpublish: {
855
+ title: 'Unpublish template',
856
+ message: 'Unpublish "{name}"? It will no longer be visible to other users.',
857
+ success: '"{name}" has been unpublished.',
858
+ },
859
+ save_as_template: {
860
+ title: 'Save as template',
861
+ message: 'Save this message as a reusable template?',
862
+ success: 'Template saved successfully.',
863
+ },
864
+ promote: {
865
+ title: 'Promote to System Template',
866
+ clone_label: 'Clone as System',
867
+ clone_description:
868
+ 'Create an independent copy as a system template. The original template stays unchanged.',
869
+ convert_label: 'Convert to System',
870
+ convert_description:
871
+ 'This template will become a system template. The original owner will lose ownership. This action cannot be undone.',
872
+ success_clone: '"{name}" cloned as system template.',
873
+ success_convert: '"{name}" promoted to system template.',
874
+ },
875
+ },
876
+ copy_success: 'Message created from template.',
877
+ },
825
878
  public: {
826
879
  select_message: {
827
880
  choose_message: 'Choose a message...',
@@ -43,6 +43,7 @@ export default {
43
43
  save: 'Guardar',
44
44
  remove: 'Eliminar',
45
45
  reset_defaults: 'Restablecer valores predeterminados',
46
+ confirm: 'Confirmar',
46
47
  },
47
48
  internal: 'Interno',
48
49
  imageUpload: {
@@ -830,6 +831,47 @@ Estos mensajes deben ser funcionales, no promocionales.
830
831
  no_preview: 'No hay vista previa disponible',
831
832
  subject: 'Asunto',
832
833
  },
834
+ templates: {
835
+ title: 'Plantillas',
836
+ my_templates: 'Mis plantillas',
837
+ system_templates: 'Plantillas del sistema',
838
+ add_template: 'Nueva plantilla',
839
+ create_template: 'Crear plantilla',
840
+ edit_template: 'Editar plantilla',
841
+ use_template: 'Usar esta plantilla',
842
+ start_from_scratch: 'Empezar desde cero',
843
+ pick_template: 'Elegir una plantilla',
844
+ save_as_template: 'Guardar como plantilla',
845
+ system_template: 'Plantilla de sistema',
846
+ template_name: 'Nombre de plantilla',
847
+ template_name_placeholder: 'Ingrese nombre de plantilla',
848
+ no_templates: 'No hay plantillas disponibles',
849
+ new_message_email: 'Nuevo mensaje de email',
850
+ new_message_whatsapp: 'Nuevo mensaje de WhatsApp',
851
+ dialogs: {
852
+ delete: {
853
+ title: 'Eliminar plantilla',
854
+ message: 'Esta acción no se puede deshacer. ¿Está seguro de que desea eliminar {name}?',
855
+ success: '"{name}" ha sido eliminado.',
856
+ },
857
+ publish: {
858
+ title: 'Publicar plantilla',
859
+ message: '¿Publicar "{name}" para hacerla disponible a todos los usuarios?',
860
+ success: '"{name}" ha sido publicado.',
861
+ },
862
+ unpublish: {
863
+ title: 'Ocultar plantilla',
864
+ message: '¿Ocultar "{name}"? Ya no será visible para otros usuarios.',
865
+ success: '"{name}" ha sido ocultado.',
866
+ },
867
+ save_as_template: {
868
+ title: 'Guardar como plantilla',
869
+ message: '¿Guardar este mensaje como plantilla reutilizable?',
870
+ success: 'Plantilla guardada exitosamente.',
871
+ },
872
+ },
873
+ copy_success: 'Mensaje creado a partir de la plantilla.',
874
+ },
833
875
  public: {
834
876
  select_message: {
835
877
  choose_message: 'Elige un mensaje...',
@@ -43,6 +43,7 @@ export default {
43
43
  save: 'Enregistrer',
44
44
  remove: 'Supprimer',
45
45
  reset_defaults: 'Réinitialiser les valeurs par défaut',
46
+ confirm: 'Confirmer',
46
47
  },
47
48
  internal: 'Interne',
48
49
  imageUpload: {
@@ -834,6 +835,47 @@ Ces messages doivent être fonctionnels, et non promotionnels.
834
835
  no_preview: 'Aucun aperçu disponible',
835
836
  subject: 'Objet',
836
837
  },
838
+ templates: {
839
+ title: 'Modèles',
840
+ my_templates: 'Mes modèles',
841
+ system_templates: 'Modèles système',
842
+ add_template: 'Nouveau modèle',
843
+ create_template: 'Créer un modèle',
844
+ edit_template: 'Modifier le modèle',
845
+ use_template: 'Utiliser ce modèle',
846
+ start_from_scratch: 'Partir de zéro',
847
+ pick_template: 'Choisir un modèle',
848
+ save_as_template: 'Enregistrer comme modèle',
849
+ system_template: 'Modèle système',
850
+ template_name: 'Nom du modèle',
851
+ template_name_placeholder: 'Entrez le nom du modèle',
852
+ no_templates: 'Aucun modèle disponible',
853
+ new_message_email: 'Nouveau message email',
854
+ new_message_whatsapp: 'Nouveau message WhatsApp',
855
+ dialogs: {
856
+ delete: {
857
+ title: 'Supprimer le modèle',
858
+ message: 'Cette action est irréversible. Êtes-vous sûr de vouloir supprimer {name} ?',
859
+ success: '"{name}" a été supprimé.',
860
+ },
861
+ publish: {
862
+ title: 'Publier le modèle',
863
+ message: 'Publier "{name}" pour le rendre accessible à tous les utilisateurs ?',
864
+ success: '"{name}" a été publié.',
865
+ },
866
+ unpublish: {
867
+ title: 'Masquer le modèle',
868
+ message: 'Masquer "{name}" ? Il ne sera plus visible pour les autres utilisateurs.',
869
+ success: '"{name}" a été masqué.',
870
+ },
871
+ save_as_template: {
872
+ title: 'Enregistrer comme modèle',
873
+ message: 'Enregistrer ce message comme modèle réutilisable ?',
874
+ success: 'Modèle enregistré avec succès.',
875
+ },
876
+ },
877
+ copy_success: 'Message créé à partir du modèle.',
878
+ },
837
879
  public: {
838
880
  select_message: {
839
881
  choose_message: 'Choisir un message...',
@@ -43,6 +43,7 @@ export default {
43
43
  save: 'Salva',
44
44
  remove: 'Rimuovi',
45
45
  reset_defaults: 'Ripristina valori predefiniti',
46
+ confirm: 'Conferma',
46
47
  },
47
48
  internal: 'Interno',
48
49
  imageUpload: {
@@ -828,6 +829,47 @@ Questi messaggi devono essere funzionali, non promozionali.
828
829
  no_preview: 'Nessuna anteprima disponibile',
829
830
  subject: 'Oggetto',
830
831
  },
832
+ templates: {
833
+ title: 'Modelli',
834
+ my_templates: 'I miei modelli',
835
+ system_templates: 'Modelli di sistema',
836
+ add_template: 'Nuovo modello',
837
+ create_template: 'Crea modello',
838
+ edit_template: 'Modifica modello',
839
+ use_template: 'Usa questo modello',
840
+ start_from_scratch: 'Inizia da zero',
841
+ pick_template: 'Scegli un modello',
842
+ save_as_template: 'Salva come modello',
843
+ system_template: 'Modello di sistema',
844
+ template_name: 'Nome modello',
845
+ template_name_placeholder: 'Inserisci nome modello',
846
+ no_templates: 'Nessun modello disponibile',
847
+ new_message_email: 'Nuovo messaggio email',
848
+ new_message_whatsapp: 'Nuovo messaggio WhatsApp',
849
+ dialogs: {
850
+ delete: {
851
+ title: 'Elimina modello',
852
+ message: 'Questa azione non può essere annullata. Sei sicuro di voler eliminare {name}?',
853
+ success: '"{name}" è stato eliminato.',
854
+ },
855
+ publish: {
856
+ title: 'Pubblica modello',
857
+ message: 'Pubblicare "{name}" per renderlo disponibile a tutti gli utenti?',
858
+ success: '"{name}" è stato pubblicato.',
859
+ },
860
+ unpublish: {
861
+ title: 'Nascondi modello',
862
+ message: 'Nascondere "{name}"? Non sarà più visibile agli altri utenti.',
863
+ success: '"{name}" è stato nascosto.',
864
+ },
865
+ save_as_template: {
866
+ title: 'Salva come modello',
867
+ message: 'Salvare questo messaggio come modello riutilizzabile?',
868
+ success: 'Modello salvato con successo.',
869
+ },
870
+ },
871
+ copy_success: 'Messaggio creato dal modello.',
872
+ },
831
873
  public: {
832
874
  select_message: {
833
875
  choose_message: 'Scegli un messaggio...',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev.smartpricing/message-composer-layer",
3
- "version": "4.0.1",
3
+ "version": "4.0.2-templates.1",
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.1"
41
+ "@dev.smartpricing/message-composer-utils": "4.0.3-templates.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@nuxt/eslint": "^1.15.2",
File without changes