Skip to content

Commit a476c46

Browse files
authored
Update isEqual for arrayUnion, arrayRemove, and increment (#7861)
1 parent 15addde commit a476c46

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

.changeset/yellow-houses-happen.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@firebase/firestore': patch
3+
'firebase': patch
4+
---
5+
6+
Update the `isEqual` function for arrayUnion, arrayRemove and increment.

packages/firestore/src/lite-api/user_data_reader.ts

+14-8
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
FieldPath as PublicFieldPath,
2121
SetOptions
2222
} from '@firebase/firestore-types';
23-
import { Compat, getModularInstance } from '@firebase/util';
23+
import { Compat, deepEqual, getModularInstance } from '@firebase/util';
2424

2525
import { ParseContext } from '../api/parse_context';
2626
import { DatabaseId } from '../core/database_info';
@@ -525,13 +525,15 @@ export class ArrayUnionFieldValueImpl extends FieldValue {
525525
}
526526

527527
isEqual(other: FieldValue): boolean {
528-
// TODO(mrschmidt): Implement isEquals
529-
return this === other;
528+
return (
529+
other instanceof ArrayUnionFieldValueImpl &&
530+
deepEqual(this._elements, other._elements)
531+
);
530532
}
531533
}
532534

533535
export class ArrayRemoveFieldValueImpl extends FieldValue {
534-
constructor(methodName: string, readonly _elements: unknown[]) {
536+
constructor(methodName: string, private readonly _elements: unknown[]) {
535537
super(methodName);
536538
}
537539

@@ -549,8 +551,10 @@ export class ArrayRemoveFieldValueImpl extends FieldValue {
549551
}
550552

551553
isEqual(other: FieldValue): boolean {
552-
// TODO(mrschmidt): Implement isEquals
553-
return this === other;
554+
return (
555+
other instanceof ArrayRemoveFieldValueImpl &&
556+
deepEqual(this._elements, other._elements)
557+
);
554558
}
555559
}
556560

@@ -568,8 +572,10 @@ export class NumericIncrementFieldValueImpl extends FieldValue {
568572
}
569573

570574
isEqual(other: FieldValue): boolean {
571-
// TODO(mrschmidt): Implement isEquals
572-
return this === other;
575+
return (
576+
other instanceof NumericIncrementFieldValueImpl &&
577+
this._operand === other._operand
578+
);
573579
}
574580
}
575581

packages/firestore/test/lite/integration.test.ts

+10
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,16 @@ describe('FieldValue', () => {
883883
expect(deleteField().isEqual(deleteField())).to.be.true;
884884
expect(serverTimestamp().isEqual(serverTimestamp())).to.be.true;
885885
expect(deleteField().isEqual(serverTimestamp())).to.be.false;
886+
expect(arrayUnion().isEqual(arrayUnion())).to.be.true;
887+
expect(arrayUnion('a').isEqual(arrayUnion('a'))).to.be.true;
888+
expect(arrayUnion('a').isEqual(arrayUnion('b'))).to.be.false;
889+
expect(arrayUnion('a', 'b').isEqual(arrayUnion('b', 'a'))).to.be.false;
890+
expect(arrayRemove().isEqual(arrayRemove())).to.be.true;
891+
expect(arrayRemove('a').isEqual(arrayRemove('a'))).to.be.true;
892+
expect(arrayRemove('a').isEqual(arrayRemove('b'))).to.be.false;
893+
expect(arrayRemove('a', 'b').isEqual(arrayRemove('b', 'a'))).to.be.false;
894+
expect(increment(1).isEqual(increment(1))).to.be.true;
895+
expect(increment(1).isEqual(increment(2))).to.be.false;
886896
});
887897

888898
it('support instanceof checks', () => {

0 commit comments

Comments
 (0)