chore: make WhatsApp component composition styles
This commit is contained in:
@@ -1,97 +1,71 @@
|
||||
<script>
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import Twilio from './Twilio.vue';
|
||||
import ThreeSixtyDialogWhatsapp from './360DialogWhatsapp.vue';
|
||||
import CloudWhatsapp from './CloudWhatsapp.vue';
|
||||
import WhatsappEmbeddedSignup from './WhatsappEmbeddedSignup.vue';
|
||||
import router from '../../../../index';
|
||||
import whatsappIcon from 'dashboard/assets/images/whatsapp.png';
|
||||
import twilioIcon from 'dashboard/assets/images/twilio.png';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Twilio,
|
||||
ThreeSixtyDialogWhatsapp,
|
||||
CloudWhatsapp,
|
||||
WhatsappEmbeddedSignup,
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
|
||||
const PROVIDER_TYPES = {
|
||||
WHATSAPP: 'whatsapp',
|
||||
TWILIO: 'twilio',
|
||||
WHATSAPP_CLOUD: 'whatsapp_cloud',
|
||||
WHATSAPP_EMBEDDED: 'whatsapp_embedded',
|
||||
THREE_SIXTY_DIALOG: '360dialog',
|
||||
};
|
||||
|
||||
const hasWhatsappAppId = computed(() => {
|
||||
return (
|
||||
window.chatwootConfig?.whatsappAppId &&
|
||||
window.chatwootConfig.whatsappAppId !== 'none'
|
||||
);
|
||||
});
|
||||
|
||||
const selectedProvider = computed(() => route.query.provider);
|
||||
|
||||
const showProviderSelection = computed(() => !selectedProvider.value);
|
||||
|
||||
const showConfiguration = computed(() => Boolean(selectedProvider.value));
|
||||
|
||||
const availableProviders = computed(() => [
|
||||
{
|
||||
value: PROVIDER_TYPES.WHATSAPP,
|
||||
label: t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD'),
|
||||
description: t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD_DESC'),
|
||||
icon: whatsappIcon,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// No default provider selected
|
||||
provider: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
hasWhatsappAppId() {
|
||||
return (
|
||||
window.chatwootConfig?.whatsappAppId &&
|
||||
window.chatwootConfig.whatsappAppId !== 'none'
|
||||
);
|
||||
},
|
||||
availableProviders() {
|
||||
return [
|
||||
{
|
||||
value: 'whatsapp',
|
||||
label: 'WhatsApp',
|
||||
},
|
||||
{
|
||||
value: 'twilio',
|
||||
label: 'Twilio',
|
||||
},
|
||||
];
|
||||
},
|
||||
selectedProvider() {
|
||||
return this.$route.query.provider;
|
||||
},
|
||||
showProviderSelection() {
|
||||
return !this.selectedProvider;
|
||||
},
|
||||
showConfiguration() {
|
||||
return !!this.selectedProvider;
|
||||
},
|
||||
configurationTitle() {
|
||||
const providerTitles = {
|
||||
whatsapp: this.hasWhatsappAppId
|
||||
? this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_EMBEDDED')
|
||||
: this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD'),
|
||||
whatsapp_cloud: this.$t(
|
||||
'INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD'
|
||||
),
|
||||
whatsapp_embedded: this.$t(
|
||||
'INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_EMBEDDED'
|
||||
),
|
||||
twilio: this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO'),
|
||||
};
|
||||
return `${providerTitles[this.selectedProvider]} ${this.$t(
|
||||
'INBOX_MGMT.ADD.WHATSAPP.TITLE'
|
||||
)}`;
|
||||
},
|
||||
configurationDescription() {
|
||||
const descriptions = {
|
||||
whatsapp: this.hasWhatsappAppId
|
||||
? "Quick setup with Meta's embedded signup."
|
||||
: 'Configure WhatsApp integration through Meta.',
|
||||
whatsapp_cloud: 'Configure WhatsApp integration through Meta.',
|
||||
whatsapp_embedded: "Quick setup with Meta's embedded signup.",
|
||||
twilio: 'Configure WhatsApp integration through your Twilio account.',
|
||||
};
|
||||
return descriptions[this.selectedProvider] || '';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
selectProvider(providerValue) {
|
||||
// Directly navigate to configuration when provider is clicked
|
||||
router.push({
|
||||
name: this.$route.name,
|
||||
params: this.$route.params,
|
||||
query: { provider: providerValue },
|
||||
});
|
||||
},
|
||||
goBackToProviderSelection() {
|
||||
router.push({
|
||||
name: this.$route.name,
|
||||
params: this.$route.params,
|
||||
query: {},
|
||||
});
|
||||
},
|
||||
{
|
||||
value: PROVIDER_TYPES.TWILIO,
|
||||
label: t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO'),
|
||||
description: t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO_DESC'),
|
||||
icon: twilioIcon,
|
||||
},
|
||||
]);
|
||||
|
||||
const selectProvider = providerValue => {
|
||||
router.push({
|
||||
name: route.name,
|
||||
params: route.params,
|
||||
query: { provider: providerValue },
|
||||
});
|
||||
};
|
||||
|
||||
const shouldShowEmbeddedSignup = provider => {
|
||||
return (
|
||||
(provider === PROVIDER_TYPES.WHATSAPP && hasWhatsappAppId.value) ||
|
||||
provider === PROVIDER_TYPES.WHATSAPP_EMBEDDED
|
||||
);
|
||||
};
|
||||
|
||||
const shouldShowCloudWhatsapp = provider => {
|
||||
return provider === PROVIDER_TYPES.WHATSAPP && !hasWhatsappAppId.value;
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -101,7 +75,6 @@ export default {
|
||||
>
|
||||
<!-- Provider Selection View -->
|
||||
<div v-if="showProviderSelection">
|
||||
<!-- Title and Description -->
|
||||
<div class="mb-10 text-left">
|
||||
<h1 class="mb-2 text-lg font-medium text-slate-12">
|
||||
{{ $t('INBOX_MGMT.ADD.WHATSAPP.SELECT_PROVIDER.TITLE') }}
|
||||
@@ -111,19 +84,20 @@ export default {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Provider Cards -->
|
||||
<!-- Dynamic Provider Cards -->
|
||||
<div class="flex justify-start gap-6">
|
||||
<!-- WhatsApp Cloud Card -->
|
||||
<div
|
||||
v-for="provider in availableProviders"
|
||||
:key="provider.value"
|
||||
class="gap-6 px-5 py-6 transition-all duration-200 border cursor-pointer w-96 bg-n-solid-2 border-n-weak rounded-2xl hover:border-woot-500 hover:bg-n-solid-3"
|
||||
@click="selectProvider('whatsapp')"
|
||||
@click="selectProvider(provider.value)"
|
||||
>
|
||||
<!-- WhatsApp Icon -->
|
||||
<!-- Provider Icon -->
|
||||
<div class="flex justify-start mb-5">
|
||||
<div class="flex items-center justify-center w-12 h-12 rounded-lg">
|
||||
<img
|
||||
src="dashboard/assets/images/whatsapp.png"
|
||||
:alt="$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD')"
|
||||
:src="provider.icon"
|
||||
:alt="provider.label"
|
||||
class="object-contain w-10 h-10"
|
||||
/>
|
||||
</div>
|
||||
@@ -132,36 +106,10 @@ export default {
|
||||
<!-- Card Content -->
|
||||
<div class="text-left">
|
||||
<h3 class="mb-1.5 text-sm font-medium text-slate-12">
|
||||
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD') }}
|
||||
{{ provider.label }}
|
||||
</h3>
|
||||
<p class="text-sm text-slate-11">
|
||||
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD_DESC') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="gap-6 px-5 py-6 transition-all duration-200 border cursor-pointer w-96 bg-n-solid-2 border-n-weak rounded-2xl hover:border-woot-500 hover:bg-n-solid-3"
|
||||
@click="selectProvider('twilio')"
|
||||
>
|
||||
<!-- WhatsApp Icon -->
|
||||
<div class="flex justify-start mb-5">
|
||||
<div class="flex items-center justify-center w-12 h-12 rounded-lg">
|
||||
<img
|
||||
src="dashboard/assets/images/twilio.png"
|
||||
:alt="$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO')"
|
||||
class="object-contain w-10 h-10"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card Content -->
|
||||
<div class="text-left">
|
||||
<h3 class="mb-1.5 text-sm font-medium text-slate-12">
|
||||
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO') }}
|
||||
</h3>
|
||||
<p class="text-sm text-slate-11">
|
||||
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO_DESC') }}
|
||||
{{ provider.description }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -170,21 +118,18 @@ export default {
|
||||
|
||||
<!-- Configuration View -->
|
||||
<div v-else-if="showConfiguration">
|
||||
<!-- Configuration Form Container -->
|
||||
<div class="p-8 border bg-n-solid-2 border-n-weak rounded-2xl">
|
||||
<!-- Provider Configuration Forms -->
|
||||
<WhatsappEmbeddedSignup
|
||||
v-if="selectedProvider === 'whatsapp' && hasWhatsappAppId"
|
||||
v-if="shouldShowEmbeddedSignup(selectedProvider)"
|
||||
/>
|
||||
<CloudWhatsapp
|
||||
v-else-if="selectedProvider === 'whatsapp' && !hasWhatsappAppId"
|
||||
<CloudWhatsapp v-else-if="shouldShowCloudWhatsapp(selectedProvider)" />
|
||||
<Twilio
|
||||
v-else-if="selectedProvider === PROVIDER_TYPES.TWILIO"
|
||||
type="whatsapp"
|
||||
/>
|
||||
<Twilio v-else-if="selectedProvider === 'twilio'" type="whatsapp" />
|
||||
<ThreeSixtyDialogWhatsapp
|
||||
v-else-if="selectedProvider === '360dialog'"
|
||||
/>
|
||||
<WhatsappEmbeddedSignup
|
||||
v-else-if="selectedProvider === 'whatsapp_embedded'"
|
||||
v-else-if="selectedProvider === PROVIDER_TYPES.THREE_SIXTY_DIALOG"
|
||||
/>
|
||||
<CloudWhatsapp v-else />
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user