@live-change/wysiwyg-frontend 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,12 +59,11 @@
59
59
  content: props.initialContent,
60
60
  version: 0
61
61
  }
62
- console.log(['prosemirror', 'createDocument'], documentData)
63
- await api.command(['prosemirror', 'createDocument'], documentData)
62
+ documentData = await api.command(['prosemirror', 'createDocumentIfNotExists'], documentData)
64
63
  }
65
64
 
66
65
  const extensions = getExtensions(props.config)
67
- console.log("CONFIG", props.config, 'EXTENSIONS', extensions)
66
+ //console.log("CONFIG", props.config, 'EXTENSIONS', extensions)
68
67
  const editor = useEditor({
69
68
  content: documentData.content,
70
69
  extensions: [
@@ -80,22 +79,64 @@
80
79
  }
81
80
  })
82
81
 
83
- function save() {
82
+ let sentSteps = []
83
+ let sentVersion = 0
84
+
85
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
86
+
87
+ async function save() {
84
88
  const state = editor.value.reactiveState.value
85
89
  const sendable = sendableSteps(state)
86
90
  if(sendable) {
91
+ let version = sendable.version
92
+ let firstOriginalStepIndex = 0
93
+ let resynchronization = false
87
94
  console.log("SENDABLE STEPS", sendable)
88
- const serializedSteps = sendable.steps.map(step => step.toJSON())
95
+ const serializedSteps = sendable.steps.map((step, index) => ({ version: version + index, step: step.toJSON() }))
89
96
  console.log("SERIALIZED STEPS", serializedSteps)
90
- api.command(['prosemirror', 'doSteps'], {
97
+ if(sendable.version <= sentVersion) { // found resend, check for duplicated steps
98
+ for(let i = 0; i < serializedSteps.length; i++) {
99
+ const step = serializedSteps[i]
100
+ const sentStep = sentSteps.find(({ version }) => version == step.version)
101
+ if(sentStep) {
102
+ console.log('FOUND SENT STEP WITH THE SAME VERSION', sentStep, '==', step)
103
+ if(JSON.stringify(sentStep) != JSON.stringify(step)) {
104
+ resynchronization = true
105
+ break
106
+ }
107
+ firstOriginalStepIndex = i + 1
108
+ } else break
109
+ }
110
+ }
111
+ serializedSteps.splice(0, firstOriginalStepIndex)
112
+ if(resynchronization && sentSteps.length > 0) {
113
+ console.log("RESYNCHRONIZATION!")
114
+ const firstVersion = serializedSteps[0].version
115
+ sentSteps = sentSteps.filter(({ version }) => version < firstVersion)
116
+ }
117
+ if(serializedSteps.length == 0) {
118
+ console.log("NOTHING TO SEND")
119
+ return
120
+ }
121
+ sentVersion = serializedSteps[0].version
122
+ sentSteps = sentSteps.concat(serializedSteps)
123
+ if(sentSteps.length > 200) sentSteps = sentSteps.slice(-100)
124
+ const data = {
91
125
  document, type: props.type,
92
- version: sendable.version, steps: serializedSteps, window: api.windowId
93
- })
126
+ version: sentVersion, steps: serializedSteps.map(({ step }) => step), window: api.windowId,
127
+ continuation: firstOriginalStepIndex > 0
128
+ }
129
+ console.log("SEND DATA", data)
130
+ //await sleep(1000)
131
+ await api.command(['prosemirror', 'doSteps'], data)
94
132
  }
95
133
  }
96
-
97
134
  const saveDebounced = useDebounceFn(save, 100)
98
135
 
136
+ api.source.on('connect', () => {
137
+ save()
138
+ })
139
+
99
140
  if(typeof window != 'undefined') {
100
141
  const stepsReader = inboxReader(
101
142
  (rawPosition, bucketSize) => {
@@ -102,4 +102,4 @@
102
102
 
103
103
  <style scoped>
104
104
 
105
- </style>
105
+ </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/wysiwyg-frontend",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "scripts": {
5
5
  "memDev": "lcli memDev --enableSessions --initScript ./init.js --dbAccess",
6
6
  "localDevInit": "rm tmp.db; lcli localDev --enableSessions --initScript ./init.js",
@@ -21,16 +21,16 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@fortawesome/fontawesome-free": "^6.1.1",
24
- "@live-change/cli": "0.6.8",
25
- "@live-change/dao": "0.5.0",
26
- "@live-change/dao-vue3": "0.5.0",
27
- "@live-change/dao-websocket": "0.5.0",
28
- "@live-change/framework": "0.6.8",
29
- "@live-change/password-authentication-service": "0.2.41",
30
- "@live-change/prosemirror-service": "0.2.39",
31
- "@live-change/secret-code-service": "0.2.41",
32
- "@live-change/secret-link-service": "0.2.41",
33
- "@live-change/session-service": "0.2.41",
24
+ "@live-change/cli": "0.6.12",
25
+ "@live-change/dao": "0.5.4",
26
+ "@live-change/dao-vue3": "0.5.4",
27
+ "@live-change/dao-websocket": "0.5.4",
28
+ "@live-change/framework": "0.6.12",
29
+ "@live-change/password-authentication-service": "0.2.49",
30
+ "@live-change/prosemirror-service": "0.2.49",
31
+ "@live-change/secret-code-service": "0.2.49",
32
+ "@live-change/secret-link-service": "0.2.49",
33
+ "@live-change/session-service": "0.2.49",
34
34
  "@live-change/vue3-components": "0.2.14",
35
35
  "@live-change/vue3-ssr": "0.2.14",
36
36
  "@tiptap/extension-blockquote": "^2.0.0-beta.29",
@@ -73,7 +73,7 @@
73
73
  "vue3-scroll-border": "0.1.2"
74
74
  },
75
75
  "devDependencies": {
76
- "@live-change/codeceptjs-helper": "0.6.8",
76
+ "@live-change/codeceptjs-helper": "0.6.12",
77
77
  "@wdio/selenium-standalone-service": "^7.20.8",
78
78
  "codeceptjs": "^3.3.4",
79
79
  "generate-password": "1.7.0",
@@ -85,5 +85,5 @@
85
85
  "author": "",
86
86
  "license": "ISC",
87
87
  "description": "",
88
- "gitHead": "ca3253bac1e9c01143244f5236bd40278a86ebaa"
88
+ "gitHead": "4a0231098fcfea3c1e32aa29e8f232e43981ee7f"
89
89
  }
package/server/init.js CHANGED
@@ -1,4 +1,5 @@
1
1
  const app = require('@live-change/framework').app()
2
+ const {createUser} = require("@live-change/user-frontend/server/init-functions.js")
2
3
 
3
4
  module.exports = async function(services) {
4
5
 
@@ -18,7 +18,8 @@ module.exports = {
18
18
  path: '@live-change/prosemirror-service',
19
19
  documentTypes: {
20
20
  rich: require('./rich.documentType.js')
21
- }
21
+ },
22
+ testLatency: 1000
22
23
  }
23
24
  ]
24
25
  }