Skip to content

Commit 6c25c16

Browse files
committed
Refactoring picklist parsing to a generic file for reuse
1 parent 1fa746d commit 6c25c16

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { CustomFieldMetadata } from './reflect-custom-field-source';
2+
3+
type MaybeTyped = {
4+
type?: string;
5+
};
6+
7+
export function getPickListValues(customField: MaybeTyped): string[] | undefined {
8+
return hasType(customField) && isPicklist(customField) ? toPickListValues(customField) : undefined;
9+
}
10+
11+
function hasType(customField: MaybeTyped): customField is { type: string } {
12+
return !!(customField as CustomFieldMetadata).type;
13+
}
14+
15+
function isPicklist(typedCustomField: { type: string }) {
16+
return typedCustomField.type.toLowerCase() === 'picklist';
17+
}
18+
19+
function toPickListValues(customField: MaybeTyped): string[] | undefined {
20+
if ('valueSet' in customField) {
21+
const valueSet = customField.valueSet as object;
22+
if ('valueSetDefinition' in valueSet) {
23+
const valueSetDefinition = valueSet.valueSetDefinition as object;
24+
if ('value' in valueSetDefinition) {
25+
const pickListValues = valueSetDefinition.value as object[];
26+
return pickListValues.filter((each) => 'fullName' in each).map((each) => each.fullName as string);
27+
}
28+
}
29+
}
30+
31+
return undefined;
32+
}

src/core/reflection/sobject/reflect-custom-field-source.ts

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { pipe } from 'fp-ts/function';
77
import * as A from 'fp-ts/Array';
88
import { XMLParser } from 'fast-xml-parser';
99
import * as E from 'fp-ts/Either';
10+
import { getPickListValues } from './parse-picklist-values';
1011

1112
export type CustomFieldMetadata = {
1213
type_name: 'customfield';
@@ -65,28 +66,12 @@ function toCustomFieldMetadata(parserResult: { CustomField: unknown }): CustomFi
6566
description: null,
6667
};
6768

68-
const pickListValues =
69-
hasType(customField) && customField.type.toLowerCase() === 'picklist' ? toPickListValues(customField) : undefined;
70-
return { ...defaultValues, ...customField, type_name: 'customfield', pickListValues } as CustomFieldMetadata;
71-
}
72-
73-
function toPickListValues(customField: object): string[] {
74-
if ('valueSet' in customField) {
75-
const valueSet = customField.valueSet as object;
76-
if ('valueSetDefinition' in valueSet) {
77-
const valueSetDefinition = valueSet.valueSetDefinition as object;
78-
if ('value' in valueSetDefinition) {
79-
const pickListValues = valueSetDefinition.value as object[];
80-
return pickListValues.filter((each) => 'fullName' in each).map((each) => each.fullName as string);
81-
}
82-
}
83-
}
84-
85-
return [];
86-
}
87-
88-
function hasType(customField: object): customField is { type: string } {
89-
return !!(customField as CustomFieldMetadata).type;
69+
return {
70+
...defaultValues,
71+
...customField,
72+
type_name: 'customfield',
73+
pickListValues: getPickListValues(customField),
74+
} as CustomFieldMetadata;
9075
}
9176

9277
function addName(metadata: CustomFieldMetadata, name: string): CustomFieldMetadata {

0 commit comments

Comments
 (0)