-
Notifications
You must be signed in to change notification settings - Fork 1
Common JSON Responses
The front-end RPC handler knows how to handle the following types of JSON responses, out of the box.
This has different variants depending on desired history management behaviour.
{
// "go" implies history push, "swap" history replacement, "fetch" has no history.
"action": "go" | "swap" | "fetch",
"url": String, // URL to request.
"message": undefined | String, // Optional message to display when redirecting.
"verb": undefined | String, // HTTP verb to use during request.
"data": undefined | Object, // Additional key-value data to include in the request.
}A typical example, an action to delete a user:
{
"action": "fetch",
"url": "/user/amcgregor",
"verb": "delete",
"data": {"signature": "signature"}
}{
"action": "confirm", // Fixed value.
"title": undefined | String, // Optional modal title to override default.
"ref": undefined | String,
"message": String, // Principal confirmation message to display.
"dismiss": String,
"actions": undefined | [ // Populate as required.
{"label": String, "ref": undefined | String, action ...},
]
}Continuing the example from earlier, this would be a "confirm user deletion" dialog:
{
"action": "confirm",
"title": "Are you sure?",
"message": "Are you sure you wish to delete this user?",
"dismiss": "Cancel",
"actions": [{
"label": "Delete",
"ref": "delete-user",
"action": "fetch",
"url": "/user/amcgregor",
"verb": "delete",
"data": {"signature": "signature"}
}]
}Typically used to confirm some action was taken.
{
"success": Boolean,
"scope": undefined | String,
"policy": undefined | "keep" | "replace" | "push",
"level": undefined | "success" | "info" | "warning" | "danger",
"precedence": undefined | "normal" | "sticky" | "modal",
"ref": undefined | String,
"title": undefined | String,
"message": String,
"actions": undefined | [
{"label": String, "ref": undefined | String, ...},
],
}The field level defaults to "success" if success is true, and defaults to "danger" if success is false. The precedence field defaults to "normal" if undefined. Messages marked sticky will persist until dismissed. If no scope is given, the message is global, otherwise use the first notification bucket with that name. If the policy is undefined it defaults to "push" if no scope is given, otherwise it defaults to "replace".
As an example, the following JSON:
{
"success": true,
"title": "Success",
"message": "Successfully deleted user <code>amcgregor</code>.",
"actions": [{
"label": "Undo",
"ref": "undo-delete-user",
"action": "fetch",
"url": "/user/amcgregor",
"verb": "put",
"data": {"$restore": "latest", "signature": "signature"}
}]
}Would be interpreted as this full message:
{
"success": true,
"scope": Message.scope.global,
"policy": "push",
"level": "success",
"precedence": "normal",
"title": "Success",
"message": "Successfully deleted user <code>amcgregor</code>.",
"actions": [{
"label": "Undo",
"ref": "undo-delete-user",
"action": "fetch",
"url": "/user/amcgregor",
"verb": "put",
"data": {"$restore": "latest", "signature": "signature"}
}]
}