-
Notifications
You must be signed in to change notification settings - Fork 4k
/
document_reference_web.dart
88 lines (76 loc) · 2.6 KB
/
document_reference_web.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// ignore_for_file: require_trailing_commas
// Copyright 2017, the Chromium project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:cloud_firestore_platform_interface/cloud_firestore_platform_interface.dart';
import 'internals.dart';
import 'interop/firestore.dart' as firestore_interop;
import 'utils/encode_utility.dart';
import 'utils/web_utils.dart';
/// Web implementation for Firestore [DocumentReferencePlatform].
class DocumentReferenceWeb extends DocumentReferencePlatform {
/// instance of Firestore from the web plugin
final firestore_interop.Firestore firestoreWeb;
/// instance of DocumentReference from the web plugin
final firestore_interop.DocumentReference _delegate;
/// Creates an instance of [DocumentReferenceWeb] which represents path
/// at [pathComponents] and uses implementation of [firestoreWeb]
DocumentReferenceWeb(
FirebaseFirestorePlatform firestore,
this.firestoreWeb,
String path,
) : _delegate = firestoreWeb.doc(path),
super(firestore, path);
@override
Future<void> set(Map<String, dynamic> data, [SetOptions? options]) {
return convertWebExceptions(
() => _delegate.set(
EncodeUtility.encodeMapData(data)!,
convertSetOptions(options),
),
);
}
@override
Future<void> update(Map<Object, dynamic> data) {
return convertWebExceptions(
() => _delegate.update(EncodeUtility.encodeMapDataFieldPath(data)!),
);
}
@override
Future<DocumentSnapshotPlatform> get(
[GetOptions options = const GetOptions()]) async {
firestore_interop.DocumentSnapshot documentSnapshot =
await convertWebExceptions(
() => _delegate.get(convertGetOptions(options)),
);
return convertWebDocumentSnapshot(
firestore,
documentSnapshot,
options.serverTimestampBehavior,
);
}
@override
Future<void> delete() {
return convertWebExceptions(_delegate.delete);
}
@override
Stream<DocumentSnapshotPlatform> snapshots({
bool includeMetadataChanges = false,
ListenSource source = ListenSource.defaultSource,
}) {
Stream<firestore_interop.DocumentSnapshot> querySnapshots =
_delegate.onSnapshot(
includeMetadataChanges: includeMetadataChanges,
source: source,
);
return convertWebExceptions(
() => querySnapshots.map((webSnapshot) {
return convertWebDocumentSnapshot(
firestore,
webSnapshot,
ServerTimestampBehavior.none,
);
}),
);
}
}