@itwin/appui-react 3.6.0-dev.41 → 3.6.0-dev.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/appui-react/content/ContentLayout.d.ts.map +1 -1
  3. package/lib/cjs/appui-react/content/ContentLayout.js +18 -1
  4. package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
  5. package/lib/cjs/appui-react/content/ContentViewManager.d.ts.map +1 -1
  6. package/lib/cjs/appui-react/content/ContentViewManager.js +19 -1
  7. package/lib/cjs/appui-react/content/ContentViewManager.js.map +1 -1
  8. package/lib/cjs/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
  9. package/lib/cjs/appui-react/content/FloatingViewportContent.js +10 -2
  10. package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -1
  11. package/lib/cjs/appui-react/messages/MessageManager.d.ts.map +1 -1
  12. package/lib/cjs/appui-react/messages/MessageManager.js +3 -1
  13. package/lib/cjs/appui-react/messages/MessageManager.js.map +1 -1
  14. package/lib/esm/appui-react/content/ContentLayout.d.ts.map +1 -1
  15. package/lib/esm/appui-react/content/ContentLayout.js +18 -1
  16. package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
  17. package/lib/esm/appui-react/content/ContentViewManager.d.ts.map +1 -1
  18. package/lib/esm/appui-react/content/ContentViewManager.js +19 -1
  19. package/lib/esm/appui-react/content/ContentViewManager.js.map +1 -1
  20. package/lib/esm/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
  21. package/lib/esm/appui-react/content/FloatingViewportContent.js +10 -2
  22. package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -1
  23. package/lib/esm/appui-react/messages/MessageManager.d.ts.map +1 -1
  24. package/lib/esm/appui-react/messages/MessageManager.js +3 -1
  25. package/lib/esm/appui-react/messages/MessageManager.js.map +1 -1
  26. package/package.json +32 -32
@@ -1 +1 @@
1
- {"version":3,"file":"MessageManager.js","sourceRoot":"","sources":["../../../../src/appui-react/messages/MessageManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Notification\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as _ from \"lodash\";\r\nimport * as React from \"react\";\r\nimport { XAndY } from \"@itwin/core-geometry\";\r\nimport {\r\n ActivityMessageDetails, IModelApp, MessageBoxIconType, MessageBoxType, MessageBoxValue, OutputMessageAlert, OutputMessagePriority,\r\n OutputMessageType, ToolAssistanceInstructions, ToolTipOptions,\r\n} from \"@itwin/core-frontend\";\r\nimport { MessageSeverity, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { MessageContainer, ReactMessage } from \"@itwin/core-react\";\r\nimport { ConfigurableUiActionId } from \"../configurableui/state\";\r\nimport { ModalDialogManager } from \"../dialog/ModalDialogManager\";\r\nimport { StandardMessageBox } from \"../dialog/StandardMessageBox\";\r\nimport { ElementTooltip } from \"../feedback/ElementTooltip\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { MessageSpan } from \"./MessageSpan\";\r\nimport { PointerMessage } from \"./Pointer\";\r\nimport { NotifyMessageDetailsType, NotifyMessageType } from \"./ReactNotifyMessageDetails\";\r\nimport { StatusMessageManager } from \"./StatusMessageManager\";\r\nimport { Small, toaster, ToastOptions } from \"@itwin/itwinui-react\";\r\nimport { ToasterSettings } from \"@itwin/itwinui-react/cjs/core/Toast/Toaster\";\r\n\r\nclass MessageBoxCallbacks {\r\n constructor(\r\n public readonly onFulfilled: (result: MessageBoxValue) => void,\r\n public readonly onRejected: (result: any) => void,\r\n ) { }\r\n\r\n public handleMessageBoxResult = (result: MessageBoxValue) => {\r\n this.onFulfilled(result);\r\n };\r\n}\r\n\r\n/** [[MessageAddedEvent]] arguments.\r\n * @public\r\n */\r\nexport interface MessageAddedEventArgs {\r\n /** Message details for the message added */\r\n message: NotifyMessageDetailsType;\r\n}\r\n\r\n/** Activity Message Event arguments.\r\n * @public\r\n */\r\nexport interface ActivityMessageEventArgs {\r\n /** Current message for the activity */\r\n message: NotifyMessageType;\r\n /** Current percentage for the activity */\r\n percentage: number;\r\n /** Message details set by calling NotificationManager.setupActivityMessage */\r\n details?: ActivityMessageDetails;\r\n /** Indicates whether the activity message popup is being restored */\r\n restored?: boolean;\r\n}\r\n\r\n/** Input Field Message Event arguments.\r\n * @public\r\n */\r\nexport interface InputFieldMessageEventArgs {\r\n /** Target HTML element for the Input Field message */\r\n target: Element;\r\n /** Message to be displayed near the input field */\r\n messageText: NotifyMessageType;\r\n /** Detailed message to be displayed near the input field */\r\n detailedMessage: NotifyMessageType;\r\n /** Priority of the input field message */\r\n priority: OutputMessagePriority;\r\n}\r\n\r\n/** Tool Assistance Changed event arguments.\r\n * @public\r\n */\r\nexport interface ToolAssistanceChangedEventArgs {\r\n /** Tool Assistance instructions for the active tool */\r\n instructions: ToolAssistanceInstructions | undefined;\r\n}\r\n\r\n/** Message Added Event class.\r\n * @public\r\n */\r\nexport class MessageAddedEvent extends UiEvent<MessageAddedEventArgs> { }\r\n\r\n/** Messages Updated Event class.\r\n * @public\r\n */\r\nexport class MessagesUpdatedEvent extends UiEvent<{}> { }\r\n\r\n/** Activity Message Added Event class.\r\n * @public\r\n */\r\nexport class ActivityMessageUpdatedEvent extends UiEvent<ActivityMessageEventArgs> { }\r\n\r\n/** Activity Message Cancelled Event class.\r\n * @public\r\n */\r\nexport class ActivityMessageCancelledEvent extends UiEvent<{}> { }\r\n\r\n/** Input Field Message Added Event class\r\n * @public\r\n */\r\nexport class InputFieldMessageAddedEvent extends UiEvent<InputFieldMessageEventArgs> { }\r\n\r\n/** Input Field Message Removed Event class.\r\n * @public\r\n */\r\nexport class InputFieldMessageRemovedEvent extends UiEvent<{}> { }\r\n\r\n/** Open Message Center Event class.\r\n * @public\r\n */\r\nexport class OpenMessageCenterEvent extends UiEvent<{}> { }\r\n\r\n/** Tool Assistance Changed event class\r\n * @public\r\n */\r\nexport class ToolAssistanceChangedEvent extends UiEvent<ToolAssistanceChangedEventArgs> { }\r\n\r\n/**\r\n * Keeps track of the current activity message, and updates whenever\r\n * setupActivityMessageDetails() or setupActivityMessageValues()\r\n * is called.\r\n * Used to display tracked progress in ActivityMessage.\r\n */\r\nclass OngoingActivityMessage {\r\n public message: NotifyMessageType = \"\";\r\n public percentage: number = 0;\r\n public details: ActivityMessageDetails = new ActivityMessageDetails(true, true, true);\r\n public isRestored: boolean = false;\r\n}\r\n\r\n/** The MessageManager class manages messages and prompts. It is used by the [[AppNotificationManager]] class.\r\n * @public\r\n */\r\nexport class MessageManager {\r\n private static _maxCachedMessages = 500;\r\n private static _maxDisplayedStickyMessages = 3;\r\n private static _messages: NotifyMessageDetailsType[] = [];\r\n private static _ongoingActivityMessage: OngoingActivityMessage = new OngoingActivityMessage();\r\n private static _lastMessage?: NotifyMessageDetailsType;\r\n private static _activeMessageManager = new StatusMessageManager();\r\n private static _animateOutToElement: HTMLElement | null;\r\n\r\n /** The MessageAddedEvent is fired when a message is added via outputMessage(). */\r\n public static readonly onMessageAddedEvent = new MessageAddedEvent();\r\n\r\n /** The MessagesUpdatedEvent is fired when a message is added or the messages are cleared. */\r\n public static readonly onMessagesUpdatedEvent = new MessagesUpdatedEvent();\r\n\r\n /** The ActivityMessageUpdatedEvent is fired when an Activity message updates via outputActivityMessage(). */\r\n public static readonly onActivityMessageUpdatedEvent = new ActivityMessageUpdatedEvent();\r\n\r\n /** The ActivityMessageCancelledEvent is fired when an Activity message is cancelled via\r\n * endActivityMessage(ActivityMessageEndReason.Cancelled) or\r\n * by the user clicking the 'Cancel' link.\r\n */\r\n public static readonly onActivityMessageCancelledEvent = new ActivityMessageCancelledEvent();\r\n\r\n public static readonly onInputFieldMessageAddedEvent = new InputFieldMessageAddedEvent();\r\n public static readonly onInputFieldMessageRemovedEvent = new InputFieldMessageRemovedEvent();\r\n\r\n public static readonly onOpenMessageCenterEvent = new OpenMessageCenterEvent();\r\n\r\n /** The ToolAssistanceChangedEvent is fired when a tool calls IModelApp.notifications.setToolAssistance().\r\n * @public\r\n */\r\n public static readonly onToolAssistanceChangedEvent = new ToolAssistanceChangedEvent();\r\n\r\n /** List of messages as NotifyMessageDetailsType. */\r\n public static get messages(): Readonly<NotifyMessageDetailsType[]> { return this._messages; }\r\n\r\n /** Manager of active messages. */\r\n public static get activeMessageManager(): StatusMessageManager { return this._activeMessageManager; }\r\n\r\n /** Clear the message list. */\r\n public static clearMessages(): void {\r\n this._messages.splice(0);\r\n this._activeMessageManager.initialize();\r\n\r\n this.onMessagesUpdatedEvent.emit({});\r\n this._lastMessage = undefined;\r\n }\r\n\r\n /** Update the message list. */\r\n public static updateMessages(): void {\r\n this.onMessagesUpdatedEvent.emit({});\r\n }\r\n\r\n /** Set the maximum number of cached message. */\r\n public static setMaxCachedMessages(max: number): void {\r\n this._maxCachedMessages = max;\r\n this.checkMaxCachedMessages();\r\n }\r\n\r\n /** The maximum number of displayed Sticky messages. */\r\n public static get maxDisplayedStickyMessages(): number { return this._maxDisplayedStickyMessages; }\r\n public static set maxDisplayedStickyMessages(max: number) { this._maxDisplayedStickyMessages = max; }\r\n\r\n /** Output a message and/or alert to the user.\r\n * @param message Details about the message to output.\r\n */\r\n public static outputMessage(message: NotifyMessageDetailsType): void {\r\n if (message.msgType === OutputMessageType.Pointer) {\r\n PointerMessage.showMessage(message);\r\n } else if (message.msgType === OutputMessageType.InputField) {\r\n if (message.inputField)\r\n MessageManager.displayInputFieldMessage(message.inputField, message.briefMessage, message.detailedMessage, message.priority);\r\n else\r\n message.msgType = OutputMessageType.Sticky; // Note: Changing the message.msgType here for InputField without inputField\r\n } else if (message.msgType === OutputMessageType.Alert) {\r\n if (message.openAlert === OutputMessageAlert.Balloon)\r\n message.msgType = OutputMessageType.Sticky; // Note: Changing the message.msgType here for Balloon\r\n else\r\n MessageManager.showAlertMessageBox(message);\r\n }\r\n\r\n MessageManager.addMessage(message);\r\n }\r\n\r\n /** Set the element where messages should be animated out to on exit.\r\n * @param element `HTMLElement` to animate out to.\r\n */\r\n public static registerAnimateOutToElement(element: HTMLElement | null) {\r\n this._animateOutToElement = element;\r\n }\r\n\r\n /** Display a message.\r\n * Works only with `Sticky` and `Toast` message types.\r\n * @param message Details about the message to display.\r\n * @param options Optionally override individual toast parameters.\r\n * @param settings Optionally override all toasts settings (i.e. placement or order).\r\n * @returns Object with reference to the message (i.e. to close it programmatically) if it was displayed.\r\n */\r\n public static displayMessage(message: NotifyMessageDetailsType, options?: ToastOptions, settings?: ToasterSettings) {\r\n if (message.msgType !== OutputMessageType.Sticky && message.msgType !== OutputMessageType.Toast) {\r\n return;\r\n }\r\n const toastOptions: ToastOptions = {\r\n hasCloseButton: true,\r\n duration: message.displayTime.milliseconds,\r\n type:\r\n message.msgType === OutputMessageType.Sticky\r\n ? \"persisting\"\r\n : \"temporary\",\r\n animateOutTo: this._animateOutToElement,\r\n ...options,\r\n };\r\n toaster.setSettings({ placement: \"bottom\", order: \"ascending\", ...settings });\r\n const content = <>\r\n {message.briefMessage}\r\n {message.detailedMessage &&\r\n <Small>{(message.detailedMessage as ReactMessage).reactNode || message.detailedMessage}</Small>\r\n }\r\n </>;\r\n switch (message.priority) {\r\n case OutputMessagePriority.Warning:\r\n return toaster.warning(content, toastOptions);\r\n case OutputMessagePriority.Info:\r\n return toaster.informational(content, toastOptions);\r\n case OutputMessagePriority.Error:\r\n case OutputMessagePriority.Fatal:\r\n return toaster.negative(content, toastOptions);\r\n default:\r\n return toaster.positive(content, toastOptions);\r\n }\r\n }\r\n\r\n /** Output a message and/or alert to the user.\r\n * @param message Details about the message to output.\r\n */\r\n public static addMessage(message: NotifyMessageDetailsType): void {\r\n if (!_.isEqual(message, this._lastMessage)) {\r\n this.addToMessageCenter(message);\r\n this._lastMessage = message;\r\n }\r\n\r\n this._activeMessageManager.add(message);\r\n\r\n this.onMessageAddedEvent.emit({ message });\r\n }\r\n\r\n /** Add a message to the Message Center.\r\n * @param message Details about the message to output.\r\n */\r\n public static addToMessageCenter(message: NotifyMessageDetailsType): void {\r\n this._messages.push(message);\r\n this.onMessagesUpdatedEvent.emit({});\r\n this.checkMaxCachedMessages();\r\n }\r\n\r\n /** Checks number of messages against the maximum. */\r\n private static checkMaxCachedMessages(): void {\r\n if (this._messages.length > this._maxCachedMessages) {\r\n const numToErase = this._maxCachedMessages / 4;\r\n this._messages.splice(0, numToErase);\r\n this.onMessagesUpdatedEvent.emit({});\r\n }\r\n }\r\n\r\n /**\r\n * Sets details for setting up an Activity message.\r\n * @param details Details for setup of ActivityMessage\r\n * @returns true if details is valid and can be used to display ActivityMessage\r\n */\r\n public static setupActivityMessageDetails(details: ActivityMessageDetails): boolean {\r\n this._ongoingActivityMessage.details = details;\r\n this._ongoingActivityMessage.isRestored = details.showDialogInitially;\r\n return true;\r\n }\r\n\r\n /**\r\n * Output an activity message to the user.\r\n * @param message The message text.\r\n * @param percentComplete The percentage of completion.\r\n * @return true if the message was displayed, false if the message could not be displayed.\r\n */\r\n public static outputActivityMessage(message: NotifyMessageType, percentComplete: number): boolean {\r\n return MessageManager.setupActivityMessageValues(message, percentComplete);\r\n }\r\n\r\n /**\r\n * Sets values on _OngoingActivityMessage to be referenced when displaying\r\n * an ActivityMessage.\r\n * @param message Message of the process that ActivityMessage is tracking\r\n * @param percentage Progress made by activity in percentage\r\n * @param restored True if original ActivityMessage has been closed and\r\n * is now being restored from the status bar.\r\n * @returns true if details is valid and can be used to display ActivityMessage\r\n */\r\n public static setupActivityMessageValues(message: NotifyMessageType, percentage: number, restored?: boolean): boolean {\r\n this._ongoingActivityMessage.message = message;\r\n this._ongoingActivityMessage.percentage = percentage;\r\n\r\n this.onActivityMessageUpdatedEvent.emit({\r\n message,\r\n percentage,\r\n details: this._ongoingActivityMessage.details,\r\n restored: (restored !== undefined) ? restored : this._ongoingActivityMessage.isRestored,\r\n });\r\n\r\n this._ongoingActivityMessage.isRestored = false;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Dismisses current ActivityMessage and ends activity if canceled.\r\n * @param isCompleted True if the activity was completed, false if it was canceled\r\n * @returns True if both ActivityMessage and activity process are ended.\r\n */\r\n public static endActivityMessage(isCompleted: boolean): boolean {\r\n this.endActivityProcessing(isCompleted);\r\n this.onActivityMessageCancelledEvent.emit({});\r\n return true;\r\n }\r\n\r\n /**\r\n * Ends processing for activity according to message definition.\r\n * @param isCompleted True if the activity was completed, false if it was canceled\r\n */\r\n private static endActivityProcessing(isCompleted: boolean): void {\r\n if (isCompleted)\r\n this._ongoingActivityMessage.details.onActivityCompleted();\r\n else\r\n this._ongoingActivityMessage.details.onActivityCancelled();\r\n }\r\n\r\n /**\r\n * Displays an input field message near target element.\r\n * @param target The currently focused or recently focused element to place the\r\n * input field message near.\r\n * @param messageText Text to display in the message.\r\n * @param detailedMessage Optional detailed message text to display.\r\n * @param priority Optional message priority which controls icon to display.\r\n */\r\n public static displayInputFieldMessage(target: HTMLElement, messageText: NotifyMessageType, detailedMessage: NotifyMessageType = \"\", priority = OutputMessagePriority.Error) {\r\n this.onInputFieldMessageAddedEvent.emit({\r\n target,\r\n messageText,\r\n detailedMessage,\r\n priority,\r\n });\r\n }\r\n\r\n /**\r\n * Hides the currently displayed input field message.\r\n */\r\n public static hideInputFieldMessage() {\r\n this.onInputFieldMessageRemovedEvent.emit({});\r\n }\r\n\r\n /**\r\n * Opens message center.\r\n */\r\n public static openMessageCenter() {\r\n this.onOpenMessageCenterEvent.emit({});\r\n }\r\n\r\n /** Output a prompt to the user. A 'prompt' indicates an action the user should take to proceed. */\r\n public static outputPrompt(prompt: string): void {\r\n UiFramework.dispatchActionToStore(ConfigurableUiActionId.SetToolPrompt, prompt, true);\r\n }\r\n\r\n /** Gets an icon CSS class name based on a given NotifyMessageDetailsType. */\r\n public static getIconClassName(details: NotifyMessageDetailsType): string {\r\n const severity = MessageManager.getSeverity(details);\r\n const className = MessageContainer.getIconClassName(severity, false);\r\n const iconClassName = classnames(\"icon\", \"notifymessage-icon\", className);\r\n\r\n return iconClassName;\r\n }\r\n\r\n /** Gets a MessageSeverity based on a given NotifyMessageDetailsType. */\r\n public static getSeverity(details: NotifyMessageDetailsType): MessageSeverity {\r\n let severity = MessageSeverity.None;\r\n\r\n switch (details.priority) {\r\n case OutputMessagePriority.None:\r\n severity = MessageSeverity.Success;\r\n break;\r\n case OutputMessagePriority.Success:\r\n severity = MessageSeverity.Success;\r\n break;\r\n case OutputMessagePriority.Info:\r\n severity = MessageSeverity.Information;\r\n break;\r\n case OutputMessagePriority.Warning:\r\n severity = MessageSeverity.Warning;\r\n break;\r\n case OutputMessagePriority.Error:\r\n severity = MessageSeverity.Error;\r\n break;\r\n case OutputMessagePriority.Fatal:\r\n severity = MessageSeverity.Fatal;\r\n break;\r\n }\r\n\r\n return severity;\r\n }\r\n\r\n /** Gets a MessageBoxIconType based on a given NotifyMessageDetailsType. */\r\n public static getIconType(details: NotifyMessageDetailsType): MessageBoxIconType {\r\n let iconType = MessageBoxIconType.NoSymbol;\r\n\r\n switch (details.priority) {\r\n case OutputMessagePriority.None:\r\n iconType = MessageBoxIconType.NoSymbol;\r\n break;\r\n case OutputMessagePriority.Success:\r\n iconType = MessageBoxIconType.Success;\r\n break;\r\n case OutputMessagePriority.Info:\r\n iconType = MessageBoxIconType.Information;\r\n break;\r\n case OutputMessagePriority.Warning:\r\n iconType = MessageBoxIconType.Warning;\r\n break;\r\n case OutputMessagePriority.Error:\r\n iconType = MessageBoxIconType.Critical;\r\n break;\r\n case OutputMessagePriority.Fatal:\r\n iconType = MessageBoxIconType.Critical;\r\n break;\r\n }\r\n\r\n return iconType;\r\n }\r\n\r\n /** Output a MessageBox and wait for response from the user.\r\n * @param mbType The MessageBox type.\r\n * @param message The message to display.\r\n * @param icon The MessageBox icon type.\r\n * @return the response from the user.\r\n */\r\n public static async openMessageBox(mbType: MessageBoxType, message: NotifyMessageType, icon: MessageBoxIconType): Promise<MessageBoxValue> {\r\n const title = UiFramework.translate(\"general.alert\");\r\n\r\n return new Promise((onFulfilled: (result: MessageBoxValue) => void, onRejected: (reason: any) => void) => {\r\n const messageBoxCallbacks = new MessageBoxCallbacks(onFulfilled, onRejected);\r\n const messageElement = <MessageSpan message={message} />;\r\n ModalDialogManager.openDialog(this.standardMessageBox(mbType, icon, title, messageElement, messageBoxCallbacks));\r\n });\r\n }\r\n\r\n /** @internal */\r\n public static showAlertMessageBox(messageDetails: NotifyMessageDetailsType): void {\r\n const title = UiFramework.translate(\"general.alert\");\r\n const iconType = this.getIconType(messageDetails);\r\n const content = (\r\n <>\r\n <MessageSpan message={messageDetails.briefMessage} />\r\n {\r\n messageDetails.detailedMessage && (\r\n <p>\r\n <MessageSpan message={messageDetails.detailedMessage} />\r\n </p>\r\n )\r\n }\r\n </>\r\n );\r\n ModalDialogManager.openDialog(this.standardMessageBox(MessageBoxType.Ok, iconType, title, content));\r\n }\r\n\r\n private static standardMessageBox(mbType: MessageBoxType, iconType: MessageBoxIconType, title: string, messageElement: React.ReactNode, callbacks?: MessageBoxCallbacks): React.ReactNode {\r\n const onResult = (callbacks !== undefined) ? callbacks.handleMessageBoxResult : undefined;\r\n return (\r\n <StandardMessageBox\r\n opened={true}\r\n messageBoxType={mbType}\r\n iconType={iconType}\r\n title={title}\r\n onResult={onResult}\r\n >\r\n {messageElement}\r\n </StandardMessageBox>\r\n );\r\n }\r\n\r\n /** Setup tool assistance instructions for a tool. The instructions include the main instruction, which includes the current prompt.\r\n * @param instructions The tool assistance instructions.\r\n * @public\r\n */\r\n public static setToolAssistance(instructions: ToolAssistanceInstructions | undefined) {\r\n MessageManager.onToolAssistanceChangedEvent.emit({ instructions });\r\n }\r\n\r\n /** Show a tooltip window. Saves tooltip location for AccuSnap to test if cursor has moved far enough away to close tooltip.\r\n * @param htmlElement The HTMLElement that anchors the tooltip.\r\n * @param message What to display inside the tooltip.\r\n * @param location An optional location, relative to the origin of htmlElement, for the tooltip. If undefined, center of `htmlElement`.\r\n * @param options Options that supply additional information about how the tooltip should function.\r\n */\r\n public static openToolTip(htmlElement: HTMLElement, message: NotifyMessageType, location?: XAndY, options?: ToolTipOptions): void {\r\n IModelApp.notifications.toolTipLocation.setFrom(location);\r\n ElementTooltip.showTooltip(htmlElement, message, location, options);\r\n }\r\n\r\n /** @internal */\r\n public static closeAllMessages(): void {\r\n ElementTooltip.hideTooltip();\r\n PointerMessage.hideMessage();\r\n MessageManager.clearMessages();\r\n MessageManager.hideInputFieldMessage();\r\n MessageManager.endActivityMessage(false);\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"MessageManager.js","sourceRoot":"","sources":["../../../../src/appui-react/messages/MessageManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Notification\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as _ from \"lodash\";\r\nimport * as React from \"react\";\r\nimport { XAndY } from \"@itwin/core-geometry\";\r\nimport {\r\n ActivityMessageDetails, IModelApp, MessageBoxIconType, MessageBoxType, MessageBoxValue, OutputMessageAlert, OutputMessagePriority,\r\n OutputMessageType, ToolAssistanceInstructions, ToolTipOptions,\r\n} from \"@itwin/core-frontend\";\r\nimport { MessageSeverity, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { MessageContainer, ReactMessage } from \"@itwin/core-react\";\r\nimport { ConfigurableUiActionId } from \"../configurableui/state\";\r\nimport { ModalDialogManager } from \"../dialog/ModalDialogManager\";\r\nimport { StandardMessageBox } from \"../dialog/StandardMessageBox\";\r\nimport { ElementTooltip } from \"../feedback/ElementTooltip\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { MessageSpan } from \"./MessageSpan\";\r\nimport { PointerMessage } from \"./Pointer\";\r\nimport { NotifyMessageDetailsType, NotifyMessageType } from \"./ReactNotifyMessageDetails\";\r\nimport { StatusMessageManager } from \"./StatusMessageManager\";\r\nimport { Small, toaster, ToastOptions } from \"@itwin/itwinui-react\";\r\nimport { ToasterSettings } from \"@itwin/itwinui-react/cjs/core/Toast/Toaster\";\r\n\r\nclass MessageBoxCallbacks {\r\n constructor(\r\n public readonly onFulfilled: (result: MessageBoxValue) => void,\r\n public readonly onRejected: (result: any) => void,\r\n ) { }\r\n\r\n public handleMessageBoxResult = (result: MessageBoxValue) => {\r\n this.onFulfilled(result);\r\n };\r\n}\r\n\r\n/** [[MessageAddedEvent]] arguments.\r\n * @public\r\n */\r\nexport interface MessageAddedEventArgs {\r\n /** Message details for the message added */\r\n message: NotifyMessageDetailsType;\r\n}\r\n\r\n/** Activity Message Event arguments.\r\n * @public\r\n */\r\nexport interface ActivityMessageEventArgs {\r\n /** Current message for the activity */\r\n message: NotifyMessageType;\r\n /** Current percentage for the activity */\r\n percentage: number;\r\n /** Message details set by calling NotificationManager.setupActivityMessage */\r\n details?: ActivityMessageDetails;\r\n /** Indicates whether the activity message popup is being restored */\r\n restored?: boolean;\r\n}\r\n\r\n/** Input Field Message Event arguments.\r\n * @public\r\n */\r\nexport interface InputFieldMessageEventArgs {\r\n /** Target HTML element for the Input Field message */\r\n target: Element;\r\n /** Message to be displayed near the input field */\r\n messageText: NotifyMessageType;\r\n /** Detailed message to be displayed near the input field */\r\n detailedMessage: NotifyMessageType;\r\n /** Priority of the input field message */\r\n priority: OutputMessagePriority;\r\n}\r\n\r\n/** Tool Assistance Changed event arguments.\r\n * @public\r\n */\r\nexport interface ToolAssistanceChangedEventArgs {\r\n /** Tool Assistance instructions for the active tool */\r\n instructions: ToolAssistanceInstructions | undefined;\r\n}\r\n\r\n/** Message Added Event class.\r\n * @public\r\n */\r\nexport class MessageAddedEvent extends UiEvent<MessageAddedEventArgs> { }\r\n\r\n/** Messages Updated Event class.\r\n * @public\r\n */\r\nexport class MessagesUpdatedEvent extends UiEvent<{}> { }\r\n\r\n/** Activity Message Added Event class.\r\n * @public\r\n */\r\nexport class ActivityMessageUpdatedEvent extends UiEvent<ActivityMessageEventArgs> { }\r\n\r\n/** Activity Message Cancelled Event class.\r\n * @public\r\n */\r\nexport class ActivityMessageCancelledEvent extends UiEvent<{}> { }\r\n\r\n/** Input Field Message Added Event class\r\n * @public\r\n */\r\nexport class InputFieldMessageAddedEvent extends UiEvent<InputFieldMessageEventArgs> { }\r\n\r\n/** Input Field Message Removed Event class.\r\n * @public\r\n */\r\nexport class InputFieldMessageRemovedEvent extends UiEvent<{}> { }\r\n\r\n/** Open Message Center Event class.\r\n * @public\r\n */\r\nexport class OpenMessageCenterEvent extends UiEvent<{}> { }\r\n\r\n/** Tool Assistance Changed event class\r\n * @public\r\n */\r\nexport class ToolAssistanceChangedEvent extends UiEvent<ToolAssistanceChangedEventArgs> { }\r\n\r\n/**\r\n * Keeps track of the current activity message, and updates whenever\r\n * setupActivityMessageDetails() or setupActivityMessageValues()\r\n * is called.\r\n * Used to display tracked progress in ActivityMessage.\r\n */\r\nclass OngoingActivityMessage {\r\n public message: NotifyMessageType = \"\";\r\n public percentage: number = 0;\r\n public details: ActivityMessageDetails = new ActivityMessageDetails(true, true, true);\r\n public isRestored: boolean = false;\r\n}\r\n\r\n/** The MessageManager class manages messages and prompts. It is used by the [[AppNotificationManager]] class.\r\n * @public\r\n */\r\nexport class MessageManager {\r\n private static _maxCachedMessages = 500;\r\n private static _maxDisplayedStickyMessages = 3;\r\n private static _messages: NotifyMessageDetailsType[] = [];\r\n private static _ongoingActivityMessage: OngoingActivityMessage = new OngoingActivityMessage();\r\n private static _lastMessage?: NotifyMessageDetailsType;\r\n private static _activeMessageManager = new StatusMessageManager();\r\n private static _animateOutToElement: HTMLElement | null;\r\n\r\n /** The MessageAddedEvent is fired when a message is added via outputMessage(). */\r\n public static readonly onMessageAddedEvent = new MessageAddedEvent();\r\n\r\n /** The MessagesUpdatedEvent is fired when a message is added or the messages are cleared. */\r\n public static readonly onMessagesUpdatedEvent = new MessagesUpdatedEvent();\r\n\r\n /** The ActivityMessageUpdatedEvent is fired when an Activity message updates via outputActivityMessage(). */\r\n public static readonly onActivityMessageUpdatedEvent = new ActivityMessageUpdatedEvent();\r\n\r\n /** The ActivityMessageCancelledEvent is fired when an Activity message is cancelled via\r\n * endActivityMessage(ActivityMessageEndReason.Cancelled) or\r\n * by the user clicking the 'Cancel' link.\r\n */\r\n public static readonly onActivityMessageCancelledEvent = new ActivityMessageCancelledEvent();\r\n\r\n public static readonly onInputFieldMessageAddedEvent = new InputFieldMessageAddedEvent();\r\n public static readonly onInputFieldMessageRemovedEvent = new InputFieldMessageRemovedEvent();\r\n\r\n public static readonly onOpenMessageCenterEvent = new OpenMessageCenterEvent();\r\n\r\n /** The ToolAssistanceChangedEvent is fired when a tool calls IModelApp.notifications.setToolAssistance().\r\n * @public\r\n */\r\n public static readonly onToolAssistanceChangedEvent = new ToolAssistanceChangedEvent();\r\n\r\n /** List of messages as NotifyMessageDetailsType. */\r\n public static get messages(): Readonly<NotifyMessageDetailsType[]> { return this._messages; }\r\n\r\n /** Manager of active messages. */\r\n public static get activeMessageManager(): StatusMessageManager { return this._activeMessageManager; }\r\n\r\n /** Clear the message list. */\r\n public static clearMessages(): void {\r\n this._messages.splice(0);\r\n this._activeMessageManager.initialize();\r\n\r\n this.onMessagesUpdatedEvent.emit({});\r\n this._lastMessage = undefined;\r\n }\r\n\r\n /** Update the message list. */\r\n public static updateMessages(): void {\r\n this.onMessagesUpdatedEvent.emit({});\r\n }\r\n\r\n /** Set the maximum number of cached message. */\r\n public static setMaxCachedMessages(max: number): void {\r\n this._maxCachedMessages = max;\r\n this.checkMaxCachedMessages();\r\n }\r\n\r\n /** The maximum number of displayed Sticky messages. */\r\n public static get maxDisplayedStickyMessages(): number { return this._maxDisplayedStickyMessages; }\r\n public static set maxDisplayedStickyMessages(max: number) { this._maxDisplayedStickyMessages = max; }\r\n\r\n /** Output a message and/or alert to the user.\r\n * @param message Details about the message to output.\r\n */\r\n public static outputMessage(message: NotifyMessageDetailsType): void {\r\n if (message.msgType === OutputMessageType.Pointer) {\r\n PointerMessage.showMessage(message);\r\n } else if (message.msgType === OutputMessageType.InputField) {\r\n if (message.inputField)\r\n MessageManager.displayInputFieldMessage(message.inputField, message.briefMessage, message.detailedMessage, message.priority);\r\n else\r\n message.msgType = OutputMessageType.Sticky; // Note: Changing the message.msgType here for InputField without inputField\r\n } else if (message.msgType === OutputMessageType.Alert) {\r\n if (message.openAlert === OutputMessageAlert.Balloon)\r\n message.msgType = OutputMessageType.Sticky; // Note: Changing the message.msgType here for Balloon\r\n else\r\n MessageManager.showAlertMessageBox(message);\r\n }\r\n\r\n MessageManager.addMessage(message);\r\n }\r\n\r\n /** Set the element where messages should be animated out to on exit.\r\n * @param element `HTMLElement` to animate out to.\r\n */\r\n public static registerAnimateOutToElement(element: HTMLElement | null) {\r\n this._animateOutToElement = element;\r\n }\r\n\r\n /** Display a message.\r\n * Works only with `Sticky` and `Toast` message types.\r\n * @param message Details about the message to display.\r\n * @param options Optionally override individual toast parameters.\r\n * @param settings Optionally override all toasts settings (i.e. placement or order).\r\n * @returns Object with reference to the message (i.e. to close it programmatically) if it was displayed.\r\n */\r\n public static displayMessage(message: NotifyMessageDetailsType, options?: ToastOptions, settings?: ToasterSettings) {\r\n if (message.msgType !== OutputMessageType.Sticky && message.msgType !== OutputMessageType.Toast) {\r\n return;\r\n }\r\n const toastOptions: ToastOptions = {\r\n hasCloseButton: true,\r\n duration: message.displayTime.milliseconds,\r\n type:\r\n message.msgType === OutputMessageType.Sticky\r\n ? \"persisting\"\r\n : \"temporary\",\r\n animateOutTo: this._animateOutToElement,\r\n ...options,\r\n };\r\n toaster.setSettings({ placement: \"bottom\", order: \"ascending\", ...settings });\r\n const content = <>\r\n {message.briefMessage}\r\n {message.detailedMessage &&\r\n <>\r\n <br/>\r\n <Small>{(message.detailedMessage as ReactMessage).reactNode || message.detailedMessage}</Small>\r\n </>\r\n }\r\n </>;\r\n switch (message.priority) {\r\n case OutputMessagePriority.Warning:\r\n return toaster.warning(content, toastOptions);\r\n case OutputMessagePriority.Info:\r\n return toaster.informational(content, toastOptions);\r\n case OutputMessagePriority.Error:\r\n case OutputMessagePriority.Fatal:\r\n return toaster.negative(content, toastOptions);\r\n default:\r\n return toaster.positive(content, toastOptions);\r\n }\r\n }\r\n\r\n /** Output a message and/or alert to the user.\r\n * @param message Details about the message to output.\r\n */\r\n public static addMessage(message: NotifyMessageDetailsType): void {\r\n if (!_.isEqual(message, this._lastMessage)) {\r\n this.addToMessageCenter(message);\r\n this._lastMessage = message;\r\n }\r\n\r\n this._activeMessageManager.add(message);\r\n\r\n this.onMessageAddedEvent.emit({ message });\r\n }\r\n\r\n /** Add a message to the Message Center.\r\n * @param message Details about the message to output.\r\n */\r\n public static addToMessageCenter(message: NotifyMessageDetailsType): void {\r\n this._messages.push(message);\r\n this.onMessagesUpdatedEvent.emit({});\r\n this.checkMaxCachedMessages();\r\n }\r\n\r\n /** Checks number of messages against the maximum. */\r\n private static checkMaxCachedMessages(): void {\r\n if (this._messages.length > this._maxCachedMessages) {\r\n const numToErase = this._maxCachedMessages / 4;\r\n this._messages.splice(0, numToErase);\r\n this.onMessagesUpdatedEvent.emit({});\r\n }\r\n }\r\n\r\n /**\r\n * Sets details for setting up an Activity message.\r\n * @param details Details for setup of ActivityMessage\r\n * @returns true if details is valid and can be used to display ActivityMessage\r\n */\r\n public static setupActivityMessageDetails(details: ActivityMessageDetails): boolean {\r\n this._ongoingActivityMessage.details = details;\r\n this._ongoingActivityMessage.isRestored = details.showDialogInitially;\r\n return true;\r\n }\r\n\r\n /**\r\n * Output an activity message to the user.\r\n * @param message The message text.\r\n * @param percentComplete The percentage of completion.\r\n * @return true if the message was displayed, false if the message could not be displayed.\r\n */\r\n public static outputActivityMessage(message: NotifyMessageType, percentComplete: number): boolean {\r\n return MessageManager.setupActivityMessageValues(message, percentComplete);\r\n }\r\n\r\n /**\r\n * Sets values on _OngoingActivityMessage to be referenced when displaying\r\n * an ActivityMessage.\r\n * @param message Message of the process that ActivityMessage is tracking\r\n * @param percentage Progress made by activity in percentage\r\n * @param restored True if original ActivityMessage has been closed and\r\n * is now being restored from the status bar.\r\n * @returns true if details is valid and can be used to display ActivityMessage\r\n */\r\n public static setupActivityMessageValues(message: NotifyMessageType, percentage: number, restored?: boolean): boolean {\r\n this._ongoingActivityMessage.message = message;\r\n this._ongoingActivityMessage.percentage = percentage;\r\n\r\n this.onActivityMessageUpdatedEvent.emit({\r\n message,\r\n percentage,\r\n details: this._ongoingActivityMessage.details,\r\n restored: (restored !== undefined) ? restored : this._ongoingActivityMessage.isRestored,\r\n });\r\n\r\n this._ongoingActivityMessage.isRestored = false;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Dismisses current ActivityMessage and ends activity if canceled.\r\n * @param isCompleted True if the activity was completed, false if it was canceled\r\n * @returns True if both ActivityMessage and activity process are ended.\r\n */\r\n public static endActivityMessage(isCompleted: boolean): boolean {\r\n this.endActivityProcessing(isCompleted);\r\n this.onActivityMessageCancelledEvent.emit({});\r\n return true;\r\n }\r\n\r\n /**\r\n * Ends processing for activity according to message definition.\r\n * @param isCompleted True if the activity was completed, false if it was canceled\r\n */\r\n private static endActivityProcessing(isCompleted: boolean): void {\r\n if (isCompleted)\r\n this._ongoingActivityMessage.details.onActivityCompleted();\r\n else\r\n this._ongoingActivityMessage.details.onActivityCancelled();\r\n }\r\n\r\n /**\r\n * Displays an input field message near target element.\r\n * @param target The currently focused or recently focused element to place the\r\n * input field message near.\r\n * @param messageText Text to display in the message.\r\n * @param detailedMessage Optional detailed message text to display.\r\n * @param priority Optional message priority which controls icon to display.\r\n */\r\n public static displayInputFieldMessage(target: HTMLElement, messageText: NotifyMessageType, detailedMessage: NotifyMessageType = \"\", priority = OutputMessagePriority.Error) {\r\n this.onInputFieldMessageAddedEvent.emit({\r\n target,\r\n messageText,\r\n detailedMessage,\r\n priority,\r\n });\r\n }\r\n\r\n /**\r\n * Hides the currently displayed input field message.\r\n */\r\n public static hideInputFieldMessage() {\r\n this.onInputFieldMessageRemovedEvent.emit({});\r\n }\r\n\r\n /**\r\n * Opens message center.\r\n */\r\n public static openMessageCenter() {\r\n this.onOpenMessageCenterEvent.emit({});\r\n }\r\n\r\n /** Output a prompt to the user. A 'prompt' indicates an action the user should take to proceed. */\r\n public static outputPrompt(prompt: string): void {\r\n UiFramework.dispatchActionToStore(ConfigurableUiActionId.SetToolPrompt, prompt, true);\r\n }\r\n\r\n /** Gets an icon CSS class name based on a given NotifyMessageDetailsType. */\r\n public static getIconClassName(details: NotifyMessageDetailsType): string {\r\n const severity = MessageManager.getSeverity(details);\r\n const className = MessageContainer.getIconClassName(severity, false);\r\n const iconClassName = classnames(\"icon\", \"notifymessage-icon\", className);\r\n\r\n return iconClassName;\r\n }\r\n\r\n /** Gets a MessageSeverity based on a given NotifyMessageDetailsType. */\r\n public static getSeverity(details: NotifyMessageDetailsType): MessageSeverity {\r\n let severity = MessageSeverity.None;\r\n\r\n switch (details.priority) {\r\n case OutputMessagePriority.None:\r\n severity = MessageSeverity.Success;\r\n break;\r\n case OutputMessagePriority.Success:\r\n severity = MessageSeverity.Success;\r\n break;\r\n case OutputMessagePriority.Info:\r\n severity = MessageSeverity.Information;\r\n break;\r\n case OutputMessagePriority.Warning:\r\n severity = MessageSeverity.Warning;\r\n break;\r\n case OutputMessagePriority.Error:\r\n severity = MessageSeverity.Error;\r\n break;\r\n case OutputMessagePriority.Fatal:\r\n severity = MessageSeverity.Fatal;\r\n break;\r\n }\r\n\r\n return severity;\r\n }\r\n\r\n /** Gets a MessageBoxIconType based on a given NotifyMessageDetailsType. */\r\n public static getIconType(details: NotifyMessageDetailsType): MessageBoxIconType {\r\n let iconType = MessageBoxIconType.NoSymbol;\r\n\r\n switch (details.priority) {\r\n case OutputMessagePriority.None:\r\n iconType = MessageBoxIconType.NoSymbol;\r\n break;\r\n case OutputMessagePriority.Success:\r\n iconType = MessageBoxIconType.Success;\r\n break;\r\n case OutputMessagePriority.Info:\r\n iconType = MessageBoxIconType.Information;\r\n break;\r\n case OutputMessagePriority.Warning:\r\n iconType = MessageBoxIconType.Warning;\r\n break;\r\n case OutputMessagePriority.Error:\r\n iconType = MessageBoxIconType.Critical;\r\n break;\r\n case OutputMessagePriority.Fatal:\r\n iconType = MessageBoxIconType.Critical;\r\n break;\r\n }\r\n\r\n return iconType;\r\n }\r\n\r\n /** Output a MessageBox and wait for response from the user.\r\n * @param mbType The MessageBox type.\r\n * @param message The message to display.\r\n * @param icon The MessageBox icon type.\r\n * @return the response from the user.\r\n */\r\n public static async openMessageBox(mbType: MessageBoxType, message: NotifyMessageType, icon: MessageBoxIconType): Promise<MessageBoxValue> {\r\n const title = UiFramework.translate(\"general.alert\");\r\n\r\n return new Promise((onFulfilled: (result: MessageBoxValue) => void, onRejected: (reason: any) => void) => {\r\n const messageBoxCallbacks = new MessageBoxCallbacks(onFulfilled, onRejected);\r\n const messageElement = <MessageSpan message={message} />;\r\n ModalDialogManager.openDialog(this.standardMessageBox(mbType, icon, title, messageElement, messageBoxCallbacks));\r\n });\r\n }\r\n\r\n /** @internal */\r\n public static showAlertMessageBox(messageDetails: NotifyMessageDetailsType): void {\r\n const title = UiFramework.translate(\"general.alert\");\r\n const iconType = this.getIconType(messageDetails);\r\n const content = (\r\n <>\r\n <MessageSpan message={messageDetails.briefMessage} />\r\n {\r\n messageDetails.detailedMessage && (\r\n <p>\r\n <MessageSpan message={messageDetails.detailedMessage} />\r\n </p>\r\n )\r\n }\r\n </>\r\n );\r\n ModalDialogManager.openDialog(this.standardMessageBox(MessageBoxType.Ok, iconType, title, content));\r\n }\r\n\r\n private static standardMessageBox(mbType: MessageBoxType, iconType: MessageBoxIconType, title: string, messageElement: React.ReactNode, callbacks?: MessageBoxCallbacks): React.ReactNode {\r\n const onResult = (callbacks !== undefined) ? callbacks.handleMessageBoxResult : undefined;\r\n return (\r\n <StandardMessageBox\r\n opened={true}\r\n messageBoxType={mbType}\r\n iconType={iconType}\r\n title={title}\r\n onResult={onResult}\r\n >\r\n {messageElement}\r\n </StandardMessageBox>\r\n );\r\n }\r\n\r\n /** Setup tool assistance instructions for a tool. The instructions include the main instruction, which includes the current prompt.\r\n * @param instructions The tool assistance instructions.\r\n * @public\r\n */\r\n public static setToolAssistance(instructions: ToolAssistanceInstructions | undefined) {\r\n MessageManager.onToolAssistanceChangedEvent.emit({ instructions });\r\n }\r\n\r\n /** Show a tooltip window. Saves tooltip location for AccuSnap to test if cursor has moved far enough away to close tooltip.\r\n * @param htmlElement The HTMLElement that anchors the tooltip.\r\n * @param message What to display inside the tooltip.\r\n * @param location An optional location, relative to the origin of htmlElement, for the tooltip. If undefined, center of `htmlElement`.\r\n * @param options Options that supply additional information about how the tooltip should function.\r\n */\r\n public static openToolTip(htmlElement: HTMLElement, message: NotifyMessageType, location?: XAndY, options?: ToolTipOptions): void {\r\n IModelApp.notifications.toolTipLocation.setFrom(location);\r\n ElementTooltip.showTooltip(htmlElement, message, location, options);\r\n }\r\n\r\n /** @internal */\r\n public static closeAllMessages(): void {\r\n ElementTooltip.hideTooltip();\r\n PointerMessage.hideMessage();\r\n MessageManager.clearMessages();\r\n MessageManager.hideInputFieldMessage();\r\n MessageManager.endActivityMessage(false);\r\n }\r\n\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentLayout.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAA8E,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrK,wCAAwC;AACxC,UAAU,mBAAoB,SAAQ,WAAW;IAC/C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAmDxD;AA4FD;GACG;AACH,UAAU,WAAW;IACnB,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7F,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6JD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAM;IACvB,iCAAiC;IAC1B,WAAW,EAAE,MAAM,CAAM;gBACpB,WAAW,EAAE,kBAAkB;IAO3C,IAAW,SAAS,IAAI,WAAW,GAAG,SAAS,CAA4B;IAE3E;;OAEG;IACI,MAAM,IAAI,kBAAkB;IAEnC;OACG;IACI,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS;IAa5G;OACG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAexC,OAAO,CAAC,gCAAgC;IAuBxC,OAAO,CAAC,8BAA8B;IAuBtC,gBAAgB;WACF,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,WAAW,GAAG,SAAS;CAUrF;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,OAAO,CAAC,+BAA+B,CAAC;CAAI;AAE7F;GACG;AACH,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC9D,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B;;MAEE;IACF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;IAEjG,gBAAgB;IAChB,SAAyB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAEjD,KAAK,EAAE,2BAA2B;IAgB9B,iBAAiB;IAIjB,oBAAoB;IAIpC,OAAO,CAAC,6BAA6B,CAYnC;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IAezC,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,UAAU,CAEhB;CACH"}
1
+ {"version":3,"file":"ContentLayout.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAA8E,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrK,wCAAwC;AACxC,UAAU,mBAAoB,SAAQ,WAAW;IAC/C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAqExD;AA4FD;GACG;AACH,UAAU,WAAW;IACnB,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7F,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6JD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAM;IACvB,iCAAiC;IAC1B,WAAW,EAAE,MAAM,CAAM;gBACpB,WAAW,EAAE,kBAAkB;IAO3C,IAAW,SAAS,IAAI,WAAW,GAAG,SAAS,CAA4B;IAE3E;;OAEG;IACI,MAAM,IAAI,kBAAkB;IAEnC;OACG;IACI,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS;IAa5G;OACG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAexC,OAAO,CAAC,gCAAgC;IAuBxC,OAAO,CAAC,8BAA8B;IAuBtC,gBAAgB;WACF,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,WAAW,GAAG,SAAS;CAUrF;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,OAAO,CAAC,+BAA+B,CAAC;CAAI;AAE7F;GACG;AACH,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC9D,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B;;MAEE;IACF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;IAEjG,gBAAgB;IAChB,SAAyB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAEjD,KAAK,EAAE,2BAA2B;IAgB9B,iBAAiB;IAIjB,oBAAoB;IAIpC,OAAO,CAAC,6BAA6B,CAYnC;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IAezC,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,UAAU,CAEhB;CACH"}
@@ -23,6 +23,15 @@ export function ContentWrapper(props) {
23
23
  const { content } = props;
24
24
  const [isActive, setIsActive] = React.useState(content === ContentViewManager.getActiveContent());
25
25
  const activeFrontstageDef = useActiveFrontstageDef();
26
+ const contentControlKey = (contentControl) => {
27
+ let controlId;
28
+ if (contentControl && contentControl.key) {
29
+ const key = contentControl.key;
30
+ // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id
31
+ controlId = key.split("::", 1)[0];
32
+ }
33
+ return controlId;
34
+ };
26
35
  // istanbul ignore next
27
36
  const [hasMultipleContents, setHasMultipleContents] = React.useState(() => {
28
37
  var _a, _b, _c;
@@ -35,7 +44,14 @@ export function ContentWrapper(props) {
35
44
  React.useEffect(() => {
36
45
  const handleActiveContentChanged = (args) => {
37
46
  var _a, _b, _c;
38
- setIsActive(content === args.activeContent);
47
+ const contentIsIdentical = content === args.activeContent;
48
+ if (contentIsIdentical)
49
+ setIsActive(contentIsIdentical);
50
+ else {
51
+ const contentId = contentControlKey(content);
52
+ const activeContentId = contentControlKey(args.activeContent);
53
+ setIsActive(contentId === activeContentId);
54
+ }
39
55
  // istanbul ignore next
40
56
  setHasMultipleContents((activeFrontstageDef && (!!((_a = activeFrontstageDef.floatingContentControls) === null || _a === void 0 ? void 0 : _a.length)) ||
41
57
  ((_c = (_b = activeFrontstageDef === null || activeFrontstageDef === void 0 ? void 0 : activeFrontstageDef.contentGroup) === null || _b === void 0 ? void 0 : _b.getContentControls().length) !== null && _c !== void 0 ? _c : 0) > 1));
@@ -44,6 +60,7 @@ export function ContentWrapper(props) {
44
60
  }, [activeFrontstageDef, content]);
45
61
  const handleMouseDown = React.useCallback(() => {
46
62
  ContentViewManager.setActiveContent(content);
63
+ setIsActive(true);
47
64
  }, [content]);
48
65
  React.useEffect(() => {
49
66
  const onAvailableContentChanged = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"ContentLayout.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\n// cSpell:ignore contentlayout\r\n\r\nimport \"./ContentLayout.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { SplitPane } from \"./split-pane/SplitPane\";\r\nimport { CommonProps, Orientation } from \"@itwin/core-react\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { ContentLayoutProps, LayoutFragmentProps, LayoutHorizontalSplitProps, LayoutSplitPropsBase, LayoutVerticalSplitProps, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { ActiveContentChangedEventArgs, ContentViewManager } from \"./ContentViewManager\";\r\nimport { useActiveFrontstageDef } from \"../frontstage/Frontstage\";\r\n\r\n/** Properties for [[ContentWrapper]] */\r\ninterface ContentWrapperProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** ContentWrapper React component.\r\n * @internal\r\n */\r\nexport function ContentWrapper(props: ContentWrapperProps) {\r\n const { content } = props;\r\n const [isActive, setIsActive] = React.useState(content === ContentViewManager.getActiveContent());\r\n const activeFrontstageDef = useActiveFrontstageDef();\r\n\r\n // istanbul ignore next\r\n const [hasMultipleContents, setHasMultipleContents] = React.useState(() =>\r\n (activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1)\r\n );\r\n\r\n React.useEffect(() => {\r\n setIsActive(content === ContentViewManager.getActiveContent());\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const handleActiveContentChanged = (args: ActiveContentChangedEventArgs) => {\r\n setIsActive(content === args.activeContent);\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onActiveContentChangedEvent.addListener(handleActiveContentChanged);\r\n }, [activeFrontstageDef, content]);\r\n\r\n const handleMouseDown = React.useCallback(() => {\r\n ContentViewManager.setActiveContent(content);\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const onAvailableContentChanged = () => {\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onAvailableContentChangedEvent.addListener(onAvailableContentChanged);\r\n }, [activeFrontstageDef]);\r\n\r\n const overlayClassName = classnames(\r\n \"uifw-contentlayout-overlay-div\",\r\n isActive && hasMultipleContents ? \"uifw-contentlayout-overlay-active\" : \"uifw-contentlayout-overlay-inactive\",\r\n );\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-wrapper\", props.className)} style={props.style}\r\n onMouseDown={handleMouseDown} onMouseMove={UiShowHideManager.handleContentMouseMove} role=\"presentation\"\r\n >\r\n {content}\r\n <div className={overlayClassName} />\r\n </div>\r\n );\r\n}\r\n\r\n/** Properties for the [[SplitContainer]] component */\r\ninterface SplitContainerProps extends CommonProps {\r\n contentA: React.ReactNode;\r\n contentB: React.ReactNode;\r\n orientation: Orientation;\r\n percentage: number;\r\n resizable: boolean;\r\n minSizeTopLeft: number;\r\n minSizeBottomRight: number;\r\n splitterStateId?: string;\r\n onSplitterChange?: (size: number, percentage: number) => void;\r\n}\r\n\r\n/** Split Container class.\r\n */\r\nclass SplitContainer extends React.Component<SplitContainerProps> {\r\n private _containerDiv: HTMLDivElement | null = null;\r\n\r\n constructor(props: SplitContainerProps) {\r\n super(props);\r\n }\r\n\r\n private _onSplitterChange = (size: number): void => {\r\n let percentage = 0;\r\n\r\n // istanbul ignore else\r\n if (this._containerDiv && size > 0) {\r\n if (this.props.orientation === Orientation.Horizontal) {\r\n const height = this._containerDiv.getBoundingClientRect().height;\r\n // istanbul ignore if\r\n if (height > 0)\r\n percentage = size / height;\r\n } else {\r\n const width = this._containerDiv.getBoundingClientRect().width;\r\n // istanbul ignore if\r\n if (width > 0)\r\n percentage = size / width;\r\n }\r\n\r\n // istanbul ignore else\r\n if (this.props.onSplitterChange)\r\n this.props.onSplitterChange(size, percentage);\r\n }\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const orientation = (this.props.orientation === Orientation.Horizontal) ? \"horizontal\" : \"vertical\";\r\n const defaultSize = `${(this.props.percentage * 100).toString()}%`;\r\n const minSizeTopLeft = this.props.minSizeTopLeft;\r\n const minSizeBottomRight = -(this.props.minSizeBottomRight);\r\n\r\n return (\r\n <div ref={(e) => { this._containerDiv = e; }}\r\n className={classnames(\"uifw-contentlayout-full-size\", this.props.className)}\r\n style={this.props.style}\r\n >\r\n <SplitPane split={orientation}\r\n minSize={minSizeTopLeft} maxSize={minSizeBottomRight} defaultSize={defaultSize}\r\n onChange={this._onSplitterChange} allowResize={this.props.resizable}\r\n >\r\n {this.props.contentA}\r\n {this.props.contentB}\r\n </SplitPane>\r\n </div >\r\n );\r\n }\r\n}\r\n\r\n/** Properties for [[SingleContentContainer]] component\r\n */\r\ninterface SingleContentProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** Single Content Container class.\r\n */\r\nclass SingleContentContainer extends React.Component<SingleContentProps> {\r\n\r\n public override render(): React.ReactNode {\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-full-size\", this.props.className)} style={this.props.style} data-testid=\"single-content-container\"\r\n onMouseMove={UiShowHideManager.handleContentMouseMove}\r\n >\r\n <ContentWrapper content={this.props.content} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Common interface for HorizontalSplit and VerticalSplit\r\n */\r\ninterface LayoutSplit {\r\n createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode;\r\n isLocked: boolean;\r\n}\r\n\r\n/** Minimum split size */\r\nconst MIN_SPLIT_SIZE = 6;\r\n\r\n/** Base Split class.\r\n */\r\nclass BaseSplit {\r\n public defaultPercentage: number;\r\n public stateId: string = \"\";\r\n public isLocked: boolean = false;\r\n\r\n constructor(props: LayoutSplitPropsBase) {\r\n this.defaultPercentage = props.percentage;\r\n\r\n // istanbul ignore else\r\n if (props.id)\r\n this.stateId = props.id;\r\n\r\n // istanbul ignore else\r\n if (props.lock)\r\n this.isLocked = props.lock;\r\n }\r\n}\r\n\r\n/** Horizontal Split class.\r\n */\r\nclass HorizontalSplit extends BaseSplit implements LayoutSplit {\r\n private _topIndex: number = -1;\r\n private _bottomIndex: number = -1;\r\n private _topSplit?: LayoutSplit;\r\n private _bottomSplit?: LayoutSplit;\r\n private _props: LayoutHorizontalSplitProps;\r\n private _minSizeTop: number = MIN_SPLIT_SIZE;\r\n private _minSizeBottom: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutHorizontalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.top === \"number\") {\r\n this._topIndex = props.top;\r\n } else {\r\n this._topSplit = ContentLayoutDef.createSplit(props.top);\r\n }\r\n\r\n if (typeof props.bottom === \"number\") {\r\n this._bottomIndex = props.bottom;\r\n } else {\r\n this._bottomSplit = ContentLayoutDef.createSplit(props.bottom);\r\n }\r\n\r\n if (props.minSizeTop)\r\n this._minSizeTop = Math.max(props.minSizeTop, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeBottom)\r\n this._minSizeBottom = Math.max(props.minSizeBottom, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const topContent = (!this._topSplit) ?\r\n <ContentWrapper content={contentNodes[this._topIndex]} /> :\r\n this._topSplit.createContentContainer(contentNodes, resizable);\r\n const bottomContent = (!this._bottomSplit) ?\r\n <ContentWrapper content={contentNodes[this._bottomIndex]} /> :\r\n this._bottomSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={topContent}\r\n contentB={bottomContent}\r\n orientation={Orientation.Horizontal}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeTop}\r\n minSizeBottomRight={this._minSizeBottom}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Vertical Split class.\r\n */\r\nclass VerticalSplit extends BaseSplit implements LayoutSplit {\r\n private _leftIndex: number = -1;\r\n private _rightIndex: number = -1;\r\n private _leftSplit?: LayoutSplit;\r\n private _rightSplit?: LayoutSplit;\r\n private _props: LayoutVerticalSplitProps;\r\n private _minSizeLeft: number = MIN_SPLIT_SIZE;\r\n private _minSizeRight: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutVerticalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.left === \"number\") {\r\n this._leftIndex = props.left;\r\n } else {\r\n this._leftSplit = ContentLayoutDef.createSplit(props.left);\r\n }\r\n\r\n if (typeof props.right === \"number\") {\r\n this._rightIndex = props.right;\r\n } else {\r\n this._rightSplit = ContentLayoutDef.createSplit(props.right);\r\n }\r\n\r\n if (props.minSizeLeft)\r\n this._minSizeLeft = Math.max(props.minSizeLeft, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeRight)\r\n this._minSizeRight = Math.max(props.minSizeRight, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const leftContent = (!this._leftSplit) ?\r\n <ContentWrapper content={contentNodes[this._leftIndex]} /> :\r\n this._leftSplit.createContentContainer(contentNodes, resizable);\r\n const rightContent = (!this._rightSplit) ?\r\n <ContentWrapper content={contentNodes[this._rightIndex]} /> :\r\n this._rightSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={leftContent}\r\n contentB={rightContent}\r\n orientation={Orientation.Vertical}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeLeft}\r\n minSizeBottomRight={this._minSizeRight}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Content Layout Definition class.\r\n * @public\r\n */\r\nexport class ContentLayoutDef {\r\n private _layoutProps: ContentLayoutProps;\r\n private _rootSplit?: LayoutSplit;\r\n\r\n /** ID for this Content Layout */\r\n public id: string = \"\";\r\n /** Description of the layout. */\r\n public description: string = \"\";\r\n constructor(layoutProps: ContentLayoutProps) {\r\n this._layoutProps = layoutProps;\r\n this.id = layoutProps.id;\r\n if (layoutProps.description !== undefined)\r\n this.description = layoutProps.description;\r\n }\r\n\r\n public get rootSplit(): LayoutSplit | undefined { return this._rootSplit; }\r\n\r\n /** Creates [[ContentLayoutProps]] for JSON purposes\r\n * @public\r\n */\r\n public toJSON(): ContentLayoutProps { return this._layoutProps; }\r\n\r\n /** Fill a layout container with React nodes for each content view\r\n */\r\n public fillLayoutContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode | undefined {\r\n this._rootSplit = ContentLayoutDef.createSplit(this._layoutProps);\r\n\r\n if (this.rootSplit) {\r\n return this.rootSplit.createContentContainer(contentNodes, resizable);\r\n }\r\n\r\n if (contentNodes.length > 0)\r\n return <SingleContentContainer content={contentNodes[0]} />;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Gets the indexes of content views used in this Content Layout\r\n */\r\n public getUsedContentIndexes(): number[] {\r\n let allContentIndexes: number[] = [];\r\n\r\n if (!this._layoutProps.horizontalSplit && !this._layoutProps.verticalSplit)\r\n allContentIndexes.push(0);\r\n else {\r\n allContentIndexes = allContentIndexes.concat(this.getHorizontalSplitContentIndexes(this._layoutProps.horizontalSplit));\r\n allContentIndexes = allContentIndexes.concat(this.getVerticalSplitContentIndexes(this._layoutProps.verticalSplit));\r\n }\r\n\r\n const uniqueContentIndexes = [...new Set(allContentIndexes)];\r\n\r\n return uniqueContentIndexes;\r\n }\r\n\r\n private getHorizontalSplitContentIndexes(splitProps?: LayoutHorizontalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.top === \"number\")\r\n contentIndexes.push(splitProps.top);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.top.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.top.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.bottom === \"number\")\r\n contentIndexes.push(splitProps.bottom);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.bottom.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.bottom.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n private getVerticalSplitContentIndexes(splitProps?: LayoutVerticalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.left === \"number\")\r\n contentIndexes.push(splitProps.left);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.left.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.left.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.right === \"number\")\r\n contentIndexes.push(splitProps.right);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.right.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.right.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n /** @internal */\r\n public static createSplit(fragmentDef: LayoutFragmentProps): LayoutSplit | undefined {\r\n if (fragmentDef.horizontalSplit) {\r\n return new HorizontalSplit(fragmentDef.horizontalSplit);\r\n } else if (fragmentDef.verticalSplit) {\r\n return new VerticalSplit(fragmentDef.verticalSplit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** Content Layout Activated Event Args class.\r\n * @public\r\n */\r\nexport interface ContentLayoutActivatedEventArgs {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n}\r\n\r\n/** Content Layout Activated Event class.\r\n * @public\r\n */\r\nexport class ContentLayoutActivatedEvent extends UiEvent<ContentLayoutActivatedEventArgs> { }\r\n\r\n/** State for the [[ContentLayout]].\r\n */\r\ninterface ContentLayoutState {\r\n contentLayoutDef: ContentLayoutDef;\r\n contentContainer?: React.ReactNode;\r\n contentGroupId?: string;\r\n}\r\n\r\n/** Properties for the [[ContentLayout]] React component.\r\n * @public\r\n */\r\nexport interface ContentLayoutComponentProps extends CommonProps {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n /**\r\n * @deprecated In upcoming version, widget mode will be removed and footer mode will always be true.\r\n */\r\n isInFooterMode?: boolean;\r\n}\r\n\r\n/** Content Layout React component.\r\n * @public\r\n */\r\nexport class ContentLayout extends React.Component<ContentLayoutComponentProps, ContentLayoutState> {\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<ContentLayoutState>;\r\n\r\n constructor(props: ContentLayoutComponentProps) {\r\n super(props);\r\n\r\n const contentLayoutDef = this.props.contentLayout;\r\n const contentGroup = this.props.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.state = {\r\n contentLayoutDef: this.props.contentLayout,\r\n contentContainer,\r\n contentGroupId: this.props.contentGroup.groupId,\r\n };\r\n }\r\n\r\n public override componentDidMount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.addListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.removeListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n private _handleContentLayoutActivated = (args: ContentLayoutActivatedEventArgs) => {\r\n const contentLayoutDef = args.contentLayout;\r\n const contentGroup = args.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.setState({\r\n contentLayoutDef: args.contentLayout,\r\n contentContainer,\r\n contentGroupId: contentGroup.groupId,\r\n });\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n if (this.state.contentContainer) {\r\n return (\r\n <div id=\"uifw-contentlayout-div\" className={this.props.className} style={this.props.style}\r\n key={`${this.state.contentGroupId}-${this.state.contentLayoutDef.id}`}\r\n onMouseDown={this._onMouseDown} onMouseUp={this._onMouseUp} role=\"presentation\"\r\n >\r\n {this.state.contentContainer}\r\n </div>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _onMouseDown = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(true);\r\n };\r\n\r\n private _onMouseUp = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(false);\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"ContentLayout.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\n// cSpell:ignore contentlayout\r\n\r\nimport \"./ContentLayout.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { SplitPane } from \"./split-pane/SplitPane\";\r\nimport { CommonProps, Orientation } from \"@itwin/core-react\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { ContentLayoutProps, LayoutFragmentProps, LayoutHorizontalSplitProps, LayoutSplitPropsBase, LayoutVerticalSplitProps, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { ActiveContentChangedEventArgs, ContentViewManager } from \"./ContentViewManager\";\r\nimport { useActiveFrontstageDef } from \"../frontstage/Frontstage\";\r\n\r\n/** Properties for [[ContentWrapper]] */\r\ninterface ContentWrapperProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** ContentWrapper React component.\r\n * @internal\r\n */\r\nexport function ContentWrapper(props: ContentWrapperProps) {\r\n const { content } = props;\r\n const [isActive, setIsActive] = React.useState(content === ContentViewManager.getActiveContent());\r\n const activeFrontstageDef = useActiveFrontstageDef();\r\n\r\n const contentControlKey = (contentControl: React.ReactNode): string | undefined => {\r\n let controlId: string | undefined;\r\n if (contentControl && (contentControl as React.ReactElement<any>).key) {\r\n const key = ((contentControl as React.ReactElement<any>).key as string);\r\n // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id\r\n controlId = key.split(\"::\", 1)[0];\r\n }\r\n return controlId;\r\n };\r\n\r\n // istanbul ignore next\r\n const [hasMultipleContents, setHasMultipleContents] = React.useState(() =>\r\n (activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1)\r\n );\r\n\r\n React.useEffect(() => {\r\n setIsActive(content === ContentViewManager.getActiveContent());\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const handleActiveContentChanged = (args: ActiveContentChangedEventArgs) => {\r\n const contentIsIdentical = content === args.activeContent;\r\n if (contentIsIdentical)\r\n setIsActive(contentIsIdentical);\r\n else {\r\n const contentId = contentControlKey(content);\r\n const activeContentId = contentControlKey(args.activeContent);\r\n setIsActive(contentId === activeContentId);\r\n }\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onActiveContentChangedEvent.addListener(handleActiveContentChanged);\r\n }, [activeFrontstageDef, content]);\r\n\r\n const handleMouseDown = React.useCallback(() => {\r\n ContentViewManager.setActiveContent(content);\r\n setIsActive(true);\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const onAvailableContentChanged = () => {\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onAvailableContentChangedEvent.addListener(onAvailableContentChanged);\r\n }, [activeFrontstageDef]);\r\n\r\n const overlayClassName = classnames(\r\n \"uifw-contentlayout-overlay-div\",\r\n isActive && hasMultipleContents ? \"uifw-contentlayout-overlay-active\" : \"uifw-contentlayout-overlay-inactive\",\r\n );\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-wrapper\", props.className)} style={props.style}\r\n onMouseDown={handleMouseDown} onMouseMove={UiShowHideManager.handleContentMouseMove} role=\"presentation\"\r\n >\r\n {content}\r\n <div className={overlayClassName} />\r\n </div>\r\n );\r\n}\r\n\r\n/** Properties for the [[SplitContainer]] component */\r\ninterface SplitContainerProps extends CommonProps {\r\n contentA: React.ReactNode;\r\n contentB: React.ReactNode;\r\n orientation: Orientation;\r\n percentage: number;\r\n resizable: boolean;\r\n minSizeTopLeft: number;\r\n minSizeBottomRight: number;\r\n splitterStateId?: string;\r\n onSplitterChange?: (size: number, percentage: number) => void;\r\n}\r\n\r\n/** Split Container class.\r\n */\r\nclass SplitContainer extends React.Component<SplitContainerProps> {\r\n private _containerDiv: HTMLDivElement | null = null;\r\n\r\n constructor(props: SplitContainerProps) {\r\n super(props);\r\n }\r\n\r\n private _onSplitterChange = (size: number): void => {\r\n let percentage = 0;\r\n\r\n // istanbul ignore else\r\n if (this._containerDiv && size > 0) {\r\n if (this.props.orientation === Orientation.Horizontal) {\r\n const height = this._containerDiv.getBoundingClientRect().height;\r\n // istanbul ignore if\r\n if (height > 0)\r\n percentage = size / height;\r\n } else {\r\n const width = this._containerDiv.getBoundingClientRect().width;\r\n // istanbul ignore if\r\n if (width > 0)\r\n percentage = size / width;\r\n }\r\n\r\n // istanbul ignore else\r\n if (this.props.onSplitterChange)\r\n this.props.onSplitterChange(size, percentage);\r\n }\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const orientation = (this.props.orientation === Orientation.Horizontal) ? \"horizontal\" : \"vertical\";\r\n const defaultSize = `${(this.props.percentage * 100).toString()}%`;\r\n const minSizeTopLeft = this.props.minSizeTopLeft;\r\n const minSizeBottomRight = -(this.props.minSizeBottomRight);\r\n\r\n return (\r\n <div ref={(e) => { this._containerDiv = e; }}\r\n className={classnames(\"uifw-contentlayout-full-size\", this.props.className)}\r\n style={this.props.style}\r\n >\r\n <SplitPane split={orientation}\r\n minSize={minSizeTopLeft} maxSize={minSizeBottomRight} defaultSize={defaultSize}\r\n onChange={this._onSplitterChange} allowResize={this.props.resizable}\r\n >\r\n {this.props.contentA}\r\n {this.props.contentB}\r\n </SplitPane>\r\n </div >\r\n );\r\n }\r\n}\r\n\r\n/** Properties for [[SingleContentContainer]] component\r\n */\r\ninterface SingleContentProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** Single Content Container class.\r\n */\r\nclass SingleContentContainer extends React.Component<SingleContentProps> {\r\n\r\n public override render(): React.ReactNode {\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-full-size\", this.props.className)} style={this.props.style} data-testid=\"single-content-container\"\r\n onMouseMove={UiShowHideManager.handleContentMouseMove}\r\n >\r\n <ContentWrapper content={this.props.content} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Common interface for HorizontalSplit and VerticalSplit\r\n */\r\ninterface LayoutSplit {\r\n createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode;\r\n isLocked: boolean;\r\n}\r\n\r\n/** Minimum split size */\r\nconst MIN_SPLIT_SIZE = 6;\r\n\r\n/** Base Split class.\r\n */\r\nclass BaseSplit {\r\n public defaultPercentage: number;\r\n public stateId: string = \"\";\r\n public isLocked: boolean = false;\r\n\r\n constructor(props: LayoutSplitPropsBase) {\r\n this.defaultPercentage = props.percentage;\r\n\r\n // istanbul ignore else\r\n if (props.id)\r\n this.stateId = props.id;\r\n\r\n // istanbul ignore else\r\n if (props.lock)\r\n this.isLocked = props.lock;\r\n }\r\n}\r\n\r\n/** Horizontal Split class.\r\n */\r\nclass HorizontalSplit extends BaseSplit implements LayoutSplit {\r\n private _topIndex: number = -1;\r\n private _bottomIndex: number = -1;\r\n private _topSplit?: LayoutSplit;\r\n private _bottomSplit?: LayoutSplit;\r\n private _props: LayoutHorizontalSplitProps;\r\n private _minSizeTop: number = MIN_SPLIT_SIZE;\r\n private _minSizeBottom: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutHorizontalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.top === \"number\") {\r\n this._topIndex = props.top;\r\n } else {\r\n this._topSplit = ContentLayoutDef.createSplit(props.top);\r\n }\r\n\r\n if (typeof props.bottom === \"number\") {\r\n this._bottomIndex = props.bottom;\r\n } else {\r\n this._bottomSplit = ContentLayoutDef.createSplit(props.bottom);\r\n }\r\n\r\n if (props.minSizeTop)\r\n this._minSizeTop = Math.max(props.minSizeTop, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeBottom)\r\n this._minSizeBottom = Math.max(props.minSizeBottom, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const topContent = (!this._topSplit) ?\r\n <ContentWrapper content={contentNodes[this._topIndex]} /> :\r\n this._topSplit.createContentContainer(contentNodes, resizable);\r\n const bottomContent = (!this._bottomSplit) ?\r\n <ContentWrapper content={contentNodes[this._bottomIndex]} /> :\r\n this._bottomSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={topContent}\r\n contentB={bottomContent}\r\n orientation={Orientation.Horizontal}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeTop}\r\n minSizeBottomRight={this._minSizeBottom}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Vertical Split class.\r\n */\r\nclass VerticalSplit extends BaseSplit implements LayoutSplit {\r\n private _leftIndex: number = -1;\r\n private _rightIndex: number = -1;\r\n private _leftSplit?: LayoutSplit;\r\n private _rightSplit?: LayoutSplit;\r\n private _props: LayoutVerticalSplitProps;\r\n private _minSizeLeft: number = MIN_SPLIT_SIZE;\r\n private _minSizeRight: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutVerticalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.left === \"number\") {\r\n this._leftIndex = props.left;\r\n } else {\r\n this._leftSplit = ContentLayoutDef.createSplit(props.left);\r\n }\r\n\r\n if (typeof props.right === \"number\") {\r\n this._rightIndex = props.right;\r\n } else {\r\n this._rightSplit = ContentLayoutDef.createSplit(props.right);\r\n }\r\n\r\n if (props.minSizeLeft)\r\n this._minSizeLeft = Math.max(props.minSizeLeft, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeRight)\r\n this._minSizeRight = Math.max(props.minSizeRight, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const leftContent = (!this._leftSplit) ?\r\n <ContentWrapper content={contentNodes[this._leftIndex]} /> :\r\n this._leftSplit.createContentContainer(contentNodes, resizable);\r\n const rightContent = (!this._rightSplit) ?\r\n <ContentWrapper content={contentNodes[this._rightIndex]} /> :\r\n this._rightSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={leftContent}\r\n contentB={rightContent}\r\n orientation={Orientation.Vertical}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeLeft}\r\n minSizeBottomRight={this._minSizeRight}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Content Layout Definition class.\r\n * @public\r\n */\r\nexport class ContentLayoutDef {\r\n private _layoutProps: ContentLayoutProps;\r\n private _rootSplit?: LayoutSplit;\r\n\r\n /** ID for this Content Layout */\r\n public id: string = \"\";\r\n /** Description of the layout. */\r\n public description: string = \"\";\r\n constructor(layoutProps: ContentLayoutProps) {\r\n this._layoutProps = layoutProps;\r\n this.id = layoutProps.id;\r\n if (layoutProps.description !== undefined)\r\n this.description = layoutProps.description;\r\n }\r\n\r\n public get rootSplit(): LayoutSplit | undefined { return this._rootSplit; }\r\n\r\n /** Creates [[ContentLayoutProps]] for JSON purposes\r\n * @public\r\n */\r\n public toJSON(): ContentLayoutProps { return this._layoutProps; }\r\n\r\n /** Fill a layout container with React nodes for each content view\r\n */\r\n public fillLayoutContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode | undefined {\r\n this._rootSplit = ContentLayoutDef.createSplit(this._layoutProps);\r\n\r\n if (this.rootSplit) {\r\n return this.rootSplit.createContentContainer(contentNodes, resizable);\r\n }\r\n\r\n if (contentNodes.length > 0)\r\n return <SingleContentContainer content={contentNodes[0]} />;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Gets the indexes of content views used in this Content Layout\r\n */\r\n public getUsedContentIndexes(): number[] {\r\n let allContentIndexes: number[] = [];\r\n\r\n if (!this._layoutProps.horizontalSplit && !this._layoutProps.verticalSplit)\r\n allContentIndexes.push(0);\r\n else {\r\n allContentIndexes = allContentIndexes.concat(this.getHorizontalSplitContentIndexes(this._layoutProps.horizontalSplit));\r\n allContentIndexes = allContentIndexes.concat(this.getVerticalSplitContentIndexes(this._layoutProps.verticalSplit));\r\n }\r\n\r\n const uniqueContentIndexes = [...new Set(allContentIndexes)];\r\n\r\n return uniqueContentIndexes;\r\n }\r\n\r\n private getHorizontalSplitContentIndexes(splitProps?: LayoutHorizontalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.top === \"number\")\r\n contentIndexes.push(splitProps.top);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.top.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.top.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.bottom === \"number\")\r\n contentIndexes.push(splitProps.bottom);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.bottom.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.bottom.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n private getVerticalSplitContentIndexes(splitProps?: LayoutVerticalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.left === \"number\")\r\n contentIndexes.push(splitProps.left);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.left.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.left.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.right === \"number\")\r\n contentIndexes.push(splitProps.right);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.right.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.right.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n /** @internal */\r\n public static createSplit(fragmentDef: LayoutFragmentProps): LayoutSplit | undefined {\r\n if (fragmentDef.horizontalSplit) {\r\n return new HorizontalSplit(fragmentDef.horizontalSplit);\r\n } else if (fragmentDef.verticalSplit) {\r\n return new VerticalSplit(fragmentDef.verticalSplit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** Content Layout Activated Event Args class.\r\n * @public\r\n */\r\nexport interface ContentLayoutActivatedEventArgs {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n}\r\n\r\n/** Content Layout Activated Event class.\r\n * @public\r\n */\r\nexport class ContentLayoutActivatedEvent extends UiEvent<ContentLayoutActivatedEventArgs> { }\r\n\r\n/** State for the [[ContentLayout]].\r\n */\r\ninterface ContentLayoutState {\r\n contentLayoutDef: ContentLayoutDef;\r\n contentContainer?: React.ReactNode;\r\n contentGroupId?: string;\r\n}\r\n\r\n/** Properties for the [[ContentLayout]] React component.\r\n * @public\r\n */\r\nexport interface ContentLayoutComponentProps extends CommonProps {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n /**\r\n * @deprecated In upcoming version, widget mode will be removed and footer mode will always be true.\r\n */\r\n isInFooterMode?: boolean;\r\n}\r\n\r\n/** Content Layout React component.\r\n * @public\r\n */\r\nexport class ContentLayout extends React.Component<ContentLayoutComponentProps, ContentLayoutState> {\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<ContentLayoutState>;\r\n\r\n constructor(props: ContentLayoutComponentProps) {\r\n super(props);\r\n\r\n const contentLayoutDef = this.props.contentLayout;\r\n const contentGroup = this.props.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.state = {\r\n contentLayoutDef: this.props.contentLayout,\r\n contentContainer,\r\n contentGroupId: this.props.contentGroup.groupId,\r\n };\r\n }\r\n\r\n public override componentDidMount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.addListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.removeListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n private _handleContentLayoutActivated = (args: ContentLayoutActivatedEventArgs) => {\r\n const contentLayoutDef = args.contentLayout;\r\n const contentGroup = args.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.setState({\r\n contentLayoutDef: args.contentLayout,\r\n contentContainer,\r\n contentGroupId: contentGroup.groupId,\r\n });\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n if (this.state.contentContainer) {\r\n return (\r\n <div id=\"uifw-contentlayout-div\" className={this.props.className} style={this.props.style}\r\n key={`${this.state.contentGroupId}-${this.state.contentLayoutDef.id}`}\r\n onMouseDown={this._onMouseDown} onMouseUp={this._onMouseUp} role=\"presentation\"\r\n >\r\n {this.state.contentContainer}\r\n </div>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _onMouseDown = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(true);\r\n };\r\n\r\n private _onMouseUp = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(false);\r\n };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentViewManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,OAAO,CAAC,yBAAyB,CAAC;CAAI;AAEjF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,oCAAoC;IACpC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,OAAO,CAAC,6BAA6B,CAAC;CAAI;AAEzF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAkB;IAEhD,yCAAyC;IACzC,gBAAuB,uBAAuB,wBAA+B;IAE7E,wDAAwD;IACxD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED,oDAAoD;WACtC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKpD,6CAA6C;IAC7C,gBAAuB,2BAA2B,4BAAmC;IAErF,wDAAwD;IAExD,gBAAuB,8BAA8B;mBAA4B,MAAM;OAAM;IAE7F,oDAAoD;WACtC,gBAAgB,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;IAI7D,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoBpC,wCAAwC;WAC1B,uBAAuB,IAAI,cAAc,GAAG,SAAS;WAarD,yBAAyB,CAAC,cAAc,CAAC,EAAE,cAAc;WAQzD,0BAA0B,CAAC,cAAc,CAAC,EAAE,cAAc;IAOxE,yCAAyC;WAC3B,gBAAgB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,UAAQ,GAAG,IAAI;IAuCnG,8CAA8C;WAChC,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS;IAKjE;;;OAGG;WACW,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM9E;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMrF;;;OAGG;WACW,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM3E;;;OAGG;WACW,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;CAKlF"}
1
+ {"version":3,"file":"ContentViewManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,OAAO,CAAC,yBAAyB,CAAC;CAAI;AAEjF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,oCAAoC;IACpC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,OAAO,CAAC,6BAA6B,CAAC;CAAI;AAEzF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAkB;IAEhD,yCAAyC;IACzC,gBAAuB,uBAAuB,wBAA+B;IAE7E,wDAAwD;IACxD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED,oDAAoD;WACtC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKpD,6CAA6C;IAC7C,gBAAuB,2BAA2B,4BAAmC;IAErF,wDAAwD;IAExD,gBAAuB,8BAA8B;mBAA4B,MAAM;OAAM;IAE7F,oDAAoD;WACtC,gBAAgB,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;IAI7D,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAuCpC,wCAAwC;WAC1B,uBAAuB,IAAI,cAAc,GAAG,SAAS;WAarD,yBAAyB,CAAC,cAAc,CAAC,EAAE,cAAc;WAQzD,0BAA0B,CAAC,cAAc,CAAC,EAAE,cAAc;IAOxE,yCAAyC;WAC3B,gBAAgB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,UAAQ,GAAG,IAAI;IAuCnG,8CAA8C;WAChC,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS;IAKjE;;;OAGG;WACW,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM9E;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMrF;;;OAGG;WACW,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM3E;;;OAGG;WACW,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;CAKlF"}
@@ -41,10 +41,28 @@ export class ContentViewManager {
41
41
  }
42
42
  static getControlFromElement(content, activeContentGroup, floatingControls, logIfNotFound = false) {
43
43
  if (floatingControls === null || floatingControls === void 0 ? void 0 : floatingControls.length) {
44
- const control = floatingControls.find((contentControl) => contentControl.reactNode === content);
44
+ // if we find a React node that matches exactly, return its containing control
45
+ let control = floatingControls.find((contentControl) => contentControl.reactNode === content);
46
+ if (control)
47
+ return control;
48
+ // if we don't find a React node that matches exactly, rely on the id specified by the creator
49
+ let controlId;
50
+ if (content && content.key) {
51
+ const key = content.key;
52
+ // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id
53
+ controlId = key.split("::", 1)[0];
54
+ }
55
+ floatingControls.forEach((contentControl) => {
56
+ const node = contentControl.reactNode;
57
+ const key = node.key;
58
+ const nodeId = key && key.split("::", 1)[0];
59
+ if (nodeId === controlId)
60
+ control = contentControl;
61
+ });
45
62
  if (control)
46
63
  return control;
47
64
  }
65
+ // if it's not a floating control, look through the content area views
48
66
  // istanbul ignore else
49
67
  if (activeContentGroup) {
50
68
  const activeContentControl = activeContentGroup.getControlFromElement(content);
@@ -1 +1 @@
1
- {"version":3,"file":"ContentViewManager.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\r\nimport { ContentControl } from \"./ContentControl\";\r\nimport { ContentLayoutManager } from \"./ContentLayoutManager\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { UiFramework } from \"../UiFramework\";\r\n\r\n/** [[MouseDownChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface MouseDownChangedEventArgs {\r\n /** Indicates whether the mouse is down */\r\n mouseDown: boolean;\r\n}\r\n\r\n/** Mouse Down Changed Event class.\r\n * @public\r\n */\r\nexport class MouseDownChangedEvent extends UiEvent<MouseDownChangedEventArgs> { }\r\n\r\n/** [[ActiveContentChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface ActiveContentChangedEventArgs {\r\n /** React node of the old content */\r\n oldContent?: React.ReactNode;\r\n /** React node of the newly active content */\r\n activeContent?: React.ReactNode;\r\n}\r\n\r\n/** Active Content Changed Event class.\r\n * @public\r\n */\r\nexport class ActiveContentChangedEvent extends UiEvent<ActiveContentChangedEventArgs> { }\r\n\r\n/** Content View Manager class.\r\n * @public\r\n */\r\nexport class ContentViewManager {\r\n private static _mouseDown: boolean = false;\r\n private static _activeContent?: React.ReactNode;\r\n\r\n /** Gets the [[MouseDownChangedEvent]] */\r\n public static readonly onMouseDownChangedEvent = new MouseDownChangedEvent();\r\n\r\n /** Determines if the mouse is down in a content view */\r\n public static get isMouseDown(): boolean {\r\n return this._mouseDown;\r\n }\r\n\r\n /** Sets the mouse down status for a content view */\r\n public static setMouseDown(mouseDown: boolean): void {\r\n this._mouseDown = mouseDown;\r\n this.onMouseDownChangedEvent.emit({ mouseDown });\r\n }\r\n\r\n /** Gets the [[ActiveContentChangedEvent]] */\r\n public static readonly onActiveContentChangedEvent = new ActiveContentChangedEvent();\r\n\r\n /** Fires when floating contents are added or removed */\r\n\r\n public static readonly onAvailableContentChangedEvent = new UiEvent<{ contentId: string }>();\r\n\r\n /** Gets the active content as a React.ReactNode. */\r\n public static getActiveContent(): React.ReactNode | undefined {\r\n return this._activeContent;\r\n }\r\n\r\n private static getControlFromElement(content: React.ReactNode, activeContentGroup: ContentGroup | undefined, floatingControls: ContentControl[] | undefined, logIfNotFound = false) {\r\n if (floatingControls?.length) {\r\n const control = floatingControls.find((contentControl) => contentControl.reactNode === content);\r\n if (control)\r\n return control;\r\n }\r\n\r\n // istanbul ignore else\r\n if (activeContentGroup) {\r\n const activeContentControl = activeContentGroup.getControlFromElement(content);\r\n if (activeContentControl)\r\n return activeContentControl;\r\n }\r\n\r\n if (logIfNotFound)\r\n Logger.logError(UiFramework.loggerCategory(this), `getControlFromElement: no control found for element`);\r\n\r\n return undefined;\r\n }\r\n\r\n /** Return the active ContentControl. */\r\n public static getActiveContentControl(): ContentControl | undefined {\r\n let activeContentControl: ContentControl | undefined;\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (this._activeContent && activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n activeContentControl = this.getControlFromElement(this._activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n }\r\n\r\n return activeContentControl;\r\n }\r\n\r\n public static addFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl) {\r\n activeFrontstageDef.addFloatingContentControl(contentControl);\r\n }\r\n }\r\n\r\n public static dropFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl)\r\n activeFrontstageDef.dropFloatingContentControl(contentControl);\r\n }\r\n\r\n /** Sets the active [[ContentControl]] */\r\n public static setActiveContent(activeContent?: React.ReactNode, forceEventProcessing = false): void {\r\n // istanbul ignore else\r\n if (this._activeContent !== activeContent || forceEventProcessing) {\r\n const oldContent = this._activeContent;\r\n this._activeContent = activeContent;\r\n\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n\r\n // istanbul ignore else\r\n const oldContentControl = this.getControlFromElement(oldContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n const activeContentControl = this.getControlFromElement(activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls, true);\r\n\r\n // Only call setActiveView if going to or coming from a non-viewport ContentControl\r\n // istanbul ignore else\r\n if (activeContentControl) {\r\n // istanbul ignore next\r\n const doSetActiveView =\r\n forceEventProcessing || (!activeContentControl.viewport ||\r\n (/* istanbul ignore next */ oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));\r\n\r\n // istanbul ignore else\r\n if (doSetActiveView) {\r\n activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);\r\n this.onActiveContentChangedEvent.emit({ activeContent, oldContent });\r\n } else {\r\n if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.viewManager.setSelectedView(activeContentControl.viewport);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Refreshes the active [[ContentControl]] */\r\n public static refreshActiveContent(activeContent: React.ReactNode) {\r\n ContentLayoutManager.refreshActiveLayout();\r\n this.setActiveContent(activeContent, true);\r\n }\r\n\r\n /**\r\n * Determines if content displays a Sheet view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSheetView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSheetView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Drawing view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentDrawingView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isDrawingView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Spatial view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSpatialView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSpatialView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Orthographic view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentOrthographicView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isOrthographicView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a 3d view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContent3dView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.is3dView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if viewport supports use of a camera.\r\n * @param content ContentControl to check\r\n */\r\n public static contentSupportsCamera(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.viewSupportsCamera(content.viewport));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ContentViewManager.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\r\nimport { ContentControl } from \"./ContentControl\";\r\nimport { ContentLayoutManager } from \"./ContentLayoutManager\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { UiFramework } from \"../UiFramework\";\r\n\r\n/** [[MouseDownChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface MouseDownChangedEventArgs {\r\n /** Indicates whether the mouse is down */\r\n mouseDown: boolean;\r\n}\r\n\r\n/** Mouse Down Changed Event class.\r\n * @public\r\n */\r\nexport class MouseDownChangedEvent extends UiEvent<MouseDownChangedEventArgs> { }\r\n\r\n/** [[ActiveContentChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface ActiveContentChangedEventArgs {\r\n /** React node of the old content */\r\n oldContent?: React.ReactNode;\r\n /** React node of the newly active content */\r\n activeContent?: React.ReactNode;\r\n}\r\n\r\n/** Active Content Changed Event class.\r\n * @public\r\n */\r\nexport class ActiveContentChangedEvent extends UiEvent<ActiveContentChangedEventArgs> { }\r\n\r\n/** Content View Manager class.\r\n * @public\r\n */\r\nexport class ContentViewManager {\r\n private static _mouseDown: boolean = false;\r\n private static _activeContent?: React.ReactNode;\r\n\r\n /** Gets the [[MouseDownChangedEvent]] */\r\n public static readonly onMouseDownChangedEvent = new MouseDownChangedEvent();\r\n\r\n /** Determines if the mouse is down in a content view */\r\n public static get isMouseDown(): boolean {\r\n return this._mouseDown;\r\n }\r\n\r\n /** Sets the mouse down status for a content view */\r\n public static setMouseDown(mouseDown: boolean): void {\r\n this._mouseDown = mouseDown;\r\n this.onMouseDownChangedEvent.emit({ mouseDown });\r\n }\r\n\r\n /** Gets the [[ActiveContentChangedEvent]] */\r\n public static readonly onActiveContentChangedEvent = new ActiveContentChangedEvent();\r\n\r\n /** Fires when floating contents are added or removed */\r\n\r\n public static readonly onAvailableContentChangedEvent = new UiEvent<{ contentId: string }>();\r\n\r\n /** Gets the active content as a React.ReactNode. */\r\n public static getActiveContent(): React.ReactNode | undefined {\r\n return this._activeContent;\r\n }\r\n\r\n private static getControlFromElement(content: React.ReactNode, activeContentGroup: ContentGroup | undefined, floatingControls: ContentControl[] | undefined, logIfNotFound = false) {\r\n if (floatingControls?.length) {\r\n // if we find a React node that matches exactly, return its containing control\r\n let control = floatingControls.find((contentControl) => contentControl.reactNode === content);\r\n if (control)\r\n return control;\r\n\r\n // if we don't find a React node that matches exactly, rely on the id specified by the creator\r\n let controlId: string;\r\n if (content && (content as React.ReactElement<any>).key) {\r\n const key = ((content as React.ReactElement<any>).key as string);\r\n // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id\r\n controlId = key.split(\"::\", 1)[0];\r\n }\r\n floatingControls.forEach ((contentControl: ContentControl) => {\r\n const node = contentControl.reactNode;\r\n const key = ((node as React.ReactElement<any>).key as string);\r\n const nodeId = key && key.split(\"::\", 1)[0];\r\n if (nodeId === controlId)\r\n control = contentControl;\r\n });\r\n if (control)\r\n return control;\r\n }\r\n\r\n // if it's not a floating control, look through the content area views\r\n // istanbul ignore else\r\n if (activeContentGroup) {\r\n const activeContentControl = activeContentGroup.getControlFromElement(content);\r\n if (activeContentControl)\r\n return activeContentControl;\r\n }\r\n\r\n if (logIfNotFound)\r\n Logger.logError(UiFramework.loggerCategory(this), `getControlFromElement: no control found for element`);\r\n\r\n return undefined;\r\n }\r\n\r\n /** Return the active ContentControl. */\r\n public static getActiveContentControl(): ContentControl | undefined {\r\n let activeContentControl: ContentControl | undefined;\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (this._activeContent && activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n activeContentControl = this.getControlFromElement(this._activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n }\r\n\r\n return activeContentControl;\r\n }\r\n\r\n public static addFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl) {\r\n activeFrontstageDef.addFloatingContentControl(contentControl);\r\n }\r\n }\r\n\r\n public static dropFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl)\r\n activeFrontstageDef.dropFloatingContentControl(contentControl);\r\n }\r\n\r\n /** Sets the active [[ContentControl]] */\r\n public static setActiveContent(activeContent?: React.ReactNode, forceEventProcessing = false): void {\r\n // istanbul ignore else\r\n if (this._activeContent !== activeContent || forceEventProcessing) {\r\n const oldContent = this._activeContent;\r\n this._activeContent = activeContent;\r\n\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n\r\n // istanbul ignore else\r\n const oldContentControl = this.getControlFromElement(oldContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n const activeContentControl = this.getControlFromElement(activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls, true);\r\n\r\n // Only call setActiveView if going to or coming from a non-viewport ContentControl\r\n // istanbul ignore else\r\n if (activeContentControl) {\r\n // istanbul ignore next\r\n const doSetActiveView =\r\n forceEventProcessing || (!activeContentControl.viewport ||\r\n (/* istanbul ignore next */ oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));\r\n\r\n // istanbul ignore else\r\n if (doSetActiveView) {\r\n activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);\r\n this.onActiveContentChangedEvent.emit({ activeContent, oldContent });\r\n } else {\r\n if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.viewManager.setSelectedView(activeContentControl.viewport);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Refreshes the active [[ContentControl]] */\r\n public static refreshActiveContent(activeContent: React.ReactNode) {\r\n ContentLayoutManager.refreshActiveLayout();\r\n this.setActiveContent(activeContent, true);\r\n }\r\n\r\n /**\r\n * Determines if content displays a Sheet view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSheetView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSheetView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Drawing view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentDrawingView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isDrawingView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Spatial view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSpatialView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSpatialView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Orthographic view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentOrthographicView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isOrthographicView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a 3d view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContent3dView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.is3dView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if viewport supports use of a camera.\r\n * @param content ContentControl to check\r\n */\r\n public static contentSupportsCamera(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.viewSupportsCamera(content.viewport));\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingViewportContent.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAa,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAqB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAUlF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iIAAiI;IACjI,gBAAgB,EAAE,aAAa,CAAC;IAChC,wDAAwD;IACxD,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AAEH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,eA2D1E"}
1
+ {"version":3,"file":"FloatingViewportContent.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAa,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAqB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAUlF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iIAAiI;IACjI,gBAAgB,EAAE,aAAa,CAAC;IAChC,wDAAwD;IACxD,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AAEH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,eAqE1E"}
@@ -45,7 +45,15 @@ export function FloatingViewportContent(props) {
45
45
  }
46
46
  };
47
47
  }, [contentId]);
48
- const viewPortControl = React.useMemo(() => React.createElement(FloatingViewport, { viewportRef: onViewportRef, imodel: viewState.iModel, viewState: viewState, onContextMenu: props.onContextMenu, controlId: contentId }), [onViewportRef, props.onContextMenu, viewState, contentId]);
48
+ const viewPortControl = React.useMemo(() => {
49
+ const node = React.createElement(FloatingViewport, { viewportRef: onViewportRef, imodel: viewState.iModel, viewState: viewState, onContextMenu: props.onContextMenu, controlId: contentId });
50
+ let control = node;
51
+ if (!node.key) {
52
+ const additionalProps = { key: contentId };
53
+ control = React.cloneElement(node, additionalProps);
54
+ }
55
+ return control;
56
+ }, [onViewportRef, props.onContextMenu, viewState, contentId]);
49
57
  React.useEffect(() => {
50
58
  if (viewport && contentControl.current) {
51
59
  contentControl.current.viewport = viewport;
@@ -53,7 +61,7 @@ export function FloatingViewportContent(props) {
53
61
  contentControl.current.reactNode = viewPortControl;
54
62
  }
55
63
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
56
- contentControl.current.processViewSelectorChange(viewState.iModel, viewState.id, viewState, viewState.name);
64
+ contentControl.current.viewport.changeView(viewState);
57
65
  }
58
66
  }, [viewState, viewPortControl, viewport]);
59
67
  React.useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingViewportContent.js","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport \"./FloatingViewportContent.css\";\r\nimport * as React from \"react\";\r\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { viewWithUnifiedSelection } from \"@itwin/presentation-components\";\r\nimport { ViewportComponent, ViewStateProp } from \"@itwin/imodel-components-react\";\r\nimport { FloatingViewportContentControl } from \"./ViewportContentControl\";\r\nimport { ContentViewManager } from \"./ContentViewManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentWrapper } from \"./ContentLayout\";\r\nimport { useRefs } from \"@itwin/core-react\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst FloatingViewport = viewWithUnifiedSelection(ViewportComponent);\r\n\r\n/**\r\n * @beta\r\n */\r\nexport interface FloatingViewportContentProps {\r\n /** callback used to construct context menu when user right-clicks on canvas/viewport */\r\n onContextMenu?: (e: React.MouseEvent) => boolean;\r\n /** viewport/content control uniqueId */\r\n contentId: string;\r\n /** The initial view state used to create the viewport, or a function that returns it (will refresh when the function changes) */\r\n initialViewState: ViewStateProp;\r\n /** Function to get a reference to the ScreenViewport */\r\n viewportRef?: React.Ref<ScreenViewport>;\r\n}\r\n\r\n/**\r\n * FloatingViewportContent component that creates its own [FloatingViewportContentControl].\r\n * This allows it to be recognized as an \"active\" content control so that tools operate on this\r\n * content.\r\n * @beta\r\n */\r\n// istanbul ignore next\r\nexport function FloatingViewportContent(props: FloatingViewportContentProps) { // eslint-disable-line @typescript-eslint/naming-convention\r\n const { contentId, initialViewState, viewportRef } = props;\r\n const [viewport, setViewport] = React.useState<ScreenViewport | undefined>();\r\n const contentControl = React.useRef<FloatingViewportContentControl | undefined>();\r\n\r\n const viewState = React.useMemo(() => typeof initialViewState === \"function\" ? initialViewState() : initialViewState, [initialViewState]);\r\n const ref = React.useCallback((v: ScreenViewport) => {\r\n setViewport(v);\r\n }, []);\r\n const onViewportRef = useRefs(ref, ...(viewportRef ? [viewportRef] : []));\r\n\r\n React.useEffect(() => {\r\n if (!contentControl.current) {\r\n contentControl.current = new FloatingViewportContentControl(contentId, contentId, null);\r\n ContentViewManager.addFloatingContentControl(contentControl.current);\r\n }\r\n return () => {\r\n if (contentControl.current) {\r\n ContentViewManager.dropFloatingContentControl(contentControl.current);\r\n contentControl.current = undefined;\r\n }\r\n };\r\n }, [contentId]);\r\n\r\n const viewPortControl = React.useMemo(() =>\r\n <FloatingViewport\r\n viewportRef={onViewportRef}\r\n imodel={viewState.iModel}\r\n viewState={viewState}\r\n onContextMenu={props.onContextMenu}\r\n controlId={contentId}\r\n />, [onViewportRef, props.onContextMenu, viewState, contentId]);\r\n\r\n React.useEffect(() => {\r\n if (viewport && contentControl.current) {\r\n contentControl.current.viewport = viewport;\r\n if (null === contentControl.current.reactNode) {\r\n contentControl.current.reactNode = viewPortControl;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n contentControl.current.processViewSelectorChange(viewState.iModel, viewState.id, viewState, viewState.name);\r\n }\r\n }, [viewState, viewPortControl, viewport]);\r\n\r\n React.useEffect(() => {\r\n const onViewClose = (vp: ScreenViewport) => {\r\n if (contentControl.current?.viewport === vp) {\r\n ContentViewManager.dropFloatingContentControl(contentControl.current);\r\n contentControl.current = undefined;\r\n }\r\n };\r\n return IModelApp.viewManager.onViewClose.addListener(onViewClose);\r\n }, []);\r\n\r\n return (\r\n <div onMouseMove={UiShowHideManager.handleContentMouseMove} className=\"uifw-dialog-imodel-content\" style={{ height: \"100%\", position: \"relative\" }}>\r\n <ContentWrapper content={viewPortControl} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"FloatingViewportContent.js","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport \"./FloatingViewportContent.css\";\r\nimport * as React from \"react\";\r\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { viewWithUnifiedSelection } from \"@itwin/presentation-components\";\r\nimport { ViewportComponent, ViewStateProp } from \"@itwin/imodel-components-react\";\r\nimport { FloatingViewportContentControl } from \"./ViewportContentControl\";\r\nimport { ContentViewManager } from \"./ContentViewManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentWrapper } from \"./ContentLayout\";\r\nimport { useRefs } from \"@itwin/core-react\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst FloatingViewport = viewWithUnifiedSelection(ViewportComponent);\r\n\r\n/**\r\n * @beta\r\n */\r\nexport interface FloatingViewportContentProps {\r\n /** callback used to construct context menu when user right-clicks on canvas/viewport */\r\n onContextMenu?: (e: React.MouseEvent) => boolean;\r\n /** viewport/content control uniqueId */\r\n contentId: string;\r\n /** The initial view state used to create the viewport, or a function that returns it (will refresh when the function changes) */\r\n initialViewState: ViewStateProp;\r\n /** Function to get a reference to the ScreenViewport */\r\n viewportRef?: React.Ref<ScreenViewport>;\r\n}\r\n\r\n/**\r\n * FloatingViewportContent component that creates its own [FloatingViewportContentControl].\r\n * This allows it to be recognized as an \"active\" content control so that tools operate on this\r\n * content.\r\n * @beta\r\n */\r\n// istanbul ignore next\r\nexport function FloatingViewportContent(props: FloatingViewportContentProps) { // eslint-disable-line @typescript-eslint/naming-convention\r\n const { contentId, initialViewState, viewportRef } = props;\r\n const [viewport, setViewport] = React.useState<ScreenViewport | undefined>();\r\n const contentControl = React.useRef<FloatingViewportContentControl | undefined>();\r\n\r\n const viewState = React.useMemo(() => typeof initialViewState === \"function\" ? initialViewState() : initialViewState, [initialViewState]);\r\n const ref = React.useCallback((v: ScreenViewport) => {\r\n setViewport(v);\r\n }, []);\r\n const onViewportRef = useRefs(ref, ...(viewportRef ? [viewportRef] : []));\r\n\r\n React.useEffect(() => {\r\n if (!contentControl.current) {\r\n contentControl.current = new FloatingViewportContentControl(contentId, contentId, null);\r\n ContentViewManager.addFloatingContentControl(contentControl.current);\r\n }\r\n return () => {\r\n if (contentControl.current) {\r\n ContentViewManager.dropFloatingContentControl(contentControl.current);\r\n contentControl.current = undefined;\r\n }\r\n };\r\n }, [contentId]);\r\n\r\n const viewPortControl = React.useMemo(() => {\r\n\r\n const node = <FloatingViewport\r\n viewportRef={onViewportRef}\r\n imodel={viewState.iModel}\r\n viewState={viewState}\r\n onContextMenu={props.onContextMenu}\r\n controlId={contentId}\r\n />;\r\n let control = node;\r\n\r\n if (!(node as React.ReactElement<any>).key) {\r\n const additionalProps: any = { key:contentId };\r\n control = React.cloneElement(node, additionalProps);\r\n }\r\n return control;\r\n\r\n }, [onViewportRef, props.onContextMenu, viewState, contentId]);\r\n\r\n React.useEffect(() => {\r\n if (viewport && contentControl.current) {\r\n contentControl.current.viewport = viewport;\r\n if (null === contentControl.current.reactNode) {\r\n contentControl.current.reactNode = viewPortControl;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n contentControl.current.viewport.changeView(viewState);\r\n }\r\n }, [viewState, viewPortControl, viewport]);\r\n\r\n React.useEffect(() => {\r\n const onViewClose = (vp: ScreenViewport) => {\r\n if (contentControl.current?.viewport === vp) {\r\n ContentViewManager.dropFloatingContentControl(contentControl.current);\r\n contentControl.current = undefined;\r\n }\r\n };\r\n return IModelApp.viewManager.onViewClose.addListener(onViewClose);\r\n }, []);\r\n\r\n return (\r\n <div onMouseMove={UiShowHideManager.handleContentMouseMove} className=\"uifw-dialog-imodel-content\" style={{ height: \"100%\", position: \"relative\" }}>\r\n <ContentWrapper content={viewPortControl} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n}\r\n"]}