Skip to content

Commit 7b7ff44

Browse files
committed
fix: mapping generic key of parameter to used in function generic key for correct validation
1 parent 5f3b2f1 commit 7b7ff44

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/components/d-flow/function/DFlowFunction.hook.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ export const useFunctionValidation = (
4848
const tempDataTypeFromParameter = new DataType(replaceGenericKeysInDataTypeObject(dataTypeFromParameter?.json!!, genericMap), dataTypeService)
4949
const tempDataTypeFromValue = new DataType(replaceGenericKeysInDataTypeObject(dataTypeFromValue?.json!!, genericMap), dataTypeService)
5050
return tempDataTypeFromParameter?.validateDataType(tempDataTypeFromValue)
51-
} else {
52-
const replacedGenericMapper = replaceGenericKeysInType(parameter.type, genericMap) as GenericType
53-
return dataTypeService.getDataType(parameter.type)?.validateValue(values[index], replacedGenericMapper.generic_mapper)
5451
}
5552

53+
const replacedGenericMapper = replaceGenericKeysInType(parameter.type, genericMap) as GenericType
54+
return dataTypeService.getDataType(parameter.type)?.validateValue(values[index], replacedGenericMapper.generic_mapper)
55+
5656
} else if (func.genericKeys?.includes(String(parameter.type))) {
5757

5858
const genericTypes = resolveGenericKeyMappings(typeFromParameter, typeFromValue, func.genericKeys!!)
@@ -71,7 +71,20 @@ export const useFunctionValidation = (
7171
} else if (dataTypeService.getDataType(typeFromValue) && dataTypeFromParameter && dataTypeFromValue && dataTypeFromParameter.genericKeys) {
7272

7373
//parameter is generic but value not
74-
const genericTypes = resolveAllGenericKeysInDataTypeObject(dataTypeFromParameter.json, dataTypeFromValue.json, dataTypeFromParameter.genericKeys)
74+
const genericParameterTypes = resolveAllGenericKeysInDataTypeObject(dataTypeFromParameter.json, dataTypeFromValue.json, dataTypeFromParameter.genericKeys)
75+
const genericTypes = resolveGenericKeyMappings(typeFromParameter, {
76+
...(typeFromParameter as GenericType),
77+
generic_mapper: (typeFromParameter as GenericType).generic_mapper?.map(mapper => {
78+
if (genericParameterTypes[mapper.generic_target]) {
79+
return {
80+
types: [genericParameterTypes[mapper.generic_target]],
81+
generic_target: mapper.generic_target,
82+
generic_combination: mapper.generic_combination
83+
} as GenericMapper
84+
}
85+
return mapper
86+
})
87+
}, func.genericKeys!!)
7588

7689
//store generic mapped real type in map
7790
func.genericKeys?.forEach(genericKey => {
@@ -82,11 +95,11 @@ export const useFunctionValidation = (
8295
if (isRefObject(values[index])) {
8396
const tempDataTypeFromParameter = new DataType(replaceGenericKeysInDataTypeObject(dataTypeFromParameter?.json!!, genericMap), dataTypeService)
8497
return tempDataTypeFromParameter?.validateDataType(dataTypeFromValue)
85-
} else {
86-
const replacedGenericMapper = replaceGenericKeysInType(parameter.type, genericMap) as GenericType
87-
return dataTypeService.getDataType(replacedGenericMapper)?.validateValue(values[index], replacedGenericMapper.generic_mapper)
8898
}
8999

100+
const replacedGenericMapper = replaceGenericKeysInType(parameter.type, genericMap) as GenericType
101+
return dataTypeService.getDataType(replacedGenericMapper)?.validateValue(values[index], replacedGenericMapper.generic_mapper)
102+
90103
}
91104
} else if (dataTypeService.getDataType(parameter.type)) {
92105

@@ -95,13 +108,6 @@ export const useFunctionValidation = (
95108
&& "type" in (typeFromValue as GenericType)
96109
&& dataTypeService.getDataType(parameter.type)) {
97110

98-
const genericTypes = resolveGenericKeyMappings(typeFromParameter, typeFromValue, func.genericKeys!!)
99-
100-
//store generic mapped real type in map
101-
func.genericKeys?.forEach(genericKey => {
102-
genericMap.set(genericKey, genericMap.get(genericKey) || genericTypes[genericKey])
103-
})
104-
105111
if (isRefObject(values[index])) {
106112
const tempDataTypeFromValue = new DataType(replaceGenericKeysInDataTypeObject(dataTypeFromValue?.json!!, genericMap), dataTypeService)
107113
return dataTypeFromParameter?.validateDataType(tempDataTypeFromValue)

0 commit comments

Comments
 (0)