diff --git a/addons/website/static/src/components/dialog/dialog.js b/addons/website/static/src/components/dialog/dialog.js index 607457ea594..c01ca0070b9 100644 --- a/addons/website/static/src/components/dialog/dialog.js +++ b/addons/website/static/src/components/dialog/dialog.js @@ -4,7 +4,7 @@ import { useAutofocus, useService } from '@web/core/utils/hooks'; import { Dialog } from '@web/core/dialog/dialog'; import { Switch } from '@website/components/switch/switch'; import {unslugHtmlDataObject} from '../../services/website_service'; -import { _t } from 'web.core'; +import {csrf_token, _t} from 'web.core'; const { xml, useState, Component, onWillStart } = owl; @@ -84,6 +84,7 @@ export class AddPageDialog extends Component { this.switchLabel = this.env._t("Add to menu"); this.website = useService('website'); this.orm = useService('orm'); + this.http = useService('http'); this.state = useState({ addMenu: true, @@ -105,17 +106,42 @@ export class AddPageDialog extends Component { } async addPage() { - await this.props.addPage(this.state); + const params = {'add_menu': this.state.addMenu || '', csrf_token}; + const url = `/website/add/${encodeURIComponent(this.state.name)}`; + const websiteId = parseInt(this.state.websiteId); + if (this.props.selectWebsite) { + params['website_id'] = websiteId; + } + const data = await this.http.post(url, params); + if (data.view_id) { + this.action.doAction({ + 'res_model': 'ir.ui.view', + 'res_id': data.view_id, + 'views': [[false, 'form']], + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + }); + } else { + this.website.goToWebsite({path: data.url, edition: true, ...(this.props.selectWebsite && {websiteId})}); + } + this.props.onAddPage(this.state); } } AddPageDialog.props = { close: Function, - addPage: Function, + onAddPage: { + type: Function, + optional: true, + }, selectWebsite: { type: Boolean, optional: true, }, }; +AddPageDialog.defaultProps = { + onAddPage: NO_OP, + selectWebsite: false, +}; AddPageDialog.components = { Switch, WebsiteDialog, diff --git a/addons/website/static/src/components/views/page_list.js b/addons/website/static/src/components/views/page_list.js index c91afa1447f..043bdbd0a9c 100644 --- a/addons/website/static/src/components/views/page_list.js +++ b/addons/website/static/src/components/views/page_list.js @@ -4,7 +4,6 @@ import {AddPageDialog} from "../dialog/dialog"; import {registry} from '@web/core/registry'; import {listView} from '@web/views/list/list_view'; import {useService} from "@web/core/utils/hooks"; -import { csrf_token } from 'web.core'; const {onWillStart, useState} = owl; @@ -16,7 +15,6 @@ export class PageListController extends listView.Controller { setup() { super.setup(); this.website = useService('website'); - this.http = useService('http'); this.websiteSelection = [{id: 0, name: this.env._t("All Websites")}]; @@ -35,27 +33,7 @@ export class PageListController extends listView.Controller { */ onClickCreate() { if (this.props.resModel === 'website.page') { - return this.dialogService.add(AddPageDialog, { - selectWebsite: true, - addPage: async (state) => { - // TODO this is duplicated code from new_content.js, this - // should be shared somehow. - const websiteId = parseInt(state.websiteId); - const url = `/website/add/${encodeURIComponent(state.name)}`; - const data = await this.http.post(url, { 'add_menu': state.addMenu || '', 'website_id': websiteId, csrf_token }); - if (data.view_id) { - this.actionService.doAction({ - 'res_model': 'ir.ui.view', - 'res_id': data.view_id, - 'views': [[false, 'form']], - 'type': 'ir.actions.act_window', - 'view_mode': 'form', - }); - } else { - this.website.goToWebsite({ path: data.url, edition: true, websiteId }); - } - }, - }); + return this.dialogService.add(AddPageDialog, {selectWebsite: true}); } const action = this.props.context.create_action; if (action) { diff --git a/addons/website/static/src/systray_items/new_content.js b/addons/website/static/src/systray_items/new_content.js index e00606a75d2..413156e594a 100644 --- a/addons/website/static/src/systray_items/new_content.js +++ b/addons/website/static/src/systray_items/new_content.js @@ -4,7 +4,6 @@ import { registry } from '@web/core/registry'; import { useService } from '@web/core/utils/hooks'; import { WebsiteDialog, AddPageDialog } from "@website/components/dialog/dialog"; import { useHotkey } from "@web/core/hotkeys/hotkey_hook"; -import { csrf_token } from 'web.core'; import { sprintf } from '@web/core/utils/strings'; const { Component, xml, useState, onWillStart } = owl; @@ -61,7 +60,6 @@ export class NewContentModal extends Component { this.dialogs = useService('dialog'); this.website = useService('website'); this.action = useService('action'); - this.http = useService('http'); this.isSystem = this.user.isSystem; this.newContentText = { @@ -146,22 +144,7 @@ export class NewContentModal extends Component { createNewPage() { this.dialogs.add(AddPageDialog, { - addPage: async (state) => { - const url = `/website/add/${encodeURIComponent(state.name)}`; - const data = await this.http.post(url, { 'add_menu': state.addMenu || '', csrf_token }); - if (data.view_id) { - this.action.doAction({ - 'res_model': 'ir.ui.view', - 'res_id': data.view_id, - 'views': [[false, 'form']], - 'type': 'ir.actions.act_window', - 'view_mode': 'form', - }); - } else { - this.website.goToWebsite({ path: data.url, edition: true }); - } - this.websiteContext.showNewContentModal = false; - }, + onAddPage: () => this.websiteContext.showNewContentModal = false, }); }