<script> import { ref, onMounted } from "vue"; import { QuillEditor } from "@vueup/vue-quill"; import "@vueup/vue-quill/dist/vue-quill.snow.css"; import axios from "axios"; import debounce from "lodash.debounce"; const id = window.localStorage.getItem("id") ?? String(window.crypto.getRandomValues(new Uint16Array(1))[0]); window.localStorage.setItem("id", id); // ここに作成したREST APIエンドポイントを指定します。`memo-demo` の部分にHasura Cloudプロジェクト名を指定します。 const endpoint = `https://memo-demo.hasura.app/api/rest/page/${id}`; export default { components: { QuillEditor }, setup() { const editor = ref(); onMounted(async () => { console.log("endpoint", endpoint); const res = await axios.get(endpoint); const content = res.data.page?.content ?? { ops: [ { insert: "メモ帳\n", attributes: { header: 1 } }, { insert: "こんにちは!\n" }, { insert: "これは「Hasuraで作るREST API」のデモ用Webアプリです。\n" }, { insert: "ここに入力した内容は自動的にHasuraに送信されデータベースに保存されます。\n", attributes: { link: endpoint, }, }, ], }; console.log("content", content); editor.value.setContents(content); }); const update = debounce(async (content) => { await axios.put(endpoint, { content }); console.log("updated", content); }, 1000); return { editor, update }; }, }; </script> <template> <QuillEditor ref="editor" :content="{ ops: [{ insert: '読み込み中…' }] }" @update:content="update" toolbar="full" /> </template>