91 lines
3.0 KiB
JavaScript
91 lines
3.0 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { getPyEnv } from "@bus/../tests/helpers/mock_python_environment";
|
||
|
|
||
|
import { LivechatButton } from "@im_livechat/embed/common/livechat_button";
|
||
|
|
||
|
import { ChatWindowContainer } from "@mail/core/common/chat_window_container";
|
||
|
import { setupManager } from "@mail/../tests/helpers/webclient_setup";
|
||
|
|
||
|
import { App, onMounted } from "@odoo/owl";
|
||
|
|
||
|
import { registry } from "@web/core/registry";
|
||
|
import { patch } from "@web/core/utils/patch";
|
||
|
import { session } from "@web/session";
|
||
|
import { registerCleanup } from "@web/../tests/helpers/cleanup";
|
||
|
import { patchWithCleanup, makeDeferred } from "@web/../tests/helpers/utils";
|
||
|
import { createWebClient } from "@web/../tests/webclient/helpers";
|
||
|
|
||
|
// =============================================================================
|
||
|
// SETUP
|
||
|
// =============================================================================
|
||
|
|
||
|
/**
|
||
|
* Setup the server side of the livechat app.
|
||
|
*
|
||
|
* @returns {Promise<number>} the id of the livechat channel.
|
||
|
*/
|
||
|
export async function loadDefaultConfig() {
|
||
|
const pyEnv = await getPyEnv();
|
||
|
const livechatChannelId = pyEnv["im_livechat.channel"].create({
|
||
|
user_ids: [pyEnv.adminUserId],
|
||
|
});
|
||
|
patchWithCleanup(session, {
|
||
|
livechatData: {
|
||
|
isAvailable: true,
|
||
|
serverUrl: window.origin,
|
||
|
options: {
|
||
|
header_background_color: "#875A7B",
|
||
|
button_background_color: "#875A7B",
|
||
|
title_color: "#FFFFFF",
|
||
|
button_text_color: "#FFFFFF",
|
||
|
button_text: "Have a Question? Chat with us.",
|
||
|
input_placeholder: false,
|
||
|
default_message: "Hello, how may I help you?",
|
||
|
channel_name: "YourWebsite.com",
|
||
|
channel_id: livechatChannelId,
|
||
|
default_username: "Visitor",
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
return livechatChannelId;
|
||
|
}
|
||
|
|
||
|
patch(App.prototype, {
|
||
|
mount() {
|
||
|
registerCleanup(() => this.destroy());
|
||
|
return super.mount(...arguments);
|
||
|
},
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* Mount the livechat button into the webclient.
|
||
|
*
|
||
|
* @param {Object} param0
|
||
|
* @returns {Promise<any>}
|
||
|
*/
|
||
|
export async function start({ mockRPC } = {}) {
|
||
|
setupManager.setupServiceRegistries();
|
||
|
const mainComponentRegistry = registry.category("main_components");
|
||
|
mainComponentRegistry.add("LivechatButton", { Component: LivechatButton });
|
||
|
mainComponentRegistry.add("ChatWindowContainer", { Component: ChatWindowContainer });
|
||
|
const livechatButtonAvailableDeferred = makeDeferred();
|
||
|
patchWithCleanup(LivechatButton.prototype, {
|
||
|
setup() {
|
||
|
super.setup(...arguments);
|
||
|
onMounted(() => livechatButtonAvailableDeferred.resolve());
|
||
|
},
|
||
|
});
|
||
|
const pyEnv = await getPyEnv();
|
||
|
pyEnv.logout();
|
||
|
const { env } = await createWebClient({
|
||
|
serverData: {
|
||
|
models: pyEnv.getData(),
|
||
|
views: pyEnv.getViews(),
|
||
|
},
|
||
|
mockRPC,
|
||
|
});
|
||
|
await livechatButtonAvailableDeferred;
|
||
|
return env;
|
||
|
}
|