Files
chatwoot/app/javascript/widget/composables/useConfig.js
T

82 lines
2.6 KiB
JavaScript

import { computed } from 'vue';
/**
* Composable for handling config-related computations.
* @returns {Object} An object containing computed properties for various configuration settings.
*/
export function useConfig() {
/**
* Computed property to get the channel config.
* @returns {Object} The channel configuration object.
*/
const channelConfig = computed(() => window.chatwootWebChannel);
const createFeatureChecker = feature =>
computed(() => channelConfig.value.enabledFeatures.includes(feature));
// Use the helper function for feature checks
const useInboxAvatarForBot = createFeatureChecker('use_inbox_avatar_for_bot');
const hasEmojiPickerEnabled = createFeatureChecker('emoji_picker');
const hasAttachmentsEnabled = createFeatureChecker('attachments');
const hasEndConversationEnabled = createFeatureChecker('end_conversation');
/**
* Computed property to check if the agent bot is connected.
* @returns {Boolean} True if the agent bot is connected, false otherwise.
*/
const hasAConnectedAgentBot = computed(
() => !!channelConfig.value.hasAConnectedAgentBot
);
/**
* Computed property to get the inbox avatar URL.
* @returns {String} The inbox avatar URL.
*/
const inboxAvatarUrl = computed(() => channelConfig.value.avatarUrl);
/**
* Computed property to check if the pre-chat form is enabled.
* @returns {Boolean} True if the pre-chat form is enabled, false otherwise.
*/
const preChatFormEnabled = computed(
() => channelConfig.value.preChatFormEnabled
);
/**
* Computed property to get the pre-chat form options.
* @returns {Object} An object containing pre-chat message and fields.
*/
const preChatFormOptions = computed(() => {
const options = channelConfig.value.preChatFormOptions || {};
const preChatMessage = options.pre_chat_message || '';
const preChatFields = options.pre_chat_fields || [];
return {
preChatMessage,
preChatFields,
};
});
/**
* Computed property to determine if the pre-chat form should be shown.
* @returns {Boolean} True if the pre-chat form should be shown, false otherwise.
*/
const shouldShowPreChatForm = computed(() => {
if (!preChatFormEnabled.value) return false;
const { preChatFields } = preChatFormOptions.value;
return preChatFields.some(field => field.enabled);
});
return {
useInboxAvatarForBot,
hasAConnectedAgentBot,
inboxAvatarUrl,
channelConfig,
hasEmojiPickerEnabled,
hasAttachmentsEnabled,
hasEndConversationEnabled,
preChatFormEnabled,
preChatFormOptions,
shouldShowPreChatForm,
};
}