Transformations: Support enum field conversion (#76410)

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
This commit is contained in:
Nathan Marrs
2023-11-16 10:44:30 -07:00
committed by GitHub
parent 5e50d9b178
commit 7397f975b6
4 changed files with 332 additions and 17 deletions

View File

@@ -256,25 +256,24 @@ export function ensureTimeField(field: Field, dateFormat?: string): Field {
return fieldToTimeField(field, dateFormat);
}
function fieldToEnumField(field: Field, cfg?: EnumFieldConfig): Field {
const enumConfig = { ...cfg };
function fieldToEnumField(field: Field, config?: EnumFieldConfig): Field {
const enumConfig = { ...config };
const enumValues = field.values.slice();
// Create lookup map based on existing enum config text values, if none exist return field as is
const lookup = new Map<unknown, number>();
if (enumConfig.text) {
if (enumConfig.text && enumConfig.text.length > 0) {
for (let i = 0; i < enumConfig.text.length; i++) {
lookup.set(enumConfig.text[i], i);
}
} else {
enumConfig.text = [];
return field;
}
// Convert field values to enum indexes
for (let i = 0; i < enumValues.length; i++) {
const v = enumValues[i];
if (!lookup.has(v)) {
enumConfig.text[lookup.size] = v;
lookup.set(v, lookup.size);
}
enumValues[i] = lookup.get(v);
const value = enumValues[i];
enumValues[i] = lookup.get(value);
}
return {