Instagram inbox creation and WhatsApp embedded signup on Chatwoot Cloud now reflect the temporary Meta restriction. Instagram is hidden from onboarding on Cloud, while the regular Instagram inbox creation page shows a disabled action with a status-linked amber warning. WhatsApp embedded signup on Cloud stays visible with its connect action disabled. WhatsApp Call setup always uses the manual WhatsApp form. Existing Instagram conversations and Instagram inbox settings on Cloud also show amber warning banners with the public incident link. Self-hosted installations keep their existing Instagram, WhatsApp, and WhatsApp Call setup behavior because the temporary restriction is based only on the Chatwoot Cloud environment check. --------- Co-authored-by: Muhsin <12408980+muhsin-k@users.noreply.github.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
110 lines
2.4 KiB
Vue
110 lines
2.4 KiB
Vue
<script setup>
|
|
import { computed } from 'vue';
|
|
import ChannelSelector from '../ChannelSelector.vue';
|
|
|
|
const props = defineProps({
|
|
channel: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
enabledFeatures: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
});
|
|
|
|
const emit = defineEmits(['channelItemClick']);
|
|
|
|
const hasFbConfigured = computed(() => {
|
|
return window.chatwootConfig?.fbAppId;
|
|
});
|
|
|
|
const hasInstagramConfigured = computed(() => {
|
|
return window.chatwootConfig?.instagramAppId;
|
|
});
|
|
|
|
const hasTiktokConfigured = computed(() => {
|
|
return window.chatwootConfig?.tiktokAppId;
|
|
});
|
|
|
|
const isActive = computed(() => {
|
|
const { key } = props.channel;
|
|
if (Object.keys(props.enabledFeatures).length === 0) {
|
|
return false;
|
|
}
|
|
if (key === 'website') {
|
|
return props.enabledFeatures.channel_website;
|
|
}
|
|
if (key === 'facebook') {
|
|
return props.enabledFeatures.channel_facebook && hasFbConfigured.value;
|
|
}
|
|
if (key === 'email') {
|
|
return props.enabledFeatures.channel_email;
|
|
}
|
|
|
|
if (key === 'instagram') {
|
|
return (
|
|
props.enabledFeatures.channel_instagram && hasInstagramConfigured.value
|
|
);
|
|
}
|
|
|
|
if (key === 'tiktok') {
|
|
return props.enabledFeatures.channel_tiktok && hasTiktokConfigured.value;
|
|
}
|
|
|
|
if (key === 'voice' || key === 'whatsapp_call') {
|
|
return props.enabledFeatures.channel_voice;
|
|
}
|
|
|
|
return [
|
|
'website',
|
|
'twilio',
|
|
'api',
|
|
'whatsapp',
|
|
'sms',
|
|
'telegram',
|
|
'line',
|
|
'instagram',
|
|
'tiktok',
|
|
'voice',
|
|
].includes(key);
|
|
});
|
|
|
|
const isComingSoon = computed(() => {
|
|
const { key } = props.channel;
|
|
// Show "Coming Soon" only if the channel is marked as coming soon
|
|
// and the corresponding feature flag is not enabled yet.
|
|
return ['voice'].includes(key) && !isActive.value;
|
|
});
|
|
|
|
const isBeta = computed(() => {
|
|
return ['tiktok', 'voice', 'whatsapp_call'].includes(props.channel.key);
|
|
});
|
|
|
|
const hasVoiceBadge = computed(() => {
|
|
return (
|
|
['voice', 'whatsapp_call'].includes(props.channel.key) &&
|
|
!!props.enabledFeatures.channel_voice
|
|
);
|
|
});
|
|
|
|
const onItemClick = () => {
|
|
if (isActive.value) {
|
|
emit('channelItemClick', props.channel.key);
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<ChannelSelector
|
|
:title="channel.title"
|
|
:description="channel.description"
|
|
:icon="channel.icon"
|
|
:is-coming-soon="isComingSoon"
|
|
:is-beta="isBeta"
|
|
:has-voice-badge="hasVoiceBadge"
|
|
:disabled="!isActive"
|
|
@click="onItemClick"
|
|
/>
|
|
</template>
|