2021-06-08 20:41:47 +02:00
|
|
|
import $ from "jquery";
|
|
|
|
|
|
|
|
import render_edit_fields_modal from "../templates/settings/edit_fields_modal.hbs";
|
|
|
|
|
|
|
|
import * as blueslip from "./blueslip";
|
|
|
|
import * as overlays from "./overlays";
|
|
|
|
|
|
|
|
/*
|
|
|
|
Look for edit_fields_modal in settings_users.js to see an
|
|
|
|
example of how to use this widget.
|
|
|
|
|
|
|
|
Some things to note:
|
|
|
|
|
|
|
|
1) We create the DOM elements on the fly, and we remove the
|
|
|
|
DOM elements once it's closed.
|
|
|
|
|
|
|
|
2) We attach the DOM elements for the modal to modal_fields.parent.
|
|
|
|
|
|
|
|
3) The cancel button is driven by bootstrap.js.
|
|
|
|
|
|
|
|
4) We do not handle closing the modal on clicking "Save
|
|
|
|
changes" here, because some modals show errors, if the
|
|
|
|
request fails, in the modal itself without closing.
|
|
|
|
|
|
|
|
5) If a caller needs to run code after the modal body is added
|
|
|
|
to DOM, it can do so by passing a post_render hook.
|
|
|
|
*/
|
|
|
|
|
|
|
|
export function launch(modal_fields) {
|
2021-07-05 11:35:18 +02:00
|
|
|
const required_modal_fields = ["html_heading", "parent", "html_body", "on_click"];
|
2021-06-08 20:41:47 +02:00
|
|
|
|
|
|
|
for (const field of required_modal_fields) {
|
|
|
|
if (!modal_fields[field]) {
|
|
|
|
blueslip.error("programmer omitted " + field);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const html = render_edit_fields_modal({
|
2021-07-05 11:35:18 +02:00
|
|
|
html_heading: modal_fields.html_heading,
|
2021-06-08 20:41:47 +02:00
|
|
|
});
|
|
|
|
const edit_fields_modal = $(html);
|
|
|
|
modal_fields.parent.append(edit_fields_modal);
|
|
|
|
|
|
|
|
if (overlays.is_modal_open()) {
|
|
|
|
overlays.close_modal("#edit-fields-modal");
|
|
|
|
}
|
|
|
|
|
2021-07-05 11:35:18 +02:00
|
|
|
edit_fields_modal.find(".edit-fields-modal-body").html(modal_fields.html_body);
|
2021-06-08 20:41:47 +02:00
|
|
|
|
|
|
|
if (modal_fields.post_render !== undefined) {
|
|
|
|
modal_fields.post_render();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set up handlers.
|
|
|
|
$(".submit-modal-button").on("click", (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
modal_fields.on_click();
|
|
|
|
});
|
|
|
|
|
|
|
|
edit_fields_modal.on("hidden.bs.modal", () => {
|
|
|
|
edit_fields_modal.remove();
|
|
|
|
});
|
|
|
|
|
|
|
|
// Open the modal
|
|
|
|
overlays.open_modal("#edit-fields-modal");
|
|
|
|
}
|