-
Notifications
You must be signed in to change notification settings - Fork 7
Description
Querying quantities: I do not think it will be possible to "filter on all related units" using the
quantityvalue. Defining this value tells the API to create a new base unit, like length or time. So when defining a unit such asmph, there will not be aquantityfield. Instead ofquantity: 'SPEED', it will have the propertydimension: { LENGTH: 1, TIME: -1 }, which it determines from the definition:"mph": "1 mi / hr".Having a
quantityproperty for each unit was very appealing but I realized it was probably unnecessary. This is because there is already anequalsQuantitymethod that compares the quantity of one unit with another, by comparing theirdimensionobjects. In theory you could create your own reference object of units to compare against:const refQuantities = { MASS: 'kg', SPEED: 'm/s', ... ]; let myUnit = unit('4 mile/hour'); myUnit.equalsQuantity(refQuantities.SPEED); // trueI realize it's not quite as convenient as writing
myUnit.quantity, but I really want to slim down the library to only the essential parts. I wanted to make it super easy to define your own units without requiring tons of boilerplate definitions. Perhaps eventually we could add a built-in feature to spit out"SPEED"automatically, but I don't want the inner workings of the library to be dependent on this feature, as it would require users to specify these quantities for each custom unit they add. (We could also add agetMatchingUnitsmethod which returns an array of all the defined units which match the given unit. This could be used to populate a drop-down selector for a unit conversion tool, for example.)
Originally posted by @ericman314 in #34 (comment)
Exactly as stated in the above reply, a new getMatchingUnits method would be of great use to developers. It would make developing front end unit manipulation components a lot easier.
With the new method, a personal use case where it would be beneficial involves simplifying the design of a data grid. Developers could populate a column with units of a specific quantity. The system would then allow the end user to select the display units from a custom component located in the column header. This component would include a dropdown menu with valid matching units for the given quantity.
It would also be useful for the library to provide a default reference quantities refQuantities object, populated with the most common physical quantities, such as the mentioned "MASS", "SPEED", but also uncompounded powers of base quantities such as "AREA" and "VOLUME". Developers could of course define their own object (or update the default one through the config function/method of the module) for any custom quantities.
Such an addition would also make it easier to more easily enforce certain quantities when end users input units through making it possible to validate the input against these reference quantities.