UNPKG

@itwin/core-frontend

Version:
316 lines • 16.4 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Notifications */ import { BeDuration } from "@itwin/core-bentley"; import { Point2d } from "@itwin/core-geometry"; import { DisplayMessageType, MessageSeverity, RelativePosition } from "@itwin/appui-abstract"; import { IModelApp } from "./IModelApp"; // cSpell:words messagebox /** Describes the type and behavior of a [[NotifyMessageDetails]]. * @public * @extensions */ export var OutputMessageType; (function (OutputMessageType) { /** Temporary message box displays at the top or bottom of the screen then disappears automatically. */ OutputMessageType[OutputMessageType["Toast"] = 0] = "Toast"; /** Message box displays near the cursor over a Viewport and is closed by calling `closePointerMessage`. */ OutputMessageType[OutputMessageType["Pointer"] = 1] = "Pointer"; /** Message box displays at the top or bottom of the screen and contains a Close button. */ OutputMessageType[OutputMessageType["Sticky"] = 2] = "Sticky"; /** Message box displays near an input field and contains a Close button. */ OutputMessageType[OutputMessageType["InputField"] = 3] = "InputField"; /** Modal message box. */ OutputMessageType[OutputMessageType["Alert"] = 4] = "Alert"; })(OutputMessageType || (OutputMessageType = {})); /** Classifies a [[NotifyMessageDetails]] by its level of importance. * @public * @extensions */ export var OutputMessagePriority; (function (OutputMessagePriority) { OutputMessagePriority[OutputMessagePriority["None"] = 0] = "None"; OutputMessagePriority[OutputMessagePriority["Success"] = 1] = "Success"; OutputMessagePriority[OutputMessagePriority["Error"] = 10] = "Error"; OutputMessagePriority[OutputMessagePriority["Warning"] = 11] = "Warning"; OutputMessagePriority[OutputMessagePriority["Info"] = 12] = "Info"; OutputMessagePriority[OutputMessagePriority["Debug"] = 13] = "Debug"; OutputMessagePriority[OutputMessagePriority["Fatal"] = 17] = "Fatal"; })(OutputMessagePriority || (OutputMessagePriority = {})); /** Describes the alert behavior of a [[NotifyMessageDetails]]. * @public * @extensions */ export var OutputMessageAlert; (function (OutputMessageAlert) { OutputMessageAlert[OutputMessageAlert["None"] = 0] = "None"; OutputMessageAlert[OutputMessageAlert["Dialog"] = 1] = "Dialog"; OutputMessageAlert[OutputMessageAlert["Balloon"] = 2] = "Balloon"; })(OutputMessageAlert || (OutputMessageAlert = {})); /** Reason for ending the activity message via endActivityMessage * @public * @extensions */ export var ActivityMessageEndReason; (function (ActivityMessageEndReason) { ActivityMessageEndReason[ActivityMessageEndReason["Completed"] = 0] = "Completed"; ActivityMessageEndReason[ActivityMessageEndReason["Cancelled"] = 1] = "Cancelled"; })(ActivityMessageEndReason || (ActivityMessageEndReason = {})); /** Describes the set of buttons displayed in a message box opened using [[NotificationManager.openMessageBox]]. * @public * @extensions */ export var MessageBoxType; (function (MessageBoxType) { MessageBoxType[MessageBoxType["OkCancel"] = 0] = "OkCancel"; MessageBoxType[MessageBoxType["Ok"] = 1] = "Ok"; MessageBoxType[MessageBoxType["LargeOk"] = 2] = "LargeOk"; MessageBoxType[MessageBoxType["MediumAlert"] = 3] = "MediumAlert"; MessageBoxType[MessageBoxType["YesNoCancel"] = 4] = "YesNoCancel"; MessageBoxType[MessageBoxType["YesNo"] = 5] = "YesNo"; })(MessageBoxType || (MessageBoxType = {})); /** Describes the icon displayed in a messagebox opened using [[NotificationManager.openMessageBox]]. * @public * @extensions */ export var MessageBoxIconType; (function (MessageBoxIconType) { MessageBoxIconType[MessageBoxIconType["NoSymbol"] = 0] = "NoSymbol"; MessageBoxIconType[MessageBoxIconType["Information"] = 1] = "Information"; MessageBoxIconType[MessageBoxIconType["Question"] = 2] = "Question"; MessageBoxIconType[MessageBoxIconType["Warning"] = 3] = "Warning"; MessageBoxIconType[MessageBoxIconType["Critical"] = 4] = "Critical"; MessageBoxIconType[MessageBoxIconType["Success"] = 5] = "Success"; })(MessageBoxIconType || (MessageBoxIconType = {})); /** Describes the possible return values produced when the user clicks a button in a messagebox opened using [[NotificationManager.openMessageBox]]. * @public * @extensions */ export var MessageBoxValue; (function (MessageBoxValue) { MessageBoxValue[MessageBoxValue["Apply"] = 1] = "Apply"; MessageBoxValue[MessageBoxValue["Reset"] = 2] = "Reset"; MessageBoxValue[MessageBoxValue["Ok"] = 3] = "Ok"; MessageBoxValue[MessageBoxValue["Cancel"] = 4] = "Cancel"; MessageBoxValue[MessageBoxValue["Default"] = 5] = "Default"; MessageBoxValue[MessageBoxValue["Yes"] = 6] = "Yes"; MessageBoxValue[MessageBoxValue["No"] = 7] = "No"; MessageBoxValue[MessageBoxValue["Retry"] = 8] = "Retry"; MessageBoxValue[MessageBoxValue["Stop"] = 9] = "Stop"; MessageBoxValue[MessageBoxValue["Help"] = 10] = "Help"; MessageBoxValue[MessageBoxValue["YesToAll"] = 11] = "YesToAll"; MessageBoxValue[MessageBoxValue["NoToAll"] = 12] = "NoToAll"; })(MessageBoxValue || (MessageBoxValue = {})); /** Describes a message to be displayed to the user. * @public * @extensions */ export class NotifyMessageDetails { priority; briefMessage; detailedMessage; msgType; openAlert; displayTime = BeDuration.fromSeconds(5); viewport; inputField; displayPoint; relativePosition = RelativePosition.TopRight; /** Constructor * @param priority The priority this message should be accorded by the NotificationManager. * @param briefMessage A short message that conveys the simplest explanation of the issue. * @param detailedMessage An optional comprehensive message that explains the issue in detail and potentially offers a solution. * @param msgType The type of message. Defaults to Toast. * @param openAlert Whether an alert box should be displayed or not, and if so what kind. */ constructor(priority, briefMessage, detailedMessage, msgType = OutputMessageType.Toast, openAlert = OutputMessageAlert.None) { this.priority = priority; this.briefMessage = briefMessage; this.detailedMessage = detailedMessage; this.msgType = msgType; this.openAlert = openAlert; } /** Set OutputMessageType.Pointer message details. * @param viewport Viewport over which to display the Pointer type message. * @param displayPoint Point at which to display the Pointer type message. * @param relativePosition Position relative to displayPoint at which to display the Pointer type message. */ setPointerTypeDetails(viewport, displayPoint, relativePosition = RelativePosition.TopRight) { this.viewport = viewport; this.displayPoint = Point2d.fromJSON(displayPoint); this.relativePosition = relativePosition; this.msgType = OutputMessageType.Pointer; } /** Set OutputMessageType.InputField message details. * @param inputField Input field to which the message pertains. The message will be shown just below this input field element. */ setInputFieldTypeDetails(inputField) { this.inputField = inputField; this.msgType = OutputMessageType.InputField; } } /** Specifies the details of an activity message to be displayed to the user. * @public * @extensions */ export class ActivityMessageDetails { showProgressBar; showPercentInMessage; supportsCancellation; showDialogInitially; wasCancelled = false; /** * @param showProgressBar Indicates whether to show the progress bar in the activity message dialog. * @param showPercentInMessage Indicates whether to show the percentage complete in the activity message text. * @param supportsCancellation Indicates whether to show the Cancel button, giving the user the ability to cancel the operation. * @param showDialogInitially Indicates whether to show the activity message dialog initially. User can click status bar to open it. */ constructor(showProgressBar, showPercentInMessage, supportsCancellation, showDialogInitially = true) { this.showProgressBar = showProgressBar; this.showPercentInMessage = showPercentInMessage; this.supportsCancellation = supportsCancellation; this.showDialogInitially = showDialogInitially; } /** Called from NotificationAdmin when the user cancels the activity. */ onActivityCancelled() { this.wasCancelled = true; } /** Called from NotificationAdmin when the activity completes successfully. */ onActivityCompleted() { this.wasCancelled = false; } } /** The NotificationManager controls the interaction with the user for prompts, error messages, and alert dialogs. * Implementations of the NotificationManager may present the information in different ways. For example, in * non-interactive sessions, these messages may be saved to a log file or simply discarded. * @public * @extensions */ export class NotificationManager { toolTipLocation = new Point2d(); /** Output a prompt, given a localization key. * @param key The key of the localized string with the prompt message. */ outputPromptByKey(key) { this.outputPrompt(IModelApp.localization.getLocalizedString(key)); } /** Output a localized prompt to the user. A 'prompt' indicates an action the user should take to proceed. * @param _prompt The localized string with the prompt message. */ outputPrompt(_prompt) { } /** Output a message and/or alert to the user. */ outputMessage(_message) { } /** Output a MessageBox and wait for response from the user. * @param _mbType The MessageBox type. * @param _message The message to display. * @param _icon The MessageBox icon type. * @return the response from the user. */ async openMessageBox(_mbType, _message, _icon) { return MessageBoxValue.Ok; } /** * Set up for activity messages. * @param _details The activity message details. * @return true if the message was displayed, false if an invalid priority is specified. */ setupActivityMessage(_details) { return true; } /** * Output an activity message to the user. * @param _messageText The message text. * @param _percentComplete The percentage of completion. * @return true if the message was displayed, false if the message could not be displayed. */ outputActivityMessage(_messageText, _percentComplete) { return true; } /** * End an activity message. * @param _reason The reason for the end of the Activity Message. * @return true if the message was ended successfully, false if the activityMessage could not be ended. */ endActivityMessage(_reason) { return true; } /** Return true if _showTooltip has an implementation and will display a tooltip. */ get isToolTipSupported() { return false; } /** Return true if the tooltip is currently open. */ get isToolTipOpen() { return false; } /** Implement to display a tooltip message at the specified location. */ _showToolTip(_htmlElement, _message, _location, _options) { } /** Show a tooltip window. Saves tooltip location for AccuSnap to test if cursor has moved far enough away to close tooltip. * @param htmlElement The HTMLElement that anchors the toolTip. * @param message What to display inside the ToolTip. May be a string or an HTMLElement. * @param location An optional location, relative to the origin of _htmlElement, for the ToolTip. If undefined, center of `htmlElement` * @param options Options that supply additional information about how the ToolTip should function. * @note If message is an HTMLElement, the notification manager will display the HTMLElement verbatim. This can represent a security * risk if any part the element is created from user input. Applications should be careful to *sanitize* any such input before * creating an HTMLElement to pass to this method. */ openToolTip(htmlElement, message, location, options) { this.toolTipLocation.setFrom(location); this._showToolTip(htmlElement, message, location, options); } /** Clear the tooltip if it is currently open. */ clearToolTip() { } /** Update message position created with [[OutputMessageType.Pointer]]. * @param displayPoint Point at which to display the Pointer type message. * @param relativePosition Position relative to displayPoint at which to display the Pointer type message. */ updatePointerMessage(_displayPoint, _relativePosition = RelativePosition.TopRight) { } /** Close message created with [[OutputMessageType.Pointer]]. */ closePointerMessage() { } /** Close message created with [[OutputMessageType.InputField]]. */ closeInputFieldMessage() { } /** Setup tool assistance instructions for a tool. The instructions include the main instruction, which includes the current prompt. * @param instructions The tool assistance instructions. */ setToolAssistance(instructions) { this.outputPrompt(instructions ? instructions.mainInstruction.text : ""); } /** * Displays a notification message. * @param severity The severity of the message. * @param briefMessage A short message that conveys the simplest explanation of the issue. * @param detailedMessage An optional comprehensive message that explains the issue in detail and potentially offers a solution. * @param messageType The type of message. Defaults to Toast. */ displayMessage(severity, briefMessage, detailedMessage, messageType) { const details = new NotifyMessageDetails(this.convertSeverityToPriority(severity), briefMessage, detailedMessage, this.convertMessageType(messageType)); this.outputMessage(details); } /** * Displays an input field notification message. * @param inputField Input field to which the message pertains. The message will be shown just below this input field element. * @param severity The severity of the message. * @param briefMessage A short message that conveys the simplest explanation of the issue. * @param detailedMessage An optional comprehensive message that explains the issue in detail and potentially offers a solution. */ displayInputFieldMessage(inputField, severity, briefMessage, detailedMessage) { const details = new NotifyMessageDetails(this.convertSeverityToPriority(severity), briefMessage, detailedMessage); details.setInputFieldTypeDetails(inputField); this.outputMessage(details); } convertSeverityToPriority(severity) { switch (severity) { case MessageSeverity.Information: return OutputMessagePriority.Info; case MessageSeverity.Warning: return OutputMessagePriority.Warning; case MessageSeverity.Error: return OutputMessagePriority.Error; case MessageSeverity.Fatal: return OutputMessagePriority.Fatal; case MessageSeverity.None: default: return OutputMessagePriority.None; } } convertMessageType(inMessageType) { switch (inMessageType) { case DisplayMessageType.Alert: return OutputMessageType.Alert; case DisplayMessageType.InputField: return OutputMessageType.InputField; case DisplayMessageType.Sticky: return OutputMessageType.Sticky; case DisplayMessageType.Toast: return OutputMessageType.Toast; default: return undefined; } } } //# sourceMappingURL=NotificationManager.js.map