@itwin/appui-react 4.0.0-dev.11 → 4.0.0-dev.12
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.
- package/lib/cjs/appui-react/configurableui/ConfigurableUiControl.d.ts +1 -1
- package/lib/cjs/appui-react/configurableui/ConfigurableUiControl.js +1 -1
- package/lib/cjs/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
- package/lib/cjs/appui-react/content/FloatingViewportContent.d.ts +2 -10
- package/lib/cjs/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
- package/lib/cjs/appui-react/content/FloatingViewportContent.js +15 -14
- package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/cjs/appui-react/messages/MessageManager.js +2 -2
- package/lib/cjs/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.js +1 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/cjs/appui-react/pickers/ListPicker.d.ts +1 -1
- package/lib/cjs/appui-react/pickers/ListPicker.js +1 -1
- package/lib/cjs/appui-react/pickers/ListPicker.js.map +1 -1
- package/lib/cjs/appui-react/widgets/BasicNavigationWidget.d.ts +1 -1
- package/lib/cjs/appui-react/widgets/BasicNavigationWidget.js.map +1 -1
- package/lib/cjs/appui-react/widgets/BasicToolWidget.d.ts +1 -1
- package/lib/cjs/appui-react/widgets/BasicToolWidget.js.map +1 -1
- package/lib/esm/appui-react/configurableui/ConfigurableUiControl.d.ts +1 -1
- package/lib/esm/appui-react/configurableui/ConfigurableUiControl.js +1 -1
- package/lib/esm/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
- package/lib/esm/appui-react/content/FloatingViewportContent.d.ts +2 -10
- package/lib/esm/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
- package/lib/esm/appui-react/content/FloatingViewportContent.js +15 -14
- package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/esm/appui-react/messages/MessageManager.js +2 -2
- package/lib/esm/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.js +1 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/esm/appui-react/pickers/ListPicker.d.ts +1 -1
- package/lib/esm/appui-react/pickers/ListPicker.js +1 -1
- package/lib/esm/appui-react/pickers/ListPicker.js.map +1 -1
- package/lib/esm/appui-react/widgets/BasicNavigationWidget.d.ts +1 -1
- package/lib/esm/appui-react/widgets/BasicNavigationWidget.js.map +1 -1
- package/lib/esm/appui-react/widgets/BasicToolWidget.d.ts +1 -1
- package/lib/esm/appui-react/widgets/BasicToolWidget.js.map +1 -1
- package/package.json +19 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicNavigationWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicNavigationWidget.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,2CAAoC;AACpC,+BAA+B;AAC/B,sEAAyD;AACzD,gEAA6D;AAC7D,4DAAyD;AACzD,8DAA2D;AAC3D,yEAAsE;AACtE,wDAAuF;AAYvF;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,KAAiC;IAErE,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CACjD,GAAkB,EAAE;QAClB,MAAM,KAAK,GAAkB,6BAAa,CAAC,8BAA8B,CAAC;YACxE,+BAAS,CAAC,iBAAiB;YAC3B,+BAAS,CAAC,cAAc;YACxB,+BAAS,CAAC,cAAc;YACxB,+BAAS,CAAC,iBAAiB;YAC3B,+BAAS,CAAC,eAAe;YACzB,+BAAS,CAAC,eAAe;SAC1B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,yBAAyB;YACjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAExC,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAC/C,GAAkB,EAAE;QAClB,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,6BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,+BAAS,CAAC,eAAe,CAAC,EACzE,6BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,+BAAS,CAAC,uBAAuB,CAAC,CAClF,CAAC;QACF,IAAI,KAAK,CAAC,uBAAuB;YAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAChG,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE1F,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,cAAc,CAAC,OAAO;YACxB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;aAC5B;YACH,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAChD,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAEzH,MAAM,WAAW,GAAG,IAAA,iCAAe,GAAE,CAAC;IACtC,uBAAuB;IACvB,MAAM,SAAS,GAAG,IAAA,oBAAU,EAC1B,CAAC,WAAW,IAAI,WAAW,CAC5B,CAAC;IAEF,OAAO,CACL,oBAAC,mDAAwB,IAAC,SAAS,EAAE,SAAS,EAC5C,iBAAiB,EAAE,oBAAC,iCAAe,IAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,0BAAY,CAAC,cAAc,EAAE,WAAW,EAAE,gCAAkB,CAAC,UAAU,GAAI,EAC9I,eAAe,EAAE,oBAAC,iCAAe,IAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,0BAAY,CAAC,cAAc,EAAE,WAAW,EAAE,gCAAkB,CAAC,QAAQ,GAAI,GACxI,CACH,CAAC;AACJ,CAAC;AAtDD,sDAsDC","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 Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { NavigationWidgetComposer } from \"./NavigationWidgetComposer\";\r\nimport { ToolbarItem, ToolbarOrientation, ToolbarUsage } from \"../toolbar/ToolbarItem\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items
|
|
1
|
+
{"version":3,"file":"BasicNavigationWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicNavigationWidget.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,2CAAoC;AACpC,+BAA+B;AAC/B,sEAAyD;AACzD,gEAA6D;AAC7D,4DAAyD;AACzD,8DAA2D;AAC3D,yEAAsE;AACtE,wDAAuF;AAYvF;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,KAAiC;IAErE,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CACjD,GAAkB,EAAE;QAClB,MAAM,KAAK,GAAkB,6BAAa,CAAC,8BAA8B,CAAC;YACxE,+BAAS,CAAC,iBAAiB;YAC3B,+BAAS,CAAC,cAAc;YACxB,+BAAS,CAAC,cAAc;YACxB,+BAAS,CAAC,iBAAiB;YAC3B,+BAAS,CAAC,eAAe;YACzB,+BAAS,CAAC,eAAe;SAC1B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,yBAAyB;YACjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAExC,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAC/C,GAAkB,EAAE;QAClB,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,6BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,+BAAS,CAAC,eAAe,CAAC,EACzE,6BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,+BAAS,CAAC,uBAAuB,CAAC,CAClF,CAAC;QACF,IAAI,KAAK,CAAC,uBAAuB;YAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAChG,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE1F,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,cAAc,CAAC,OAAO;YACxB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;aAC5B;YACH,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAChD,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAEzH,MAAM,WAAW,GAAG,IAAA,iCAAe,GAAE,CAAC;IACtC,uBAAuB;IACvB,MAAM,SAAS,GAAG,IAAA,oBAAU,EAC1B,CAAC,WAAW,IAAI,WAAW,CAC5B,CAAC;IAEF,OAAO,CACL,oBAAC,mDAAwB,IAAC,SAAS,EAAE,SAAS,EAC5C,iBAAiB,EAAE,oBAAC,iCAAe,IAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,0BAAY,CAAC,cAAc,EAAE,WAAW,EAAE,gCAAkB,CAAC,UAAU,GAAI,EAC9I,eAAe,EAAE,oBAAC,iCAAe,IAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,0BAAY,CAAC,cAAc,EAAE,WAAW,EAAE,gCAAkB,CAAC,QAAQ,GAAI,GACxI,CACH,CAAC;AACJ,CAAC;AAtDD,sDAsDC","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 Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { NavigationWidgetComposer } from \"./NavigationWidgetComposer\";\r\nimport { ToolbarItem, ToolbarOrientation, ToolbarUsage } from \"../toolbar/ToolbarItem\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items.\r\n * @public\r\n */\r\nexport interface BasicNavigationWidgetProps {\r\n /** optional set of additional items to include in horizontal toolbar */\r\n additionalHorizontalItems?: ToolbarItem[];\r\n /** optional set of additional items to include in vertical toolbar */\r\n additionalVerticalItems?: ToolbarItem[];\r\n}\r\n\r\n/** Basic Navigation Widget that provides standard tools to manipulate views containing element data.\r\n * Supports the specification of additional horizontal and vertical toolbar items through props.\r\n * @public\r\n */\r\nexport function BasicNavigationWidget(props: BasicNavigationWidgetProps) {\r\n\r\n const getHorizontalToolbarItems = React.useCallback(\r\n (): ToolbarItem[] => {\r\n const items: ToolbarItem[] = ToolbarHelper.createToolbarItemsFromItemDefs([\r\n CoreTools.rotateViewCommand,\r\n CoreTools.panViewCommand,\r\n CoreTools.fitViewCommand,\r\n CoreTools.windowAreaCommand,\r\n CoreTools.viewUndoCommand,\r\n CoreTools.viewRedoCommand,\r\n ]);\r\n if (props.additionalHorizontalItems)\r\n items.push(...props.additionalHorizontalItems);\r\n return items;\r\n }, [props.additionalHorizontalItems]);\r\n\r\n const getVerticalToolbarItems = React.useCallback(\r\n (): ToolbarItem[] => {\r\n const items: ToolbarItem[] = [];\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.walkViewCommand),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, CoreTools.toggleCameraViewCommand),\r\n );\r\n if (props.additionalVerticalItems)\r\n items.push(...props.additionalVerticalItems);\r\n return items;\r\n }, [props.additionalVerticalItems]);\r\n\r\n const [horizontalItems, setHorizontalItems] = React.useState(() => getHorizontalToolbarItems());\r\n const [verticalItems, setVerticalItems] = React.useState(() => getVerticalToolbarItems());\r\n\r\n const isInitialMount = React.useRef(true);\r\n React.useEffect(() => {\r\n if (isInitialMount.current)\r\n isInitialMount.current = false;\r\n else {\r\n setHorizontalItems(getHorizontalToolbarItems());\r\n setVerticalItems(getVerticalToolbarItems());\r\n }\r\n }, [props.additionalHorizontalItems, props.additionalVerticalItems, getHorizontalToolbarItems, getVerticalToolbarItems]);\r\n\r\n const uiIsVisible = useUiVisibility();\r\n // istanbul ignore next\r\n const className = classnames(\r\n !uiIsVisible && \"nz-hidden\",\r\n );\r\n\r\n return (\r\n <NavigationWidgetComposer className={className}\r\n horizontalToolbar={<ToolbarComposer items={horizontalItems} usage={ToolbarUsage.ViewNavigation} orientation={ToolbarOrientation.Horizontal} />}\r\n verticalToolbar={<ToolbarComposer items={verticalItems} usage={ToolbarUsage.ViewNavigation} orientation={ToolbarOrientation.Vertical} />}\r\n />\r\n );\r\n}\r\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/// <reference types="react" />
|
|
5
5
|
import { ToolbarItem } from "../toolbar/ToolbarItem";
|
|
6
|
-
/** Properties that can be used to append items to the default set of toolbar items
|
|
6
|
+
/** Properties that can be used to append items to the default set of toolbar items.
|
|
7
7
|
* @public
|
|
8
8
|
*/
|
|
9
9
|
export interface BasicToolWidgetProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicToolWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicToolWidget.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 Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { SelectionContextToolDefinitions } from \"../selection/SelectionContextItemDef\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { ToolWidgetComposer } from \"./ToolWidgetComposer\";\r\nimport { BackstageAppButton } from \"./BackstageAppButton\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { ToolbarItem, ToolbarOrientation, ToolbarUsage } from \"../toolbar/ToolbarItem\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items
|
|
1
|
+
{"version":3,"file":"BasicToolWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicToolWidget.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 Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { SelectionContextToolDefinitions } from \"../selection/SelectionContextItemDef\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { ToolWidgetComposer } from \"./ToolWidgetComposer\";\r\nimport { BackstageAppButton } from \"./BackstageAppButton\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { ToolbarItem, ToolbarOrientation, ToolbarUsage } from \"../toolbar/ToolbarItem\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items.\r\n * @public\r\n */\r\nexport interface BasicToolWidgetProps {\r\n /** if true include hide/isolate Models and Categories */\r\n showCategoryAndModelsContextTools?: boolean;\r\n /** Name of icon WebFont entry or if specifying an imported SVG symbol use \"webSvg:\" prefix to imported symbol Id. */\r\n icon?: string;\r\n /** optional set of additional items to include in horizontal toolbar */\r\n additionalHorizontalItems?: ToolbarItem[];\r\n /** optional set of additional items to include in vertical toolbar */\r\n additionalVerticalItems?: ToolbarItem[];\r\n}\r\n\r\n/** Default Tool Widget for standard \"review\" applications. Provides standard tools to review, and measure elements.\r\n * This definition will also show a overflow button if there is not enough room to display all the toolbar buttons.\r\n * @public\r\n */\r\nexport function BasicToolWidget(props: BasicToolWidgetProps) {\r\n const getHorizontalToolbarItems = React.useCallback(\r\n (useCategoryAndModelsContextTools: boolean): ToolbarItem[] => {\r\n const items: ToolbarItem[] = [];\r\n if (useCategoryAndModelsContextTools) {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideSectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateSelectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n } else {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n }\r\n if (props.additionalHorizontalItems)\r\n items.push(...props.additionalHorizontalItems);\r\n return items;\r\n }, [props.additionalHorizontalItems]);\r\n\r\n const getVerticalToolbarItems = React.useCallback(\r\n (): ToolbarItem[] => {\r\n const items: ToolbarItem[] = [];\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.selectElementCommand),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, CoreTools.measureToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, CoreTools.sectionToolGroup),\r\n );\r\n if (props.additionalVerticalItems)\r\n items.push(...props.additionalVerticalItems);\r\n return items;\r\n }, [props.additionalVerticalItems]);\r\n\r\n const [horizontalItems, setHorizontalItems] = React.useState(() => getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n const [verticalItems, setVerticalItems] = React.useState(() => getVerticalToolbarItems());\r\n\r\n const isInitialMount = React.useRef(true);\r\n React.useEffect(() => {\r\n if (isInitialMount.current)\r\n isInitialMount.current = false;\r\n else {\r\n setHorizontalItems(getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n setVerticalItems(getVerticalToolbarItems());\r\n }\r\n }, [props.showCategoryAndModelsContextTools, props.additionalHorizontalItems, props.additionalVerticalItems, getHorizontalToolbarItems, getVerticalToolbarItems]);\r\n\r\n const uiIsVisible = useUiVisibility();\r\n // istanbul ignore next\r\n const className = classnames(\r\n !uiIsVisible && \"nz-hidden\",\r\n );\r\n return (\r\n <ToolWidgetComposer className={className}\r\n cornerItem={<BackstageAppButton icon={props.icon} />}\r\n horizontalToolbar={<ToolbarComposer items={horizontalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Horizontal} />}\r\n verticalToolbar={<ToolbarComposer items={verticalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Vertical} />}\r\n />\r\n );\r\n}\r\n"]}
|
|
@@ -70,7 +70,7 @@ export declare abstract class ConfigurableUiControl extends ConfigurableBase {
|
|
|
70
70
|
* @param info An object that the subclass must pass to this base class.
|
|
71
71
|
* @param options Options provided to the control
|
|
72
72
|
* @note Subclasses must pass all arguments to the base class and not add themselves
|
|
73
|
-
* to any container - the control is added automatically
|
|
73
|
+
* to any container - the control is added automatically.
|
|
74
74
|
* @protected
|
|
75
75
|
*/
|
|
76
76
|
constructor(info: ConfigurableCreateInfo, options: any);
|
|
@@ -64,7 +64,7 @@ export class ConfigurableUiControl extends ConfigurableBase {
|
|
|
64
64
|
* @param info An object that the subclass must pass to this base class.
|
|
65
65
|
* @param options Options provided to the control
|
|
66
66
|
* @note Subclasses must pass all arguments to the base class and not add themselves
|
|
67
|
-
* to any container - the control is added automatically
|
|
67
|
+
* to any container - the control is added automatically.
|
|
68
68
|
* @protected
|
|
69
69
|
*/
|
|
70
70
|
constructor(info, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigurableUiControl.js","sourceRoot":"","sources":["../../../../src/appui-react/configurableui/ConfigurableUiControl.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAWH;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC,YAA4B,OAAe,EACzB,QAAgB,EAChB,EAAU;QAFA,YAAO,GAAP,OAAO,CAAQ;QACzB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAAQ;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAM3B,YAAY,IAA4B,EAAE,OAAY;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,4DAA4D;IAC5D,IAAW,eAAe,KAAU,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAElE,gDAAgD;IAChD,IAAW,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACH,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,yBAOX;AAPD,WAAY,yBAAyB;IACnC,uDAA0B,CAAA;IAC1B,mEAAsC,CAAA;IACtC,uEAA0C,CAAA;IAC1C,8DAAiC,CAAA;IACjC,gEAAmC,CAAA;IACnC,qDAAwB,CAAA;AAC1B,CAAC,EAPW,yBAAyB,KAAzB,yBAAyB,QAOpC;AAOD;;;;;;;;;;GAUG;AACH,MAAM,OAAgB,qBAAsB,SAAQ,gBAAgB;IAGlE;;;;;;OAMG;IACH,YAAY,IAA4B,EAAE,OAAY;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED;OACG;IACI,UAAU,KAAW,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAElD,sDAAsD;IAC/C,YAAY,KAAW,CAAC;IAE/B,6CAA6C;IACtC,uBAAuB,KAAW,CAAC;IAE1C,uCAAuC;IAChC,iBAAiB,KAAW,CAAC;IAEpC;OACG;IACH,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAMpD;OACG;IACH,IAAW,OAAO,KAAoB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CAClE","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 ConfigurableUi\r\n */\r\n\r\n/** Interface for a ConfigurableUi element\r\n * @public\r\n */\r\nexport interface ConfigurableUiElement {\r\n uniqueId: string;\r\n classId: string;\r\n name: string;\r\n}\r\n\r\n/** Information for creating a ConfigurableUi element\r\n * @public\r\n */\r\nexport class ConfigurableCreateInfo {\r\n constructor(public readonly classId: string,\r\n public readonly uniqueId: string,\r\n public readonly id: string) {\r\n }\r\n}\r\n\r\n/** The base class for all ConfigurableUi elements\r\n * @public\r\n */\r\nexport class ConfigurableBase implements ConfigurableUiElement {\r\n private _uniqueId: string;\r\n private _classId: string;\r\n private _name: string;\r\n protected _appDataOptions: any;\r\n\r\n constructor(info: ConfigurableCreateInfo, options: any) {\r\n this._uniqueId = info.uniqueId;\r\n this._classId = info.classId;\r\n this._name = (options && options.hasOwnProperty(\"name\")) ? options.name : info.uniqueId;\r\n this._appDataOptions = options;\r\n }\r\n\r\n /** @internal */\r\n public get uniqueId(): string { return this._uniqueId; }\r\n\r\n /** allow options set via appData to be seen by API calls */\r\n public get applicationData(): any { return this._appDataOptions; }\r\n\r\n /** Gets the class Id of configurable element */\r\n public get classId(): string { return this._classId; }\r\n\r\n /** Get internal name of configurable element. If no name is defined in configuration\r\n * then the name will match the UniqueId.\r\n */\r\n public get name(): string { return this._name; }\r\n}\r\n\r\n/** The type of the ConfigurableUiControl.\r\n * @public\r\n */\r\nexport enum ConfigurableUiControlType {\r\n Content = \"ContentControl\",\r\n NavigationAid = \"NavigationAidControl\",\r\n StatusBarWidget = \"StatusBarWidgetControl\",\r\n ToolUiProvider = \"ToolUiProvider\",\r\n Viewport = \"ViewportContentControl\",\r\n Widget = \"WidgetControl\",\r\n}\r\n\r\n/** Prototype for ConfigurableUiControl constructor\r\n * @public\r\n */\r\nexport type ConfigurableUiControlConstructor = new (info: ConfigurableCreateInfo, options: any) => ConfigurableUiElement;\r\n\r\n/** The abstract base class for all Frontstage controls.\r\n * @public\r\n *\r\n * @note This is an abstract class which should not be derived from by the applications.\r\n * Instead, applications should derive from one of\r\n * [[ContentControl]],\r\n * [[ViewportContentControl]],\r\n * [[WidgetControl]],\r\n * [[StatusBarWidgetControl]] or\r\n * [[NavigationAidControl]].\r\n */\r\nexport abstract class ConfigurableUiControl extends ConfigurableBase {\r\n private _cid: string;\r\n\r\n /** Creates an instance of ConfigurableUiControl.\r\n * @param info An object that the subclass must pass to this base class.\r\n * @param options Options provided to the control\r\n * @note Subclasses must pass all arguments to the base class and not add themselves\r\n * to any container - the control is added automatically
|
|
1
|
+
{"version":3,"file":"ConfigurableUiControl.js","sourceRoot":"","sources":["../../../../src/appui-react/configurableui/ConfigurableUiControl.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAWH;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC,YAA4B,OAAe,EACzB,QAAgB,EAChB,EAAU;QAFA,YAAO,GAAP,OAAO,CAAQ;QACzB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAAQ;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAM3B,YAAY,IAA4B,EAAE,OAAY;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,4DAA4D;IAC5D,IAAW,eAAe,KAAU,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAElE,gDAAgD;IAChD,IAAW,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACH,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,yBAOX;AAPD,WAAY,yBAAyB;IACnC,uDAA0B,CAAA;IAC1B,mEAAsC,CAAA;IACtC,uEAA0C,CAAA;IAC1C,8DAAiC,CAAA;IACjC,gEAAmC,CAAA;IACnC,qDAAwB,CAAA;AAC1B,CAAC,EAPW,yBAAyB,KAAzB,yBAAyB,QAOpC;AAOD;;;;;;;;;;GAUG;AACH,MAAM,OAAgB,qBAAsB,SAAQ,gBAAgB;IAGlE;;;;;;OAMG;IACH,YAAY,IAA4B,EAAE,OAAY;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED;OACG;IACI,UAAU,KAAW,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAElD,sDAAsD;IAC/C,YAAY,KAAW,CAAC;IAE/B,6CAA6C;IACtC,uBAAuB,KAAW,CAAC;IAE1C,uCAAuC;IAChC,iBAAiB,KAAW,CAAC;IAEpC;OACG;IACH,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAMpD;OACG;IACH,IAAW,OAAO,KAAoB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CAClE","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 ConfigurableUi\r\n */\r\n\r\n/** Interface for a ConfigurableUi element\r\n * @public\r\n */\r\nexport interface ConfigurableUiElement {\r\n uniqueId: string;\r\n classId: string;\r\n name: string;\r\n}\r\n\r\n/** Information for creating a ConfigurableUi element\r\n * @public\r\n */\r\nexport class ConfigurableCreateInfo {\r\n constructor(public readonly classId: string,\r\n public readonly uniqueId: string,\r\n public readonly id: string) {\r\n }\r\n}\r\n\r\n/** The base class for all ConfigurableUi elements\r\n * @public\r\n */\r\nexport class ConfigurableBase implements ConfigurableUiElement {\r\n private _uniqueId: string;\r\n private _classId: string;\r\n private _name: string;\r\n protected _appDataOptions: any;\r\n\r\n constructor(info: ConfigurableCreateInfo, options: any) {\r\n this._uniqueId = info.uniqueId;\r\n this._classId = info.classId;\r\n this._name = (options && options.hasOwnProperty(\"name\")) ? options.name : info.uniqueId;\r\n this._appDataOptions = options;\r\n }\r\n\r\n /** @internal */\r\n public get uniqueId(): string { return this._uniqueId; }\r\n\r\n /** allow options set via appData to be seen by API calls */\r\n public get applicationData(): any { return this._appDataOptions; }\r\n\r\n /** Gets the class Id of configurable element */\r\n public get classId(): string { return this._classId; }\r\n\r\n /** Get internal name of configurable element. If no name is defined in configuration\r\n * then the name will match the UniqueId.\r\n */\r\n public get name(): string { return this._name; }\r\n}\r\n\r\n/** The type of the ConfigurableUiControl.\r\n * @public\r\n */\r\nexport enum ConfigurableUiControlType {\r\n Content = \"ContentControl\",\r\n NavigationAid = \"NavigationAidControl\",\r\n StatusBarWidget = \"StatusBarWidgetControl\",\r\n ToolUiProvider = \"ToolUiProvider\",\r\n Viewport = \"ViewportContentControl\",\r\n Widget = \"WidgetControl\",\r\n}\r\n\r\n/** Prototype for ConfigurableUiControl constructor\r\n * @public\r\n */\r\nexport type ConfigurableUiControlConstructor = new (info: ConfigurableCreateInfo, options: any) => ConfigurableUiElement;\r\n\r\n/** The abstract base class for all Frontstage controls.\r\n * @public\r\n *\r\n * @note This is an abstract class which should not be derived from by the applications.\r\n * Instead, applications should derive from one of\r\n * [[ContentControl]],\r\n * [[ViewportContentControl]],\r\n * [[WidgetControl]],\r\n * [[StatusBarWidgetControl]] or\r\n * [[NavigationAidControl]].\r\n */\r\nexport abstract class ConfigurableUiControl extends ConfigurableBase {\r\n private _cid: string;\r\n\r\n /** Creates an instance of ConfigurableUiControl.\r\n * @param info An object that the subclass must pass to this base class.\r\n * @param options Options provided to the control\r\n * @note Subclasses must pass all arguments to the base class and not add themselves\r\n * to any container - the control is added automatically.\r\n * @protected\r\n */\r\n constructor(info: ConfigurableCreateInfo, options: any) {\r\n super(info, options);\r\n this._cid = info.id;\r\n }\r\n\r\n /** @internal\r\n */\r\n public initialize(): void { this.onInitialize(); }\r\n\r\n /** Called to initialize the ConfigurableUiControl. */\r\n public onInitialize(): void { }\r\n\r\n /** Called when Frontstage is deactivated. */\r\n public onFrontstageDeactivated(): void { }\r\n\r\n /** Called when Frontstage is ready. */\r\n public onFrontstageReady(): void { }\r\n\r\n /** Returns the ID of this ConfigurableUiControl.\r\n */\r\n public get controlId(): string { return this._cid; }\r\n\r\n /** Get the type of this control.\r\n */\r\n public abstract getType(): ConfigurableUiControlType;\r\n\r\n /** Returns a promise that resolves when the control is ready for usage.\r\n */\r\n public get isReady(): Promise<void> { return Promise.resolve(); }\r\n}\r\n"]}
|
|
@@ -26,15 +26,7 @@ export interface FloatingViewportContentWrapperProps {
|
|
|
26
26
|
/** @alpha */
|
|
27
27
|
export declare function FloatingViewportContentWrapper({ children }: FloatingViewportContentWrapperProps): JSX.Element;
|
|
28
28
|
/** @alpha */
|
|
29
|
-
export
|
|
30
|
-
|
|
31
|
-
contentId: string;
|
|
32
|
-
/** The initial view state used to create the viewport, or a function that returns it (will refresh when the function changes) */
|
|
33
|
-
initialViewState: ViewStateProp;
|
|
34
|
-
}
|
|
35
|
-
/** @alpha */
|
|
36
|
-
export declare function useFloatingViewport(args: UseFloatingViewportArgs): {
|
|
37
|
-
viewportRef: (v: ScreenViewport) => void;
|
|
38
|
-
viewState: import("@itwin/core-frontend").ViewState;
|
|
29
|
+
export declare function useFloatingViewport(args: FloatingViewportContentProps): {
|
|
30
|
+
viewportControl: JSX.Element;
|
|
39
31
|
};
|
|
40
32
|
//# sourceMappingURL=FloatingViewportContent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingViewportContent.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAa,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAqB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAMlF;;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,YAAY;AACZ,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"FloatingViewportContent.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAa,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAqB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAMlF;;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,YAAY;AACZ,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,eAO1E;AAED,aAAa;AACb,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACrC;AAED,aAAa;AACb,wBAAgB,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,mCAAmC,eAM/F;AAED,aAAa;AACb,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,4BAA4B;;EA2DrE"}
|
|
@@ -10,18 +10,12 @@ import { IModelApp } from "@itwin/core-frontend";
|
|
|
10
10
|
import { ViewportComponent } from "@itwin/imodel-components-react";
|
|
11
11
|
import { FloatingViewportContentControl } from "./ViewportContentControl";
|
|
12
12
|
import { ContentWrapper } from "./ContentLayout";
|
|
13
|
-
import { useRefs } from "@itwin/core-react";
|
|
14
13
|
import { UiFramework } from "../UiFramework";
|
|
14
|
+
import { useRefs } from "@itwin/core-react";
|
|
15
15
|
/** @beta */
|
|
16
16
|
export function FloatingViewportContent(props) {
|
|
17
|
-
const {
|
|
18
|
-
|
|
19
|
-
contentId,
|
|
20
|
-
initialViewState,
|
|
21
|
-
});
|
|
22
|
-
const refs = useRefs(viewportRef, floatingViewportRef);
|
|
23
|
-
return (React.createElement(FloatingViewportContentWrapper, null,
|
|
24
|
-
React.createElement(ViewportComponent, { key: contentId, imodel: viewState.iModel, viewState: viewState, controlId: contentId, onContextMenu: onContextMenu, viewportRef: refs })));
|
|
17
|
+
const { viewportControl } = useFloatingViewport(props);
|
|
18
|
+
return (React.createElement(FloatingViewportContentWrapper, null, viewportControl));
|
|
25
19
|
}
|
|
26
20
|
/** @alpha */
|
|
27
21
|
export function FloatingViewportContentWrapper({ children }) {
|
|
@@ -30,13 +24,18 @@ export function FloatingViewportContentWrapper({ children }) {
|
|
|
30
24
|
}
|
|
31
25
|
/** @alpha */
|
|
32
26
|
export function useFloatingViewport(args) {
|
|
33
|
-
const { contentId, initialViewState } = args;
|
|
27
|
+
const { contentId, initialViewState, onContextMenu, viewportRef } = args;
|
|
34
28
|
const [viewport, setViewport] = React.useState();
|
|
35
29
|
const contentControl = React.useRef();
|
|
36
30
|
const viewState = React.useMemo(() => typeof initialViewState === "function" ? initialViewState() : initialViewState, [initialViewState]);
|
|
37
|
-
const
|
|
31
|
+
const ref = React.useCallback((v) => {
|
|
38
32
|
setViewport(v);
|
|
39
33
|
}, []);
|
|
34
|
+
const refs = useRefs(ref, viewportRef);
|
|
35
|
+
const viewportControl = React.useMemo(() => {
|
|
36
|
+
const node = React.createElement(ViewportComponent, { key: contentId, imodel: viewState.iModel, viewState: viewState, controlId: contentId, onContextMenu: onContextMenu, viewportRef: refs });
|
|
37
|
+
return node;
|
|
38
|
+
}, [refs, onContextMenu, viewState, contentId]);
|
|
40
39
|
React.useEffect(() => {
|
|
41
40
|
if (!contentControl.current) {
|
|
42
41
|
contentControl.current = new FloatingViewportContentControl(contentId, contentId, null);
|
|
@@ -52,9 +51,12 @@ export function useFloatingViewport(args) {
|
|
|
52
51
|
React.useEffect(() => {
|
|
53
52
|
if (viewport && contentControl.current) {
|
|
54
53
|
contentControl.current.viewport = viewport;
|
|
54
|
+
if (null === contentControl.current.reactNode) {
|
|
55
|
+
contentControl.current.reactNode = viewportControl;
|
|
56
|
+
}
|
|
55
57
|
void contentControl.current.viewport.changeView(viewState);
|
|
56
58
|
}
|
|
57
|
-
}, [viewState, viewport]);
|
|
59
|
+
}, [viewState, viewport, viewportControl]);
|
|
58
60
|
React.useEffect(() => {
|
|
59
61
|
const onViewClose = (vp) => {
|
|
60
62
|
var _a;
|
|
@@ -66,8 +68,7 @@ export function useFloatingViewport(args) {
|
|
|
66
68
|
return IModelApp.viewManager.onViewClose.addListener(onViewClose);
|
|
67
69
|
}, []);
|
|
68
70
|
return {
|
|
69
|
-
|
|
70
|
-
viewState,
|
|
71
|
+
viewportControl,
|
|
71
72
|
};
|
|
72
73
|
}
|
|
73
74
|
//# sourceMappingURL=FloatingViewportContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingViewportContent.js","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAiB,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,
|
|
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 * as React from \"react\";\r\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { ViewportComponent, ViewStateProp } from \"@itwin/imodel-components-react\";\r\nimport { FloatingViewportContentControl } from \"./ViewportContentControl\";\r\nimport { ContentWrapper } from \"./ContentLayout\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { useRefs } from \"@itwin/core-react\";\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/** @beta */\r\nexport function FloatingViewportContent(props: FloatingViewportContentProps) {\r\n const { viewportControl } = useFloatingViewport(props);\r\n return (\r\n <FloatingViewportContentWrapper>\r\n {viewportControl}\r\n </FloatingViewportContentWrapper>\r\n );\r\n}\r\n\r\n/** @alpha */\r\nexport interface FloatingViewportContentWrapperProps {\r\n readonly children?: React.ReactNode;\r\n}\r\n\r\n/** @alpha */\r\nexport function FloatingViewportContentWrapper({ children }: FloatingViewportContentWrapperProps) {\r\n return (\r\n <div onMouseMove={UiFramework.visibility.handleContentMouseMove} className=\"uifw-dialog-imodel-content\" style={{ height: \"100%\", position: \"relative\" }}>\r\n <ContentWrapper content={children} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n}\r\n\r\n/** @alpha */\r\nexport function useFloatingViewport(args: FloatingViewportContentProps) {\r\n const { contentId, initialViewState, onContextMenu, viewportRef } = args;\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\r\n const refs = useRefs(ref, viewportRef);\r\n const viewportControl = React.useMemo(() => {\r\n const node = <ViewportComponent\r\n key={contentId}\r\n imodel={viewState.iModel}\r\n viewState={viewState}\r\n controlId={contentId}\r\n onContextMenu={onContextMenu}\r\n viewportRef={refs}\r\n />;\r\n return node;\r\n }, [refs, onContextMenu, viewState, contentId]);\r\n\r\n React.useEffect(() => {\r\n if (!contentControl.current) {\r\n contentControl.current = new FloatingViewportContentControl(contentId, contentId, null);\r\n UiFramework.content.addFloatingContentControl(contentControl.current);\r\n }\r\n return () => {\r\n if (contentControl.current) {\r\n UiFramework.content.dropFloatingContentControl(contentControl.current);\r\n contentControl.current = undefined;\r\n }\r\n };\r\n }, [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 void contentControl.current.viewport.changeView(viewState);\r\n }\r\n }, [viewState, viewport, viewportControl]);\r\n\r\n React.useEffect(() => {\r\n const onViewClose = (vp: ScreenViewport) => {\r\n if (contentControl.current?.viewport === vp) {\r\n UiFramework.content.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 viewportControl,\r\n };\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @module Notification
|
|
7
7
|
*/
|
|
8
8
|
import classnames from "classnames";
|
|
9
|
-
import
|
|
9
|
+
import { isEqual } from "lodash";
|
|
10
10
|
import * as React from "react";
|
|
11
11
|
import { ActivityMessageDetails, IModelApp, MessageBoxIconType, MessageBoxType, OutputMessageAlert, OutputMessagePriority, OutputMessageType, } from "@itwin/core-frontend";
|
|
12
12
|
import { MessageSeverity, UiEvent } from "@itwin/appui-abstract";
|
|
@@ -179,7 +179,7 @@ export class MessageManager {
|
|
|
179
179
|
* @param message Details about the message to output.
|
|
180
180
|
*/
|
|
181
181
|
static addMessage(message) {
|
|
182
|
-
if (!
|
|
182
|
+
if (!isEqual(message, this._lastMessage)) {
|
|
183
183
|
this.addToMessageCenter(message);
|
|
184
184
|
this._lastMessage = message;
|
|
185
185
|
}
|
|
@@ -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 { IconSpec, MessageContainer, ReactMessage } from \"@itwin/core-react\";\r\nimport { ConfigurableUiActionId } from \"../configurableui/state\";\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 { Text, toaster, ToastOptions } from \"@itwin/itwinui-react\";\r\nimport { ToasterSettings } from \"@itwin/itwinui-react/cjs/core/Toast/Toaster\";\r\nimport { SvgInfo, SvgStatusError, SvgStatusSuccess, SvgStatusWarning } from \"@itwin/itwinui-icons-react\";\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 <Text variant=\"small\"><>{(message.detailedMessage as ReactMessage).reactNode || message.detailedMessage}</></Text>\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 /** Extracts the message severity from the message details and returns the corresponding React icon.\r\n * @param details NotifyMessageDetailsType\r\n * @returns IconSpec\r\n */\r\n public static getIconSpecFromDetails(details: NotifyMessageDetailsType): IconSpec {\r\n const severity = MessageManager.getSeverity(details);\r\n let iconSpec: IconSpec = <SvgStatusSuccess />;\r\n switch (severity) {\r\n case MessageSeverity.Error:\r\n case MessageSeverity.Fatal:\r\n iconSpec = <SvgStatusError />;\r\n break;\r\n case MessageSeverity.Warning:\r\n iconSpec = <SvgStatusWarning />;\r\n break;\r\n case MessageSeverity.Information:\r\n iconSpec = <SvgInfo />;\r\n break;\r\n }\r\n return iconSpec;\r\n }\r\n /** Gets an icon CSS class name based on a given NotifyMessageDetailsType.\r\n * @public\r\n * @deprecated in 4.0. Please use getIconSpecFromDetails instead.\r\n */\r\n public static getIconClassName(details: NotifyMessageDetailsType): string {\r\n const severity = MessageManager.getSeverity(details);\r\n const className = MessageContainer.getIconClassName(severity, false); // eslint-disable-line deprecation/deprecation\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 UiFramework.dialogs.modal.open(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 UiFramework.dialogs.modal.open(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":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAmB,kBAAkB,EAAE,qBAAqB,EACjI,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAY,gBAAgB,EAAgB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEzG,MAAM,mBAAmB;IACvB,YACkB,WAA8C,EAC9C,UAAiC;QADjC,gBAAW,GAAX,WAAW,CAAmC;QAC9C,eAAU,GAAV,UAAU,CAAuB;QAG5C,2BAAsB,GAAG,CAAC,MAAuB,EAAE,EAAE;YAC1D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC;IAJE,CAAC;CAKN;AA8CD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,OAA8B;CAAI;AAEzE;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,OAAW;CAAI;AAEzD;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,OAAiC;CAAI;AAEtF;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,OAAW;CAAI;AAElE;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,OAAmC;CAAI;AAExF;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,OAAW;CAAI;AAElE;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,OAAW;CAAI;AAE3D;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,OAAuC;CAAI;AAE3F;;;;;GAKG;AACH,MAAM,sBAAsB;IAA5B;QACS,YAAO,GAAsB,EAAE,CAAC;QAChC,eAAU,GAAW,CAAC,CAAC;QACvB,YAAO,GAA2B,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/E,eAAU,GAAY,KAAK,CAAC;IACrC,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IAkCzB,oDAAoD;IAC7C,MAAM,KAAK,QAAQ,KAA2C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7F,kCAAkC;IAC3B,MAAM,KAAK,oBAAoB,KAA2B,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAErG,8BAA8B;IACvB,MAAM,CAAC,aAAa;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QAExC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAED,+BAA+B;IACxB,MAAM,CAAC,cAAc;QAC1B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,gDAAgD;IACzC,MAAM,CAAC,oBAAoB,CAAC,GAAW;QAC5C,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED,uDAAuD;IAChD,MAAM,KAAK,0BAA0B,KAAa,OAAO,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5F,MAAM,KAAK,0BAA0B,CAAC,GAAW,IAAI,IAAI,CAAC,2BAA2B,GAAG,GAAG,CAAC,CAAC,CAAC;IAErG;;OAEG;IACI,MAAM,CAAC,aAAa,CAAC,OAAiC;QAC3D,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,EAAE;YACjD,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACrC;aAAM,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,UAAU,EAAE;YAC3D,IAAI,OAAO,CAAC,UAAU;gBACpB,cAAc,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;;gBAE7H,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,4EAA4E;SAC3H;aAAM,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,KAAK,EAAE;YACtD,IAAI,OAAO,CAAC,SAAS,KAAK,kBAAkB,CAAC,OAAO;gBAClD,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,sDAAsD;;gBAElG,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SAC/C;QAED,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,2BAA2B,CAAC,OAA2B;QACnE,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,OAAiC,EAAE,OAAsB,EAAE,QAA0B;QAChH,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,KAAK,EAAE;YAC/F,OAAO;SACR;QACD,MAAM,YAAY,GAAiB;YACjC,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,YAAY;YAC1C,IAAI,EACF,OAAO,CAAC,OAAO,KAAK,iBAAiB,CAAC,MAAM;gBAC1C,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,WAAW;YACjB,YAAY,EAAE,IAAI,CAAC,oBAAoB;YACvC,GAAG,OAAO;SACX,CAAC;QACF,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG;YACb,OAAO,CAAC,YAAY;YACpB,OAAO,CAAC,eAAe;gBACxB,oBAAC,IAAI,IAAC,OAAO,EAAC,OAAO;oBAAC,0CAAI,OAAO,CAAC,eAAgC,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAI,CAAO,CAEjH,CAAC;QACJ,QAAQ,OAAO,CAAC,QAAQ,EAAE;YACxB,KAAK,qBAAqB,CAAC,OAAO;gBAChC,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChD,KAAK,qBAAqB,CAAC,IAAI;gBAC7B,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACtD,KAAK,qBAAqB,CAAC,KAAK,CAAC;YACjC,KAAK,qBAAqB,CAAC,KAAK;gBAC9B,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjD;gBACE,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,UAAU,CAAC,OAAiC;QACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;YACxC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;SAC7B;QAED,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,kBAAkB,CAAC,OAAiC;QAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED,qDAAqD;IAC7C,MAAM,CAAC,sBAAsB;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,2BAA2B,CAAC,OAA+B;QACvE,IAAI,CAAC,uBAAuB,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,qBAAqB,CAAC,OAA0B,EAAE,eAAuB;QACrF,OAAO,cAAc,CAAC,0BAA0B,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,0BAA0B,CAAC,OAA0B,EAAE,UAAkB,EAAE,QAAkB;QACzG,IAAI,CAAC,uBAAuB,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,UAAU,CAAC;QAErD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;YACtC,OAAO;YACP,UAAU;YACV,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO;YAC7C,QAAQ,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU;SACxF,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,WAAoB;QACnD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,qBAAqB,CAAC,WAAoB;QACvD,IAAI,WAAW;YACb,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;;YAE3D,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,wBAAwB,CAAC,MAAmB,EAAE,WAA8B,EAAE,kBAAqC,EAAE,EAAE,QAAQ,GAAG,qBAAqB,CAAC,KAAK;QACzK,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;YACtC,MAAM;YACN,WAAW;YACX,eAAe;YACf,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,qBAAqB;QACjC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,iBAAiB;QAC7B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,mGAAmG;IAC5F,MAAM,CAAC,YAAY,CAAC,MAAc;QACvC,WAAW,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,sBAAsB,CAAC,OAAiC;QACpE,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,QAAQ,GAAa,oBAAC,gBAAgB,OAAG,CAAC;QAC9C,QAAQ,QAAQ,EAAE;YAChB,KAAK,eAAe,CAAC,KAAK,CAAC;YAC3B,KAAK,eAAe,CAAC,KAAK;gBACxB,QAAQ,GAAI,oBAAC,cAAc,OAAG,CAAC;gBAC/B,MAAM;YACR,KAAK,eAAe,CAAC,OAAO;gBAC1B,QAAQ,GAAI,oBAAC,gBAAgB,OAAG,CAAC;gBACjC,MAAM;YACR,KAAK,eAAe,CAAC,WAAW;gBAC9B,QAAQ,GAAI,oBAAC,OAAO,OAAG,CAAC;gBACxB,MAAM;SACT;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,gBAAgB,CAAC,OAAiC;QAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,8CAA8C;QACpH,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;QAE1E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,WAAW,CAAC,OAAiC;QACzD,IAAI,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC;QAEpC,QAAQ,OAAO,CAAC,QAAQ,EAAE;YACxB,KAAK,qBAAqB,CAAC,IAAI;gBAC7B,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC;gBACnC,MAAM;YACR,KAAK,qBAAqB,CAAC,OAAO;gBAChC,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC;gBACnC,MAAM;YACR,KAAK,qBAAqB,CAAC,IAAI;gBAC7B,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC;gBACvC,MAAM;YACR,KAAK,qBAAqB,CAAC,OAAO;gBAChC,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC;gBACnC,MAAM;YACR,KAAK,qBAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC;gBACjC,MAAM;YACR,KAAK,qBAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC;gBACjC,MAAM;SACT;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2EAA2E;IACpE,MAAM,CAAC,WAAW,CAAC,OAAiC;QACzD,IAAI,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QAE3C,QAAQ,OAAO,CAAC,QAAQ,EAAE;YACxB,KAAK,qBAAqB,CAAC,IAAI;gBAC7B,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;gBACvC,MAAM;YACR,KAAK,qBAAqB,CAAC,OAAO;gBAChC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;gBACtC,MAAM;YACR,KAAK,qBAAqB,CAAC,IAAI;gBAC7B,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC;gBAC1C,MAAM;YACR,KAAK,qBAAqB,CAAC,OAAO;gBAChC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;gBACtC,MAAM;YACR,KAAK,qBAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;gBACvC,MAAM;YACR,KAAK,qBAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;gBACvC,MAAM;SACT;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAsB,EAAE,OAA0B,EAAE,IAAwB;QAC7G,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAErD,OAAO,IAAI,OAAO,CAAC,CAAC,WAA8C,EAAE,UAAiC,EAAE,EAAE;YACvG,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC7E,MAAM,cAAc,GAAG,oBAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;YACzD,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACpH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,mBAAmB,CAAC,cAAwC;QACxE,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,CACd;YACE,oBAAC,WAAW,IAAC,OAAO,EAAE,cAAc,CAAC,YAAY,GAAI;YAEnD,cAAc,CAAC,eAAe,IAAI,CAChC;gBACE,oBAAC,WAAW,IAAC,OAAO,EAAE,cAAc,CAAC,eAAe,GAAI,CACtD,CACL,CAEF,CACJ,CAAC;QACF,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvG,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,MAAsB,EAAE,QAA4B,EAAE,KAAa,EAAE,cAA+B,EAAE,SAA+B;QACrK,MAAM,QAAQ,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,CACL,oBAAC,kBAAkB,IACjB,MAAM,EAAE,IAAI,EACZ,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,IAEjB,cAAc,CACI,CACtB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,YAAoD;QAClF,cAAc,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,WAAwB,EAAE,OAA0B,EAAE,QAAgB,EAAE,OAAwB;QACxH,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,cAAc,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,gBAAgB;QAC5B,cAAc,CAAC,WAAW,EAAE,CAAC;QAC7B,cAAc,CAAC,WAAW,EAAE,CAAC;QAC7B,cAAc,CAAC,aAAa,EAAE,CAAC;QAC/B,cAAc,CAAC,qBAAqB,EAAE,CAAC;QACvC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;;AAjbc,iCAAkB,GAAG,GAAG,CAAC;AACzB,0CAA2B,GAAG,CAAC,CAAC;AAChC,wBAAS,GAA+B,EAAE,CAAC;AAC3C,sCAAuB,GAA2B,IAAI,sBAAsB,EAAE,CAAC;AAE/E,oCAAqB,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAGlE,kFAAkF;AAC3D,kCAAmB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAErE,6FAA6F;AACtE,qCAAsB,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE3E,6GAA6G;AACtF,4CAA6B,GAAG,IAAI,2BAA2B,EAAE,CAAC;AAEzF;;;GAGG;AACoB,8CAA+B,GAAG,IAAI,6BAA6B,EAAE,CAAC;AAEtE,4CAA6B,GAAG,IAAI,2BAA2B,EAAE,CAAC;AAClE,8CAA+B,GAAG,IAAI,6BAA6B,EAAE,CAAC;AAEtE,uCAAwB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAE/E;;GAEG;AACoB,2CAA4B,GAAG,IAAI,0BAA0B,EAAE,CAAC","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 { isEqual } 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 { IconSpec, MessageContainer, ReactMessage } from \"@itwin/core-react\";\r\nimport { ConfigurableUiActionId } from \"../configurableui/state\";\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 { Text, toaster, ToastOptions } from \"@itwin/itwinui-react\";\r\nimport { ToasterSettings } from \"@itwin/itwinui-react/cjs/core/Toast/Toaster\";\r\nimport { SvgInfo, SvgStatusError, SvgStatusSuccess, SvgStatusWarning } from \"@itwin/itwinui-icons-react\";\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 <Text variant=\"small\"><>{(message.detailedMessage as ReactMessage).reactNode || message.detailedMessage}</></Text>\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 /** Extracts the message severity from the message details and returns the corresponding React icon.\r\n * @param details NotifyMessageDetailsType\r\n * @returns IconSpec\r\n */\r\n public static getIconSpecFromDetails(details: NotifyMessageDetailsType): IconSpec {\r\n const severity = MessageManager.getSeverity(details);\r\n let iconSpec: IconSpec = <SvgStatusSuccess />;\r\n switch (severity) {\r\n case MessageSeverity.Error:\r\n case MessageSeverity.Fatal:\r\n iconSpec = <SvgStatusError />;\r\n break;\r\n case MessageSeverity.Warning:\r\n iconSpec = <SvgStatusWarning />;\r\n break;\r\n case MessageSeverity.Information:\r\n iconSpec = <SvgInfo />;\r\n break;\r\n }\r\n return iconSpec;\r\n }\r\n /** Gets an icon CSS class name based on a given NotifyMessageDetailsType.\r\n * @public\r\n * @deprecated in 4.0. Please use getIconSpecFromDetails instead.\r\n */\r\n public static getIconClassName(details: NotifyMessageDetailsType): string {\r\n const severity = MessageManager.getSeverity(details);\r\n const className = MessageContainer.getIconClassName(severity, false); // eslint-disable-line deprecation/deprecation\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 UiFramework.dialogs.modal.open(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 UiFramework.dialogs.modal.open(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"]}
|
|
@@ -130,7 +130,7 @@ export class SheetCard extends React.Component {
|
|
|
130
130
|
render() {
|
|
131
131
|
const { label, index } = this.props;
|
|
132
132
|
const className = classnames("uifw-sheet-card", this.state.isActive && "is-active", this.state.isPressed && "is-pressed");
|
|
133
|
-
const iconSpec = this.props.iconSpec ? this.props.iconSpec : SvgPlaceholder;
|
|
133
|
+
const iconSpec = this.props.iconSpec ? this.props.iconSpec : React.createElement(SvgPlaceholder, null);
|
|
134
134
|
return (
|
|
135
135
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events
|
|
136
136
|
React.createElement("div", { className: className, onClick: this._onClick, onMouseDown: this._onMouseDown, onMouseLeave: this._onMouseLeave, role: "button", tabIndex: -1 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SheetsModalFrontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/navigationaids/SheetsModalFrontstage.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 NavigationAids\r\n */\r\n\r\nimport \"./SheetsModalFrontstage.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { IModelApp, IModelConnection } from \"@itwin/core-frontend\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, FlexWrapContainer, Icon, IconSpec, ScrollView, SearchBox, UiCore } from \"@itwin/core-react\";\r\nimport { ModalFrontstageInfo } from \"../framework/FrameworkFrontstages\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { SheetData } from \"./SheetNavigationAid\";\r\nimport { SvgDocument, SvgPlaceholder } from \"@itwin/itwinui-icons-react\";\r\n\r\n/** Data about a sheet card\r\n * @alpha\r\n */\r\nexport interface CardInfo {\r\n index: number;\r\n label: string;\r\n iconSpec: IconSpec;\r\n isActive: boolean;\r\n viewId: any;\r\n}\r\n\r\n/** Arguments for CardSelectedEvent\r\n * @alpha\r\n */\r\nexport interface CardSelectedEventArgs {\r\n id: any;\r\n index: number;\r\n}\r\n\r\n/** Class for CardSelectedEvent\r\n * @alpha\r\n */\r\nexport class CardSelectedEvent extends UiEvent<CardSelectedEventArgs> { }\r\n\r\n/** Modal frontstage displaying sheet information in cards.\r\n * @alpha\r\n */\r\nexport class SheetsModalFrontstage implements ModalFrontstageInfo {\r\n public title: string = UiFramework.translate(\"navigationAid.sheetsModalFrontstage\");\r\n private _cards: CardInfo[] = [];\r\n private _connection: IModelConnection;\r\n private _currentIndex: number;\r\n private _searchValue: string = \"\";\r\n\r\n /**\r\n * Creates a SheetsModalFrontstage\r\n * @param sheets Collection of sheets available in SheetNavigationAid\r\n * @param connection IModelConnection to query for sheet ViewState\r\n */\r\n constructor(sheets: SheetData[], connection: IModelConnection, currentIndex: number) {\r\n this._connection = connection;\r\n this._currentIndex = currentIndex;\r\n this._storeSheetsAsCards(sheets);\r\n }\r\n\r\n /**\r\n * Gathers card info from available sheets\r\n * @param sheets SheetData from available sheets\r\n */\r\n private _storeSheetsAsCards(sheets: SheetData[]) {\r\n sheets.forEach((sheet: SheetData, index: number) => {\r\n this._cards.push({ index, label: sheet.name, iconSpec: <SvgDocument />, viewId: sheet.viewId, isActive: index === this._currentIndex });\r\n });\r\n }\r\n\r\n /** Gets set of cards */\r\n public get content(): React.ReactNode {\r\n return <CardContainer cards={this._cards} searchValue={this._searchValue} connection={this._connection} />;\r\n }\r\n\r\n /** Gets components to be placed in the app bar */\r\n public get appBarRight(): React.ReactNode {\r\n return (\r\n <SearchBox placeholder={UiCore.translate(\"general.search\")} onValueChanged={this._handleSearchValueChanged} valueChangedDelay={250} />\r\n );\r\n }\r\n\r\n /** Updates stage based on search value */\r\n // istanbul ignore next\r\n private _handleSearchValueChanged = (value: string): void => {\r\n this._searchValue = value;\r\n UiFramework.frontstages.updateModalFrontstage();\r\n };\r\n}\r\n\r\n/** Properties for [[CardContainer]]\r\n * @alpha\r\n */\r\nexport interface CardContainerProps extends CommonProps {\r\n cards: CardInfo[];\r\n searchValue: string;\r\n connection: IModelConnection;\r\n}\r\n\r\n/** Displays cards in SheetModalFrontstage\r\n * @alpha\r\n */\r\nexport class CardContainer extends React.Component<CardContainerProps> {\r\n private static _cardSelectedEvent: CardSelectedEvent = new CardSelectedEvent();\r\n\r\n /** Get CardSelectedEvent event */\r\n public static get onCardSelectedEvent(): CardSelectedEvent { return CardContainer._cardSelectedEvent; }\r\n\r\n /** @internal */\r\n public override render() {\r\n return (\r\n <ScrollView className={this.props.className} style={this.props.style}>\r\n <FlexWrapContainer>\r\n {\r\n this.props.cards.map((card: CardInfo, _index: number) => {\r\n let includeCard = true;\r\n if (this.props.searchValue) {\r\n includeCard = this.contains(card.label, this.props.searchValue);\r\n }\r\n\r\n if (includeCard) {\r\n return (\r\n <SheetCard key={card.label} label={card.label} index={card.index} iconSpec={card.iconSpec} isActive={card.isActive} onClick={async () => this._handleCardSelected(card)} />\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n </FlexWrapContainer>\r\n </ScrollView>\r\n );\r\n }\r\n\r\n /**\r\n * Determines if string contains a substring\r\n * @param valueA The string to search through\r\n * @param valueB The value to search for\r\n * @return True if valueB can be found in valueA, false otherwise\r\n */\r\n private contains(valueA: string, valueB: string): boolean {\r\n if (!valueA || !valueB)\r\n return false;\r\n\r\n if (valueB.length > valueA.length)\r\n return false;\r\n\r\n return valueA.toLocaleUpperCase().indexOf(valueB.toLocaleUpperCase(), 0) !== -1;\r\n }\r\n\r\n /**\r\n * Updates view with ViewState for selected card.\r\n * @param card Data about the sheet card selected.\r\n */\r\n private async _handleCardSelected(card: CardInfo) {\r\n // istanbul ignore if\r\n if (IModelApp.viewManager && IModelApp.viewManager.selectedView) {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const viewState = await this.props.connection.views.load(card.viewId);\r\n vp.changeView(viewState);\r\n }\r\n\r\n card.isActive = true;\r\n UiFramework.frontstages.closeModalFrontstage();\r\n CardContainer.onCardSelectedEvent.emit({ id: card.viewId, index: card.index });\r\n }\r\n}\r\n\r\n/** Properties for [[SheetCard]]\r\n * @alpha\r\n */\r\nexport interface SheetCardProps {\r\n label: string;\r\n index: number;\r\n iconSpec: IconSpec;\r\n isActive: boolean;\r\n onClick: () => void;\r\n}\r\n\r\n/** State for [[SheetCard]]\r\n * @internal\r\n */\r\ninterface SheetCardState {\r\n isActive: boolean;\r\n isPressed: boolean;\r\n}\r\n\r\n/** Displays information about an individual sheet\r\n * @alpha\r\n */\r\nexport class SheetCard extends React.Component<SheetCardProps, SheetCardState> {\r\n constructor(props: SheetCardProps) {\r\n super(props);\r\n this.state = { isActive: this.props.isActive, isPressed: false };\r\n }\r\n\r\n private _onClick = () => {\r\n this.setState({ isActive: true }, () => this.props.onClick());\r\n };\r\n\r\n private _onMouseDown = () => {\r\n this.setState({ isPressed: true });\r\n };\r\n\r\n private _onMouseLeave = () => {\r\n if (this.state.isPressed)\r\n this.setState({ isPressed: false });\r\n };\r\n\r\n public override render() {\r\n const { label, index } = this.props;\r\n\r\n const className = classnames(\r\n \"uifw-sheet-card\",\r\n this.state.isActive && \"is-active\",\r\n this.state.isPressed && \"is-pressed\",\r\n );\r\n\r\n const iconSpec = this.props.iconSpec ? this.props.iconSpec : SvgPlaceholder;\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\r\n <div className={className} onClick={this._onClick} onMouseDown={this._onMouseDown} onMouseLeave={this._onMouseLeave} role=\"button\" tabIndex={-1} >\r\n {label}\r\n <div className=\"sheet-image-container\">\r\n <div className=\"icon\"> <Icon iconSpec={iconSpec} /></div>\r\n </div >\r\n <div className=\"sheet-index\">{index + 1}</div>\r\n </div >\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SheetsModalFrontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/navigationaids/SheetsModalFrontstage.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 NavigationAids\r\n */\r\n\r\nimport \"./SheetsModalFrontstage.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { IModelApp, IModelConnection } from \"@itwin/core-frontend\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, FlexWrapContainer, Icon, IconSpec, ScrollView, SearchBox, UiCore } from \"@itwin/core-react\";\r\nimport { ModalFrontstageInfo } from \"../framework/FrameworkFrontstages\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { SheetData } from \"./SheetNavigationAid\";\r\nimport { SvgDocument, SvgPlaceholder } from \"@itwin/itwinui-icons-react\";\r\n\r\n/** Data about a sheet card\r\n * @alpha\r\n */\r\nexport interface CardInfo {\r\n index: number;\r\n label: string;\r\n iconSpec: IconSpec;\r\n isActive: boolean;\r\n viewId: any;\r\n}\r\n\r\n/** Arguments for CardSelectedEvent\r\n * @alpha\r\n */\r\nexport interface CardSelectedEventArgs {\r\n id: any;\r\n index: number;\r\n}\r\n\r\n/** Class for CardSelectedEvent\r\n * @alpha\r\n */\r\nexport class CardSelectedEvent extends UiEvent<CardSelectedEventArgs> { }\r\n\r\n/** Modal frontstage displaying sheet information in cards.\r\n * @alpha\r\n */\r\nexport class SheetsModalFrontstage implements ModalFrontstageInfo {\r\n public title: string = UiFramework.translate(\"navigationAid.sheetsModalFrontstage\");\r\n private _cards: CardInfo[] = [];\r\n private _connection: IModelConnection;\r\n private _currentIndex: number;\r\n private _searchValue: string = \"\";\r\n\r\n /**\r\n * Creates a SheetsModalFrontstage\r\n * @param sheets Collection of sheets available in SheetNavigationAid\r\n * @param connection IModelConnection to query for sheet ViewState\r\n */\r\n constructor(sheets: SheetData[], connection: IModelConnection, currentIndex: number) {\r\n this._connection = connection;\r\n this._currentIndex = currentIndex;\r\n this._storeSheetsAsCards(sheets);\r\n }\r\n\r\n /**\r\n * Gathers card info from available sheets\r\n * @param sheets SheetData from available sheets\r\n */\r\n private _storeSheetsAsCards(sheets: SheetData[]) {\r\n sheets.forEach((sheet: SheetData, index: number) => {\r\n this._cards.push({ index, label: sheet.name, iconSpec: <SvgDocument />, viewId: sheet.viewId, isActive: index === this._currentIndex });\r\n });\r\n }\r\n\r\n /** Gets set of cards */\r\n public get content(): React.ReactNode {\r\n return <CardContainer cards={this._cards} searchValue={this._searchValue} connection={this._connection} />;\r\n }\r\n\r\n /** Gets components to be placed in the app bar */\r\n public get appBarRight(): React.ReactNode {\r\n return (\r\n <SearchBox placeholder={UiCore.translate(\"general.search\")} onValueChanged={this._handleSearchValueChanged} valueChangedDelay={250} />\r\n );\r\n }\r\n\r\n /** Updates stage based on search value */\r\n // istanbul ignore next\r\n private _handleSearchValueChanged = (value: string): void => {\r\n this._searchValue = value;\r\n UiFramework.frontstages.updateModalFrontstage();\r\n };\r\n}\r\n\r\n/** Properties for [[CardContainer]]\r\n * @alpha\r\n */\r\nexport interface CardContainerProps extends CommonProps {\r\n cards: CardInfo[];\r\n searchValue: string;\r\n connection: IModelConnection;\r\n}\r\n\r\n/** Displays cards in SheetModalFrontstage\r\n * @alpha\r\n */\r\nexport class CardContainer extends React.Component<CardContainerProps> {\r\n private static _cardSelectedEvent: CardSelectedEvent = new CardSelectedEvent();\r\n\r\n /** Get CardSelectedEvent event */\r\n public static get onCardSelectedEvent(): CardSelectedEvent { return CardContainer._cardSelectedEvent; }\r\n\r\n /** @internal */\r\n public override render() {\r\n return (\r\n <ScrollView className={this.props.className} style={this.props.style}>\r\n <FlexWrapContainer>\r\n {\r\n this.props.cards.map((card: CardInfo, _index: number) => {\r\n let includeCard = true;\r\n if (this.props.searchValue) {\r\n includeCard = this.contains(card.label, this.props.searchValue);\r\n }\r\n\r\n if (includeCard) {\r\n return (\r\n <SheetCard key={card.label} label={card.label} index={card.index} iconSpec={card.iconSpec} isActive={card.isActive} onClick={async () => this._handleCardSelected(card)} />\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n </FlexWrapContainer>\r\n </ScrollView>\r\n );\r\n }\r\n\r\n /**\r\n * Determines if string contains a substring\r\n * @param valueA The string to search through\r\n * @param valueB The value to search for\r\n * @return True if valueB can be found in valueA, false otherwise\r\n */\r\n private contains(valueA: string, valueB: string): boolean {\r\n if (!valueA || !valueB)\r\n return false;\r\n\r\n if (valueB.length > valueA.length)\r\n return false;\r\n\r\n return valueA.toLocaleUpperCase().indexOf(valueB.toLocaleUpperCase(), 0) !== -1;\r\n }\r\n\r\n /**\r\n * Updates view with ViewState for selected card.\r\n * @param card Data about the sheet card selected.\r\n */\r\n private async _handleCardSelected(card: CardInfo) {\r\n // istanbul ignore if\r\n if (IModelApp.viewManager && IModelApp.viewManager.selectedView) {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const viewState = await this.props.connection.views.load(card.viewId);\r\n vp.changeView(viewState);\r\n }\r\n\r\n card.isActive = true;\r\n UiFramework.frontstages.closeModalFrontstage();\r\n CardContainer.onCardSelectedEvent.emit({ id: card.viewId, index: card.index });\r\n }\r\n}\r\n\r\n/** Properties for [[SheetCard]]\r\n * @alpha\r\n */\r\nexport interface SheetCardProps {\r\n label: string;\r\n index: number;\r\n iconSpec: IconSpec;\r\n isActive: boolean;\r\n onClick: () => void;\r\n}\r\n\r\n/** State for [[SheetCard]]\r\n * @internal\r\n */\r\ninterface SheetCardState {\r\n isActive: boolean;\r\n isPressed: boolean;\r\n}\r\n\r\n/** Displays information about an individual sheet\r\n * @alpha\r\n */\r\nexport class SheetCard extends React.Component<SheetCardProps, SheetCardState> {\r\n constructor(props: SheetCardProps) {\r\n super(props);\r\n this.state = { isActive: this.props.isActive, isPressed: false };\r\n }\r\n\r\n private _onClick = () => {\r\n this.setState({ isActive: true }, () => this.props.onClick());\r\n };\r\n\r\n private _onMouseDown = () => {\r\n this.setState({ isPressed: true });\r\n };\r\n\r\n private _onMouseLeave = () => {\r\n if (this.state.isPressed)\r\n this.setState({ isPressed: false });\r\n };\r\n\r\n public override render() {\r\n const { label, index } = this.props;\r\n\r\n const className = classnames(\r\n \"uifw-sheet-card\",\r\n this.state.isActive && \"is-active\",\r\n this.state.isPressed && \"is-pressed\",\r\n );\r\n\r\n const iconSpec = this.props.iconSpec ? this.props.iconSpec : <SvgPlaceholder />;\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\r\n <div className={className} onClick={this._onClick} onMouseDown={this._onMouseDown} onMouseLeave={this._onMouseLeave} role=\"button\" tabIndex={-1} >\r\n {label}\r\n <div className=\"sheet-image-container\">\r\n <div className=\"icon\"> <Icon iconSpec={iconSpec} /></div>\r\n </div >\r\n <div className=\"sheet-index\">{index + 1}</div>\r\n </div >\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -66,7 +66,7 @@ export interface ExpandableSectionProps extends CommonProps {
|
|
|
66
66
|
interface ExpandableSectionState {
|
|
67
67
|
expanded: boolean;
|
|
68
68
|
}
|
|
69
|
-
/** Expandable Section React component
|
|
69
|
+
/** Expandable Section React component
|
|
70
70
|
* @beta
|
|
71
71
|
*/
|
|
72
72
|
export declare class ExpandableSection extends React.PureComponent<ExpandableSectionProps, ExpandableSectionState> {
|
|
@@ -37,7 +37,7 @@ export class ListPickerItem extends React.PureComponent {
|
|
|
37
37
|
React.createElement("div", { className: "label", title: title }, this.props.label)));
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
/** Expandable Section React component
|
|
40
|
+
/** Expandable Section React component
|
|
41
41
|
* @beta
|
|
42
42
|
*/
|
|
43
43
|
export class ExpandableSection extends React.PureComponent {
|