diff --git a/modules/ensemble/lib/framework/apiproviders/firestore/firestore_api_provider.dart b/modules/ensemble/lib/framework/apiproviders/firestore/firestore_api_provider.dart index 99ccab705..2c6dbf988 100644 --- a/modules/ensemble/lib/framework/apiproviders/firestore/firestore_api_provider.dart +++ b/modules/ensemble/lib/framework/apiproviders/firestore/firestore_api_provider.dart @@ -274,7 +274,6 @@ class FirestoreAPIProvider extends APIProvider with LiveAPIProvider { 'message': 'Subscribed to API', 'documents': [] }; - ; return FirestoreResponse( apiState: APIState.success, body: body, diff --git a/modules/ensemble/lib/framework/apiproviders/firestore/firestore_app.dart b/modules/ensemble/lib/framework/apiproviders/firestore/firestore_app.dart index 00217a054..5d086879d 100644 --- a/modules/ensemble/lib/framework/apiproviders/firestore/firestore_app.dart +++ b/modules/ensemble/lib/framework/apiproviders/firestore/firestore_app.dart @@ -149,9 +149,27 @@ class FirestoreApp { Future performSetOperation(Map evaluatedApi) async { String path = evaluatedApi['path']; - Map data = EnsembleFieldValue.prepareToSendToFirestore(evaluatedApi['data']); + Map data = + EnsembleFieldValue.prepareToSendToFirestore(evaluatedApi['data']); DocumentReference docRef = firestore.doc(path); - return await docRef.set(data); + + SetOptions? setOptions; + Map? mergeOptions = evaluatedApi['mergeOptions']; + + if (mergeOptions != null) { + bool hasMerge = mergeOptions['merge'] == true; + bool hasMergeFields = mergeOptions['mergeFields'] is List; + + // mergeFields takes priority over merge if both are provided + if (hasMergeFields) { + List fields = List.from(mergeOptions['mergeFields']); + setOptions = SetOptions(mergeFields: fields); + } else if (hasMerge) { + setOptions = SetOptions(merge: true); + } + } + + return await docRef.set(data, setOptions); } Future performUpdateOperation(Map evaluatedApi) async {