Skip to content

Commit

Permalink
feat: [WIP] file open
Browse files Browse the repository at this point in the history
* use tldraw indexed db instead of Yjs indexed db
  • Loading branch information
Quentin-Guillemin committed Mar 10, 2023
1 parent d516320 commit 2727822
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 191 deletions.
2 changes: 1 addition & 1 deletion client/src/App.scss
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ a {
$border-radius: 9px;
$padding: 9px;
$height: 40px;
$left: 50px;
$left: 110px;

.container {
z-index: 2;
Expand Down
72 changes: 25 additions & 47 deletions client/src/components/Editor.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
import { FormEvent, useState } from "react";
import { Tldraw, useFileSystem } from "@tldraw/tldraw";
import { FormEvent, useCallback, useState } from "react";
import { Tldraw, TldrawApp, useFileSystem } from "@tldraw/tldraw";
import { CustomCursor } from "./Cursor";
import { useAssets } from "../hooks/useAssets";
import { useMultiplayer } from "../hooks/useMultiplayer";
import { useSingleplayer } from "../hooks/useSingleplayer";
import { cloneDoc, initPersistence, initProvider, newDoc } from "../utils/yjs";
import { cloneDoc, initProvider, newDoc } from "../utils/yjs";
import { v4 as uuidv4, validate as uuidValidate } from "uuid";
import PropTypes from "prop-types";
import {
Multiplayer,
MultiplayerReadOnly,
Settings,
Singleplayer,
} from "../types/types";
import { Multiplayer, Settings, Singleplayer } from "../types/types";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {
faArrowRightFromBracket,
Expand Down Expand Up @@ -57,10 +51,11 @@ function Editor({
const [useLocalDoc, setUseLocalDoc] = useState(false);

language = language || "en";
initPersistence(idbName, localDoc);
readOnly = readOnly || false;
let editor = (
<SingleplayerEditor
apiUrl={apiUrl}
idbName={idbName}
doc={localDoc}
language={language}
readOnly={wantJoinRoom}
Expand All @@ -70,20 +65,14 @@ function Editor({
let doc = newDoc();
if (useLocalDoc) doc = cloneDoc(localDoc);
const provider = initProvider(wsUrl, room, doc);
editor = readOnly ? (
<MultiplayerReadOnlyEditor
doc={doc}
provider={provider}
roomId={room}
language={language}
/>
) : (
editor = (
<MultiplayerEditor
apiUrl={apiUrl}
doc={doc}
provider={provider}
roomId={room}
language={language}
readOnly={readOnly}
/>
);
}
Expand Down Expand Up @@ -185,22 +174,32 @@ function Editor({
);
}

function SingleplayerEditor({ apiUrl, doc, language, readOnly }: Singleplayer) {
function SingleplayerEditor({
apiUrl,
idbName,
doc,
language,
readOnly,
}: Singleplayer) {
const fileSystemEvents = useFileSystem();
const { onAssetCreate, onAssetDelete, onAssetUpload } = useAssets(apiUrl);
const { ...events } = useSingleplayer(doc, language);

const onMount = useCallback((app: TldrawApp) => {
app.setSetting("language", language);
app.setSetting("keepStyleMenuOpen", true);
}, []);

return (
<Tldraw
autofocus
showPages={false}
id={idbName}
onMount={onMount}
showMultiplayerMenu={false}
onAssetCreate={onAssetCreate}
onAssetDelete={onAssetDelete}
onAssetUpload={onAssetUpload}
readOnly={readOnly}
{...fileSystemEvents}
{...events}
/>
);
}
Expand All @@ -211,6 +210,7 @@ function MultiplayerEditor({
provider,
roomId,
language,
readOnly,
}: Multiplayer) {
const { onSaveProjectAs, onSaveProject } = useFileSystem();
const { onAssetCreate, onAssetDelete, onAssetUpload } = useAssets(apiUrl);
Expand All @@ -222,34 +222,12 @@ function MultiplayerEditor({
components={components}
showPages={false}
showMultiplayerMenu={false}
onAssetCreate={onAssetCreate}
onAssetCreate={readOnly ? undefined : onAssetCreate}
onAssetDelete={onAssetDelete}
onAssetUpload={onAssetUpload}
onSaveProjectAs={onSaveProjectAs}
onSaveProject={onSaveProject}
{...events}
/>
);
}

function MultiplayerReadOnlyEditor({
doc,
provider,
roomId,
language,
}: MultiplayerReadOnly) {
const { onSaveProjectAs, onSaveProject } = useFileSystem();
const { ...events } = useMultiplayer(doc, provider, roomId, language);

return (
<Tldraw
autofocus
components={components}
showPages={false}
showMultiplayerMenu={false}
onSaveProjectAs={onSaveProjectAs}
onSaveProject={onSaveProject}
readOnly
readOnly={readOnly}
{...events}
/>
);
Expand Down
136 changes: 0 additions & 136 deletions client/src/hooks/useSingleplayer.ts

This file was deleted.

9 changes: 2 additions & 7 deletions client/src/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export type Settings = {

export type Singleplayer = {
apiUrl: string;
idbName: string;
doc: Y.Doc;
language: string;
readOnly: boolean;
Expand All @@ -26,11 +27,5 @@ export type Multiplayer = {
provider: WebsocketProvider;
roomId: string;
language: string;
};

export type MultiplayerReadOnly = {
doc: Y.Doc;
provider: WebsocketProvider;
roomId: string;
language: string;
readOnly: boolean;
};

0 comments on commit 2727822

Please sign in to comment.