QuantityFormatter Class

Class that supports formatting quantity values into strings and parsing strings into quantity values. This class also maintains the "active" unit system and caches FormatterSpecs and ParserSpecs for the "active" unit system to allow synchronous access to parsing and formatting values. The support unit systems are defined by UnitSystemKey and is kept in synch with the unit systems provided by the Presentation Manager on the backend. The QuantityFormatter contains a registry of quantity type definitions. These definitions implement the QuantityTypeDefinition interface, which among other things, provide default [FormatProps]$(core-quantity), and provide methods to generate both a [FormatterSpec]$(core-quantity) and a [ParserSpec]$(core-quantity). There are built-in quantity types that are identified by the QuantityType enum. CustomQuantityTypeDefinition can be registered to extend the available quantity types available by frontend tools. The QuantityFormatter also allows the default formats to be overriden.

Implements

Methods

Name Description
constructor(showMetricOrUnitSystem?: boolean | UnitSystemKey): QuantityFormatter constructor  
addAlternateLabels(key: string, ...labels: string[]): void Add one or more alternate labels for a unit - these labels are used during string parsing.  
clearAllOverrideFormats(): Promise<void> Clear formatting override for all quantity types, but only for the "active" Unit System.  
clearOverrideFormats(type: QuantityTypeArg): Promise<void> Clear any formatting override for specified quantity type, but only for the "active" Unit System.  
findFormatterSpecByQuantityType(type: QuantityTypeArg, _unused?: boolean): undefined | FormatterSpec Synchronous call to get a FormatterSpec of a QuantityType.  
findParserSpecByQuantityType(type: QuantityTypeArg): undefined | ParserSpec Synchronous call to get a ParserSpec for a QuantityType.  
findUnit(unitLabel: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> Find [UnitProp] for a specific unit label.  
findUnitByName(unitName: string): Promise<UnitProps> Find [UnitProp] for a specific unit name.  
formatQuantity(magnitude: number, formatSpec: undefined | FormatterSpec): string Generates a formatted string for a quantity given its format spec.  
generateFormatterSpecByType(type: QuantityTypeArg, formatProps: FormatProps): Promise<FormatterSpec> Asynchronous Call to get a FormatterSpec for a QuantityType.  
getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise<UnitConversion> Returns data needed to convert from one Unit to another in the same Unit Family/Phenomenon.  
getFormatPropsByQuantityType(quantityType: QuantityTypeArg, requestedSystem?: UnitSystemKey, ignoreOverrides?: boolean): undefined | FormatProps Get the cached FormatProps give a quantity type.  
getFormatterSpecByQuantityType(type: QuantityTypeArg, isImperial?: boolean): Promise<undefined | FormatterSpec> Asynchronous Call to get a FormatterSpec for a QuantityType.  
getFormatterSpecByQuantityTypeAndSystem(type: QuantityTypeArg, system?: UnitSystemKey): Promise<undefined | FormatterSpec> Asynchronous Call to get a FormatterSpec for a QuantityType and a Unit System.  
getParserSpecByQuantityType(type: QuantityTypeArg, isImperial?: boolean): Promise<undefined | ParserSpec> Asynchronous Call to get a ParserSpec for a QuantityType.  
getParserSpecByQuantityTypeAndSystem(type: QuantityTypeArg, system?: UnitSystemKey): Promise<undefined | ParserSpec> Asynchronous Call to get a ParserSpec for a QuantityType.  
getQuantityDefinition(type: QuantityTypeArg): undefined | QuantityTypeDefinition Return QuantityTypeDefinition if type has been registered.  
getQuantityTypeKey(type: QuantityTypeArg): string Converts a QuantityTypeArg into a QuantityTypeKey/string value that can be used to lookup custom and standard quantity types.  
getUnitSystemFromString(inputSystem: string, fallback?: UnitSystemKey): UnitSystemKey Get a UnitSystemKey from a string that may have been entered via a key-in.  
getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> Returns all defined units for the specified Unit Family/Phenomenon.  
hasActiveOverride(type: QuantityTypeArg, checkOnlyActiveUnitSystem?: boolean): boolean Return true if the QuantityType is using an override format.  
initializeQuantityTypesRegistry(): Promise<void> Protected Method used to register all QuantityTypes defined in QuantityType enum.  
parseToQuantityValue(inString: string, parserSpec: undefined | ParserSpec): QuantityParseResult Parse input string into quantity given the ParserSpec  
registerQuantityType(entry: CustomQuantityTypeDefinition, replace?: boolean): Promise<boolean> Async call to register a CustomQuantityType and load the FormatSpec and ParserSpec for the new type.  
reinitializeFormatAndParsingsMaps(overrideFormatPropsByUnitSystem: Map<UnitSystemKey, Map<string, FormatProps>>, unitSystemKey?: UnitSystemKey, fireUnitSystemChanged?: boolean, startDefaultTool?: boolean): Promise<void> Reinitialize caches.  
resetToUseInternalUnitsProvider(): Promise<void> Async call typically used after IModel is closed to reset UnitsProvider to default one that does not require an Units schema.  
setActiveUnitSystem(isImperialOrUnitSystem: boolean | UnitSystemKey, restartActiveTool?: boolean): Promise<void> Set the Active unit system to one of the supported types.  
setOverrideFormat(type: QuantityTypeArg, overrideFormat: FormatProps): Promise<void> Set Override Format for a quantity type, but only in the "active" Unit System.  
setOverrideFormats(type: QuantityTypeArg, overrideEntry: OverrideFormatEntry): Promise<void> Set formatting override for specified quantity type, but only for the "active" Unit System.  
setUnitFormattingSettingsProvider(provider: UnitFormattingSettingsProvider): Promise<void> Set the settings provider and if not iModel specific initialize setting for user.  
setUnitsProvider(unitsProvider: UnitsProvider): Promise<void> async method to set a units provider and reload caches  

Properties

Name Type Description
_activeFormatSpecsByType Protected Map<string, FormatterSpec> Map of FormatSpecs for all available QuantityTypes and the active Unit System  
_activeParserSpecsByType Protected Map<string, ParserSpec> Map of ParserSpecs for all available QuantityTypes and the active Unit System  
_activeUnitSystem Protected UnitSystemKey Active UnitSystem key - must be one of "imperial", "metric", "usCustomary", or "usSurvey".  
_overrideFormatPropsByUnitSystem Protected Map<UnitSystemKey, Map<string, FormatProps>> Map of FormatSpecs that have been overriden from the default.  
_quantityTypeRegistry Protected Map<string, QuantityTypeDefinition> Registry containing available quantity type definitions.  
_unitFormattingSettingsProvider Protected undefined | UnitFormattingSettingsProvider Optional object that gets called to store and retrieve format overrides.  
activeUnitSystem Accessor ReadOnly UnitSystemKey Retrieve the active UnitSystemKey which is used to determine what formats are to be used to display quantities  
alternateUnitLabelsProvider Accessor ReadOnly AlternateUnitLabelsProvider Return the class the contain map of all alternate labels for units.  
onActiveFormattingUnitSystemChanged Readonly BeUiEvent<FormattingUnitSystemChangedArgs> Called after the active unit system is changed.  
onQuantityFormatsChanged Readonly BeUiEvent<QuantityFormatsChangedArgs> Called when the format of a QuantityType is overriden or the override is cleared.  
onUnitsProviderChanged Readonly BeUiEvent<void> Fired when the active UnitsProvider is updated.  
quantityTypesRegistry Accessor ReadOnly Map<string, QuantityTypeDefinition> Return a map that serves as a registry of all standard and custom quantity types.  
unitsProvider Accessor UnitsProvider Get/Set the active UnitsProvider class.  

Defined in

Last Updated: 30 November, 2023