Update app to include text editor, import Automerge correctly

This commit is contained in:
karissa 2022-01-28 21:33:24 -07:00
parent e85f47b1f4
commit a59ffebd64
2 changed files with 36 additions and 31 deletions
examples/cra/src

View file

@ -1,40 +1,42 @@
import React, { useEffect, useState } from 'react';
import logo from './logo.svg';
import './App.css';
import init from "automerge-wasm"
import { create, loadDoc, encodeChange, decodeChange,
initSyncState, encodeSyncState, decodeSyncState,
encodeSyncMessage, decodeSyncMessage,
LIST, MAP, TEXT } from "automerge-wasm"
import * as Automerge from "automerge-wasm"
function App() {
const [ doc, ] = useState(Automerge.create())
const [ edits, ] = useState(doc.set("_root", "edits", Automerge.TEXT) || "")
const [ val, setVal ] = useState("");
useEffect(() => {
init().then(() => {
let doc = create()
let edits = doc.set("_root", "edits", TEXT) || ""
doc.splice(edits, 0, 0, "the quick fox jumps over the lazy dog")
doc.splice(edits, 10, 3, "sloth")
let result = doc.text(edits)
setVal(JSON.stringify(result))
})
setVal(result)
}, [])
function updateTextarea(e: any) {
e.preventDefault()
let event: InputEvent = e.nativeEvent
console.log(edits, e.target.selectionEnd)
switch (event.inputType) {
case 'insertText':
//@ts-ignore
doc.splice(edits, e.target.selectionEnd - 1, 0, e.nativeEvent.data)
break;
case 'deleteContentBackward':
//@ts-ignore
doc.splice(edits, e.target.selectionEnd, 1)
break;
case 'insertLineBreak':
//@ts-ignore
doc.splice(edits, e.target.selectionEnd - 1, '\n')
break;
}
setVal(doc.text(edits))
}
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
<p> edits = {val}</p>
<textarea value={val} onChange={updateTextarea}></textarea>
</header>
</div>
);

View file

@ -3,13 +3,16 @@ import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import init from "automerge-wasm"
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
init().then(_ => {
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
})
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))