getEntityMapKeyValue method
KeyConditionValue?
getEntityMapKeyValue(
- Map<
String, dynamic> ? entityMap, [ - EntityHandler<
O> ? entityHandler
Implementation
KeyConditionValue? getEntityMapKeyValue(Map<String, dynamic>? entityMap,
[EntityHandler<O>? entityHandler]) {
if (entityMap == null || entityMap.isEmpty) return null;
dynamic value = entityMap;
TypeInfo? valueType =
TypeInfo.from(entityHandler?.type ?? entityMap.runtimeType);
EntityHandler? valueEntityHandler = entityHandler;
for (var key in keys) {
Object? keyValue;
TypeInfo? keyType;
EntityHandler? keyEntityHandler;
if (key is ConditionKeyField) {
var keyName = key.name;
if (value is Map) {
keyValue = value[keyName];
} else if (value is Iterable) {
keyValue = value.map((e) {
if (e is Map) {
return e[keyName];
} else {
var handler = entityHandler?.getEntityHandler(obj: e);
if (handler != null) {
var v = handler.getField(e, keyName);
return v;
} else {
return e;
}
}
}).toList();
} else {
throw StateError(
"Can't access key[$keyName] for type: ${(value as Object?).runtimeTypeNameUnsafe}");
}
keyType =
_resolveValueType(keyName, valueType, valueEntityHandler, keyValue);
keyEntityHandler =
_resolveValueEntityHandler(keyType, valueEntityHandler);
} else if (key is ConditionKeyIndex) {
var index = key.index;
if (value is Iterable) {
keyValue = value.elementAt(index);
keyType =
_resolveValueType(null, valueType, valueEntityHandler, keyValue);
keyEntityHandler =
_resolveValueEntityHandler(keyType, valueEntityHandler);
} else {
throw StateError(
"Can't access index[$index] for type: ${(value as Object?).runtimeTypeNameUnsafe}");
}
}
if (keyValue == null) {
return null;
} else {
value = keyValue;
valueType = keyType;
valueEntityHandler = keyEntityHandler;
}
}
if (valueEntityHandler != null) {
var idFieldName = valueEntityHandler.idFieldName();
if (value is Map) {
value = value[idFieldName];
} else if (value is Iterable) {
value = value.map((v) => v is Map ? v[idFieldName] : v).toList();
}
}
return KeyConditionValue(value, valueType, valueEntityHandler);
}