|
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