diff --git a/app/javascript/dashboard/components-next/NewConversation/components/WhatsappTemplateParser.vue b/app/javascript/dashboard/components-next/NewConversation/components/WhatsappTemplateParser.vue
index 5b3cee85a..ee32e57ff 100644
--- a/app/javascript/dashboard/components-next/NewConversation/components/WhatsappTemplateParser.vue
+++ b/app/javascript/dashboard/components-next/NewConversation/components/WhatsappTemplateParser.vue
@@ -17,21 +17,16 @@ const emit = defineEmits(['sendMessage', 'back']);
const processedParams = ref({});
+const templateName = computed(() => {
+ return props.template?.name || '';
+});
+
const templateString = computed(() => {
return props.template?.components?.find(
component => component.type === 'BODY'
).text;
});
-const allKeysRequired = value => {
- const keys = Object.keys(value);
- return keys.every(key => value[key]);
-};
-
-const variables = computed(() => {
- return templateString.value.match(/{{([^}]+)}}/g);
-});
-
const processVariable = str => {
return str.replace(/{{|}}/g, '');
};
@@ -43,15 +38,35 @@ const processedString = computed(() => {
});
});
-const v$ = useVuelidate(
- {
- processedParams: {
- requiredIfKeysPresent: requiredIf(variables),
- allKeysRequired,
- },
- },
- { processedParams }
-);
+const processedStringWithVariableHighlight = computed(() => {
+ const variables = templateString.value.match(/{{([^}]+)}}/g) || [];
+
+ return variables.reduce((result, variable) => {
+ const variableKey = processVariable(variable);
+ const value = processedParams.value[variableKey] || variable;
+ return result.replace(
+ variable,
+ `
${value}`
+ );
+ }, templateString.value);
+});
+
+const rules = computed(() => {
+ const paramRules = {};
+ Object.keys(processedParams.value).forEach(key => {
+ paramRules[key] = { required: requiredIf(true) };
+ });
+ return {
+ processedParams: paramRules,
+ };
+});
+
+const v$ = useVuelidate(rules, { processedParams });
+
+const getFieldErrorType = key => {
+ if (!v$.value.processedParams[key]?.$error) return 'info';
+ return 'error';
+};
const generateVariables = () => {
const matchedVariables = templateString.value.match(/{{([^}]+)}}/g);
@@ -64,9 +79,9 @@ const generateVariables = () => {
}, {});
};
-const sendMessage = () => {
- v$.value.$touch();
- if (v$.value.$invalid) return;
+const sendMessage = async () => {
+ const isValid = await v$.value.$validate();
+ if (!isValid) return;
const payload = {
message: processedString.value,
@@ -88,15 +103,18 @@ onMounted(() => {
- {{ `WhatsApp template: ${template.name}` }}
+ {{ `WhatsApp template: ${templateName}` }}
-
{{ processedString }}
+
{{ 'Variables' }}
@@ -105,16 +123,26 @@ onMounted(() => {
- {{ key }}
-
+
+ {{ key }}
+
+