[IMP] web: debugManager: re-implement "Open view"
This commit is contained in:
committed by
Aaron Bohy
parent
5437fb98ca
commit
8a530b153b
@@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user