From b60db0df9be20c31792e343a22dc7be798199a61 Mon Sep 17 00:00:00 2001 From: xO-Tx Date: Fri, 16 Sep 2022 18:11:53 +0000 Subject: [PATCH] [IMP] website, *: adapt code to work on "pages" kanban views *: website_blog The goal of this commit is to update JS code to have the same behaviour from the 'website content' list view (trigger the 'new content' dialogs on "CREATE", add a website selector to filter content) on kanban views too. The blog post kanban view has been adapted to use this. Other "website content" related records will receive a kanban view in a further update. This is is also important so that the mobile UX is nicer. task-2889981 X-original-commit: ed09db19c372da8d8be541f365117d1ce8e965ba Part-of: odoo/odoo#101215 --- .../src/components/views/page_kanban.js | 31 +++++++ .../src/components/views/page_kanban.xml | 24 ++++++ .../static/src/components/views/page_list.js | 65 +-------------- .../static/src/components/views/page_list.xml | 26 +++--- .../src/components/views/page_views_mixin.js | 80 +++++++++++++++++++ .../views/website_pages_views.xml | 22 +++-- 6 files changed, 170 insertions(+), 78 deletions(-) create mode 100644 addons/website/static/src/components/views/page_kanban.js create mode 100644 addons/website/static/src/components/views/page_kanban.xml create mode 100644 addons/website/static/src/components/views/page_views_mixin.js diff --git a/addons/website/static/src/components/views/page_kanban.js b/addons/website/static/src/components/views/page_kanban.js new file mode 100644 index 00000000000..b00d9363647 --- /dev/null +++ b/addons/website/static/src/components/views/page_kanban.js @@ -0,0 +1,31 @@ +/** @odoo-module **/ + +import {PageControllerMixin, PageRendererMixin} from "./page_views_mixin"; +import {registry} from '@web/core/registry'; +import {kanbanView} from "@web/views/kanban/kanban_view"; + + +export class PageKanbanController extends PageControllerMixin(kanbanView.Controller) { + /** + * @override + */ + async createRecord() { + return this.createWebsiteContent(); + } +} +PageKanbanController.template = 'website.PageKanbanView'; + +export class PageKanbanRenderer extends PageRendererMixin(kanbanView.Renderer) {} +PageKanbanRenderer.props = [ + ...kanbanView.Renderer.props, + "activeWebsite", +]; +PageKanbanRenderer.template = 'website.PageKanbanRenderer'; + +export const PageKanbanView = { + ...kanbanView, + Renderer: PageKanbanRenderer, + Controller: PageKanbanController, +}; + +registry.category("views").add("website_pages_kanban", PageKanbanView); diff --git a/addons/website/static/src/components/views/page_kanban.xml b/addons/website/static/src/components/views/page_kanban.xml new file mode 100644 index 00000000000..2ccc2dca2b5 --- /dev/null +++ b/addons/website/static/src/components/views/page_kanban.xml @@ -0,0 +1,24 @@ + + + + + + recordFilter(record, props.list.records) + + + recordFilter(groupOrRecord.record, props.list.records) + + + + + + state.activeWebsite + + + + + + + + + diff --git a/addons/website/static/src/components/views/page_list.js b/addons/website/static/src/components/views/page_list.js index 043bdbd0a9c..22e2a078eaf 100644 --- a/addons/website/static/src/components/views/page_list.js +++ b/addons/website/static/src/components/views/page_list.js @@ -1,78 +1,21 @@ /** @odoo-module **/ -import {AddPageDialog} from "../dialog/dialog"; +import {PageControllerMixin, PageRendererMixin} from "./page_views_mixin"; import {registry} from '@web/core/registry'; import {listView} from '@web/views/list/list_view'; -import {useService} from "@web/core/utils/hooks"; - -const {onWillStart, useState} = owl; -export class PageListController extends listView.Controller { - /** - * @override - */ - setup() { - super.setup(); - this.website = useService('website'); - - this.websiteSelection = [{id: 0, name: this.env._t("All Websites")}]; - - this.state = useState({ - activeWebsite: this.websiteSelection[0], - }); - - onWillStart(async () => { - await this.website.fetchWebsites(); - this.websiteSelection.push(...this.website.websites); - }); - } - +export class PageListController extends PageControllerMixin(listView.Controller) { /** * @override */ onClickCreate() { - if (this.props.resModel === 'website.page') { - return this.dialogService.add(AddPageDialog, {selectWebsite: true}); - } - const action = this.props.context.create_action; - if (action) { - if (/^\//.test(action)) { - window.location.replace(action); - return; - } - this.actionService.doAction(action, { - onClose: (data) => { - if (data) { - this.website.goToWebsite({path: data.path}); - } - }, - }); - } - } - - onSelectWebsite(website) { - this.state.activeWebsite = website; + return this.createWebsiteContent(); } } PageListController.template = `website.PageListView`; -export class PageListRenderer extends listView.Renderer { - /** - * The goal here is to tweak the renderer to display records following some - * rules: - * - All websites (props.activeWebsite.id === 0): - * -> Show all generic/specific records. - * - A website is selected: - * -> Display website-specific records & generic ones (only those without - * specific clones). - */ - recordFilter(record, records) { - return !this.props.activeWebsite.id - || this.props.activeWebsite.id === record.data.website_id[0] - || !record.data.website_id[0] && records.filter(rec => rec.data.website_url === record.data.website_url).length === 1; - } -} +export class PageListRenderer extends PageRendererMixin(listView.Renderer) {} PageListRenderer.props = [ ...listView.Renderer.props, "activeWebsite", diff --git a/addons/website/static/src/components/views/page_list.xml b/addons/website/static/src/components/views/page_list.xml index dbb7c148dc4..89d5a4d655b 100644 --- a/addons/website/static/src/components/views/page_list.xml +++ b/addons/website/static/src/components/views/page_list.xml @@ -18,17 +18,7 @@ -