Skip to content

Commit

Permalink
Correctly export conditional value classes from `@itwin/appui-abstrac…
Browse files Browse the repository at this point in the history
…t` (#1031)

* Remove ConditionalIconValue that was never exported.

* Add ConditionalValue to barrel exports.

* Extract API

* NextVersion

* rush change

* PR number
  • Loading branch information
GerardasB committed Sep 16, 2024
1 parent e4f3694 commit 1484331
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 99 deletions.
148 changes: 80 additions & 68 deletions common/api/appui-react.api.md

Large diffs are not rendered by default.

12 changes: 8 additions & 4 deletions common/api/summary/appui-react.exports.csv
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ deprecated;CommandItemProps
public;CommonBackstageItem
public;CommonStatusBarItem
public;CommonToolbarItem
public;ConditionalBooleanValue = ConditionalBooleanValue_2
public;ConditionalBooleanValue: typeof ConditionalBooleanValue_2
public;ConditionalStringValue = ConditionalStringValue_2
public;ConditionalStringValue: typeof ConditionalStringValue_2
public;ConfigurableBase
deprecated;ConfigurableBase
public;ConfigurableCreateInfo
Expand Down Expand Up @@ -323,10 +327,10 @@ deprecated;FunctionType = (...args: any[]) => any
beta;getFeatureOverrideSyncEventIds(): string[]
deprecated;getFeatureOverrideSyncEventIds(): string[]
internal;getFrontstageStateSettingName(frontstageId: WidgetPanelsFrontstageState["id"]): string
beta;getIsHiddenIfFeatureOverridesActive(): ConditionalBooleanValue
deprecated;getIsHiddenIfFeatureOverridesActive(): ConditionalBooleanValue
beta;getIsHiddenIfSelectionNotActive(): ConditionalBooleanValue
deprecated;getIsHiddenIfSelectionNotActive(): ConditionalBooleanValue
beta;getIsHiddenIfFeatureOverridesActive(): ConditionalBooleanValue_2
deprecated;getIsHiddenIfFeatureOverridesActive(): ConditionalBooleanValue_2
beta;getIsHiddenIfSelectionNotActive(): ConditionalBooleanValue_2
deprecated;getIsHiddenIfSelectionNotActive(): ConditionalBooleanValue_2
internal;getKeyinsFromToolList(toolList: ToolList, localizedKeyinPreference?: KeyinFieldLocalization): KeyinEntry[]
beta;getListPanel(props: ListPickerProps): React_2.ReactNode
internal;getPanelSectionId(location: StagePanelLocation, section: StagePanelSection): PanelSectionId
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@itwin/appui-react",
"comment": "Add `ConditionalBooleanValue` and `ConditionalStringValue` class re-exports.",
"type": "none"
}
],
"packageName": "@itwin/appui-react"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@itwin/core-react",
"comment": "",
"type": "none"
}
],
"packageName": "@itwin/core-react"
}
2 changes: 1 addition & 1 deletion docs/changehistory/4.4.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Table of contents:
- Fixed store reset when iModelConnection is cleared.
- Fixed `clearHideIsolateEmphasizeElements` and `hideElements` button display when view changes happen outside AppUI's API.
- Fixed `openCursorMenu` function so that it opens cursor menu in Strict Mode in React 18.
- Fixed `Toolbar` and `ToolbarWithOverflow` to correctly handle `ConditionalStringValue`, `ConditionalBooleanValue` and `ConditionalIconValue` tool item properties.
- Fixed `Toolbar` and `ToolbarWithOverflow` to correctly handle `ConditionalStringValue`, `ConditionalBooleanValue` and `ConditionalIconItem` tool item properties.

### Deprecations

Expand Down
7 changes: 6 additions & 1 deletion docs/changehistory/NextVersion.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ Table of contents:
- [Deprecations](#deprecations)
- [@itwin/appui-react](#itwinappui-react)
- [Deprecations](#deprecations-1)
- [Additions](#additions)
- [Changes](#changes)
- [@itwin/components-react](#itwincomponents-react)
- [Deprecations](#deprecations-2)
- [Additions](#additions)
- [Additions](#additions-1)

## @itwin/core-react

Expand Down Expand Up @@ -108,6 +109,10 @@ Table of contents:
- Deprecated `DefaultContentToolsAppData` interface that is a remnant of discontinued frontstage APIs. [#1024](https://github.com/iTwin/appui/pull/1024)
- Deprecated `StandardContentToolsUiItemsProvider.provideStatusBarItems`, `StandardContentToolsUiItemsProvider.provideToolbarItems`, `StandardNavigationToolsUiItemsProvider.provideToolbarItems`, `StandardStatusbarUiItemsProvider.provideStatusBarItems` methods. Use `get*` variants instead. [#1024](https://github.com/iTwin/appui/pull/1024)

### Additions

- Added `ConditionalBooleanValue` and `ConditionalStringValue` class re-exports from `@itwin/appui-abstract` package. [#1031](https://github.com/iTwin/appui/pull/1031)

### Changes

- Allow to set the available snap modes in `SnapModeField` component. [#974](https://github.com/iTwin/appui/pull/974)
Expand Down
1 change: 1 addition & 0 deletions ui/appui-react/src/appui-react.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ export * from "./appui-react/shared/ActionButtonItemDef";
export * from "./appui-react/shared/AnyItemDef";
export * from "./appui-react/shared/AnyToolbarItemDef";
export * from "./appui-react/shared/CommandItemDef";
export * from "./appui-react/shared/ConditionalValue";
export * from "./appui-react/shared/CustomItemDef";
export * from "./appui-react/shared/CustomItemProps";
export * from "./appui-react/shared/GroupItemProps";
Expand Down
11 changes: 2 additions & 9 deletions ui/appui-react/src/appui-react/shared/ConditionalValue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { ConditionalIconItem as _ConditionalIconItem } from "@itwin/core-react";
* @public
*/
export type ConditionalBooleanValue = _ConditionalBooleanValue;
/** @public */
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ConditionalBooleanValue = _ConditionalBooleanValue;

Expand All @@ -24,14 +25,6 @@ export const ConditionalBooleanValue = _ConditionalBooleanValue;
* @public
*/
export type ConditionalStringValue = _ConditionalStringValue;
/** @public */
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ConditionalStringValue = _ConditionalStringValue;

/** Class used to return an icon value. The value is refreshed by using the specified function. The `syncEventIds` define
* events that would require the `iconGetter` function to be rerun.
* @public
*/
// eslint-disable-next-line deprecation/deprecation
export type ConditionalIconValue = _ConditionalIconItem;
// eslint-disable-next-line @typescript-eslint/no-redeclare, deprecation/deprecation
export const ConditionalIconValue = _ConditionalIconItem;
17 changes: 11 additions & 6 deletions ui/appui-react/src/appui-react/toolbar/ToolbarItemsManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ import {
ConditionalStringValue,
} from "@itwin/appui-abstract";
import { BeEvent } from "@itwin/core-bentley";
import { ConditionalIconItem } from "@itwin/core-react";
import type {
ToolbarActionItem,
ToolbarGroupItem,
ToolbarItem,
} from "./ToolbarItem";
import { isToolbarGroupItem } from "./ToolbarItem";
import { ConditionalIconValue } from "../shared/ConditionalValue";

function isInstance<T>(args: T | ReadonlyArray<T>): args is T {
return !Array.isArray(args);
Expand Down Expand Up @@ -136,7 +136,8 @@ export class ToolbarItemsManager {
entry.syncEventIds.forEach((eventId: string) =>
eventIds.add(eventId.toLowerCase())
);
} else if (entry instanceof ConditionalIconValue) {
// eslint-disable-next-line deprecation/deprecation
} else if (entry instanceof ConditionalIconItem) {
entry.syncEventIds.forEach((eventId: string) =>
eventIds.add(eventId.toLowerCase())
);
Expand Down Expand Up @@ -187,8 +188,10 @@ export class ToolbarItemsManager {
} else if (entry instanceof ConditionalStringValue) {
if (ConditionalStringValue.refreshValue(entry, eventIds))
itemsUpdated = true;
} else if (entry instanceof ConditionalIconValue) {
if (ConditionalIconValue.refreshValue(entry, eventIds))
// eslint-disable-next-line deprecation/deprecation
} else if (entry instanceof ConditionalIconItem) {
// eslint-disable-next-line deprecation/deprecation
if (ConditionalIconItem.refreshValue(entry, eventIds))
itemsUpdated = true;
}
}
Expand Down Expand Up @@ -229,8 +232,10 @@ export class ToolbarItemsManager {
} else if (entry instanceof ConditionalStringValue) {
if (ConditionalStringValue.refreshValue(entry, eventIds))
updateRequired = true;
} else if (entry instanceof ConditionalIconValue) {
if (ConditionalIconValue.refreshValue(entry, eventIds))
// eslint-disable-next-line deprecation/deprecation
} else if (entry instanceof ConditionalIconItem) {
// eslint-disable-next-line deprecation/deprecation
if (ConditionalIconItem.refreshValue(entry, eventIds))
updateRequired = true;
}
}
Expand Down
21 changes: 12 additions & 9 deletions ui/appui-react/src/test/shared/ConditionalValue.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
import { ConditionalIconItem } from "@itwin/core-react";
import { ConditionalIconValue } from "../../appui-react/shared/ConditionalValue";
import { ConditionalStringValue as AbstractConditionalStringValue } from "@itwin/appui-abstract";
import { ConditionalStringValue } from "../../appui-react/shared/ConditionalValue";

describe("ConditionalIconValue", () => {
describe("ConditionalStringValue", () => {
it("should use the same type for instanceof check", () => {
const item = new ConditionalIconItem(() => "item", []);
const value = new ConditionalIconValue(() => "value", []);
const abstractValue = new AbstractConditionalStringValue(
() => "abstractValue",
[]
);
const value = new ConditionalStringValue(() => "value", []);

expect(item instanceof ConditionalIconItem).toBe(true);
expect(value instanceof ConditionalIconItem).toBe(true);
expect(item instanceof ConditionalIconValue).toBe(true);
expect(value instanceof ConditionalIconValue).toBe(true);
expect(abstractValue instanceof AbstractConditionalStringValue).toBe(true);
expect(value instanceof AbstractConditionalStringValue).toBe(true);
expect(value instanceof ConditionalStringValue).toBe(true);
expect(value instanceof ConditionalStringValue).toBe(true);
});
});
2 changes: 1 addition & 1 deletion ui/core-react/src/core-react/icons/ConditionalIconItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type { IconSpec } from "./IconComponent";

/** Class used to return an icon. The icon is variable and can be changed in response to subscribed event ids.
* @public
* @deprecated in 4.16.0. Use {@link @itwin/appui-react#ConditionalIconValue} instead.
* @deprecated in 4.16.0. Uses a deprecated {@link IconSpec} type. Use conditional rendering to render different icons.
*/
export class ConditionalIconItem {
private _value?: IconSpec;
Expand Down

0 comments on commit 1484331

Please sign in to comment.