[IMP] web: debugManager: re-implement "Open view"

This commit is contained in:
Lucas Perais (lpe)
2021-06-18 21:31:31 +02:00
committed by Aaron Bohy
parent 5437fb98ca
commit 8a530b153b
2 changed files with 93 additions and 7 deletions
@@ -4,6 +4,10 @@ import { browser } from "../browser/browser";
import { routeToUrl } from "../browser/router_service";
import { registry } from "../registry";
// @legacy
import dialogs from "web.view_dialogs";
import { ComponentAdapter } from "web.OwlCompatibility";
// Backend Debug Manager Items
function runJSTestsItem({ env }) {
const runTestsURL = browser.location.origin + "/web/tests?mod=*";
@@ -31,15 +35,41 @@ function runJSTestsMobileItem({ env }) {
};
}
function openViewItem({ env }) {
export function openViewItem({ env }) {
async function onSelected(records) {
const views = await env.services.orm.searchRead(
"ir.ui.view",
[["id", "=", records[0].id]],
["name", "model", "type"],
{ limit: 1 }
);
const view = views[0];
view.type = view.type === "tree" ? "list" : view.type; // ignore tree view
env.services.action.doAction({
type: "ir.actions.act_window",
name: view.name,
res_model: view.model,
views: [[view.id, view.type]],
});
}
return {
type: "item",
description: env._t("Open View"),
callback: () => {
console.log("Open View");
// select_view
// disable_multiple_selection don't work
// Need to add SelectCreateDialog and SelectCreateListController
const adapterParent = new ComponentAdapter(null, { Component: owl.Component });
const selectCreateDialog = new dialogs.SelectCreateDialog(adapterParent, {
res_model: "ir.ui.view",
title: env._t("Select a view"),
disable_multiple_selection: true,
domain: [
["type", "!=", "qweb"],
["type", "!=", "search"],
],
on_selected: onSelected,
});
selectCreateDialog.open();
},
sequence: 40,
};
@@ -10,9 +10,11 @@ import { uiService } from "@web/core/ui_service";
import { ActionDialog } from "@web/webclient/actions/action_dialog";
import { hotkeyService } from "@web/webclient/hotkeys/hotkey_service";
import { registerCleanup } from "../../helpers/cleanup";
import { makeTestEnv } from "../../helpers/mock_env";
import { makeTestEnv, prepareRegistriesWithCleanup } from "../../helpers/mock_env";
import { makeFakeLocalizationService } from "../../helpers/mock_services";
import { click, getFixture, patchWithCleanup } from "../../helpers/utils";
import { click, getFixture, legacyExtraNextTick, patchWithCleanup } from "../../helpers/utils";
import { createWebClient, getActionManagerServerData } from "../../webclient/helpers";
import { openViewItem } from "@web/core/debug/debug_menu_items";
const { Component, hooks, mount, tags } = owl;
const { useSubEnv } = hooks;
@@ -242,4 +244,58 @@ QUnit.module("DebugMenu", (hooks) => {
await click(item);
assert.verifySteps(["ir.attachment/search", "ir.attachment/unlink", "reloadPage"]);
});
QUnit.test("can open a view", async (assert) => {
assert.expect(3);
const mockRPC = async (route, args) => {
if (args.method === "check_access_rights") {
return Promise.resolve(true);
}
};
prepareRegistriesWithCleanup();
patchWithCleanup(odoo, {
debug: true,
});
registry.category("debug").add("openViewItem", openViewItem);
registry.category("services").add("debug", debugService);
const serverData = getActionManagerServerData();
Object.assign(serverData.models, {
"ir.ui.view": {
fields: {
model: { type: "char" },
name: { type: "char" },
type: { type: "char" },
},
records: [
{
id: 1,
name: "formView",
model: "partner",
type: "form",
},
],
},
});
Object.assign(serverData.views, {
"ir.ui.view,false,list": `<list><field name="name"/><field name="type"/></list>`,
"ir.ui.view,false,search": `<search/>`,
"partner,1,form": `<form><div class="some_view"/></form>`,
});
const webClient = await createWebClient({ serverData, mockRPC });
await click(webClient.el.querySelector(".o_debug_manager button"));
await click(webClient.el.querySelector(".o_debug_manager .o_dropdown_item"));
await legacyExtraNextTick();
assert.containsOnce(webClient, ".modal .o_list_view");
await click(webClient.el.querySelector(".modal .o_list_view .o_data_row"));
await legacyExtraNextTick();
assert.containsNone(webClient, ".modal");
assert.containsOnce(webClient, ".some_view");
});
});