Support for custom messages and redirects when creating posts (#8434)

* Support for custom messages and redirects when creating posts

When a post/topic is created Discourse serializes a `NewPostResult`
object. Normally this contains a status like `created_post` or
errors describing why the post could not be created.

There are times when a plugin might want to take the inputted post
and do something in the background. In this case, the plugin
can return a custom `message` and `route_to` attribute in the
`NewPostResult`.

If present, the message will be displayed in an alert, and when "Ok" is
clicked the user will be routed to the new URL.

* Destroy the draft in parallel
This commit is contained in:
Robin Ward
2019-11-29 09:30:54 -05:00
committed by GitHub
parent 1e0c2235a3
commit 7fee3c61de
6 changed files with 78 additions and 1 deletions

View File

@ -234,6 +234,26 @@ QUnit.test("Create an enqueued Topic", async assert => {
assert.ok(invisible(".d-modal"), "the modal can be dismissed");
});
QUnit.test("Can display a message and route to a URL", async assert => {
await visit("/");
await click("#create-topic");
await fillIn("#reply-title", "This title doesn't matter");
await fillIn(".d-editor-input", "custom message");
await click("#reply-control button.create");
assert.equal(
find(".bootbox .modal-body").text(),
"This is a custom response"
);
assert.equal(currentURL(), "/", "it doesn't change routes");
await click(".bootbox .btn-primary");
assert.equal(
currentURL(),
"/faq",
"can navigate to a `route_to` destination"
);
});
QUnit.test("Create a Reply", async assert => {
await visit("/t/internationalization-localization/280");

View File

@ -497,6 +497,15 @@ export default function() {
});
}
if (data.raw === "custom message") {
return response(200, {
success: true,
action: "custom",
message: "This is a custom response",
route_to: "/faq"
});
}
return response(200, {
success: true,
action: "create_post",