@itwin/appui-react 5.19.0 → 5.20.0
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/CHANGELOG.md +14 -0
- package/lib/appui-react/UiFramework.js +20 -13
- package/lib/appui-react/UiFramework.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawWidget.js +1 -1
- package/lib/appui-react/accudraw/AccuDrawWidget.js.map +1 -1
- package/lib/appui-react/accudraw/Calculator.js +92 -98
- package/lib/appui-react/accudraw/Calculator.js.map +1 -1
- package/lib/appui-react/accudraw/CalculatorEngine.js +130 -129
- package/lib/appui-react/accudraw/CalculatorEngine.js.map +1 -1
- package/lib/appui-react/accudraw/CalculatorPopup.js +9 -12
- package/lib/appui-react/accudraw/CalculatorPopup.js.map +1 -1
- package/lib/appui-react/accudraw/FrameworkAccuDraw.js +39 -38
- package/lib/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
- package/lib/appui-react/accudraw/MenuButton.js +20 -20
- package/lib/appui-react/accudraw/MenuButton.js.map +1 -1
- package/lib/appui-react/accudraw/MenuButtonPopup.js +9 -12
- package/lib/appui-react/accudraw/MenuButtonPopup.js.map +1 -1
- package/lib/appui-react/backstage/BackstageItemsManager.js +5 -5
- package/lib/appui-react/backstage/BackstageItemsManager.js.map +1 -1
- package/lib/appui-react/backstage/BackstageManager.js +1 -3
- package/lib/appui-react/backstage/BackstageManager.js.map +1 -1
- package/lib/appui-react/backstage/InternalBackstageManager.js +3 -5
- package/lib/appui-react/backstage/InternalBackstageManager.js.map +1 -1
- package/lib/appui-react/childwindow/InternalChildWindowManager.js +30 -32
- package/lib/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
- package/lib/appui-react/configurableui/ActivityTracker.js +33 -33
- package/lib/appui-react/configurableui/ActivityTracker.js.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/lib/appui-react/configurableui/ConfigurableUiControl.js +8 -0
- package/lib/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
- package/lib/appui-react/configurableui/InternalConfigurableUiManager.js +8 -8
- package/lib/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
- package/lib/appui-react/configurableui/TimeTracker.js +25 -27
- package/lib/appui-react/configurableui/TimeTracker.js.map +1 -1
- package/lib/appui-react/content/ContentControl.js +2 -1
- package/lib/appui-react/content/ContentControl.js.map +1 -1
- package/lib/appui-react/content/ContentGroup.js +8 -4
- package/lib/appui-react/content/ContentGroup.js.map +1 -1
- package/lib/appui-react/content/ContentLayout.js +47 -38
- package/lib/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/appui-react/content/IModelViewport.js +28 -23
- package/lib/appui-react/content/IModelViewport.js.map +1 -1
- package/lib/appui-react/content/InternalContentLayoutManager.js +1 -1
- package/lib/appui-react/content/InternalContentLayoutManager.js.map +1 -1
- package/lib/appui-react/content/InternalContentViewManager.js +9 -8
- package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
- package/lib/appui-react/content/StandardContentLayouts.js +141 -141
- package/lib/appui-react/content/StandardContentLayouts.js.map +1 -1
- package/lib/appui-react/content/ViewportContentControl.js +25 -22
- package/lib/appui-react/content/ViewportContentControl.js.map +1 -1
- package/lib/appui-react/cursor/CursorInformation.js +7 -6
- package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +9 -9
- package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +7 -7
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
- package/lib/appui-react/dialog/DialogManagerBase.js +18 -19
- package/lib/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/appui-react/dialog/InternalContentDialogManager.js +7 -7
- package/lib/appui-react/dialog/InternalContentDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/InternalModalDialogManager.js +4 -4
- package/lib/appui-react/dialog/InternalModalDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/InternalModelessDialogManager.js +6 -6
- package/lib/appui-react/dialog/InternalModelessDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/ModelessDialog.js +3 -3
- package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
- package/lib/appui-react/feedback/ElementTooltip.js +3 -1
- package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
- package/lib/appui-react/feedback/ValidationTextbox.js +25 -25
- package/lib/appui-react/feedback/ValidationTextbox.js.map +1 -1
- package/lib/appui-react/frontstage/FrontstageDef.js +28 -10
- package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
- package/lib/appui-react/frontstage/InternalFrontstageManager.js +96 -96
- package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
- package/lib/appui-react/frontstage/ModalFrontstage.js +5 -5
- package/lib/appui-react/frontstage/ModalFrontstage.js.map +1 -1
- package/lib/appui-react/frontstage/ModalSettingsStage.js +5 -4
- package/lib/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
- package/lib/appui-react/frontstage/StandardFrontstageProvider.js +1 -0
- package/lib/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js +22 -22
- package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js +11 -9
- package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +17 -20
- package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
- package/lib/appui-react/layout/backstage/Backstage.js +11 -14
- package/lib/appui-react/layout/backstage/Backstage.js.map +1 -1
- package/lib/appui-react/layout/base/DragManager.js +6 -7
- package/lib/appui-react/layout/base/DragManager.js.map +1 -1
- package/lib/appui-react/layout/base/SafeAreaInsets.js +8 -8
- package/lib/appui-react/layout/base/SafeAreaInsets.js.map +1 -1
- package/lib/appui-react/layout/popup/Tooltip.js +8 -11
- package/lib/appui-react/layout/popup/Tooltip.js.map +1 -1
- package/lib/appui-react/layout/widget/Tab.d.ts.map +1 -1
- package/lib/appui-react/layout/widget/Tab.js +7 -5
- package/lib/appui-react/layout/widget/Tab.js.map +1 -1
- package/lib/appui-react/messages/InputField.js +21 -24
- package/lib/appui-react/messages/InputField.js.map +1 -1
- package/lib/appui-react/messages/MessageManager.js +39 -38
- package/lib/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/appui-react/messages/Pointer.js +38 -38
- package/lib/appui-react/messages/Pointer.js.map +1 -1
- package/lib/appui-react/messages/ReactNotifyMessageDetails.js +6 -0
- package/lib/appui-react/messages/ReactNotifyMessageDetails.js.map +1 -1
- package/lib/appui-react/messages/StatusMessageManager.js +2 -4
- package/lib/appui-react/messages/StatusMessageManager.js.map +1 -1
- package/lib/appui-react/navigationaids/CubeNavigationAidControl.js +1 -1
- package/lib/appui-react/navigationaids/CubeNavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js +1 -1
- package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/NavigationAidControl.js +1 -0
- package/lib/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/SheetNavigationAid.js +55 -54
- package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
- package/lib/appui-react/navigationaids/SheetsModalFrontstage.js +22 -20
- package/lib/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js +15 -14
- package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js.map +1 -1
- package/lib/appui-react/pickers/ListPicker.js +28 -28
- package/lib/appui-react/pickers/ListPicker.js.map +1 -1
- package/lib/appui-react/pickers/ViewSelector.js +87 -86
- package/lib/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/appui-react/popup/CardPopup.js +18 -21
- package/lib/appui-react/popup/CardPopup.js.map +1 -1
- package/lib/appui-react/popup/HTMLElementPopup.js +9 -12
- package/lib/appui-react/popup/HTMLElementPopup.js.map +1 -1
- package/lib/appui-react/popup/InputEditorPopup.js +18 -20
- package/lib/appui-react/popup/InputEditorPopup.js.map +1 -1
- package/lib/appui-react/popup/PopupManager.js +22 -25
- package/lib/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/appui-react/popup/ToolSettingsPopup.js +17 -17
- package/lib/appui-react/popup/ToolSettingsPopup.js.map +1 -1
- package/lib/appui-react/popup/ToolbarPopup.js +18 -21
- package/lib/appui-react/popup/ToolbarPopup.js.map +1 -1
- package/lib/appui-react/redux/ReducerRegistry.js +2 -0
- package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
- package/lib/appui-react/redux/StateManager.js +4 -1
- package/lib/appui-react/redux/StateManager.js.map +1 -1
- package/lib/appui-react/selection/HideIsolateEmphasizeManager.js +7 -3
- package/lib/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
- package/lib/appui-react/shared/ActionButtonItemDef.js +13 -6
- package/lib/appui-react/shared/ActionButtonItemDef.js.map +1 -1
- package/lib/appui-react/shared/CommandItemDef.js +3 -3
- package/lib/appui-react/shared/CommandItemDef.js.map +1 -1
- package/lib/appui-react/shared/CustomItemDef.js +4 -2
- package/lib/appui-react/shared/CustomItemDef.js.map +1 -1
- package/lib/appui-react/shared/ItemDefBase.js +13 -5
- package/lib/appui-react/shared/ItemDefBase.js.map +1 -1
- package/lib/appui-react/shared/MenuItem.js +6 -1
- package/lib/appui-react/shared/MenuItem.js.map +1 -1
- package/lib/appui-react/shared/ToolItemDef.js +1 -1
- package/lib/appui-react/shared/ToolItemDef.js.map +1 -1
- package/lib/appui-react/stagepanels/StagePanelDef.js +4 -3
- package/lib/appui-react/stagepanels/StagePanelDef.js.map +1 -1
- package/lib/appui-react/statusbar/StatusBarItemsManager.js +5 -5
- package/lib/appui-react/statusbar/StatusBarItemsManager.js.map +1 -1
- package/lib/appui-react/statusfields/ViewAttributes.js +16 -16
- package/lib/appui-react/statusfields/ViewAttributes.js.map +1 -1
- package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js +35 -33
- package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
- package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js +7 -0
- package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -1
- package/lib/appui-react/syncui/SyncUiEventDispatcher.js +4 -3
- package/lib/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/appui-react/timeline/AnalysisAnimationProvider.js +9 -8
- package/lib/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
- package/lib/appui-react/timeline/ScheduleAnimationProvider.js +13 -12
- package/lib/appui-react/timeline/ScheduleAnimationProvider.js.map +1 -1
- package/lib/appui-react/timeline/SolarTimelineDataProvider.js +6 -5
- package/lib/appui-react/timeline/SolarTimelineDataProvider.js.map +1 -1
- package/lib/appui-react/toolbar/GroupItem.js +11 -5
- package/lib/appui-react/toolbar/GroupItem.js.map +1 -1
- package/lib/appui-react/toolbar/ToolbarItemsManager.js +7 -7
- package/lib/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
- package/lib/appui-react/tools/FrameworkToolAdmin.js +5 -1
- package/lib/appui-react/tools/FrameworkToolAdmin.js.map +1 -1
- package/lib/appui-react/tools/KeyinPaletteTools.js +2 -2
- package/lib/appui-react/tools/KeyinPaletteTools.js.map +1 -1
- package/lib/appui-react/tools/OpenSettingsTool.js +2 -2
- package/lib/appui-react/tools/OpenSettingsTool.js.map +1 -1
- package/lib/appui-react/tools/RestoreLayoutTool.js +4 -4
- package/lib/appui-react/tools/RestoreLayoutTool.js.map +1 -1
- package/lib/appui-react/tools/ToolSettingsTools.js +2 -2
- package/lib/appui-react/tools/ToolSettingsTools.js.map +1 -1
- package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js +15 -18
- package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
- package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +8 -8
- package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
- package/lib/appui-react/toolsettings/ToolInformation.js +2 -0
- package/lib/appui-react/toolsettings/ToolInformation.js.map +1 -1
- package/lib/appui-react/toolsettings/ToolUiProvider.js +3 -0
- package/lib/appui-react/toolsettings/ToolUiProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -0
- package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
- package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js +2 -0
- package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/UiItemsManager.js +3 -3
- package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
- package/lib/appui-react/uiadmin/FrameworkUiAdmin.js +1 -4
- package/lib/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
- package/lib/appui-react/uiprovider/ComponentGenerator.js +2 -0
- package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
- package/lib/appui-react/uistate/AppUiSettings.js +41 -33
- package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
- package/lib/appui-react/utils/InternalUiShowHideManager.js +13 -14
- package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
- package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js +2 -5
- package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js.map +1 -1
- package/lib/appui-react/widgets/WidgetControl.js +2 -0
- package/lib/appui-react/widgets/WidgetControl.js.map +1 -1
- package/lib/appui-react/widgets/WidgetDef.js +28 -7
- package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/appui-react/widgets/WidgetHost.js +4 -4
- package/lib/appui-react/widgets/WidgetHost.js.map +1 -1
- package/lib/appui-react/widgets/WidgetManager.js +5 -7
- package/lib/appui-react/widgets/WidgetManager.js.map +1 -1
- package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/lib/esm/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/package.json +9 -9
|
@@ -27,6 +27,20 @@ export class ViewSelectorChangedEvent extends UiEvent {
|
|
|
27
27
|
* @beta
|
|
28
28
|
*/
|
|
29
29
|
export class ViewSelector extends React.Component {
|
|
30
|
+
static _onViewSelectorShowUpdateEvent = new BeUiEvent();
|
|
31
|
+
_removeShowUpdateListener;
|
|
32
|
+
_isMounted = false;
|
|
33
|
+
_searchInput = "";
|
|
34
|
+
static defaultProps = {
|
|
35
|
+
showSpatials: true,
|
|
36
|
+
showDrawings: true,
|
|
37
|
+
showSheets: true,
|
|
38
|
+
showUnknown: true,
|
|
39
|
+
};
|
|
40
|
+
/** Gets the [[ViewSelectorChangedEvent]].
|
|
41
|
+
* @deprecated in 4.16.0. Use {@link ViewSelectorProps.onViewSelected} prop instead.
|
|
42
|
+
*/
|
|
43
|
+
static onViewSelectorChangedEvent = new ViewSelectorChangedEvent(); // eslint-disable-line @typescript-eslint/no-deprecated
|
|
30
44
|
/** Updates the ViewSelector show settings.
|
|
31
45
|
*/
|
|
32
46
|
static updateShowSettings(showSpatials, showDrawings, showSheets, showUnknown) {
|
|
@@ -40,81 +54,6 @@ export class ViewSelector extends React.Component {
|
|
|
40
54
|
/** Creates a ViewSelector */
|
|
41
55
|
constructor(props) {
|
|
42
56
|
super(props);
|
|
43
|
-
this._isMounted = false;
|
|
44
|
-
this._searchInput = "";
|
|
45
|
-
this._handleViewSelectorShowUpdateEvent = (args) => {
|
|
46
|
-
if (!this._isMounted)
|
|
47
|
-
return;
|
|
48
|
-
this.setState(args, async () => this.loadViews());
|
|
49
|
-
};
|
|
50
|
-
// enable/disable the models
|
|
51
|
-
this._setEnabled = async (item, _enabled) => {
|
|
52
|
-
const activeContentControl = // eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
53
|
-
UiFramework.content.getActiveContentControl();
|
|
54
|
-
if (!this.props.onViewSelected &&
|
|
55
|
-
(!activeContentControl ||
|
|
56
|
-
!activeContentControl.supportsViewSelectorChange)) {
|
|
57
|
-
Logger.logError(UiFramework.loggerCategory("ViewSelector"), `No active ContentControl for ViewSelector change`);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
// Enable the item temporarily to let user see that their click was registered
|
|
61
|
-
// while we query for view state and change the current view which may take a bit
|
|
62
|
-
if (_enabled && item.type !== ListItemType.Container) {
|
|
63
|
-
// This itemMapper simply looks through all the list items and their nested children and enables the one
|
|
64
|
-
// that we have registered to enable
|
|
65
|
-
// Also disable all other items
|
|
66
|
-
const itemMapper = (tempItem) => {
|
|
67
|
-
if (tempItem.type === ListItemType.Container) {
|
|
68
|
-
return { ...tempItem, children: tempItem.children.map(itemMapper) };
|
|
69
|
-
}
|
|
70
|
-
else if (tempItem.key === item.key) {
|
|
71
|
-
return { ...tempItem, enabled: true };
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
return { ...tempItem, enabled: false };
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
// Create the new array with the current item enabled
|
|
78
|
-
const itemsWithEnabled = this.state.items.map(itemMapper);
|
|
79
|
-
if (!this._isMounted)
|
|
80
|
-
return;
|
|
81
|
-
// Update the state so that we show the user it was enabled while we work in the background
|
|
82
|
-
this.setState({ items: itemsWithEnabled });
|
|
83
|
-
}
|
|
84
|
-
assert(!!this.props.imodel);
|
|
85
|
-
assert(!!item.name);
|
|
86
|
-
// Load the view state using the viewSpec's ID
|
|
87
|
-
const viewState = await this.props.imodel.views.load(item.key);
|
|
88
|
-
if (this.props.onViewSelected) {
|
|
89
|
-
this.props.onViewSelected({
|
|
90
|
-
iModelConnection: this.props.imodel,
|
|
91
|
-
viewDefinitionId: item.key,
|
|
92
|
-
viewState,
|
|
93
|
-
name: item.name,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
else if (activeContentControl) {
|
|
97
|
-
// Let activeContentControl process the ViewSelector change
|
|
98
|
-
await activeContentControl.processViewSelectorChange(this.props.imodel, item.key, viewState, item.name);
|
|
99
|
-
// Emit a change event
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
101
|
-
ViewSelector.onViewSelectorChangedEvent.emit({
|
|
102
|
-
iModelConnection: this.props.imodel,
|
|
103
|
-
viewDefinitionId: item.key,
|
|
104
|
-
viewState,
|
|
105
|
-
name: item.name,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
// Set state to show enabled the view that got selected
|
|
109
|
-
void this.updateState(item.key);
|
|
110
|
-
};
|
|
111
|
-
// Hook on the category selector being expanded so that we may initialize if needed
|
|
112
|
-
this._onExpanded = (expand) => {
|
|
113
|
-
if (expand)
|
|
114
|
-
void this.updateState(IModelApp.viewManager.selectedView
|
|
115
|
-
? IModelApp.viewManager.selectedView.view.id
|
|
116
|
-
: undefined);
|
|
117
|
-
};
|
|
118
57
|
this.state = {
|
|
119
58
|
items: new Array(),
|
|
120
59
|
title: UiFramework.translate("viewTypes.views"),
|
|
@@ -146,6 +85,11 @@ export class ViewSelector extends React.Component {
|
|
|
146
85
|
if (this._removeShowUpdateListener)
|
|
147
86
|
this._removeShowUpdateListener();
|
|
148
87
|
}
|
|
88
|
+
_handleViewSelectorShowUpdateEvent = (args) => {
|
|
89
|
+
if (!this._isMounted)
|
|
90
|
+
return;
|
|
91
|
+
this.setState(args, async () => this.loadViews());
|
|
92
|
+
};
|
|
149
93
|
setStateContainers(views3d, views2d, sheets, unknown, views3dFiltered, views2dFiltered, sheetsFiltered, unknownFiltered) {
|
|
150
94
|
const views3dContainer = {
|
|
151
95
|
key: "views3dContainer",
|
|
@@ -271,6 +215,74 @@ export class ViewSelector extends React.Component {
|
|
|
271
215
|
};
|
|
272
216
|
this.setStateContainers(views3d.map(updateChildren), views2d.map(updateChildren), sheets.map(updateChildren), unknown.map(updateChildren));
|
|
273
217
|
}
|
|
218
|
+
// enable/disable the models
|
|
219
|
+
_setEnabled = async (item, _enabled) => {
|
|
220
|
+
const activeContentControl = // eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
221
|
+
UiFramework.content.getActiveContentControl();
|
|
222
|
+
if (!this.props.onViewSelected &&
|
|
223
|
+
(!activeContentControl ||
|
|
224
|
+
!activeContentControl.supportsViewSelectorChange)) {
|
|
225
|
+
Logger.logError(UiFramework.loggerCategory("ViewSelector"), `No active ContentControl for ViewSelector change`);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Enable the item temporarily to let user see that their click was registered
|
|
229
|
+
// while we query for view state and change the current view which may take a bit
|
|
230
|
+
if (_enabled && item.type !== ListItemType.Container) {
|
|
231
|
+
// This itemMapper simply looks through all the list items and their nested children and enables the one
|
|
232
|
+
// that we have registered to enable
|
|
233
|
+
// Also disable all other items
|
|
234
|
+
const itemMapper = (tempItem) => {
|
|
235
|
+
if (tempItem.type === ListItemType.Container) {
|
|
236
|
+
return { ...tempItem, children: tempItem.children.map(itemMapper) };
|
|
237
|
+
}
|
|
238
|
+
else if (tempItem.key === item.key) {
|
|
239
|
+
return { ...tempItem, enabled: true };
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
return { ...tempItem, enabled: false };
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
// Create the new array with the current item enabled
|
|
246
|
+
const itemsWithEnabled = this.state.items.map(itemMapper);
|
|
247
|
+
if (!this._isMounted)
|
|
248
|
+
return;
|
|
249
|
+
// Update the state so that we show the user it was enabled while we work in the background
|
|
250
|
+
this.setState({ items: itemsWithEnabled });
|
|
251
|
+
}
|
|
252
|
+
assert(!!this.props.imodel);
|
|
253
|
+
assert(!!item.name);
|
|
254
|
+
// Load the view state using the viewSpec's ID
|
|
255
|
+
const viewState = await this.props.imodel.views.load(item.key);
|
|
256
|
+
if (this.props.onViewSelected) {
|
|
257
|
+
this.props.onViewSelected({
|
|
258
|
+
iModelConnection: this.props.imodel,
|
|
259
|
+
viewDefinitionId: item.key,
|
|
260
|
+
viewState,
|
|
261
|
+
name: item.name,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
else if (activeContentControl) {
|
|
265
|
+
// Let activeContentControl process the ViewSelector change
|
|
266
|
+
await activeContentControl.processViewSelectorChange(this.props.imodel, item.key, viewState, item.name);
|
|
267
|
+
// Emit a change event
|
|
268
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
269
|
+
ViewSelector.onViewSelectorChangedEvent.emit({
|
|
270
|
+
iModelConnection: this.props.imodel,
|
|
271
|
+
viewDefinitionId: item.key,
|
|
272
|
+
viewState,
|
|
273
|
+
name: item.name,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
// Set state to show enabled the view that got selected
|
|
277
|
+
void this.updateState(item.key);
|
|
278
|
+
};
|
|
279
|
+
// Hook on the category selector being expanded so that we may initialize if needed
|
|
280
|
+
_onExpanded = (expand) => {
|
|
281
|
+
if (expand)
|
|
282
|
+
void this.updateState(IModelApp.viewManager.selectedView
|
|
283
|
+
? IModelApp.viewManager.selectedView.view.id
|
|
284
|
+
: undefined);
|
|
285
|
+
};
|
|
274
286
|
/**
|
|
275
287
|
* Renders ViewSelector component
|
|
276
288
|
*/
|
|
@@ -288,17 +300,6 @@ export class ViewSelector extends React.Component {
|
|
|
288
300
|
}, 300), panelOnly: this.state.panelOnly, expanded: this.state.expand }));
|
|
289
301
|
}
|
|
290
302
|
}
|
|
291
|
-
ViewSelector._onViewSelectorShowUpdateEvent = new BeUiEvent();
|
|
292
|
-
ViewSelector.defaultProps = {
|
|
293
|
-
showSpatials: true,
|
|
294
|
-
showDrawings: true,
|
|
295
|
-
showSheets: true,
|
|
296
|
-
showUnknown: true,
|
|
297
|
-
};
|
|
298
|
-
/** Gets the [[ViewSelectorChangedEvent]].
|
|
299
|
-
* @deprecated in 4.16.0. Use {@link ViewSelectorProps.onViewSelected} prop instead.
|
|
300
|
-
*/
|
|
301
|
-
ViewSelector.onViewSelectorChangedEvent = new ViewSelectorChangedEvent(); // eslint-disable-line @typescript-eslint/no-deprecated
|
|
302
303
|
/** ViewSelector that is connected to the IModelConnection property in the Redux store. The application must set up the Redux store and include the FrameworkReducer.
|
|
303
304
|
* @note Requires redux provider.
|
|
304
305
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewSelector.js","sourceRoot":"","sources":["../../../src/appui-react/pickers/ViewSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Picker\n */\n\nimport * as React from \"react\";\nimport { UiEvent } from \"@itwin/appui-abstract\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { assert, BeUiEvent, Logger } from \"@itwin/core-bentley\";\nimport type { IModelConnection, ViewState } from \"@itwin/core-frontend\";\nimport { FuzzySearch, IModelApp } from \"@itwin/core-frontend\";\nimport type { SupportsViewSelectorChange } from \"../content/ContentControl.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { ViewUtilities } from \"../utils/ViewUtilities.js\";\nimport type { ListItem } from \"./ListPicker.js\";\nimport { ListItemType, ListPicker } from \"./ListPicker.js\";\nimport debounce from \"lodash/debounce.js\";\nimport { SvgSavedView } from \"../icons/SvgSavedView.js\";\nimport { useReduxFrameworkState } from \"../uistate/useReduxFrameworkState.js\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Icon } from \"@itwin/core-react\";\n\n/** [[ViewSelectorChangedEvent]] Args interface.\n * @beta\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface ViewSelectorChangedEventArgs {\n iModelConnection: IModelConnection;\n viewDefinitionId: Id64String;\n viewState: ViewState;\n name: string;\n}\n\n/** ViewSelector Changed Event class.\n * @beta\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class ViewSelectorChangedEvent extends UiEvent<ViewSelectorChangedEventArgs> {}\n\n/** Properties for the [[ViewSelector]] component\n * @beta\n */\nexport interface ViewSelectorProps {\n imodel?: IModelConnection;\n listenForShowUpdates?: boolean;\n onViewSelected?: (args: {\n iModelConnection: IModelConnection;\n viewDefinitionId: Id64String;\n viewState: ViewState;\n name: string;\n }) => void;\n\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n searchBox?: boolean;\n panelOnly?: boolean;\n}\n\n/** State for the [[ViewSelector]] component\n * @beta\n */\ninterface ViewSelectorState {\n items: ListItem[];\n title: string;\n initialized: boolean;\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n searchBox: boolean;\n panelOnly: boolean;\n expand: boolean;\n}\n\n/** Default properties of [[ViewSelector]] component.\n * @beta\n */\nexport type ViewSelectorDefaultProps = Pick<\n ViewSelectorProps,\n \"showSpatials\" | \"showDrawings\" | \"showSheets\" | \"showUnknown\"\n>;\n\n/** View Selector React component\n * @beta\n */\nexport class ViewSelector extends React.Component<\n ViewSelectorProps,\n ViewSelectorState\n> {\n private static readonly _onViewSelectorShowUpdateEvent = new BeUiEvent<{\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n }>();\n private _removeShowUpdateListener?: () => void;\n private _isMounted = false;\n private _searchInput = \"\";\n\n public static readonly defaultProps: ViewSelectorDefaultProps = {\n showSpatials: true,\n showDrawings: true,\n showSheets: true,\n showUnknown: true,\n };\n\n /** Gets the [[ViewSelectorChangedEvent]].\n * @deprecated in 4.16.0. Use {@link ViewSelectorProps.onViewSelected} prop instead.\n */\n public static readonly onViewSelectorChangedEvent =\n new ViewSelectorChangedEvent(); // eslint-disable-line @typescript-eslint/no-deprecated\n\n /** Updates the ViewSelector show settings.\n */\n public static updateShowSettings(\n showSpatials: boolean,\n showDrawings: boolean,\n showSheets: boolean,\n showUnknown: boolean\n ): void {\n ViewSelector._onViewSelectorShowUpdateEvent.emit({\n showSpatials,\n showDrawings,\n showSheets,\n showUnknown,\n });\n }\n\n /** Creates a ViewSelector */\n constructor(props: ViewSelectorProps) {\n super(props);\n\n this.state = {\n items: new Array<ListItem>(),\n title: UiFramework.translate(\"viewTypes.views\"),\n initialized: false,\n showSpatials: props.showSpatials,\n showDrawings: props.showDrawings,\n showSheets: props.showSheets,\n showUnknown: props.showUnknown,\n searchBox: props.searchBox ? props.searchBox : true,\n panelOnly: props.panelOnly ? props.panelOnly : false,\n expand: false,\n };\n }\n\n public override async componentDidMount() {\n this._isMounted = true;\n if (this.props.listenForShowUpdates)\n this._removeShowUpdateListener =\n ViewSelector._onViewSelectorShowUpdateEvent.addListener(\n this._handleViewSelectorShowUpdateEvent\n );\n\n await this.loadViews();\n }\n\n /** @internal */\n public override async componentDidUpdate(prevProps: ViewSelectorProps) {\n if (this.props.imodel !== prevProps.imodel) {\n await this.loadViews();\n }\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n if (this._removeShowUpdateListener) this._removeShowUpdateListener();\n }\n\n private _handleViewSelectorShowUpdateEvent: ListenerType<\n typeof ViewSelector._onViewSelectorShowUpdateEvent\n > = (args): void => {\n if (!this._isMounted) return;\n\n this.setState(args, async () => this.loadViews());\n };\n\n private setStateContainers(\n views3d: ListItem[],\n views2d: ListItem[],\n sheets: ListItem[],\n unknown?: ListItem[],\n views3dFiltered?: ListItem[],\n views2dFiltered?: ListItem[],\n sheetsFiltered?: ListItem[],\n unknownFiltered?: ListItem[]\n ) {\n const views3dContainer: ListItem = {\n key: \"views3dContainer\",\n name: UiFramework.translate(\"viewTypes.spatialViews\"),\n enabled: false,\n type: ListItemType.Container,\n children: views3dFiltered ? views3dFiltered : views3d,\n };\n\n const views2dContainer: ListItem = {\n key: \"views2dContainer\",\n name: UiFramework.translate(\"viewTypes.drawings\"),\n enabled: false,\n type: ListItemType.Container,\n children: views2dFiltered ? views2dFiltered : views2d,\n };\n\n const sheetContainer: ListItem = {\n key: \"sheetContainer\",\n name: UiFramework.translate(\"viewTypes.sheets\"),\n enabled: false,\n type: ListItemType.Container,\n children: sheetsFiltered ? sheetsFiltered : sheets,\n };\n\n const containers = [views3dContainer, views2dContainer, sheetContainer];\n\n if (unknown && unknown.length > 0) {\n // This should never show, but just in case we missed a type of view state\n const unknownContainer: ListItem = {\n key: \"unknownContainer\",\n name: UiFramework.translate(\"viewTypes.others\"),\n enabled: false,\n type: ListItemType.Container,\n children: unknownFiltered ? unknownFiltered : unknown,\n };\n\n if (unknown.length !== 0) containers.push(unknownContainer);\n }\n\n if (!this._isMounted) return;\n\n this.setState({\n items: containers,\n title: UiFramework.translate(\"viewTypes.views\"),\n initialized: true,\n });\n }\n /**\n * Query the views and set the initial state with the iModel's views.\n */\n public async loadViews(): Promise<void> {\n // Query views and add them to state\n const views3d: ListItem[] = [];\n const views2d: ListItem[] = [];\n const sheets: ListItem[] = [];\n const unknown: ListItem[] = [];\n let views3dFiltered: ListItem[] | undefined;\n let views2dFiltered: ListItem[] | undefined;\n let sheetsFiltered: ListItem[] | undefined;\n let unknownFiltered: ListItem[] | undefined;\n const fuzzy = new FuzzySearch<ListItem>();\n\n if (this.props.imodel && this.props.imodel.views.getViewList) {\n const query = { wantPrivate: false };\n const specs = await this.props.imodel.views.getViewList(query);\n\n specs.forEach((spec: IModelConnection.ViewSpec) => {\n const viewItem: ListItem = {\n key: spec.id,\n name: spec.name,\n enabled:\n spec.id === IModelApp.viewManager.selectedView?.view.id\n ? true\n : false,\n type: ListItemType.Item,\n };\n\n const className = ViewUtilities.getBisBaseClass(spec.class);\n\n if (ViewUtilities.isSpatial(className) && this.state.showSpatials)\n views3d.push(viewItem);\n else if (ViewUtilities.isDrawing(className) && this.state.showDrawings)\n views2d.push(viewItem);\n else if (ViewUtilities.isSheet(className) && this.state.showSheets)\n sheets.push(viewItem);\n else if (this.state.showUnknown) unknown.push(viewItem);\n });\n\n if (this._searchInput.length > 0) {\n const views3dFuzzySearchResults = fuzzy.search(\n views3d,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const views2dFuzzySearchResults = fuzzy.search(\n views2d,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const sheetsFuzzySearchResults = fuzzy.search(\n sheets,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const unknownFuzzySearchResults = fuzzy.search(\n unknown,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n views3dFiltered = [];\n views2dFiltered = [];\n sheetsFiltered = [];\n unknownFiltered = [];\n views3dFuzzySearchResults.forEach(function (result) {\n views3dFiltered?.push(result.item);\n });\n views2dFuzzySearchResults.forEach(function (result) {\n views2dFiltered?.push(result.item);\n });\n sheetsFuzzySearchResults.forEach(function (result) {\n sheetsFiltered?.push(result.item);\n });\n unknownFuzzySearchResults.forEach(function (result) {\n unknownFiltered?.push(result.item);\n });\n }\n }\n\n this.setStateContainers(\n views3d,\n views2d,\n sheets,\n unknown,\n views3dFiltered,\n views2dFiltered,\n sheetsFiltered,\n unknownFiltered\n );\n }\n\n /**\n * Update state of the entries in the widget.\n * @param viewId Identifier for the relevant view\n */\n public async updateState(viewId?: any): Promise<void> {\n // Wait for initialization finished\n if (!this.state.initialized) return;\n\n // Query views and add them to state\n const views3d: ListItem[] = this.state.items[0].children!;\n const views2d: ListItem[] = this.state.items[1].children!;\n const sheets: ListItem[] = this.state.items[2].children!;\n const unknown: ListItem[] =\n this.state.items.length > 3 ? this.state.items[3].children! : [];\n\n const updateChildren = (item: ListItem) => {\n if (item.key === viewId) return { ...item, enabled: true };\n else return { ...item, enabled: false };\n };\n\n this.setStateContainers(\n views3d.map(updateChildren),\n views2d.map(updateChildren),\n sheets.map(updateChildren),\n unknown.map(updateChildren)\n );\n }\n\n // enable/disable the models\n private _setEnabled = async (item: ListItem, _enabled: boolean) => {\n const activeContentControl = // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.getActiveContentControl() as unknown as // eslint-disable-next-line @typescript-eslint/no-deprecated\n | SupportsViewSelectorChange\n | undefined;\n if (\n !this.props.onViewSelected &&\n (!activeContentControl ||\n !activeContentControl.supportsViewSelectorChange)\n ) {\n Logger.logError(\n UiFramework.loggerCategory(\"ViewSelector\"),\n `No active ContentControl for ViewSelector change`\n );\n return;\n }\n\n // Enable the item temporarily to let user see that their click was registered\n // while we query for view state and change the current view which may take a bit\n if (_enabled && item.type !== ListItemType.Container) {\n // This itemMapper simply looks through all the list items and their nested children and enables the one\n // that we have registered to enable\n // Also disable all other items\n const itemMapper: (tempItem: ListItem) => ListItem = (\n tempItem: ListItem\n ) => {\n if (tempItem.type === ListItemType.Container) {\n return { ...tempItem, children: tempItem.children!.map(itemMapper) };\n } else if (tempItem.key === item.key) {\n return { ...tempItem, enabled: true };\n } else {\n return { ...tempItem, enabled: false };\n }\n };\n\n // Create the new array with the current item enabled\n const itemsWithEnabled = this.state.items.map(itemMapper);\n\n if (!this._isMounted) return;\n\n // Update the state so that we show the user it was enabled while we work in the background\n this.setState({ items: itemsWithEnabled });\n }\n\n assert(!!this.props.imodel);\n assert(!!item.name);\n\n // Load the view state using the viewSpec's ID\n const viewState = await this.props.imodel.views.load(item.key);\n\n if (this.props.onViewSelected) {\n this.props.onViewSelected({\n iModelConnection: this.props.imodel,\n viewDefinitionId: item.key,\n viewState,\n name: item.name,\n });\n } else if (activeContentControl) {\n // Let activeContentControl process the ViewSelector change\n await activeContentControl.processViewSelectorChange(\n this.props.imodel,\n item.key,\n viewState,\n item.name\n );\n\n // Emit a change event\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ViewSelector.onViewSelectorChangedEvent.emit({\n iModelConnection: this.props.imodel,\n viewDefinitionId: item.key,\n viewState,\n name: item.name,\n });\n }\n\n // Set state to show enabled the view that got selected\n void this.updateState(item.key);\n };\n\n // Hook on the category selector being expanded so that we may initialize if needed\n private _onExpanded = (expand: boolean) => {\n if (expand)\n void this.updateState(\n IModelApp.viewManager.selectedView\n ? IModelApp.viewManager.selectedView.view.id\n : undefined\n );\n };\n\n /**\n * Renders ViewSelector component\n */\n public override render() {\n const { imodel, ...props } = this.props;\n\n return (\n <ListPicker\n {...props}\n title={this.state.title}\n setEnabled={this._setEnabled}\n items={this.state.items}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n icon={<Icon iconSpec={<SvgSavedView />} />}\n onExpanded={this._onExpanded}\n searchBox={this.state.searchBox}\n onSearchValueChange={debounce((search: string) => {\n this._searchInput = search;\n if (\n this._isMounted &&\n this.state.expand === false &&\n this._searchInput.length > 0\n )\n this.setState({ expand: true });\n void this.loadViews();\n }, 300)}\n panelOnly={this.state.panelOnly}\n expanded={this.state.expand}\n />\n );\n }\n}\n\ntype IModelConnectedViewSelectorProps = Omit<\n ViewSelectorProps,\n \"imodel\" | keyof ViewSelectorDefaultProps\n> &\n Partial<ViewSelectorDefaultProps>;\n\n/** ViewSelector that is connected to the IModelConnection property in the Redux store. The application must set up the Redux store and include the FrameworkReducer.\n * @note Requires redux provider.\n * @beta\n * @deprecated in 4.15.0. Use {@link ViewSelector} instead.\n */\nexport function IModelConnectedViewSelector(\n props: IModelConnectedViewSelectorProps\n) {\n const iModel = useReduxFrameworkState(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (state) => state?.sessionState.iModelConnection\n );\n return <ViewSelector imodel={iModel} {...props} />;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ViewSelector.js","sourceRoot":"","sources":["../../../src/appui-react/pickers/ViewSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Picker\n */\n\nimport * as React from \"react\";\nimport { UiEvent } from \"@itwin/appui-abstract\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { assert, BeUiEvent, Logger } from \"@itwin/core-bentley\";\nimport type { IModelConnection, ViewState } from \"@itwin/core-frontend\";\nimport { FuzzySearch, IModelApp } from \"@itwin/core-frontend\";\nimport type { SupportsViewSelectorChange } from \"../content/ContentControl.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { ViewUtilities } from \"../utils/ViewUtilities.js\";\nimport type { ListItem } from \"./ListPicker.js\";\nimport { ListItemType, ListPicker } from \"./ListPicker.js\";\nimport debounce from \"lodash/debounce.js\";\nimport { SvgSavedView } from \"../icons/SvgSavedView.js\";\nimport { useReduxFrameworkState } from \"../uistate/useReduxFrameworkState.js\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Icon } from \"@itwin/core-react\";\n\n/** [[ViewSelectorChangedEvent]] Args interface.\n * @beta\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface ViewSelectorChangedEventArgs {\n iModelConnection: IModelConnection;\n viewDefinitionId: Id64String;\n viewState: ViewState;\n name: string;\n}\n\n/** ViewSelector Changed Event class.\n * @beta\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class ViewSelectorChangedEvent extends UiEvent<ViewSelectorChangedEventArgs> {}\n\n/** Properties for the [[ViewSelector]] component\n * @beta\n */\nexport interface ViewSelectorProps {\n imodel?: IModelConnection;\n listenForShowUpdates?: boolean;\n onViewSelected?: (args: {\n iModelConnection: IModelConnection;\n viewDefinitionId: Id64String;\n viewState: ViewState;\n name: string;\n }) => void;\n\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n searchBox?: boolean;\n panelOnly?: boolean;\n}\n\n/** State for the [[ViewSelector]] component\n * @beta\n */\ninterface ViewSelectorState {\n items: ListItem[];\n title: string;\n initialized: boolean;\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n searchBox: boolean;\n panelOnly: boolean;\n expand: boolean;\n}\n\n/** Default properties of [[ViewSelector]] component.\n * @beta\n */\nexport type ViewSelectorDefaultProps = Pick<\n ViewSelectorProps,\n \"showSpatials\" | \"showDrawings\" | \"showSheets\" | \"showUnknown\"\n>;\n\n/** View Selector React component\n * @beta\n */\nexport class ViewSelector extends React.Component<\n ViewSelectorProps,\n ViewSelectorState\n> {\n private static readonly _onViewSelectorShowUpdateEvent = new BeUiEvent<{\n showSpatials: boolean;\n showDrawings: boolean;\n showSheets: boolean;\n showUnknown: boolean;\n }>();\n private _removeShowUpdateListener?: () => void;\n private _isMounted = false;\n private _searchInput = \"\";\n\n public static readonly defaultProps: ViewSelectorDefaultProps = {\n showSpatials: true,\n showDrawings: true,\n showSheets: true,\n showUnknown: true,\n };\n\n /** Gets the [[ViewSelectorChangedEvent]].\n * @deprecated in 4.16.0. Use {@link ViewSelectorProps.onViewSelected} prop instead.\n */\n public static readonly onViewSelectorChangedEvent =\n new ViewSelectorChangedEvent(); // eslint-disable-line @typescript-eslint/no-deprecated\n\n /** Updates the ViewSelector show settings.\n */\n public static updateShowSettings(\n showSpatials: boolean,\n showDrawings: boolean,\n showSheets: boolean,\n showUnknown: boolean\n ): void {\n ViewSelector._onViewSelectorShowUpdateEvent.emit({\n showSpatials,\n showDrawings,\n showSheets,\n showUnknown,\n });\n }\n\n /** Creates a ViewSelector */\n constructor(props: ViewSelectorProps) {\n super(props);\n\n this.state = {\n items: new Array<ListItem>(),\n title: UiFramework.translate(\"viewTypes.views\"),\n initialized: false,\n showSpatials: props.showSpatials,\n showDrawings: props.showDrawings,\n showSheets: props.showSheets,\n showUnknown: props.showUnknown,\n searchBox: props.searchBox ? props.searchBox : true,\n panelOnly: props.panelOnly ? props.panelOnly : false,\n expand: false,\n };\n }\n\n public override async componentDidMount() {\n this._isMounted = true;\n if (this.props.listenForShowUpdates)\n this._removeShowUpdateListener =\n ViewSelector._onViewSelectorShowUpdateEvent.addListener(\n this._handleViewSelectorShowUpdateEvent\n );\n\n await this.loadViews();\n }\n\n /** @internal */\n public override async componentDidUpdate(prevProps: ViewSelectorProps) {\n if (this.props.imodel !== prevProps.imodel) {\n await this.loadViews();\n }\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n if (this._removeShowUpdateListener) this._removeShowUpdateListener();\n }\n\n private _handleViewSelectorShowUpdateEvent: ListenerType<\n typeof ViewSelector._onViewSelectorShowUpdateEvent\n > = (args): void => {\n if (!this._isMounted) return;\n\n this.setState(args, async () => this.loadViews());\n };\n\n private setStateContainers(\n views3d: ListItem[],\n views2d: ListItem[],\n sheets: ListItem[],\n unknown?: ListItem[],\n views3dFiltered?: ListItem[],\n views2dFiltered?: ListItem[],\n sheetsFiltered?: ListItem[],\n unknownFiltered?: ListItem[]\n ) {\n const views3dContainer: ListItem = {\n key: \"views3dContainer\",\n name: UiFramework.translate(\"viewTypes.spatialViews\"),\n enabled: false,\n type: ListItemType.Container,\n children: views3dFiltered ? views3dFiltered : views3d,\n };\n\n const views2dContainer: ListItem = {\n key: \"views2dContainer\",\n name: UiFramework.translate(\"viewTypes.drawings\"),\n enabled: false,\n type: ListItemType.Container,\n children: views2dFiltered ? views2dFiltered : views2d,\n };\n\n const sheetContainer: ListItem = {\n key: \"sheetContainer\",\n name: UiFramework.translate(\"viewTypes.sheets\"),\n enabled: false,\n type: ListItemType.Container,\n children: sheetsFiltered ? sheetsFiltered : sheets,\n };\n\n const containers = [views3dContainer, views2dContainer, sheetContainer];\n\n if (unknown && unknown.length > 0) {\n // This should never show, but just in case we missed a type of view state\n const unknownContainer: ListItem = {\n key: \"unknownContainer\",\n name: UiFramework.translate(\"viewTypes.others\"),\n enabled: false,\n type: ListItemType.Container,\n children: unknownFiltered ? unknownFiltered : unknown,\n };\n\n if (unknown.length !== 0) containers.push(unknownContainer);\n }\n\n if (!this._isMounted) return;\n\n this.setState({\n items: containers,\n title: UiFramework.translate(\"viewTypes.views\"),\n initialized: true,\n });\n }\n /**\n * Query the views and set the initial state with the iModel's views.\n */\n public async loadViews(): Promise<void> {\n // Query views and add them to state\n const views3d: ListItem[] = [];\n const views2d: ListItem[] = [];\n const sheets: ListItem[] = [];\n const unknown: ListItem[] = [];\n let views3dFiltered: ListItem[] | undefined;\n let views2dFiltered: ListItem[] | undefined;\n let sheetsFiltered: ListItem[] | undefined;\n let unknownFiltered: ListItem[] | undefined;\n const fuzzy = new FuzzySearch<ListItem>();\n\n if (this.props.imodel && this.props.imodel.views.getViewList) {\n const query = { wantPrivate: false };\n const specs = await this.props.imodel.views.getViewList(query);\n\n specs.forEach((spec: IModelConnection.ViewSpec) => {\n const viewItem: ListItem = {\n key: spec.id,\n name: spec.name,\n enabled:\n spec.id === IModelApp.viewManager.selectedView?.view.id\n ? true\n : false,\n type: ListItemType.Item,\n };\n\n const className = ViewUtilities.getBisBaseClass(spec.class);\n\n if (ViewUtilities.isSpatial(className) && this.state.showSpatials)\n views3d.push(viewItem);\n else if (ViewUtilities.isDrawing(className) && this.state.showDrawings)\n views2d.push(viewItem);\n else if (ViewUtilities.isSheet(className) && this.state.showSheets)\n sheets.push(viewItem);\n else if (this.state.showUnknown) unknown.push(viewItem);\n });\n\n if (this._searchInput.length > 0) {\n const views3dFuzzySearchResults = fuzzy.search(\n views3d,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const views2dFuzzySearchResults = fuzzy.search(\n views2d,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const sheetsFuzzySearchResults = fuzzy.search(\n sheets,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n const unknownFuzzySearchResults = fuzzy.search(\n unknown,\n [\"name\"],\n this._searchInput\n ).results as ListItem[];\n views3dFiltered = [];\n views2dFiltered = [];\n sheetsFiltered = [];\n unknownFiltered = [];\n views3dFuzzySearchResults.forEach(function (result) {\n views3dFiltered?.push(result.item);\n });\n views2dFuzzySearchResults.forEach(function (result) {\n views2dFiltered?.push(result.item);\n });\n sheetsFuzzySearchResults.forEach(function (result) {\n sheetsFiltered?.push(result.item);\n });\n unknownFuzzySearchResults.forEach(function (result) {\n unknownFiltered?.push(result.item);\n });\n }\n }\n\n this.setStateContainers(\n views3d,\n views2d,\n sheets,\n unknown,\n views3dFiltered,\n views2dFiltered,\n sheetsFiltered,\n unknownFiltered\n );\n }\n\n /**\n * Update state of the entries in the widget.\n * @param viewId Identifier for the relevant view\n */\n public async updateState(viewId?: any): Promise<void> {\n // Wait for initialization finished\n if (!this.state.initialized) return;\n\n // Query views and add them to state\n const views3d: ListItem[] = this.state.items[0].children!;\n const views2d: ListItem[] = this.state.items[1].children!;\n const sheets: ListItem[] = this.state.items[2].children!;\n const unknown: ListItem[] =\n this.state.items.length > 3 ? this.state.items[3].children! : [];\n\n const updateChildren = (item: ListItem) => {\n if (item.key === viewId) return { ...item, enabled: true };\n else return { ...item, enabled: false };\n };\n\n this.setStateContainers(\n views3d.map(updateChildren),\n views2d.map(updateChildren),\n sheets.map(updateChildren),\n unknown.map(updateChildren)\n );\n }\n\n // enable/disable the models\n private _setEnabled = async (item: ListItem, _enabled: boolean) => {\n const activeContentControl = // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.getActiveContentControl() as unknown as // eslint-disable-next-line @typescript-eslint/no-deprecated\n | SupportsViewSelectorChange\n | undefined;\n if (\n !this.props.onViewSelected &&\n (!activeContentControl ||\n !activeContentControl.supportsViewSelectorChange)\n ) {\n Logger.logError(\n UiFramework.loggerCategory(\"ViewSelector\"),\n `No active ContentControl for ViewSelector change`\n );\n return;\n }\n\n // Enable the item temporarily to let user see that their click was registered\n // while we query for view state and change the current view which may take a bit\n if (_enabled && item.type !== ListItemType.Container) {\n // This itemMapper simply looks through all the list items and their nested children and enables the one\n // that we have registered to enable\n // Also disable all other items\n const itemMapper: (tempItem: ListItem) => ListItem = (\n tempItem: ListItem\n ) => {\n if (tempItem.type === ListItemType.Container) {\n return { ...tempItem, children: tempItem.children!.map(itemMapper) };\n } else if (tempItem.key === item.key) {\n return { ...tempItem, enabled: true };\n } else {\n return { ...tempItem, enabled: false };\n }\n };\n\n // Create the new array with the current item enabled\n const itemsWithEnabled = this.state.items.map(itemMapper);\n\n if (!this._isMounted) return;\n\n // Update the state so that we show the user it was enabled while we work in the background\n this.setState({ items: itemsWithEnabled });\n }\n\n assert(!!this.props.imodel);\n assert(!!item.name);\n\n // Load the view state using the viewSpec's ID\n const viewState = await this.props.imodel.views.load(item.key);\n\n if (this.props.onViewSelected) {\n this.props.onViewSelected({\n iModelConnection: this.props.imodel,\n viewDefinitionId: item.key,\n viewState,\n name: item.name,\n });\n } else if (activeContentControl) {\n // Let activeContentControl process the ViewSelector change\n await activeContentControl.processViewSelectorChange(\n this.props.imodel,\n item.key,\n viewState,\n item.name\n );\n\n // Emit a change event\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ViewSelector.onViewSelectorChangedEvent.emit({\n iModelConnection: this.props.imodel,\n viewDefinitionId: item.key,\n viewState,\n name: item.name,\n });\n }\n\n // Set state to show enabled the view that got selected\n void this.updateState(item.key);\n };\n\n // Hook on the category selector being expanded so that we may initialize if needed\n private _onExpanded = (expand: boolean) => {\n if (expand)\n void this.updateState(\n IModelApp.viewManager.selectedView\n ? IModelApp.viewManager.selectedView.view.id\n : undefined\n );\n };\n\n /**\n * Renders ViewSelector component\n */\n public override render() {\n const { imodel, ...props } = this.props;\n\n return (\n <ListPicker\n {...props}\n title={this.state.title}\n setEnabled={this._setEnabled}\n items={this.state.items}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n icon={<Icon iconSpec={<SvgSavedView />} />}\n onExpanded={this._onExpanded}\n searchBox={this.state.searchBox}\n onSearchValueChange={debounce((search: string) => {\n this._searchInput = search;\n if (\n this._isMounted &&\n this.state.expand === false &&\n this._searchInput.length > 0\n )\n this.setState({ expand: true });\n void this.loadViews();\n }, 300)}\n panelOnly={this.state.panelOnly}\n expanded={this.state.expand}\n />\n );\n }\n}\n\ntype IModelConnectedViewSelectorProps = Omit<\n ViewSelectorProps,\n \"imodel\" | keyof ViewSelectorDefaultProps\n> &\n Partial<ViewSelectorDefaultProps>;\n\n/** ViewSelector that is connected to the IModelConnection property in the Redux store. The application must set up the Redux store and include the FrameworkReducer.\n * @note Requires redux provider.\n * @beta\n * @deprecated in 4.15.0. Use {@link ViewSelector} instead.\n */\nexport function IModelConnectedViewSelector(\n props: IModelConnectedViewSelectorProps\n) {\n const iModel = useReduxFrameworkState(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (state) => state?.sessionState.iModelConnection\n );\n return <ViewSelector imodel={iModel} {...props} />;\n}\n"]}
|
|
@@ -23,25 +23,24 @@ import { WrapperContext } from "../configurableui/ConfigurableUiContent.js";
|
|
|
23
23
|
* @beta
|
|
24
24
|
*/
|
|
25
25
|
export class CardPopup extends React.PureComponent {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
26
|
+
/** @internal */
|
|
27
|
+
static contextType = WrapperContext;
|
|
28
|
+
state = {
|
|
29
|
+
size: { width: -1, height: -1 },
|
|
30
|
+
};
|
|
31
|
+
_onSizeKnown = (newSize) => {
|
|
32
|
+
if (newSize.height === this.state.size.height &&
|
|
33
|
+
newSize.width === this.state.size.width)
|
|
34
|
+
return;
|
|
35
|
+
this.setState({ size: newSize });
|
|
36
|
+
};
|
|
37
|
+
_handleKeyDown = (event) => {
|
|
38
|
+
switch (event.key) {
|
|
39
|
+
case Key.Escape.valueOf():
|
|
40
|
+
this._cancel();
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
45
44
|
_cancel() {
|
|
46
45
|
if (this.props.onCancel) {
|
|
47
46
|
this.props.onCancel();
|
|
@@ -59,8 +58,6 @@ export class CardPopup extends React.PureComponent {
|
|
|
59
58
|
React.createElement(Card, { content: this.props.content, title: this.props.title, items: this.props.items, onItemExecuted: this.props.onItemExecuted })))));
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
|
-
/** @internal */
|
|
63
|
-
CardPopup.contextType = WrapperContext;
|
|
64
61
|
/** Card component
|
|
65
62
|
* @beta */
|
|
66
63
|
export function Card(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/CardPopup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport \"./CardPopup.scss\";\nimport * as React from \"react\";\nimport classnames from \"classnames\";\nimport { Key } from \"ts-key-enum\";\nimport type { CommonToolbarItem, PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { Orientation } from \"@itwin/components-react\";\nimport {\n Direction,\n PropertyValueRendererManager,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport type { RequireAtLeastOne } from \"@itwin/core-bentley\";\nimport { DivWithOutsideClick, MessageRenderer } from \"@itwin/core-react\";\nimport { FocusTrap, Point } from \"@itwin/core-react/internal\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport { CursorPopup } from \"../cursor/cursorpopup/CursorPopup.js\";\nimport type { PopupContentType, PopupPropsBase } from \"./PopupManager.js\";\nimport { isReactContent, PopupManager } from \"./PopupManager.js\";\nimport { PositionPopup } from \"./PositionPopup.js\";\nimport { ToolbarWithOverflow } from \"../toolbar/ToolbarWithOverflow.js\";\nimport type { ToolbarItem } from \"../toolbar/ToolbarItem.js\";\nimport { mapToPlacement, type Placement } from \"../utils/Placement.js\";\nimport { WrapperContext } from \"../configurableui/ConfigurableUiContent.js\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** Props for defining a CardPopup editor.\n * @beta */\nexport type CardPopupProps = Omit<PopupPropsBase, \"el\"> & {\n content: PopupContentType;\n title: string | PropertyRecord | undefined;\n items: CommonToolbarItem[] | ToolbarItem[] | undefined;\n /** @deprecated in 4.16.0. Not used by the {@link CardPopup} component. */\n orientation: Orientation;\n onCancel: () => void;\n onItemExecuted: (item: any) => void;\n el?: HTMLElement;\n} & RequireAtLeastOne<{\n /** @deprecated in 4.16.0. Use `placement` property instead. */\n relativePosition: RelativePosition;\n placement: Placement;\n }>;\n\ninterface CardPopupState {\n size: SizeProps;\n}\n\n/** Popup component for Input Editor\n * @beta\n */\nexport class CardPopup extends React.PureComponent<\n CardPopupProps,\n CardPopupState\n> {\n /** @internal */\n public static override contextType = WrapperContext;\n /** @internal */\n public declare context: React.ContextType<typeof WrapperContext>;\n public override readonly state = {\n size: { width: -1, height: -1 },\n };\n\n private _onSizeKnown = (newSize: SizeProps) => {\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n this.setState({ size: newSize });\n };\n\n private _handleKeyDown = (event: React.KeyboardEvent): void => {\n switch (event.key) {\n case Key.Escape.valueOf():\n this._cancel();\n break;\n }\n };\n\n private _cancel() {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n public override render() {\n let point = PopupManager.getPopupPosition(\n this.props.el ?? this.context,\n this.props.pt,\n new Point(),\n this.state.size\n );\n const popupRect = CursorPopup.getPopupRect(\n point,\n this.props.offset,\n this.state.size,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.props.placement ?? mapToPlacement(this.props.relativePosition)\n );\n point = new Point(popupRect.left, popupRect.top);\n\n return (\n <PositionPopup\n key={this.props.id}\n className={classnames(\"uifw-no-border\", \"uifw-card\")}\n point={point}\n onSizeKnown={this._onSizeKnown}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <DivWithOutsideClick\n onOutsideClick={this.props.onCancel}\n onKeyDown={this._handleKeyDown}\n >\n <FocusTrap active={true} returnFocusOnDeactivate={true}>\n <Card\n content={this.props.content}\n title={this.props.title}\n items={this.props.items}\n onItemExecuted={this.props.onItemExecuted}\n />\n </FocusTrap>\n </DivWithOutsideClick>\n </PositionPopup>\n );\n }\n}\n\n/** Props defining a Card component\n * @beta */\nexport interface CardProps {\n content: PopupContentType;\n title: string | PropertyRecord | undefined;\n items?: CommonToolbarItem[] | ToolbarItem[] | undefined;\n onItemExecuted: (item: any) => void;\n}\n\n/** Card component\n * @beta */\nexport function Card(props: CardProps) {\n let titleNode: React.ReactNode;\n if (props.title) {\n if (typeof props.title === \"string\")\n titleNode = <Text variant=\"leading\">{props.title}</Text>;\n else {\n const propertyValueRendererManager =\n PropertyValueRendererManager.defaultManager;\n const titleValue = propertyValueRendererManager.render(props.title);\n titleNode = <Text variant=\"leading\">{titleValue}</Text>;\n }\n }\n\n const content = isReactContent(props.content) ? (\n props.content.reactNode\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <MessageRenderer message={props.content} />\n );\n\n return (\n <>\n <div className=\"uifw-card-content\">\n {props.title && (\n <>\n {titleNode}\n <div className=\"uifw-card-gap\" />\n </>\n )}\n {content}\n </div>\n {props.items && (\n <>\n <div className=\"uifw-card-separator\" />\n <ToolbarWithOverflow\n expandsTo={Direction.Bottom}\n panelAlignment={ToolbarPanelAlignment.Start}\n items={props.items}\n useDragInteraction={true}\n toolbarOpacitySetting={ToolbarOpacitySetting.Transparent}\n onItemExecuted={props.onItemExecuted}\n />\n </>\n )}\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CardPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/CardPopup.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAIlC,OAAO,EACL,SAAS,EACT,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,cAAc,EAAkB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAwB5E;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK,CAAC,aAGpC;IACC,gBAAgB;IACT,MAAM,CAAU,WAAW,GAAG,cAAc,CAAC;IAG3B,KAAK,GAAG;QAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;KAChC,CAAC;IAEM,YAAY,GAAG,CAAC,OAAkB,EAAE,EAAE;QAC5C,IACE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACzC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YAEvC,OAAO;QACT,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC;IAEM,cAAc,GAAG,CAAC,KAA0B,EAAQ,EAAE;QAC5D,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEM,OAAO;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEe,MAAM;QACpB,IAAI,KAAK,GAAG,YAAY,CAAC,gBAAgB,CACvC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,EAC7B,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,KAAK,EAAE,EACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAChB,CAAC;QACF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CACxC,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,KAAK,CAAC,IAAI;QACf,4DAA4D;QAC5D,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACpE,CAAC;QACF,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,OAAO,CACL,oBAAC,aAAa,IACZ,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAClB,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,WAAW,CAAC,EACpD,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,CAAC,YAAY;YAG9B,oBAAC,mBAAmB,IAClB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnC,SAAS,EAAE,IAAI,CAAC,cAAc;gBAE9B,oBAAC,SAAS,IAAC,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI;oBACpD,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GACzC,CACQ,CACQ,CACR,CACjB,CAAC;IACJ,CAAC;;AAYH;WACW;AACX,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,IAAI,SAA0B,CAAC;IAC/B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YACjC,SAAS,GAAG,oBAAC,IAAI,IAAC,OAAO,EAAC,SAAS,IAAE,KAAK,CAAC,KAAK,CAAQ,CAAC;aACtD,CAAC;YACJ,MAAM,4BAA4B,GAChC,4BAA4B,CAAC,cAAc,CAAC;YAC9C,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpE,SAAS,GAAG,oBAAC,IAAI,IAAC,OAAO,EAAC,SAAS,IAAE,UAAU,CAAQ,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC9C,KAAK,CAAC,OAAO,CAAC,SAAS,CACxB,CAAC,CAAC,CAAC;IACF,4DAA4D;IAC5D,oBAAC,eAAe,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAC5C,CAAC;IAEF,OAAO,CACL;QACE,6BAAK,SAAS,EAAC,mBAAmB;YAC/B,KAAK,CAAC,KAAK,IAAI,CACd;gBACG,SAAS;gBACV,6BAAK,SAAS,EAAC,eAAe,GAAG,CAChC,CACJ;YACA,OAAO,CACJ;QACL,KAAK,CAAC,KAAK,IAAI,CACd;YACE,6BAAK,SAAS,EAAC,qBAAqB,GAAG;YACvC,oBAAC,mBAAmB,IAClB,SAAS,EAAE,SAAS,CAAC,MAAM,EAC3B,cAAc,EAAE,qBAAqB,CAAC,KAAK,EAC3C,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,kBAAkB,EAAE,IAAI,EACxB,qBAAqB,EAAE,qBAAqB,CAAC,WAAW,EACxD,cAAc,EAAE,KAAK,CAAC,cAAc,GACpC,CACD,CACJ,CACA,CACJ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport \"./CardPopup.scss\";\nimport * as React from \"react\";\nimport classnames from \"classnames\";\nimport { Key } from \"ts-key-enum\";\nimport type { CommonToolbarItem, PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { Orientation } from \"@itwin/components-react\";\nimport {\n Direction,\n PropertyValueRendererManager,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport type { RequireAtLeastOne } from \"@itwin/core-bentley\";\nimport { DivWithOutsideClick, MessageRenderer } from \"@itwin/core-react\";\nimport { FocusTrap, Point } from \"@itwin/core-react/internal\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport { CursorPopup } from \"../cursor/cursorpopup/CursorPopup.js\";\nimport type { PopupContentType, PopupPropsBase } from \"./PopupManager.js\";\nimport { isReactContent, PopupManager } from \"./PopupManager.js\";\nimport { PositionPopup } from \"./PositionPopup.js\";\nimport { ToolbarWithOverflow } from \"../toolbar/ToolbarWithOverflow.js\";\nimport type { ToolbarItem } from \"../toolbar/ToolbarItem.js\";\nimport { mapToPlacement, type Placement } from \"../utils/Placement.js\";\nimport { WrapperContext } from \"../configurableui/ConfigurableUiContent.js\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** Props for defining a CardPopup editor.\n * @beta */\nexport type CardPopupProps = Omit<PopupPropsBase, \"el\"> & {\n content: PopupContentType;\n title: string | PropertyRecord | undefined;\n items: CommonToolbarItem[] | ToolbarItem[] | undefined;\n /** @deprecated in 4.16.0. Not used by the {@link CardPopup} component. */\n orientation: Orientation;\n onCancel: () => void;\n onItemExecuted: (item: any) => void;\n el?: HTMLElement;\n} & RequireAtLeastOne<{\n /** @deprecated in 4.16.0. Use `placement` property instead. */\n relativePosition: RelativePosition;\n placement: Placement;\n }>;\n\ninterface CardPopupState {\n size: SizeProps;\n}\n\n/** Popup component for Input Editor\n * @beta\n */\nexport class CardPopup extends React.PureComponent<\n CardPopupProps,\n CardPopupState\n> {\n /** @internal */\n public static override contextType = WrapperContext;\n /** @internal */\n public declare context: React.ContextType<typeof WrapperContext>;\n public override readonly state = {\n size: { width: -1, height: -1 },\n };\n\n private _onSizeKnown = (newSize: SizeProps) => {\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n this.setState({ size: newSize });\n };\n\n private _handleKeyDown = (event: React.KeyboardEvent): void => {\n switch (event.key) {\n case Key.Escape.valueOf():\n this._cancel();\n break;\n }\n };\n\n private _cancel() {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n public override render() {\n let point = PopupManager.getPopupPosition(\n this.props.el ?? this.context,\n this.props.pt,\n new Point(),\n this.state.size\n );\n const popupRect = CursorPopup.getPopupRect(\n point,\n this.props.offset,\n this.state.size,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.props.placement ?? mapToPlacement(this.props.relativePosition)\n );\n point = new Point(popupRect.left, popupRect.top);\n\n return (\n <PositionPopup\n key={this.props.id}\n className={classnames(\"uifw-no-border\", \"uifw-card\")}\n point={point}\n onSizeKnown={this._onSizeKnown}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <DivWithOutsideClick\n onOutsideClick={this.props.onCancel}\n onKeyDown={this._handleKeyDown}\n >\n <FocusTrap active={true} returnFocusOnDeactivate={true}>\n <Card\n content={this.props.content}\n title={this.props.title}\n items={this.props.items}\n onItemExecuted={this.props.onItemExecuted}\n />\n </FocusTrap>\n </DivWithOutsideClick>\n </PositionPopup>\n );\n }\n}\n\n/** Props defining a Card component\n * @beta */\nexport interface CardProps {\n content: PopupContentType;\n title: string | PropertyRecord | undefined;\n items?: CommonToolbarItem[] | ToolbarItem[] | undefined;\n onItemExecuted: (item: any) => void;\n}\n\n/** Card component\n * @beta */\nexport function Card(props: CardProps) {\n let titleNode: React.ReactNode;\n if (props.title) {\n if (typeof props.title === \"string\")\n titleNode = <Text variant=\"leading\">{props.title}</Text>;\n else {\n const propertyValueRendererManager =\n PropertyValueRendererManager.defaultManager;\n const titleValue = propertyValueRendererManager.render(props.title);\n titleNode = <Text variant=\"leading\">{titleValue}</Text>;\n }\n }\n\n const content = isReactContent(props.content) ? (\n props.content.reactNode\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <MessageRenderer message={props.content} />\n );\n\n return (\n <>\n <div className=\"uifw-card-content\">\n {props.title && (\n <>\n {titleNode}\n <div className=\"uifw-card-gap\" />\n </>\n )}\n {content}\n </div>\n {props.items && (\n <>\n <div className=\"uifw-card-separator\" />\n <ToolbarWithOverflow\n expandsTo={Direction.Bottom}\n panelAlignment={ToolbarPanelAlignment.Start}\n items={props.items}\n useDragInteraction={true}\n toolbarOpacitySetting={ToolbarOpacitySetting.Transparent}\n onItemExecuted={props.onItemExecuted}\n />\n </>\n )}\n </>\n );\n}\n"]}
|
|
@@ -16,18 +16,15 @@ import { PositionPopup } from "./PositionPopup.js";
|
|
|
16
16
|
* @deprecated in 4.11.0. Though this is alpha, the main interface to using it is not. Please use {@link @itwin/appui-react#UiFramework.showComponent}.
|
|
17
17
|
*/
|
|
18
18
|
export class HTMLElementPopup extends React.PureComponent {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this.setState({ size: newSize });
|
|
29
|
-
};
|
|
30
|
-
}
|
|
19
|
+
state = {
|
|
20
|
+
size: { width: -1, height: -1 },
|
|
21
|
+
};
|
|
22
|
+
_onSizeKnown = (newSize) => {
|
|
23
|
+
if (newSize.height === this.state.size.height &&
|
|
24
|
+
newSize.width === this.state.size.width)
|
|
25
|
+
return;
|
|
26
|
+
this.setState({ size: newSize });
|
|
27
|
+
};
|
|
31
28
|
render() {
|
|
32
29
|
let point = PopupManager.getPopupPosition(this.props.el, this.props.pt, new Point(), this.state.size);
|
|
33
30
|
const popupRect = CursorPopup.getPopupRect(point, this.props.offset, this.state.size, this.props.relativePosition);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTMLElementPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/HTMLElementPopup.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkBnD;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK,CAAC,aAI3C;
|
|
1
|
+
{"version":3,"file":"HTMLElementPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/HTMLElementPopup.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkBnD;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK,CAAC,aAI3C;IAC0B,KAAK,GAAG;QAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;KAChC,CAAC;IAEM,YAAY,GAAG,CAAC,OAAkB,EAAE,EAAE;QAC5C,IACE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACzC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YAEvC,OAAO;QACT,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC;IAEc,MAAM;QACpB,IAAI,KAAK,GAAG,YAAY,CAAC,gBAAgB,CACvC,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,KAAK,EAAE,EACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAChB,CAAC;QACF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CACxC,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAC5B,CAAC;QACF,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,OAAO,CACL,oBAAC,aAAa,IACZ,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAClB,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,CAAC,YAAY;YAG9B,oBAAC,mBAAmB,IAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAEtD,oBAAC,eAAe,IAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAI,CAC5B,CACR,CACjB,CAAC;IACJ,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport * as React from \"react\";\nimport type { OnCancelFunc, RelativePosition } from \"@itwin/appui-abstract\";\nimport type { Orientation } from \"@itwin/components-react\";\nimport { DivWithOutsideClick, MessageRenderer } from \"@itwin/core-react\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport { CursorPopup } from \"../cursor/cursorpopup/CursorPopup.js\";\nimport type { PopupPropsBase } from \"./PopupManager.js\";\nimport { PopupManager } from \"./PopupManager.js\";\nimport { PositionPopup } from \"./PositionPopup.js\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** @alpha\n * @deprecated in 4.11.0. Please use {@link @itwin/appui-react#UiFramework.showComponent}.\n */\nexport interface HTMLElementPopupProps extends PopupPropsBase {\n element: HTMLElement;\n relativePosition: RelativePosition;\n orientation: Orientation;\n onCancel: OnCancelFunc;\n}\n\n/** @internal */\ninterface HTMLElementPopupState {\n size: SizeProps;\n}\n\n/** Popup component for HTMLElement\n * @alpha\n * @deprecated in 4.11.0. Though this is alpha, the main interface to using it is not. Please use {@link @itwin/appui-react#UiFramework.showComponent}.\n */\nexport class HTMLElementPopup extends React.PureComponent<\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n HTMLElementPopupProps,\n HTMLElementPopupState\n> {\n public override readonly state = {\n size: { width: -1, height: -1 },\n };\n\n private _onSizeKnown = (newSize: SizeProps) => {\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n this.setState({ size: newSize });\n };\n\n public override render() {\n let point = PopupManager.getPopupPosition(\n this.props.el,\n this.props.pt,\n new Point(),\n this.state.size\n );\n const popupRect = CursorPopup.getPopupRect(\n point,\n this.props.offset,\n this.state.size,\n this.props.relativePosition\n );\n point = new Point(popupRect.left, popupRect.top);\n\n return (\n <PositionPopup\n key={this.props.id}\n className=\"uifw-no-border\"\n point={point}\n onSizeKnown={this._onSizeKnown}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <DivWithOutsideClick onOutsideClick={this.props.onCancel}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <MessageRenderer message={this.props.element} />\n </DivWithOutsideClick>\n </PositionPopup>\n );\n }\n}\n"]}
|
|
@@ -13,34 +13,32 @@ import { PopupManager } from "./PopupManager.js";
|
|
|
13
13
|
import { PositionPopup, PositionPopupContent } from "./PositionPopup.js";
|
|
14
14
|
/** @beta */
|
|
15
15
|
export class InputEditorCommitHandler {
|
|
16
|
+
onCommit;
|
|
16
17
|
constructor(onCommit) {
|
|
17
18
|
this.onCommit = onCommit;
|
|
18
|
-
this.handleCommit = (args) => {
|
|
19
|
-
let newValue = 0;
|
|
20
|
-
if (args.newValue.valueFormat === PropertyValueFormat.Primitive &&
|
|
21
|
-
args.newValue.value !== undefined) {
|
|
22
|
-
newValue = args.newValue.value;
|
|
23
|
-
}
|
|
24
|
-
this.onCommit(newValue);
|
|
25
|
-
};
|
|
26
19
|
}
|
|
20
|
+
handleCommit = (args) => {
|
|
21
|
+
let newValue = 0;
|
|
22
|
+
if (args.newValue.valueFormat === PropertyValueFormat.Primitive &&
|
|
23
|
+
args.newValue.value !== undefined) {
|
|
24
|
+
newValue = args.newValue.value;
|
|
25
|
+
}
|
|
26
|
+
this.onCommit(newValue);
|
|
27
|
+
};
|
|
27
28
|
}
|
|
28
29
|
/** Popup component for Input Editor
|
|
29
30
|
* @alpha
|
|
30
31
|
*/
|
|
31
32
|
export class InputEditorPopup extends React.PureComponent {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.setState({ size: newSize });
|
|
42
|
-
};
|
|
43
|
-
}
|
|
33
|
+
state = {
|
|
34
|
+
size: { width: -1, height: -1 },
|
|
35
|
+
};
|
|
36
|
+
_onSizeKnown = (newSize) => {
|
|
37
|
+
if (newSize.height === this.state.size.height &&
|
|
38
|
+
newSize.width === this.state.size.width)
|
|
39
|
+
return;
|
|
40
|
+
this.setState({ size: newSize });
|
|
41
|
+
};
|
|
44
42
|
render() {
|
|
45
43
|
const point = PopupManager.getPopupPosition(this.props.el, this.props.pt, this.props.offset, this.state.size);
|
|
46
44
|
return (React.createElement(PositionPopup, { key: this.props.id, point: point, onSizeKnown: this._onSizeKnown },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputEditorPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/InputEditorPopup.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,YAAY;AACZ,MAAM,OAAO,wBAAwB;
|
|
1
|
+
{"version":3,"file":"InputEditorPopup.js","sourceRoot":"","sources":["../../../src/appui-react/popup/InputEditorPopup.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,YAAY;AACZ,MAAM,OAAO,wBAAwB;IACP;IAA5B,YAA4B,QAA2C;QAA3C,aAAQ,GAAR,QAAQ,CAAmC;IAAG,CAAC;IAEpE,YAAY,GAAG,CAAC,IAAyB,EAAE,EAAE;QAClD,IAAI,QAAQ,GAAqB,CAAC,CAAC;QACnC,IACE,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS;YAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,EACjC,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;CACH;AAcD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK,CAAC,aAG3C;IAC0B,KAAK,GAAG;QAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;KAChC,CAAC;IAEM,YAAY,GAAG,CAAC,OAAkB,EAAE,EAAE;QAC5C,IACE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACzC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YAEvC,OAAO;QACT,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC;IAEc,MAAM;QACpB,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CACzC,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,CAAC,KAAK,CAAC,EAAE,EACb,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAChB,CAAC;QAEF,OAAO,CACL,oBAAC,aAAa,IACZ,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,CAAC,YAAY;YAG9B,oBAAC,mBAAmB,IAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBACtD,oBAAC,oBAAoB;oBACnB,oBAAC,eAAe,IACd,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EACjC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,EAC/C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,QAAQ,EAAE,IAAI,GACd,CACmB,CACH,CACR,CACjB,CAAC;IACJ,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport * as React from \"react\";\nimport type { Primitives, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport type { PropertyUpdatedArgs } from \"@itwin/components-react\";\nimport { EditorContainer } from \"@itwin/components-react\";\nimport { DivWithOutsideClick } from \"@itwin/core-react\";\nimport type { PopupPropsBase } from \"./PopupManager.js\";\nimport { PopupManager } from \"./PopupManager.js\";\nimport { PositionPopup, PositionPopupContent } from \"./PositionPopup.js\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** @beta */\nexport class InputEditorCommitHandler {\n constructor(public readonly onCommit: (value: Primitives.Value) => void) {}\n\n public handleCommit = (args: PropertyUpdatedArgs) => {\n let newValue: Primitives.Value = 0;\n if (\n args.newValue.valueFormat === PropertyValueFormat.Primitive &&\n args.newValue.value !== undefined\n ) {\n newValue = args.newValue.value;\n }\n this.onCommit(newValue);\n };\n}\n\n/** Props for popup editor\n * @beta */\nexport interface InputEditorPopupProps extends PopupPropsBase {\n record: PropertyRecord;\n onCancel: () => void;\n commitHandler: InputEditorCommitHandler;\n}\n\ninterface InputEditorPopupState {\n size: SizeProps;\n}\n\n/** Popup component for Input Editor\n * @alpha\n */\nexport class InputEditorPopup extends React.PureComponent<\n InputEditorPopupProps,\n InputEditorPopupState\n> {\n public override readonly state = {\n size: { width: -1, height: -1 },\n };\n\n private _onSizeKnown = (newSize: SizeProps) => {\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n this.setState({ size: newSize });\n };\n\n public override render() {\n const point = PopupManager.getPopupPosition(\n this.props.el,\n this.props.pt,\n this.props.offset,\n this.state.size\n );\n\n return (\n <PositionPopup\n key={this.props.id}\n point={point}\n onSizeKnown={this._onSizeKnown}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <DivWithOutsideClick onOutsideClick={this.props.onCancel}>\n <PositionPopupContent>\n <EditorContainer\n propertyRecord={this.props.record}\n onCommit={this.props.commitHandler.handleCommit}\n onCancel={this.props.onCancel}\n setFocus={true}\n />\n </PositionPopupContent>\n </DivWithOutsideClick>\n </PositionPopup>\n );\n }\n}\n"]}
|