blob: 5d5a80d522b4a9ebda7e0fdba6f4faf10a15e88f [file] [log] [blame]
/** errorMessage dispatches an event with the error message in it.
* <p>
* Use this function in conjunction with the
* {@linkcode module:elements-sk/error-toast-sk} element.
* </p>
*
* @evt error-sk The event has a detail of the form:
*
* <pre>
* {
* message: "some string",
* duration: (duration in milliseconds),
* }
* </pre>
*
* @param message The value of 'message' is expected to be a string,
* an Object with a field 'message', an Object with a field 'resp'
* that is an instance of window.Response, or an Object.
* @param duration The number of milliseconds the message should be
* displayed.
*
*/
export async function errorMessage(
message: string | { message: string } | { resp: Response } | object,
duration: number = 10000
) {
if ((message as { resp: Response }).resp instanceof window.Response) {
message = await (message as { resp: Response }).resp.text();
} else if (typeof message === 'object') {
message =
// for handling Errors {name:String, message:String}
(message as { message: string }).message ||
// for everything else
JSON.stringify(message);
}
const detail: ErrorSkEventDetail = {
message: message,
duration: duration,
};
document.dispatchEvent(
new CustomEvent<ErrorSkEventDetail>('error-sk', {
detail: detail,
bubbles: true,
})
);
}
/** Defines the structure of the "error-sk" custom event's detail field. */
export interface ErrorSkEventDetail {
readonly message: string;
readonly duration: number;
}