mirror of
https://github.com/musix-org/musix-oss
synced 2024-09-20 20:21:55 +00:00
166 lines
5.0 KiB
JavaScript
166 lines
5.0 KiB
JavaScript
|
"use strict";
|
||
|
/*!
|
||
|
* Copyright 2018 Google Inc. All Rights Reserved.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
/**
|
||
|
* A DocumentChange represents a change to the documents matching a query.
|
||
|
* It contains the document affected and the type of change that occurred.
|
||
|
*
|
||
|
* @class
|
||
|
*/
|
||
|
class DocumentChange {
|
||
|
/**
|
||
|
* @hideconstructor
|
||
|
*
|
||
|
* @param {string} type 'added' | 'removed' | 'modified'.
|
||
|
* @param {QueryDocumentSnapshot} document The document.
|
||
|
* @param {number} oldIndex The index in the documents array prior to this
|
||
|
* change.
|
||
|
* @param {number} newIndex The index in the documents array after this
|
||
|
* change.
|
||
|
*/
|
||
|
constructor(type, document, oldIndex, newIndex) {
|
||
|
this._type = type;
|
||
|
this._document = document;
|
||
|
this._oldIndex = oldIndex;
|
||
|
this._newIndex = newIndex;
|
||
|
}
|
||
|
/**
|
||
|
* The type of change ('added', 'modified', or 'removed').
|
||
|
*
|
||
|
* @type {string}
|
||
|
* @name DocumentChange#type
|
||
|
* @readonly
|
||
|
*
|
||
|
* @example
|
||
|
* let query = firestore.collection('col').where('foo', '==', 'bar');
|
||
|
* let docsArray = [];
|
||
|
*
|
||
|
* let unsubscribe = query.onSnapshot(querySnapshot => {
|
||
|
* for (let change of querySnapshot.docChanges) {
|
||
|
* console.log(`Type of change is ${change.type}`);
|
||
|
* }
|
||
|
* });
|
||
|
*
|
||
|
* // Remove this listener.
|
||
|
* unsubscribe();
|
||
|
*/
|
||
|
get type() {
|
||
|
return this._type;
|
||
|
}
|
||
|
/**
|
||
|
* The document affected by this change.
|
||
|
*
|
||
|
* @type {QueryDocumentSnapshot}
|
||
|
* @name DocumentChange#doc
|
||
|
* @readonly
|
||
|
*
|
||
|
* @example
|
||
|
* let query = firestore.collection('col').where('foo', '==', 'bar');
|
||
|
*
|
||
|
* let unsubscribe = query.onSnapshot(querySnapshot => {
|
||
|
* for (let change of querySnapshot.docChanges) {
|
||
|
* console.log(change.doc.data());
|
||
|
* }
|
||
|
* });
|
||
|
*
|
||
|
* // Remove this listener.
|
||
|
* unsubscribe();
|
||
|
*/
|
||
|
get doc() {
|
||
|
return this._document;
|
||
|
}
|
||
|
/**
|
||
|
* The index of the changed document in the result set immediately prior to
|
||
|
* this DocumentChange (i.e. supposing that all prior DocumentChange objects
|
||
|
* have been applied). Is -1 for 'added' events.
|
||
|
*
|
||
|
* @type {number}
|
||
|
* @name DocumentChange#oldIndex
|
||
|
* @readonly
|
||
|
*
|
||
|
* @example
|
||
|
* let query = firestore.collection('col').where('foo', '==', 'bar');
|
||
|
* let docsArray = [];
|
||
|
*
|
||
|
* let unsubscribe = query.onSnapshot(querySnapshot => {
|
||
|
* for (let change of querySnapshot.docChanges) {
|
||
|
* if (change.oldIndex !== -1) {
|
||
|
* docsArray.splice(change.oldIndex, 1);
|
||
|
* }
|
||
|
* if (change.newIndex !== -1) {
|
||
|
* docsArray.splice(change.newIndex, 0, change.doc);
|
||
|
* }
|
||
|
* }
|
||
|
* });
|
||
|
*
|
||
|
* // Remove this listener.
|
||
|
* unsubscribe();
|
||
|
*/
|
||
|
get oldIndex() {
|
||
|
return this._oldIndex;
|
||
|
}
|
||
|
/**
|
||
|
* The index of the changed document in the result set immediately after
|
||
|
* this DocumentChange (i.e. supposing that all prior DocumentChange
|
||
|
* objects and the current DocumentChange object have been applied).
|
||
|
* Is -1 for 'removed' events.
|
||
|
*
|
||
|
* @type {number}
|
||
|
* @name DocumentChange#newIndex
|
||
|
* @readonly
|
||
|
*
|
||
|
* @example
|
||
|
* let query = firestore.collection('col').where('foo', '==', 'bar');
|
||
|
* let docsArray = [];
|
||
|
*
|
||
|
* let unsubscribe = query.onSnapshot(querySnapshot => {
|
||
|
* for (let change of querySnapshot.docChanges) {
|
||
|
* if (change.oldIndex !== -1) {
|
||
|
* docsArray.splice(change.oldIndex, 1);
|
||
|
* }
|
||
|
* if (change.newIndex !== -1) {
|
||
|
* docsArray.splice(change.newIndex, 0, change.doc);
|
||
|
* }
|
||
|
* }
|
||
|
* });
|
||
|
*
|
||
|
* // Remove this listener.
|
||
|
* unsubscribe();
|
||
|
*/
|
||
|
get newIndex() {
|
||
|
return this._newIndex;
|
||
|
}
|
||
|
/**
|
||
|
* Returns true if the data in this `DocumentChange` is equal to the provided
|
||
|
* value.
|
||
|
*
|
||
|
* @param {*} other The value to compare against.
|
||
|
* @return true if this `DocumentChange` is equal to the provided value.
|
||
|
*/
|
||
|
isEqual(other) {
|
||
|
if (this === other) {
|
||
|
return true;
|
||
|
}
|
||
|
return (other instanceof DocumentChange &&
|
||
|
this._type === other._type &&
|
||
|
this._oldIndex === other._oldIndex &&
|
||
|
this._newIndex === other._newIndex &&
|
||
|
this._document.isEqual(other._document));
|
||
|
}
|
||
|
}
|
||
|
exports.DocumentChange = DocumentChange;
|
||
|
//# sourceMappingURL=document-change.js.map
|