@cocreate/crdt
Advanced tools
Comparing version 1.14.35 to 1.15.0
@@ -0,1 +1,13 @@ | ||
# [1.15.0](https://github.com/CoCreate-app/CoCreate-crdt/compare/v1.14.35...v1.15.0) (2023-01-04) | ||
### Bug Fixes | ||
* bump cdn to 1.39.4 ([0fb1769](https://github.com/CoCreate-app/CoCreate-crdt/commit/0fb176942d89c52f78b33c6fcdca2330e869cabc)) | ||
### Features | ||
* sync docName if on itit if server has changed ([a338782](https://github.com/CoCreate-app/CoCreate-crdt/commit/a3387820756d2a4ce4aa2bc97bf8011459b91b92)) | ||
## [1.14.35](https://github.com/CoCreate-app/CoCreate-crdt/compare/v1.14.34...v1.14.35) (2023-01-01) | ||
@@ -2,0 +14,0 @@ |
{ | ||
"name": "@cocreate/crdt", | ||
"version": "1.14.35", | ||
"version": "1.15.0", | ||
"description": "CoCreate crdt", | ||
@@ -5,0 +5,0 @@ "author": "CoCreate LLC", |
143
src/index.js
@@ -24,27 +24,15 @@ /*globals config, atob, btoa, localStorage, CustomEvent*/ | ||
return | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
if (!doc) { | ||
let docNameMap = new Map(); | ||
docs.set(docName, docNameMap); | ||
docs.set(docName, new Map()); | ||
doc = docs.get(docName); | ||
} | ||
let type = doc.get(typeName) | ||
if (!type) { | ||
let typeNameMap = new Map(); | ||
doc.set(typeName, typeNameMap); | ||
type = doc.get(typeName) | ||
} | ||
if (!type.has('changeLog')) { | ||
if (!doc.has('changeLog')) { | ||
let changeLog = []; | ||
doc.set('undoLog', new Map()) | ||
doc.set('redoLog', new Map()) | ||
let undoLog = new Map() | ||
type.set('undoLog', undoLog) | ||
let redoLog = new Map() | ||
type.set('redoLog', redoLog) | ||
if (data.read != 'false') { | ||
@@ -62,14 +50,14 @@ if (!data.newDocument) { | ||
}); | ||
if (response.document.length && response.document[0][typeName]) { | ||
changeLog = response.document[0][typeName]; | ||
if (response.document && response.document[0] && response.document[0].changeLog) { | ||
changeLog = response.document[0].changeLog; | ||
} | ||
} | ||
type.set('changeLog', changeLog); | ||
doc.set('changeLog', changeLog); | ||
await generateText(data, true); | ||
} | ||
} | ||
else if (!type.has('text')){ | ||
else if (!doc.has('text')){ | ||
await generateText(data, false); | ||
} | ||
return true; | ||
return doc; | ||
} | ||
@@ -87,5 +75,7 @@ catch (e) { | ||
try { | ||
let name = docs.get(`${data.collection}${data.document_id}`).get(data.name); | ||
let doc = docs.get(getDocName(data)) | ||
console.log('docName1', doc) | ||
let string = ''; | ||
let changeLog = name.get('changeLog'); | ||
let changeLog = doc.get('changeLog'); | ||
for (let change of changeLog) { | ||
@@ -99,3 +89,3 @@ if (change || change !== null ) { | ||
} | ||
name.set('text', string); | ||
doc.set('text', string); | ||
return; | ||
@@ -130,6 +120,9 @@ } | ||
function insertChange(data, flag) { | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let type = 'insert'; | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
let changeLog = doc.get('changeLog'); | ||
if (!changeLog) | ||
return | ||
let type = 'insert'; | ||
if (data.start == undefined) return; | ||
@@ -150,7 +143,2 @@ if (!data.value) | ||
let name = docs.get(docName).get(typeName); | ||
let changeLog = name.get('changeLog'); | ||
if (!changeLog) | ||
return | ||
let lastChange = changeLog[changeLog.length - 1]; | ||
@@ -184,3 +172,3 @@ if (lastChange && change.datetime && lastChange.datetime){ | ||
} | ||
let string = name.get('text') || ''; | ||
let string = doc.get('text') || ''; | ||
if (change.length > 0) | ||
@@ -192,3 +180,3 @@ change.removedValue = string.substr(change.start, change.length); | ||
changeLog = [change]; | ||
name.set('changeLog', changeLog) | ||
doc.set('changeLog', changeLog) | ||
} else { | ||
@@ -198,4 +186,4 @@ changeLog.push(change); | ||
name.set('text', string.customSplice(change.start, change.length, change.value)); | ||
string = {string: name.get('text')}; | ||
doc.set('text', string.customSplice(change.start, change.length, change.value)); | ||
string = {string: doc.get('text')}; | ||
@@ -234,6 +222,6 @@ if (!data.clientId){ | ||
function persistChange(data) { | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let name = docs.get(docName).get(typeName); | ||
let changeLog = name.get('changeLog'); | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
let changeLog = doc.get('changeLog'); | ||
let text = doc.get('tex'); | ||
let Data = { | ||
@@ -244,3 +232,9 @@ collection: 'crdt-transactions', | ||
docName, | ||
[typeName]: changeLog | ||
changeLog, | ||
text, | ||
crud: { | ||
collection: data.collection, | ||
document_id: data.document_id, | ||
name: data.name | ||
} | ||
}, | ||
@@ -260,4 +254,7 @@ upsert: true, | ||
let data = response.data | ||
if (docs.get(`${data.collection}${data.document_id}`)){ | ||
if (docs.get(`${data.collection}${data.document_id}`).get(data.name)) | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
console.log('doc2', doc) | ||
if (doc){ | ||
if (data.clientId !== clientId){ | ||
@@ -269,2 +266,22 @@ insertChange(data); | ||
crud.listen('sync', function(data) { | ||
if (data.collection.includes('crdt-transactions')) { | ||
if (data.document && data.document[0]) { | ||
let Data = data.document[0]; | ||
let docName = Data.docName; | ||
let doc = docs.get(docName); | ||
if (doc && Data.crud) { | ||
Data.start = 0 | ||
Data.length = doc.set('text').length | ||
doc.set('changeLog', Data.changeLog) | ||
doc.set('text', Data.text) | ||
localChange(Data.crud, Data.text) | ||
console.log('crdtSync') | ||
} | ||
} | ||
} | ||
}); | ||
/* | ||
@@ -279,7 +296,5 @@ crdt.getText({ | ||
try { | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let doc = await getDoc(data); | ||
if (doc) { | ||
let value = docs.get(docName).get(typeName).get('text') | ||
let value = doc.get('text') | ||
return value; | ||
@@ -384,9 +399,7 @@ } | ||
function undoText(data){ | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
let changeLog = doc.get('changeLog'); | ||
let undoLog = doc.get('undoLog') | ||
let name = docs.get(docName).get(typeName); | ||
let changeLog = name.get('changeLog'); | ||
let undoLog = name.get('undoLog') | ||
for (let index = changeLog.length - 1; index >= 0; index--) { | ||
@@ -411,9 +424,7 @@ let change = Object.assign({}, changeLog[index]); | ||
function redoText(data){ | ||
let docName = generateDocName(data); | ||
let typeName = data.name; | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
let redoLog = doc.get('redoLog') | ||
let undoLog = Array.from(doc.get('undoLog').values()); | ||
let name = docs.get(docName).get(typeName); | ||
let redoLog = name.get('redoLog') | ||
let undoLog = Array.from(name.get('undoLog').values()); | ||
for (let index = undoLog.length - 1; index >= 0; index--) { | ||
@@ -438,5 +449,7 @@ let change = Object.assign({}, undoLog[index]); | ||
try { | ||
let name = docs.get(`${data.collection}${data.document_id}`).get(data.name); | ||
let docName = getDocName(data); | ||
let doc = docs.get(docName); | ||
let changeLog = doc.get('changeLog'); | ||
let string = ''; | ||
let changeLog = name.get('changeLog'); | ||
let log = changeLog.slice(0, data.version) | ||
@@ -468,8 +481,6 @@ for (let change of log) { | ||
function generateDocName(data) { | ||
let docName = { collection: data.collection, document_id: data.document_id }; | ||
return `${data.collection}${data.document_id}`; | ||
// return btoa(JSON.stringify(docName)); | ||
function getDocName(data) { | ||
return `${data.collection}${data.document_id}${data.name}`; | ||
} | ||
export default { init, getText, updateText, replaceText, undoText, redoText, viewVersion }; |
Sorry, the diff of this file is not supported yet
125744
543