65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
|
/* eslint-disable no-unused-vars */
|
||
|
|
||
|
/**
|
||
|
* The localize function argument callback which allows to convert raw value to
|
||
|
* the actual type.
|
||
|
*
|
||
|
* @param value - The value to convert
|
||
|
*
|
||
|
* @returns The converted value
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The map of localized values for each width.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The index type of the locale unit value. It types conversion of units of
|
||
|
* values that don't start at 0 (i.e. quarters).
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Converts the unit value to the tuple of values.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The tuple of localized era values. The first element represents BC,
|
||
|
* the second element represents AD.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The tuple of localized quarter values. The first element represents Q1.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The tuple of localized day values. The first element represents Sunday.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The tuple of localized month values. The first element represents January.
|
||
|
*/
|
||
|
|
||
|
export function buildLocalizeFn(args) {
|
||
|
return (value, options) => {
|
||
|
const context = options?.context ? String(options.context) : "standalone";
|
||
|
|
||
|
let valuesArray;
|
||
|
if (context === "formatting" && args.formattingValues) {
|
||
|
const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
|
||
|
const width = options?.width ? String(options.width) : defaultWidth;
|
||
|
|
||
|
valuesArray =
|
||
|
args.formattingValues[width] || args.formattingValues[defaultWidth];
|
||
|
} else {
|
||
|
const defaultWidth = args.defaultWidth;
|
||
|
const width = options?.width ? String(options.width) : args.defaultWidth;
|
||
|
|
||
|
valuesArray = args.values[width] || args.values[defaultWidth];
|
||
|
}
|
||
|
const index = args.argumentCallback ? args.argumentCallback(value) : value;
|
||
|
|
||
|
// @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
|
||
|
return valuesArray[index];
|
||
|
};
|
||
|
}
|