Skip to content

Commit 59e6a72

Browse files
authored
Merge pull request #2165 from EnsembleUI/firestore_merge_operation
Add mergeOptions support for Firestore set operation
2 parents d1676d8 + f508570 commit 59e6a72

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

modules/ensemble/lib/framework/apiproviders/firestore/firestore_api_provider.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,6 @@ class FirestoreAPIProvider extends APIProvider with LiveAPIProvider {
274274
'message': 'Subscribed to API',
275275
'documents': []
276276
};
277-
;
278277
return FirestoreResponse(
279278
apiState: APIState.success,
280279
body: body,

modules/ensemble/lib/framework/apiproviders/firestore/firestore_app.dart

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,27 @@ class FirestoreApp {
149149

150150
Future<void> performSetOperation(Map evaluatedApi) async {
151151
String path = evaluatedApi['path'];
152-
Map<String, dynamic> data = EnsembleFieldValue.prepareToSendToFirestore(evaluatedApi['data']);
152+
Map<String, dynamic> data =
153+
EnsembleFieldValue.prepareToSendToFirestore(evaluatedApi['data']);
153154
DocumentReference docRef = firestore.doc(path);
154-
return await docRef.set(data);
155+
156+
SetOptions? setOptions;
157+
Map? mergeOptions = evaluatedApi['mergeOptions'];
158+
159+
if (mergeOptions != null) {
160+
bool hasMerge = mergeOptions['merge'] == true;
161+
bool hasMergeFields = mergeOptions['mergeFields'] is List;
162+
163+
// mergeFields takes priority over merge if both are provided
164+
if (hasMergeFields) {
165+
List<String> fields = List<String>.from(mergeOptions['mergeFields']);
166+
setOptions = SetOptions(mergeFields: fields);
167+
} else if (hasMerge) {
168+
setOptions = SetOptions(merge: true);
169+
}
170+
}
171+
172+
return await docRef.set(data, setOptions);
155173
}
156174

157175
Future<void> performUpdateOperation(Map evaluatedApi) async {

0 commit comments

Comments
 (0)