Skip to content

Commit 78c174d

Browse files
authored
feat(firestore): add databaseId configuration option (#966)
* feat(firestore): add `databaseId` configuration option * refactor(firestore): store Firestore instance in local variable * fix(firestore): pass Firestore instance to query constraints on iOS * fix(firestore): add `FirebaseFirestoreConfig.swift` to Xcode project
1 parent 5467d13 commit 78c174d

File tree

15 files changed

+164
-38
lines changed

15 files changed

+164
-38
lines changed

.changeset/bright-foxes-dance.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@capacitor-firebase/firestore': minor
3+
---
4+
5+
feat: add `databaseId` configuration option

packages/firestore/README.md

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,48 @@ This can be useful if you encounter dependency conflicts with other plugins in y
6060

6161
## Configuration
6262

63-
No configuration required for this plugin.
63+
<docgen-config>
64+
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->
65+
66+
These configuration values are available:
67+
68+
| Prop | Type | Description | Since |
69+
| ---------------- | ------------------- | ------------------------------------------------------------------------------------- | ----- |
70+
| **`databaseId`** | <code>string</code> | The database ID of the Firestore database to use. Only available for Android and iOS. | 8.3.0 |
71+
72+
### Examples
73+
74+
In `capacitor.config.json`:
75+
76+
```json
77+
{
78+
"plugins": {
79+
"FirebaseFirestore": {
80+
"databaseId": undefined
81+
}
82+
}
83+
}
84+
```
85+
86+
In `capacitor.config.ts`:
87+
88+
```ts
89+
/// <reference types="@capacitor-firebase/firestore" />
90+
91+
import { CapacitorConfig } from '@capacitor/cli';
92+
93+
const config: CapacitorConfig = {
94+
plugins: {
95+
FirebaseFirestore: {
96+
databaseId: undefined,
97+
},
98+
},
99+
};
100+
101+
export default config;
102+
```
103+
104+
</docgen-config>
64105

65106
## Demo
66107

packages/firestore/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/firestore/FirebaseFirestore.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@
4444
public class FirebaseFirestore {
4545

4646
private FirebaseFirestorePlugin plugin;
47+
private FirebaseFirestoreConfig config;
4748
private Map<String, ListenerRegistration> listenerRegistrationMap = new HashMap<>();
4849

49-
public FirebaseFirestore(FirebaseFirestorePlugin plugin) {
50+
public FirebaseFirestore(FirebaseFirestorePlugin plugin, FirebaseFirestoreConfig config) {
5051
this.plugin = plugin;
52+
this.config = config;
5153
}
5254

5355
public void addDocument(@NonNull AddDocumentOptions options, @NonNull NonEmptyResultCallback callback) {
@@ -370,6 +372,10 @@ public void removeAllListeners() {
370372
}
371373

372374
private com.google.firebase.firestore.FirebaseFirestore getFirebaseFirestoreInstance() {
375+
String databaseId = config.getDatabaseId();
376+
if (databaseId != null) {
377+
return com.google.firebase.firestore.FirebaseFirestore.getInstance(databaseId);
378+
}
373379
return com.google.firebase.firestore.FirebaseFirestore.getInstance();
374380
}
375381
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.capawesome.capacitorjs.plugins.firebase.firestore;
2+
3+
public class FirebaseFirestoreConfig {
4+
5+
private String databaseId = null;
6+
7+
public String getDatabaseId() {
8+
return databaseId;
9+
}
10+
11+
public void setDatabaseId(String databaseId) {
12+
this.databaseId = databaseId;
13+
}
14+
}

packages/firestore/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/firestore/FirebaseFirestorePlugin.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ public class FirebaseFirestorePlugin extends Plugin {
4242

4343
private Map<String, PluginCall> pluginCallMap = new HashMap<>();
4444

45+
private FirebaseFirestoreConfig config;
4546
private FirebaseFirestore implementation;
4647

4748
public void load() {
48-
implementation = new FirebaseFirestore(this);
49+
config = getFirebaseFirestoreConfig();
50+
implementation = new FirebaseFirestore(this, config);
4951
}
5052

5153
@PluginMethod
@@ -617,4 +619,13 @@ public void removeAllListeners(PluginCall call) {
617619
call.reject(exception.getMessage(), FirebaseFirestoreHelper.createErrorCode(exception));
618620
}
619621
}
622+
623+
private FirebaseFirestoreConfig getFirebaseFirestoreConfig() {
624+
FirebaseFirestoreConfig config = new FirebaseFirestoreConfig();
625+
626+
String databaseId = getConfig().getString("databaseId");
627+
config.setDatabaseId(databaseId);
628+
629+
return config;
630+
}
620631
}

packages/firestore/ios/Plugin.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
7C0070362ABC1FD7000C0F28 /* UpdateDocumentOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0070352ABC1FD7000C0F28 /* UpdateDocumentOptions.swift */; };
3737
7C00703A2ABC21D0000C0F28 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0070392ABC21D0000C0F28 /* Result.swift */; };
3838
7C0070402ABC2DF8000C0F28 /* FirebaseFirestoreHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C00703F2ABC2DF8000C0F28 /* FirebaseFirestoreHelper.swift */; };
39+
7C0070512ABC3000000C0F28 /* FirebaseFirestoreConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0070502ABC3000000C0F28 /* FirebaseFirestoreConfig.swift */; };
3940
7C0070422ABC97E5000C0F28 /* QueryNonFilterConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0070412ABC97E5000C0F28 /* QueryNonFilterConstraint.swift */; };
4041
7C0070442ABC9AE9000C0F28 /* QueryFilterConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0070432ABC9AE9000C0F28 /* QueryFilterConstraint.swift */; };
4142
7C2AE7C92D2DBF7000F40418 /* GetCountFromServerOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2AE7C82D2DBF6D00F40418 /* GetCountFromServerOptions.swift */; };
@@ -88,6 +89,7 @@
8889
7C0070352ABC1FD7000C0F28 /* UpdateDocumentOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateDocumentOptions.swift; sourceTree = "<group>"; };
8990
7C0070392ABC21D0000C0F28 /* Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = "<group>"; };
9091
7C00703F2ABC2DF8000C0F28 /* FirebaseFirestoreHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseFirestoreHelper.swift; sourceTree = "<group>"; };
92+
7C0070502ABC3000000C0F28 /* FirebaseFirestoreConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseFirestoreConfig.swift; sourceTree = "<group>"; };
9193
7C0070412ABC97E5000C0F28 /* QueryNonFilterConstraint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryNonFilterConstraint.swift; sourceTree = "<group>"; };
9294
7C0070432ABC9AE9000C0F28 /* QueryFilterConstraint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryFilterConstraint.swift; sourceTree = "<group>"; };
9395
7C2AE7C82D2DBF6D00F40418 /* GetCountFromServerOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetCountFromServerOptions.swift; sourceTree = "<group>"; };
@@ -152,6 +154,7 @@
152154
2F98D68124C9AAE400613A4C /* FirebaseFirestore.swift */,
153155
50ADFF8C201F53D600D50D53 /* Info.plist */,
154156
7C00703F2ABC2DF8000C0F28 /* FirebaseFirestoreHelper.swift */,
157+
7C0070502ABC3000000C0F28 /* FirebaseFirestoreConfig.swift */,
155158
);
156159
path = Plugin;
157160
sourceTree = "<group>";
@@ -477,6 +480,7 @@
477480
7C0070162ABC1F18000C0F28 /* DeleteDocumentOptions.swift in Sources */,
478481
7C0070122ABC1F03000C0F28 /* AddDocumentResult.swift in Sources */,
479482
7C0070402ABC2DF8000C0F28 /* FirebaseFirestoreHelper.swift in Sources */,
483+
7C0070512ABC3000000C0F28 /* FirebaseFirestoreConfig.swift in Sources */,
480484
2F98D68224C9AAE500613A4C /* FirebaseFirestore.swift in Sources */,
481485
7C90A58E2C21519B00A71389 /* AddCollectionGroupSnapshotListenerOptions.swift in Sources */,
482486
7C0070222ABC1F4A000C0F28 /* GetDocumentResult.swift in Sources */,

packages/firestore/ios/Plugin/Classes/Constraints/QueryEndAtConstraint.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import Capacitor
1111
self.reference = queryConstraint["reference"] as? String ?? ""
1212
}
1313

14-
public func toQuery(query: Query) async throws -> Query {
15-
let documentSnapshot = try await Firestore.firestore().document(reference).getDocument()
14+
public func toQuery(query: Query, firestore: Firestore) async throws -> Query {
15+
let documentSnapshot = try await firestore.document(reference).getDocument()
1616
switch self.type {
1717
case "endAt":
1818
return query.end(atDocument: documentSnapshot)

packages/firestore/ios/Plugin/Classes/Constraints/QueryLimitConstraint.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Capacitor
1111
self.limit = queryConstraint["limit"] as? Int ?? 0
1212
}
1313

14-
public func toQuery(query: Query) async throws -> Query {
14+
public func toQuery(query: Query, firestore: Firestore) async throws -> Query {
1515
switch self.type {
1616
case "limit":
1717
return query.limit(to: self.limit)

packages/firestore/ios/Plugin/Classes/Constraints/QueryOrderByConstraint.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Capacitor
1111
self.directionStr = queryConstraint["directionStr"] as? String ?? ""
1212
}
1313

14-
public func toQuery(query: Query) async throws -> Query {
14+
public func toQuery(query: Query, firestore: Firestore) async throws -> Query {
1515
return query.order(by: self.fieldPath, descending: self.directionStr == "desc" ? true : false)
1616
}
1717
}

packages/firestore/ios/Plugin/Classes/Constraints/QueryStartAtConstraint.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import Capacitor
1111
self.reference = queryConstraint["reference"] as? String ?? ""
1212
}
1313

14-
public func toQuery(query: Query) async throws -> Query {
15-
let documentSnapshot = try await Firestore.firestore().document(reference).getDocument()
14+
public func toQuery(query: Query, firestore: Firestore) async throws -> Query {
15+
let documentSnapshot = try await firestore.document(reference).getDocument()
1616
switch self.type {
1717
case "startAt":
1818
return query.start(atDocument: documentSnapshot)

0 commit comments

Comments
 (0)