145 lines
5.7 KiB
JavaScript
145 lines
5.7 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { busService } from '@bus/services/bus_service';
|
|
import { imStatusService } from '@bus/im_status_service';
|
|
import { multiTabService } from '@bus/multi_tab_service';
|
|
import { makeMultiTabToLegacyEnv } from '@bus/services/legacy/make_multi_tab_to_legacy_env';
|
|
import { makeBusServiceToLegacyEnv } from '@bus/services/legacy/make_bus_service_to_legacy_env';
|
|
import { makeFakePresenceService } from '@bus/../tests/helpers/mock_services';
|
|
|
|
import { ChatWindowManagerContainer } from '@mail/components/chat_window_manager_container/chat_window_manager_container';
|
|
import { DialogManagerContainer } from '@mail/components/dialog_manager_container/dialog_manager_container';
|
|
import { DiscussContainer } from '@mail/components/discuss_container/discuss_container';
|
|
import { PopoverManagerContainer } from '@mail/components/popover_manager_container/popover_manager_container';
|
|
import { messagingService } from '@mail/services/messaging_service';
|
|
import { systrayService } from '@mail/services/systray_service';
|
|
import { makeMessagingToLegacyEnv } from '@mail/utils/make_messaging_to_legacy_env';
|
|
|
|
import { registry } from '@web/core/registry';
|
|
import { patchWithCleanup } from "@web/../tests/helpers/utils";
|
|
import { createWebClient } from "@web/../tests/webclient/helpers";
|
|
|
|
const ROUTES_TO_IGNORE = [
|
|
'/web/webclient/load_menus',
|
|
'/web/dataset/call_kw/res.users/load_views',
|
|
'/web/dataset/call_kw/res.users/systray_get_activities'
|
|
];
|
|
const WEBCLIENT_PARAMETER_NAMES = new Set(['legacyParams', 'mockRPC', 'serverData', 'target', 'webClientClass']);
|
|
const SERVICES_PARAMETER_NAMES = new Set([
|
|
'legacyServices', 'loadingBaseDelayDuration', 'messagingBeforeCreationDeferred',
|
|
'messagingBus', 'services',
|
|
]);
|
|
|
|
/**
|
|
* Add required components to the main component registry.
|
|
*/
|
|
function setupMainComponentRegistry() {
|
|
const mainComponentRegistry = registry.category('main_components');
|
|
mainComponentRegistry.add('ChatWindowManagerContainer', { Component: ChatWindowManagerContainer });
|
|
mainComponentRegistry.add('DialogManagerContainer', { Component: DialogManagerContainer });
|
|
registry.category('actions').add('mail.action_discuss', DiscussContainer);
|
|
mainComponentRegistry.add('PopoverManagerContainer', { Component: PopoverManagerContainer });
|
|
}
|
|
|
|
/**
|
|
* Setup both legacy and new service registries.
|
|
*
|
|
* @param {Object} param0
|
|
* @param {Object} [param0.services]
|
|
* @param {number} [param0.loadingBaseDelayDuration=0]
|
|
* @param {Promise} [param0.messagingBeforeCreationDeferred=Promise.resolve()]
|
|
* Deferred that let tests block messaging creation and simulate resolution.
|
|
* Useful for testing components behavior when messaging is not yet created.
|
|
* @param {EventBus} [param0.messagingBus]
|
|
* @returns {LegacyRegistry} The registry containing all the legacy services that will be passed
|
|
* to the webClient as a legacy parameter.
|
|
*/
|
|
function setupMessagingServiceRegistries({
|
|
loadingBaseDelayDuration = 0,
|
|
messagingBeforeCreationDeferred = Promise.resolve(),
|
|
messagingBus,
|
|
services,
|
|
}) {
|
|
const serviceRegistry = registry.category('services');
|
|
|
|
patchWithCleanup(messagingService, {
|
|
async _startModelManager(modelManager, messagingValues) {
|
|
modelManager.isDebug = true;
|
|
const _super = this._super.bind(this);
|
|
await messagingBeforeCreationDeferred;
|
|
return _super(modelManager, messagingValues);
|
|
},
|
|
});
|
|
|
|
const messagingValues = {
|
|
start() {
|
|
return {
|
|
isInQUnitTest: true,
|
|
disableAnimation: true,
|
|
loadingBaseDelayDuration,
|
|
messagingBus,
|
|
userNotificationManager: { canPlayAudio: false },
|
|
};
|
|
}
|
|
};
|
|
|
|
services = {
|
|
bus_service: busService,
|
|
im_status: imStatusService,
|
|
messaging: messagingService,
|
|
messagingValues,
|
|
presence: makeFakePresenceService({
|
|
isOdooFocused: () => true,
|
|
}),
|
|
systrayService,
|
|
multi_tab: multiTabService,
|
|
...services,
|
|
};
|
|
|
|
Object.entries(services).forEach(([serviceName, service]) => {
|
|
serviceRegistry.add(serviceName, service);
|
|
});
|
|
|
|
registry.category('wowlToLegacyServiceMappers').add('bus_service_to_legacy_env', makeBusServiceToLegacyEnv);
|
|
registry.category('wowlToLegacyServiceMappers').add('multi_tab_to_legacy_env', makeMultiTabToLegacyEnv);
|
|
registry.category('wowlToLegacyServiceMappers').add('messaging_service_to_legacy_env', makeMessagingToLegacyEnv);
|
|
}
|
|
|
|
/**
|
|
* Creates a properly configured instance of WebClient, with the messaging service and all it's
|
|
* dependencies initialized.
|
|
*
|
|
* @param {Object} param0
|
|
* @param {Object} [param0.serverData]
|
|
* @param {Object} [param0.services]
|
|
* @param {Object} [param0.loadingBaseDelayDuration]
|
|
* @param {Object} [param0.messagingBeforeCreationDeferred]
|
|
* @param {EventBus} [param0.messagingBus] The event bus to be used by messaging.
|
|
* @returns {WebClient}
|
|
*/
|
|
async function getWebClientReady(param0) {
|
|
setupMainComponentRegistry();
|
|
|
|
const servicesParameters = {};
|
|
const param0Entries = Object.entries(param0);
|
|
for (const [parameterName, value] of param0Entries) {
|
|
if (SERVICES_PARAMETER_NAMES.has(parameterName)) {
|
|
servicesParameters[parameterName] = value;
|
|
}
|
|
}
|
|
setupMessagingServiceRegistries(servicesParameters);
|
|
|
|
const webClientParameters = {};
|
|
for (const [parameterName, value] of param0Entries) {
|
|
if (WEBCLIENT_PARAMETER_NAMES.has(parameterName)) {
|
|
webClientParameters[parameterName] = value;
|
|
}
|
|
}
|
|
return createWebClient(webClientParameters);
|
|
}
|
|
|
|
export {
|
|
getWebClientReady,
|
|
ROUTES_TO_IGNORE,
|
|
};
|