[REF] web: Pivot with view layout

This commit rewrites the pivot view template to make use of the view
layout component.

X-original-commit: ebb046c5b9b6b629fd6731a419c5b7daf57a9f7d
Part-of: odoo/odoo#77463
This commit is contained in:
Julien Mougenot
2021-09-30 10:38:30 +00:00
parent 163be99e53
commit c440c2eb95
3 changed files with 46 additions and 42 deletions
@@ -4,11 +4,10 @@ import { _lt } from "@web/core/l10n/translation";
import { download } from "@web/core/network/download";
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { ControlPanel } from "@web/search/control_panel/control_panel";
import { SearchPanel } from "@web/search/search_panel/search_panel";
import { useModel } from "@web/views/helpers/model";
import { standardViewProps } from "@web/views/helpers/standard_view_props";
import { useSetupView } from "@web/views/helpers/view_hook";
import { Layout } from "@web/views/layout";
import { PivotArchParser } from "@web/views/pivot/pivot_arch_parser";
import { PivotModel } from "@web/views/pivot/pivot_model";
import { PivotRenderer } from "@web/views/pivot/pivot_renderer";
@@ -130,8 +129,9 @@ export class PivotView extends Component {
});
// retrieve form and list view ids from the action
const { views = [] } = this.env.config;
this.views = ["list", "form"].map((viewType) => {
const view = this.props.info.views.find((view) => view[1] === viewType);
const view = views.find((view) => view[1] === viewType);
return [view ? view[0] : false, viewType];
});
@@ -157,7 +157,7 @@ export class PivotView extends Component {
PivotView.template = "web.PivotView";
PivotView.buttonTemplate = "web.PivotView.Buttons";
PivotView.components = { ControlPanel, SearchPanel, Renderer: PivotRenderer };
PivotView.components = { Renderer: PivotRenderer, Layout };
PivotView.props = {
...standardViewProps,
@@ -17,30 +17,26 @@
</t>
<t t-name="web.PivotView" owl="1">
<div class="o_pivot_view" t-att-class="{o_view_sample_data: model.useSampleModel }">
<ControlPanel t-if="env.searchModel.display.controlPanel" t-props="props.info">
<t t-set-slot="control-panel-bottom-left">
<t t-call="{{ constructor.buttonTemplate }}"/>
<Layout viewType="'pivot'" useSampleModel="model.useSampleModel">
<t t-set-slot="control-panel-bottom-left">
<t t-call="{{ constructor.buttonTemplate }}"/>
</t>
<t t-set="displayNoContent" t-value="
props.info.noContentHelp !== false and (
!(model.hasData() and model.metaData.activeMeasures.length) or
model.useSampleModel
)"
/>
<t t-if="displayNoContent">
<t t-if="props.info.noContentHelp" t-call="web.ActionHelper">
<t t-set="noContentHelp" t-value="props.info.noContentHelp"/>
</t>
</ControlPanel>
<div class="o_content">
<SearchPanel t-if="env.searchModel.display.searchPanel" />
<t t-set="displayNoContent" t-value="
props.info.noContentHelp !== false and (
!(model.hasData() and model.metaData.activeMeasures.length) or
model.useSampleModel
)" />
<t t-if="displayNoContent">
<t t-if="props.info.noContentHelp" t-call="web.ActionHelper">
<t t-set="noContentHelp" t-value="props.info.noContentHelp"/>
</t>
<t t-else="" t-call="web.NoContentHelper"/>
</t>
<t t-if="model.hasData() and model.metaData.activeMeasures.length">
<Renderer model="model" onCellClicked="cell => onOpenView(cell)"/>
</t>
</div>
</div>
<t t-else="" t-call="web.NoContentHelper"/>
</t>
<t t-if="model.hasData() and model.metaData.activeMeasures.length">
<Renderer model="model" onCellClicked="cell => onOpenView(cell)"/>
</t>
</Layout>
</t>
</templates>
@@ -6,19 +6,21 @@ import { session } from "@web/session";
import { makeFakeLocalizationService, makeFakeUserService } from "../helpers/mock_services";
import {
click,
nextTick,
legacyExtraNextTick,
makeDeferred,
mockDownload,
nextTick,
patchDate,
patchWithCleanup,
triggerEvent,
triggerEvents,
} from "../helpers/utils";
import { makeView } from "./helpers";
import {
applyGroup,
editFavoriteName,
removeFacet,
saveFavorite,
selectGroup,
setupControlPanelFavoriteMenuRegistry,
setupControlPanelServiceRegistry,
toggleAddCustomGroup,
@@ -26,15 +28,13 @@ import {
toggleFavoriteMenu,
toggleFilterMenu,
toggleGroupByMenu,
toggleMenu,
toggleMenuItem,
toggleMenuItemOption,
toggleSaveFavorite,
saveFavorite,
selectGroup,
removeFacet,
toggleMenu,
} from "../search/helpers";
import { createWebClient, doAction } from "../webclient/helpers";
import { makeView } from "./helpers";
const serviceRegistry = registry.category("services");
@@ -438,12 +438,14 @@ QUnit.module("Views", (hooks) => {
<field name="foo" type="measure"/>
</pivot>`,
context: { someKey: true, search_default_test: 3 },
views: [
[2, "form"],
[5, "kanban"],
[false, "list"],
[false, "pivot"],
],
config: {
views: [
[2, "form"],
[5, "kanban"],
[false, "list"],
[false, "pivot"],
],
},
});
assert.hasClass(pivot.el.querySelector("table"), "o_enable_linking");
@@ -4689,7 +4691,9 @@ QUnit.module("Views", (hooks) => {
serverData,
context: { search_default_small_than_0: true },
noContentHelp: '<p class="abc">click to add a foo</p>',
views: [[false, "search"]],
config: {
views: [[false, "search"]],
},
});
assert.containsOnce(pivot, ".o_view_nocontent .abc");
@@ -4720,7 +4724,9 @@ QUnit.module("Views", (hooks) => {
serverData,
context: { search_default_small_than_0: true },
noContentHelp: '<p class="abc">click to add a foo</p>',
views: [[false, "search"]],
config: {
views: [[false, "search"]],
},
});
assert.hasClass(pivot.el, "o_view_sample_data");
@@ -4753,7 +4759,9 @@ QUnit.module("Views", (hooks) => {
resModel: "partner",
serverData,
noContentHelp: '<p class="abc">click to add a foo</p>',
views: [[false, "search"]],
config: {
views: [[false, "search"]],
},
});
assert.doesNotHaveClass(pivot.el, "o_view_sample_data");