Files
yjs/src/Transaction.js

36 lines
1.1 KiB
JavaScript
Raw Normal View History

/**
* Changes that are created within a transaction are bundled and sent as one
* message to the remote peers. This implies that the changes are applied
* in one flush and at most one {@link YEvent} per type is created.
*
* It is best to bundle as many changes in a single Transaction as possible.
* This way only few changes need to be computed
*/
export default class Transaction {
constructor (y) {
this.y = y
// types added during transaction
this.newTypes = new Set()
// changed types (does not include new types)
2017-10-30 11:33:00 +01:00
// maps from type to parentSubs (item._parentSub = null for array elements)
this.changedTypes = new Map()
2017-10-30 11:33:00 +01:00
this.deletedStructs = new Set()
this.beforeState = new Map()
2017-11-07 22:44:43 -08:00
this.changedParentTypes = new Map()
}
}
export function transactionTypeChanged (y, type, sub) {
if (type !== y && !type._deleted && !y._transaction.newTypes.has(type)) {
const changedTypes = y._transaction.changedTypes
let subs = changedTypes.get(type)
if (subs === undefined) {
// create if it doesn't exist yet
subs = new Set()
changedTypes.set(type, subs)
}
subs.add(sub)
}
}