@itwin/presentation-frontend
Version:
Frontend of iModel.js Presentation library
275 lines • 14.2 kB
TypeScript
/** @packageDocumentation
* @module Core
*/
import { BeEvent } from "@itwin/core-bentley";
import { IModelConnection } from "@itwin/core-frontend";
import { UnitSystemKey } from "@itwin/core-quantity";
import { SchemaContext } from "@itwin/ecschema-metadata";
import { ClientDiagnosticsAttribute, Content, ContentDescriptorRequestOptions, ContentInstanceKeysRequestOptions, ContentRequestOptions, ContentSourcesRequestOptions, ContentUpdateInfo, Descriptor, DescriptorOverrides, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DisplayValueGroup, DistinctValuesRequestOptions, ElementProperties, FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, FormatsMap, HierarchyLevelDescriptorRequestOptions, HierarchyRequestOptions, HierarchyUpdateInfo, InstanceKey, Item, KeySet, LabelDefinition, Node, NodeKey, NodePathElement, Paged, PagedResponse, RulesetVariable, SelectClassInfo, SingleElementPropertiesRequestOptions } from "@itwin/presentation-common";
import { RpcRequestsHandler } from "@itwin/presentation-common/internal";
import { IpcRequestsHandler } from "./IpcRequestsHandler.js";
import { RulesetManager } from "./RulesetManager.js";
import { RulesetVariablesManager } from "./RulesetVariablesManager.js";
import { _presentation_manager_ipcRequestsHandler, _presentation_manager_rpcRequestsHandler } from "./InternalSymbols.js";
/**
* Data structure that describes IModel hierarchy change event arguments.
* @public
*/
export interface IModelHierarchyChangeEventArgs {
/** Id of ruleset that was used to create hierarchy. */
rulesetId: string;
/** Hierarchy changes info. */
updateInfo: HierarchyUpdateInfo;
/** Key of iModel that was used to create hierarchy. It matches [[IModelConnection.key]] property. */
imodelKey: string;
}
/**
* Data structure that describes iModel content change event arguments.
* @public
*/
export interface IModelContentChangeEventArgs {
/** Id of ruleset that was used to create content. */
rulesetId: string;
/** Content changes info. */
updateInfo: ContentUpdateInfo;
/** Key of iModel that was used to create content. It matches [[IModelConnection.key]] property. */
imodelKey: string;
}
/**
* Options for requests that can return multiple pages of items concurrently.
* @public
*/
export type MultipleValuesRequestOptions = Paged<{
/**
* Max number of requests that should be made to the backend to fulfill the whole request.
* `undefined` means no limit, so in that case all requests are sent at once.
*/
maxParallelRequests?: number;
/**
* Size of a single batch when fetching data through multiple requests. If not set,
* the fall back is requested page size. If the page size is not set, the backend
* decides how many items to return.
*/
batchSize?: number;
}>;
/**
* Options for requests that retrieve nodes.
* @public
*/
export type GetNodesRequestOptions = HierarchyRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute;
/**
* Options for requests that retrieve content.
* @public
*/
export type GetContentRequestOptions = ContentRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> & ClientDiagnosticsAttribute;
/**
* Options for requests that retrieve distinct values.
* @public
*/
export type GetDistinctValuesRequestOptions = DistinctValuesRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> & ClientDiagnosticsAttribute;
/**
* Properties used to configure [[PresentationManager]]
* @public
*/
export interface PresentationManagerProps {
/**
* Sets the active locale to use when localizing presentation-related
* strings. It can later be changed through [[PresentationManager]].
*/
activeLocale?: string;
/**
* Sets the active unit system to use for formatting property values with
* units. The value can later be changed through [[PresentationManager.activeUnitSystem]] setter or
* overriden for each request through request parameters. If not set, `IModelApp.quantityFormatter.activeUnitSystem`
* is used by default.
*
* @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [IModelApp.quantityFormatter]($core-frontend) to set the active unit system.
*/
activeUnitSystem?: UnitSystemKey;
/**
* ID used to identify client that requests data. Generally, clients should
* store this ID in their local storage so the ID can be reused across
* sessions - this allows reusing some caches.
*
* Defaults to a unique GUID as a client id.
*/
clientId?: string;
/**
* Timeout (in milliseconds) for how long we're going to wait for RPC request to be fulfilled before throwing
* a timeout error.
*
* Defaults to 10 minutes.
*/
requestTimeout?: number;
/**
* Callback that provides [SchemaContext]($ecschema-metadata) for supplied [IModelConnection]($core-frontend).
* [SchemaContext]($ecschema-metadata) is used for getting metadata required for values formatting.
*/
schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;
/**
* A map of default unit formats to use for formatting properties that don't have a presentation format
* in requested unit system.
*
* @note Only has effect when frontend value formatting is enabled by supplying the `schemaContextProvider` prop.
*/
defaultFormats?: FormatsMap;
}
/**
* Frontend Presentation manager which basically just forwards all calls to
* the backend implementation.
*
* @public
*/
export declare class PresentationManager implements Disposable {
private _requestsHandler;
private _rulesets;
private _localizationHelper;
private _explicitActiveUnitSystem;
private _rulesetVars;
private _clearEventListener?;
private _schemaContextProvider?;
private _defaultFormats?;
private _ipcRequestsHandler?;
/**
* An event raised when hierarchies created using specific ruleset change
*/
onIModelHierarchyChanged: BeEvent<(args: IModelHierarchyChangeEventArgs) => void>;
/**
* An event raised when content created using specific ruleset changes
*/
onIModelContentChanged: BeEvent<(args: IModelContentChangeEventArgs) => void>;
/**
* Get / set active unit system used to format property values with units.
*
* @deprecated in 4.0 - will not be removed until after 2026-06-13. `IModelApp.quantityFormatter` should be used to get/set the active unit system. At the moment
* [[PresentationManager]] allows overriding it, but returns `IModelApp.quantityFormatter.activeUnitSystem` if override
* is not set.
*/
get activeUnitSystem(): UnitSystemKey;
set activeUnitSystem(value: UnitSystemKey | undefined);
private constructor();
/** Get / set active locale used for localizing presentation data */
get activeLocale(): string | undefined;
set activeLocale(locale: string | undefined);
[Symbol.dispose](): void;
/** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */
dispose(): void;
private onUpdate;
/** @note This is only called in native apps after changes in iModels */
private handleUpdateAsync;
/**
* Create a new PresentationManager instance
* @param props Optional properties used to configure the manager
*/
static create(props?: PresentationManagerProps): PresentationManager;
/** @internal */
get [_presentation_manager_rpcRequestsHandler](): RpcRequestsHandler;
/** @internal */
get [_presentation_manager_ipcRequestsHandler](): IpcRequestsHandler | undefined;
/**
* Get rulesets manager
*/
rulesets(): RulesetManager;
/**
* Get ruleset variables manager for specific ruleset
* @param rulesetId Id of the ruleset to get the vars manager for
*/
vars(rulesetId: string): RulesetVariablesManager;
private toRpcTokenOptions;
private addRulesetAndVariablesToOptions;
/** Returns an iterator that polls nodes asynchronously. */
getNodesIterator(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<{
total: number;
items: AsyncIterableIterator<Node>;
}>;
/**
* Retrieves nodes
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getNodesIterator]] instead.
*/
getNodes(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<Node[]>;
/** Retrieves nodes count. */
getNodesCount(requestOptions: GetNodesRequestOptions): Promise<number>;
/**
* Retrieves total nodes count and a single page of nodes.
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getNodesIterator]] instead.
*/
getNodesAndCount(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<{
count: number;
nodes: Node[];
}>;
/**
* Retrieves hierarchy level descriptor.
* @public
*/
getNodesDescriptor(requestOptions: HierarchyLevelDescriptorRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute): Promise<Descriptor | undefined>;
/** Retrieves paths from root nodes to children nodes according to specified keys. Intersecting paths will be merged. */
getNodePaths(requestOptions: FilterByInstancePathsHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute): Promise<NodePathElement[]>;
/** Retrieves paths from root nodes to nodes containing filter text in their label. */
getFilteredNodePaths(requestOptions: FilterByTextHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute): Promise<NodePathElement[]>;
/**
* Get information about the sources of content when building it for specific ECClasses. Sources involve classes of the primary select instance,
* its related instances for loading related and navigation properties.
* @public
*/
getContentSources(requestOptions: ContentSourcesRequestOptions<IModelConnection> & ClientDiagnosticsAttribute): Promise<SelectClassInfo[]>;
/** Retrieves the content descriptor which describes the content and can be used to customize it. */
getContentDescriptor(requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute): Promise<Descriptor | undefined>;
/** Retrieves overall content set size. */
getContentSetSize(requestOptions: GetContentRequestOptions): Promise<number>;
private getContentIteratorInternal;
/** Retrieves a content descriptor, item count and async generator for the items themselves. */
getContentIterator(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<{
descriptor: Descriptor;
total: number;
items: AsyncIterableIterator<Item>;
} | undefined>;
/**
* Retrieves content which consists of a content descriptor and a page of records.
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getContentIterator]] instead.
*/
getContent(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<Content | undefined>;
/**
* Retrieves content set size and content which consists of a content descriptor and a page of records.
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getContentIterator]] instead.
*/
getContentAndSize(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<{
content: Content;
size: number;
} | undefined>;
/** Returns an iterator that asynchronously polls distinct values of specific field from the content. */
getDistinctValuesIterator(requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions): Promise<{
total: number;
items: AsyncIterableIterator<DisplayValueGroup>;
}>;
/**
* Retrieves distinct values of specific field from the content.
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getDistinctValuesIterator]] instead.
*/
getPagedDistinctValues(requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions): Promise<PagedResponse<DisplayValueGroup>>;
/**
* Retrieves property data in a simplified format for a single element specified by ID.
* @public
*/
getElementProperties<TParsedContent = ElementProperties>(requestOptions: SingleElementPropertiesRequestOptions<IModelConnection, TParsedContent> & ClientDiagnosticsAttribute): Promise<TParsedContent | undefined>;
/**
* Retrieves content item instance keys.
* @public
*/
getContentInstanceKeys(requestOptions: ContentInstanceKeysRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions): Promise<{
total: number;
items: () => AsyncGenerator<InstanceKey>;
}>;
/** Retrieves display label definition of specific item. */
getDisplayLabelDefinition(requestOptions: DisplayLabelRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute): Promise<LabelDefinition>;
/** Retrieves display label definition of specific items. */
getDisplayLabelDefinitionsIterator(requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions): Promise<{
total: number;
items: AsyncIterableIterator<LabelDefinition>;
}>;
/**
* Retrieves display label definition of specific items.
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getDisplayLabelDefinitionsIterator]] instead.
*/
getDisplayLabelDefinitions(requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions): Promise<LabelDefinition[]>;
}
//# sourceMappingURL=PresentationManager.d.ts.map