Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/shared/foundation-shared-domain/enums/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export * from "./messages";
export * from "./playlists";
export * from "./roles";
export * from "./times";
export * from "./units";
export * from "./users";
export * from "./widgetTemplates";
export * from "./reports";
133 changes: 133 additions & 0 deletions src/shared/foundation-shared-domain/enums/units.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
export enum UnitPrefix {
None = "",
Nano = "n",
Micro = "µ",
Milli = "m",
Kilo = "k",
Mega = "M",
Giga = "G",
Tera = "T",
Peta = "P"
}

export enum UnitFamily {
Energy = "Energy",
Power = "Power",
Volume = "Volume",
GasVolume = "Gas Volume",
WaterFlow = "Water Flow",
GasFlow = "Gas Flow",
Pressure = "Pressure",
Temperature = "Temperature",
Speed = "Speed",
Distance = "Distance",
Mass = "Mass",
MassFlow = "Mass Flow",
Frequency = "Frequency",
Voltage = "Voltage",
Current = "Current",
Resistance = "Resistance",
Percentage = "Percentage",
Capacity = "Capacity",
SnowProduction = "Snow Production",
Efficiency = "Efficiency"
}

export enum EnergyUnit {
Wattheure = "Wh",
Joule = "J",
Calorie = "cal",
}

export enum PowerUnit {
Watt = "W",
}

export enum VolumeUnit {
Liter = "L",
CubicMeter = "m3",
}

export enum GasVolumeUnit {
NormalCubicMeter = "Nm3",
}

export enum WaterFlowUnit {
LiterPerSecond = "L/s",
CubicMeterPerSecond = "m3/s",
LiterPerMinute = "L/min",
CubicMeterPerHour = "m3/h",
}

export enum GasFlowUnit {
NormalCubicMeterPerHour = "Nm3/h",
}

export enum PressureUnit {
Pascal = "Pa",
Bar = "bar",
}

export enum TemperatureUnit {
Celsius = "°C",
Kelvin = "K",
Fahrenheit = "°F",
}

export enum SpeedUnit {
MeterPerSecond = "m/s",
KilometerPerHour = "km/h",
Knot = "kn",
}

export enum DistanceUnit {
Meter = "m",
}

export enum MassUnit {
Gram = "g",
Tonne = "t",
}

export enum MassFlowUnit {
GramPerSecond = "g/s",
TonnePerSecond = "t/s",
KilogramPerHour = "kg/h",
TonnePerHour = "t/h",
}

export enum FrequencyUnit {
Hertz = "Hz",
RevolutionsPerMinute = "rpm",
}

export enum VoltageUnit {
Volt = "V",
}

export enum CurrentUnit {
Ampere = "A",
}

export enum ResistanceUnit {
Ohm = "Ω",
}

export enum PercentageUnit {
Percent = "%",
RelativeHumidity = "%RH",
}

export enum CapacityUnit {
Person = "pers",
PersonPerHour = "pers/h",
}

export enum SnowProductionUnit {
CubicMeterSnowPerHour = "m3_neige/h",
}

export enum EfficiencyUnit {
KilowattHourPerCubicMeter = "kWh/m3",
KilowattHourPerKilogram = "kWh/kg",
}
1 change: 1 addition & 0 deletions src/shared/foundation-shared-domain/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ export * from "./permissions";
export * from "./terminals";
export * from "./timeZones";
export * from "./translations";
export * from "./units";
export * from "./userLegalInformations";
export * from "./users";
3 changes: 3 additions & 0 deletions src/shared/foundation-shared-domain/models/units/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from "./unitDetails";
export * from "./unitFamilies";
export * from "./unitsRegistry";
18 changes: 18 additions & 0 deletions src/shared/foundation-shared-domain/models/units/unitDetails.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { UnitFamily } from "@dative-gpi/foundation-shared-domain/enums";

export interface UnitDefinition {
symbol: string;
family: UnitFamily;
toPivot: number;
usesSIPrefixes: boolean;
specialConversions?: Array<{
toUnit: string;
threshold: number;
}>;
}

export interface UnitFamilyDefinition {
name: string;
pivotUnit: string;
customConverter?: (value: number, fromUnit: string, toUnit: string) => number;
}
131 changes: 131 additions & 0 deletions src/shared/foundation-shared-domain/models/units/unitFamilies.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import { UnitFamily, TemperatureUnit, EnergyUnit, PowerUnit, VolumeUnit, GasVolumeUnit, WaterFlowUnit, GasFlowUnit, PressureUnit, SpeedUnit, DistanceUnit, MassUnit, MassFlowUnit, FrequencyUnit, VoltageUnit, CurrentUnit, ResistanceUnit, PercentageUnit, CapacityUnit, SnowProductionUnit, EfficiencyUnit } from "@dative-gpi/foundation-shared-domain/enums";
import type { UnitFamilyDefinition } from "./unitDetails";

export const unitFamilies: Record<UnitFamily, UnitFamilyDefinition> = {
[UnitFamily.Energy]: {
name: UnitFamily.Energy,
pivotUnit: EnergyUnit.Joule,
},

[UnitFamily.Temperature]: {
name: UnitFamily.Temperature,
pivotUnit: TemperatureUnit.Celsius,
customConverter: (value: number, fromUnit: string, toUnit: string) => {
// Celsius <-> Kelvin
if (fromUnit === TemperatureUnit.Celsius && toUnit === TemperatureUnit.Kelvin) {
return value + 273.15;
}
if (fromUnit === TemperatureUnit.Kelvin && toUnit === TemperatureUnit.Celsius) {
return value - 273.15;
}

// Celsius <-> Fahrenheit
if (fromUnit === TemperatureUnit.Celsius && toUnit === TemperatureUnit.Fahrenheit) {
return (value * 9/5) + 32;
}
if (fromUnit === TemperatureUnit.Fahrenheit && toUnit === TemperatureUnit.Celsius) {
return (value - 32) * 5/9;
}

// Kelvin <-> Fahrenheit
if (fromUnit === TemperatureUnit.Kelvin && toUnit === TemperatureUnit.Fahrenheit) {
return (value - 273.15) * 9/5 + 32;
}
if (fromUnit === TemperatureUnit.Fahrenheit && toUnit === TemperatureUnit.Kelvin) {
return (value - 32) * 5/9 + 273.15;
}

return value;
}
},

[UnitFamily.Power]: {
name: UnitFamily.Power,
pivotUnit: PowerUnit.Watt
},

[UnitFamily.Volume]: {
name: UnitFamily.Volume,
pivotUnit: VolumeUnit.Liter
},

[UnitFamily.GasVolume]: {
name: UnitFamily.GasVolume,
pivotUnit: GasVolumeUnit.NormalCubicMeter
},

[UnitFamily.WaterFlow]: {
name: UnitFamily.WaterFlow,
pivotUnit: WaterFlowUnit.LiterPerSecond
},

[UnitFamily.GasFlow]: {
name: UnitFamily.GasFlow,
pivotUnit: GasFlowUnit.NormalCubicMeterPerHour
},

[UnitFamily.Pressure]: {
name: UnitFamily.Pressure,
pivotUnit: PressureUnit.Pascal
},

[UnitFamily.Speed]: {
name: UnitFamily.Speed,
pivotUnit: SpeedUnit.MeterPerSecond
},

[UnitFamily.Distance]: {
name: UnitFamily.Distance,
pivotUnit: DistanceUnit.Meter
},

[UnitFamily.Mass]: {
name: UnitFamily.Mass,
pivotUnit: MassUnit.Gram
},

[UnitFamily.MassFlow]: {
name: UnitFamily.MassFlow,
pivotUnit: MassFlowUnit.GramPerSecond
},

[UnitFamily.Frequency]: {
name: UnitFamily.Frequency,
pivotUnit: FrequencyUnit.Hertz
},

[UnitFamily.Voltage]: {
name: UnitFamily.Voltage,
pivotUnit: VoltageUnit.Volt
},

[UnitFamily.Current]: {
name: UnitFamily.Current,
pivotUnit: CurrentUnit.Ampere
},

[UnitFamily.Resistance]: {
name: UnitFamily.Resistance,
pivotUnit: ResistanceUnit.Ohm
},

[UnitFamily.Percentage]: {
name: UnitFamily.Percentage,
pivotUnit: PercentageUnit.Percent
},

[UnitFamily.Capacity]: {
name: UnitFamily.Capacity,
pivotUnit: CapacityUnit.Person
},

[UnitFamily.SnowProduction]: {
name: UnitFamily.SnowProduction,
pivotUnit: SnowProductionUnit.CubicMeterSnowPerHour
},

[UnitFamily.Efficiency]: {
name: UnitFamily.Efficiency,
pivotUnit: EfficiencyUnit.KilowattHourPerCubicMeter
},
};
Loading
Loading