Change PageChooser widget constructor to accept `parent_id` as part of the opts dict

The old signature is still accepted for backwards compatibility.

This then matches the signature of the other chooser widget JS classes, allowing PageChooserFactory to extend the generic ChooserFactory.
pull/9445/head
Matt Westcott 2023-01-11 12:55:32 +00:00
rodzic dcba3a9194
commit 536d1096c2
5 zmienionych plików z 35 dodań i 26 usunięć

Wyświetl plik

@ -11,7 +11,7 @@ class PageChooserFactory {
placeholder.outerHTML = html;
/* the PageChooser object also serves as the JS widget representation */
// eslint-disable-next-line no-undef
const chooser = new PageChooser(id, null, this.config);
const chooser = new PageChooser(id, this.config);
chooser.setState(initialState);
return chooser;
}

Wyświetl plik

@ -7,27 +7,33 @@ class PageChooser extends Chooser {
titleStateKey = 'adminTitle';
editUrlStateKey = 'editUrl';
constructor(id, parentId, options = {}) {
super(id);
this.initialParentId = parentId;
this.options = options;
constructor(id, arg1, arg2) {
let opts;
if (arg2 || typeof arg1 === 'number') {
/* old-style args: (id, parentId, opts) */
opts = { parent_id: arg1, ...arg2 };
} else {
/* new style args: (id, opts) where opts includes 'parent_id' */
opts = arg1 || {};
}
super(id, opts);
}
getStateFromHTML() {
const state = super.getStateFromHTML();
if (state) {
state.parentId = this.initialParentId;
state.parentId = this.opts.parent_id;
}
return state;
}
getModalOptions() {
const opts = {
model_names: this.options.model_names,
target_pages: this.options.target_pages,
match_subclass: this.options.match_subclass,
can_choose_root: this.options.can_choose_root,
user_perms: this.options.user_perms,
model_names: this.opts.model_names,
target_pages: this.opts.target_pages,
match_subclass: this.opts.match_subclass,
can_choose_root: this.opts.can_choose_root,
user_perms: this.opts.user_perms,
};
if (this.state && this.state.parentId) {
opts.parentId = this.state.parentId;

Wyświetl plik

@ -947,7 +947,7 @@ class TestPageChooserPanel(TestCase):
def test_render_js_init(self):
result = self.page_chooser_panel.render_html()
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
id="id_page", model="wagtailcore.page", parent=self.events_index_page.id
)
@ -969,7 +969,7 @@ class TestPageChooserPanel(TestCase):
result = page_chooser_panel.render_html()
# the canChooseRoot flag on PageChooser should now be true
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": true, "user_perms": null}});'.format(
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": true, "user_perms": null, "parent_id": {parent}}});'.format(
id="id_page", model="wagtailcore.page", parent=self.events_index_page.id
)
self.assertIn(expected_js, result)
@ -1025,7 +1025,7 @@ class TestPageChooserPanel(TestCase):
)
result = page_chooser_panel.render_html()
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
id="id_page", model="tests.eventpage", parent=self.events_index_page.id
)
@ -1045,7 +1045,7 @@ class TestPageChooserPanel(TestCase):
)
result = page_chooser_panel.render_html()
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
id="id_page", model="tests.eventpage", parent=self.events_index_page.id
)

Wyświetl plik

@ -73,7 +73,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});',
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});',
html,
)
@ -82,7 +82,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": "copy_to"});',
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": "copy_to"});',
html,
)
@ -99,7 +99,7 @@ class TestAdminPageChooserWidget(TestCase):
self.assertInHTML("foobarbaz (simple page)", html)
self.assertIn(
'new PageChooser("test-id", %d, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});'
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null, "parent_id": %d});'
% self.root_page.id,
html,
)
@ -109,7 +109,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
html,
)
@ -121,7 +121,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
html,
)
@ -133,7 +133,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
html,
)
@ -146,7 +146,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", None, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});',
'new PageChooser("test-id", {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});',
html,
)
@ -158,7 +158,7 @@ class TestAdminPageChooserWidget(TestCase):
html = widget.render("test", self.child_page, {"id": "test-id"})
self.assertIn(
'new PageChooser("test-id", %d, {"model_names": ["wagtailcore.page"], "can_choose_root": true, "user_perms": null});'
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": true, "user_perms": null, "parent_id": %d});'
% self.root_page.id,
html,
)

Wyświetl plik

@ -344,10 +344,13 @@ class AdminPageChooser(BaseChooser):
def render_js_init(self, id_, name, value_data):
value_data = value_data or {}
return "new PageChooser({id}, {parent}, {options});".format(
options = self.client_options
parent_id = value_data.get("parent_id")
if parent_id is not None:
options["parent_id"] = parent_id
return "new PageChooser({id}, {options});".format(
id=json.dumps(id_),
parent=json.dumps(value_data.get("parent_id")),
options=json.dumps(self.client_options),
options=json.dumps(options),
)
@property