in src/Canvas.js [37:101]
componentDidMount() {
const canvas = {
id: this.id,
clientId: this.clientId,
data: {
...this.state,
lines: []
}
}
// Create the canvas. If canvas is already created, retrieve the data & draw previous canvas
API.graphql(graphqlOperation(createCanvas, { input: canvas }))
.then(d => console.log('canvas created :', d))
.catch(err => {
if (err.errors[0].data.id === this.id) {
const d = err.errors[0].data.data
this.canvas.loadSaveData(d)
}
})
window.addEventListener('mouseup', (e) => {
// If we are clicking on a button, do not update anything
if (e.target.name === 'clearbutton') return
this.setState({
brushColor: rand()
})
const data = this.canvas.getSaveData()
const p = JSON.parse(data)
const length = p.lines.length
this.lineLength = length
const canvas = {
id: this.id,
clientId: this.clientId,
data
}
// Save updated canvas in the database
API.graphql(graphqlOperation(updateCanvas, { input: canvas }))
.then(c => {
console.log('canvas updated!')
})
.catch(err => console.log('error creating: ', err))
})
API.graphql(graphqlOperation(onUpdateCanvas))
.subscribe({
next: (d) => {
const data = JSON.parse(d.value.data.onUpdateCanvas.data)
const length = data.lines.length
if (length === 0) {
// If there is no canvas data, clear the canvas
const data = this.canvas.getSaveData()
const parsedData = JSON.parse(data)
const newData = {
...parsedData,
lines: []
}
const newCanvas = JSON.stringify(newData)
this.canvas.loadSaveData(newCanvas)
return
}
if (this.lineLength === length || length === Number(0)) return
// Draw new lines to canvas
const last = data.lines[length -1]
this.canvas.simulateDrawingLines({ lines: [last] })
}
})
}