|
1 |
| -import { GetOptions, DocumentChangeType } from './common'; |
| 1 | +import { GetOptions, DocumentChangeType, parseOnSnapshotArgs, OnSnapshotParameters } from './common'; |
2 | 2 |
|
3 | 3 | export { GetOptions, DocumentChangeType };
|
4 | 4 |
|
@@ -506,68 +506,23 @@ export class Query<T extends DocumentData = DocumentData> implements IQuery<T> {
|
506 | 506 | return Query.fromNative(this.native.limitToLast(limitToLast));
|
507 | 507 | }
|
508 | 508 |
|
509 |
| - onSnapshot(observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: QuerySnapshot) => void }); |
510 |
| - onSnapshot(options: SnapshotListenOptions, observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: QuerySnapshot) => void }); |
511 |
| - onSnapshot(onNext: (snapshot: QuerySnapshot) => void, onError?: (error: Error) => void, onCompletion?: () => void); |
512 |
| - onSnapshot(options: SnapshotListenOptions, onNext: (snapshot: QuerySnapshot) => void, onError?: (error: Error) => void, onCompletion?: () => void); |
513 |
| - onSnapshot(options: any, onNext?: any, onError?: any, onCompletion?: any): any { |
514 |
| - let listener; |
515 |
| - let includeMetadataChanges = com.google.firebase.firestore.MetadataChanges.EXCLUDE; |
516 |
| - const argsCount = arguments.length; |
517 |
| - if (typeof arguments[0] === 'object') { |
518 |
| - if (typeof options?.includeMetadataChanges === 'boolean') { |
519 |
| - includeMetadataChanges = com.google.firebase.firestore.MetadataChanges.INCLUDE; |
520 |
| - } |
521 |
| - } |
| 509 | + onSnapshot(observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: QuerySnapshot) => void; }): () => void; |
| 510 | + onSnapshot(options: SnapshotListenOptions, observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: QuerySnapshot) => void; }): () => void; |
| 511 | + onSnapshot(onNext: (snapshot: QuerySnapshot) => void, onError?: (error: Error) => void, onCompletion?: () => void): () => void; |
| 512 | + onSnapshot(options: SnapshotListenOptions, onNext: (snapshot: QuerySnapshot) => void, onError?: (error: Error) => void, onCompletion?: () => void): () => void; |
| 513 | + onSnapshot(...args: OnSnapshotParameters<QuerySnapshot>): () => void { |
| 514 | + const { includeMetadataChanges, ...handlers } = parseOnSnapshotArgs(args); |
522 | 515 |
|
523 |
| - listener = this.native.addSnapshotListener( |
524 |
| - includeMetadataChanges, |
| 516 | + const listener = this.native.addSnapshotListener( |
| 517 | + includeMetadataChanges |
| 518 | + ? com.google.firebase.firestore.MetadataChanges.INCLUDE |
| 519 | + : com.google.firebase.firestore.MetadataChanges.EXCLUDE, |
525 | 520 | new com.google.firebase.firestore.EventListener<com.google.firebase.firestore.QuerySnapshot>({
|
526 |
| - onEvent(ss, error: com.google.firebase.firestore.FirebaseFirestoreException) { |
527 |
| - if (argsCount > 1) { |
528 |
| - if (typeof options === 'object') { |
529 |
| - if (typeof onNext === 'object') { |
530 |
| - if (error) { |
531 |
| - onNext?.error?.(FirebaseError.fromNative(error)); |
532 |
| - } else { |
533 |
| - onNext?.complete?.(); |
534 |
| - onNext?.next?.(QuerySnapshot.fromNative(ss)); |
535 |
| - } |
536 |
| - } else { |
537 |
| - if (error) { |
538 |
| - onError?.(FirebaseError.fromNative(error)); |
539 |
| - } else { |
540 |
| - // onError -> onCompletion |
541 |
| - onCompletion?.(); |
542 |
| - // options -> onNext |
543 |
| - onNext?.(QuerySnapshot.fromNative(ss)); |
544 |
| - } |
545 |
| - } |
546 |
| - } else { |
547 |
| - if (error) { |
548 |
| - //onError -> onNext |
549 |
| - onNext?.(FirebaseError.fromNative(error)); |
550 |
| - } else { |
551 |
| - // onCompletion -> |
552 |
| - onError?.(); |
553 |
| - // options -> onNext |
554 |
| - options?.(QuerySnapshot.fromNative(ss)); |
555 |
| - } |
556 |
| - } |
| 521 | + onEvent(querySnapshot, error: com.google.firebase.firestore.FirebaseFirestoreException) { |
| 522 | + if (error) { |
| 523 | + handlers.error?.(FirebaseError.fromNative(error)); |
557 | 524 | } else {
|
558 |
| - if (typeof arguments[1] === 'function') { |
559 |
| - // onNext -> options |
560 |
| - if (!error) { |
561 |
| - options?.(QuerySnapshot.fromNative(ss)); |
562 |
| - } |
563 |
| - } else { |
564 |
| - if (error) { |
565 |
| - options?.error?.(FirebaseError.fromNative(error)); |
566 |
| - } else { |
567 |
| - options?.complete?.(); |
568 |
| - options?.next?.(QuerySnapshot.fromNative(ss)); |
569 |
| - } |
570 |
| - } |
| 525 | + handlers.next?.(QuerySnapshot.fromNative(querySnapshot)); |
571 | 526 | }
|
572 | 527 | },
|
573 | 528 | })
|
@@ -948,68 +903,23 @@ export class DocumentReference<T extends DocumentData = DocumentData> implements
|
948 | 903 | });
|
949 | 904 | }
|
950 | 905 |
|
951 |
| - onSnapshot(observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: DocumentSnapshot<T>) => void }); |
952 |
| - onSnapshot(options: SnapshotListenOptions, observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: DocumentSnapshot<T>) => void }); |
953 |
| - onSnapshot(onNext: (snapshot: DocumentSnapshot<T>) => void, onError?: (error: Error) => void, onCompletion?: () => void); |
954 |
| - onSnapshot(options: SnapshotListenOptions, onNext: (snapshot: DocumentSnapshot<T>) => void, onError?: (error: Error) => void, onCompletion?: () => void); |
955 |
| - onSnapshot(options: any, onNext?: any, onError?: any, onCompletion?: any) { |
956 |
| - let listener; |
957 |
| - let includeMetadataChanges = com.google.firebase.firestore.MetadataChanges.EXCLUDE; |
958 |
| - const argsCount = arguments.length; |
959 |
| - if (typeof arguments[0] === 'object') { |
960 |
| - if (typeof options?.includeMetadataChanges === 'boolean') { |
961 |
| - includeMetadataChanges = com.google.firebase.firestore.MetadataChanges.INCLUDE; |
962 |
| - } |
963 |
| - } |
| 906 | + onSnapshot(observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: DocumentSnapshot<T>) => void; }): () => void; |
| 907 | + onSnapshot(options: SnapshotListenOptions, observer: { complete?: () => void; error?: (error: Error) => void; next?: (snapshot: DocumentSnapshot<T>) => void; }): () => void; |
| 908 | + onSnapshot(onNext: (snapshot: DocumentSnapshot<T>) => void, onError?: (error: Error) => void, onCompletion?: () => void): () => void; |
| 909 | + onSnapshot(options: SnapshotListenOptions, onNext: (snapshot: DocumentSnapshot<T>) => void, onError?: (error: Error) => void, onCompletion?: () => void): () => void; |
| 910 | + onSnapshot(...args: OnSnapshotParameters<DocumentSnapshot<T>>): () => void { |
| 911 | + const { includeMetadataChanges, ...handlers } = parseOnSnapshotArgs(args); |
964 | 912 |
|
965 |
| - listener = this.native.addSnapshotListener( |
966 |
| - includeMetadataChanges, |
| 913 | + const listener = this.native.addSnapshotListener( |
| 914 | + includeMetadataChanges |
| 915 | + ? com.google.firebase.firestore.MetadataChanges.INCLUDE |
| 916 | + : com.google.firebase.firestore.MetadataChanges.EXCLUDE, |
967 | 917 | new com.google.firebase.firestore.EventListener<com.google.firebase.firestore.DocumentSnapshot>({
|
968 |
| - onEvent(ss, error: com.google.firebase.firestore.FirebaseFirestoreException) { |
969 |
| - if (argsCount > 1) { |
970 |
| - if (typeof options === 'object') { |
971 |
| - if (typeof onNext === 'object') { |
972 |
| - if (error) { |
973 |
| - onNext?.error?.(FirebaseError.fromNative(error)); |
974 |
| - } else { |
975 |
| - onNext?.complete?.(); |
976 |
| - onNext?.next?.(DocumentSnapshot.fromNative(ss)); |
977 |
| - } |
978 |
| - } else { |
979 |
| - if (error) { |
980 |
| - onError?.(FirebaseError.fromNative(error)); |
981 |
| - } else { |
982 |
| - // onError -> onCompletion |
983 |
| - onCompletion?.(); |
984 |
| - // options -> onNext |
985 |
| - onNext?.(DocumentSnapshot.fromNative(ss)); |
986 |
| - } |
987 |
| - } |
988 |
| - } else { |
989 |
| - if (error) { |
990 |
| - //onError -> onNext |
991 |
| - onNext?.(FirebaseError.fromNative(error)); |
992 |
| - } else { |
993 |
| - // onCompletion -> |
994 |
| - onError?.(); |
995 |
| - // options -> onNext |
996 |
| - options?.(DocumentSnapshot.fromNative(ss)); |
997 |
| - } |
998 |
| - } |
| 918 | + onEvent(docSnapshot, error: com.google.firebase.firestore.FirebaseFirestoreException) { |
| 919 | + if (error) { |
| 920 | + handlers.error?.(FirebaseError.fromNative(error)); |
999 | 921 | } else {
|
1000 |
| - if (typeof arguments[1] === 'function') { |
1001 |
| - // onNext -> options |
1002 |
| - if (!error) { |
1003 |
| - options?.(DocumentSnapshot.fromNative(ss)); |
1004 |
| - } |
1005 |
| - } else { |
1006 |
| - if (error) { |
1007 |
| - options?.error?.(FirebaseError.fromNative(error)); |
1008 |
| - } else { |
1009 |
| - options?.complete?.(); |
1010 |
| - options?.next?.(DocumentSnapshot.fromNative(ss)); |
1011 |
| - } |
1012 |
| - } |
| 922 | + handlers.next?.(DocumentSnapshot.fromNative(docSnapshot)); |
1013 | 923 | }
|
1014 | 924 | },
|
1015 | 925 | })
|
|
0 commit comments