enum for RoomOpenMode

pull/3534/head
Mime Čuvalo 2024-04-18 15:26:47 +01:00
rodzic a32b5e77fa
commit 673cbaca66
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: BA84499022AC984D
12 zmienionych plików z 112 dodań i 40 usunięć

Wyświetl plik

@ -89,22 +89,22 @@ export class TLDrawDurableObject extends TLServer {
readonly router = Router()
.get(
'/r/:roomId',
(req) => this.extractDocumentInfoFromRequest(req, 'read-write'),
(req) => this.extractDocumentInfoFromRequest(req, RoomOpenMode.READ_WRITE),
(req) => this.onRequest(req)
)
.get(
'/v/:roomId',
(req) => this.extractDocumentInfoFromRequest(req, 'readonly-legacy'),
(req) => this.extractDocumentInfoFromRequest(req, RoomOpenMode.READ_ONLY_LEGACY),
(req) => this.onRequest(req)
)
.get(
'/ro/:roomId',
(req) => this.extractDocumentInfoFromRequest(req, 'readonly'),
(req) => this.extractDocumentInfoFromRequest(req, RoomOpenMode.READ_ONLY),
(req) => this.onRequest(req)
)
.post(
'/r/:roomId/restore',
(req) => this.extractDocumentInfoFromRequest(req, 'read-write'),
(req) => this.extractDocumentInfoFromRequest(req, RoomOpenMode.READ_WRITE),
(req) => this.onRestore(req)
)
.all('*', () => new Response('Not found', { status: 404 }))

Wyświetl plik

@ -4,11 +4,11 @@ import { Environment } from '../types'
export async function getSlug(env: Environment, slug: string | null, roomOpenMode: RoomOpenMode) {
if (!slug) return null
switch (roomOpenMode) {
case 'read-write':
case RoomOpenMode.READ_WRITE:
return slug
case 'readonly':
case RoomOpenMode.READ_ONLY:
return await env.READONLY_SLUG_TO_SLUG.get(slug)
case 'readonly-legacy':
case RoomOpenMode.READ_ONLY_LEGACY:
return lns(slug)
default:
exhaustiveSwitchError(roomOpenMode)

Wyświetl plik

@ -1,5 +1,6 @@
/// <reference no-default-lib="true"/>
/// <reference types="@cloudflare/workers-types" />
import { RoomOpenMode } from '@tldraw/utils'
import { Router, createCors } from 'itty-router'
import { env } from 'process'
import Toucan from 'toucan-js'
@ -25,9 +26,9 @@ const router = Router()
.post('/new-room', createRoom)
.post('/snapshots', createRoomSnapshot)
.get('/snapshot/:roomId', getRoomSnapshot)
.get('/r/:roomId', (req, env) => joinExistingRoom(req, env, 'read-write'))
.get('/v/:roomId', (req, env) => joinExistingRoom(req, env, 'readonly-legacy'))
.get('/ro/:roomId', (req, env) => joinExistingRoom(req, env, 'readonly'))
.get('/r/:roomId', (req, env) => joinExistingRoom(req, env, RoomOpenMode.READ_WRITE))
.get('/v/:roomId', (req, env) => joinExistingRoom(req, env, RoomOpenMode.READ_ONLY_LEGACY))
.get('/ro/:roomId', (req, env) => joinExistingRoom(req, env, RoomOpenMode.READ_ONLY))
.get('/r/:roomId/history', getRoomHistory)
.get('/r/:roomId/history/:timestamp', getRoomHistorySnapshot)
.get('/readonly-slug/:roomId', getReadonlySlug)

Wyświetl plik

@ -127,7 +127,8 @@ export function MultiplayerEditor({
const sharingUiOverrides = useSharing()
const fileSystemUiOverrides = useFileSystem({ isMultiplayer: true })
const cursorChatOverrides = useCursorChat()
const isReadonly = roomOpenMode === 'readonly' || roomOpenMode === 'readonly-legacy'
const isReadonly =
roomOpenMode === RoomOpenMode.READ_ONLY || roomOpenMode === RoomOpenMode.READ_ONLY_LEGACY
const handleMount = useCallback(
(editor: Editor) => {

Wyświetl plik

@ -1,6 +1,7 @@
import * as Popover from '@radix-ui/react-popover'
import React, { useEffect, useState } from 'react'
import {
RoomOpenMode,
RoomOpenModeToPath,
TldrawUiMenuContextProvider,
TldrawUiMenuGroup,
@ -26,8 +27,8 @@ type ShareState = {
function isReadonlyUrl(url: string) {
return (
url.includes(`/${RoomOpenModeToPath['readonly']}/`) ||
url.includes(`/${RoomOpenModeToPath['readonly-legacy']}/`)
url.includes(`/${RoomOpenModeToPath[RoomOpenMode.READ_ONLY]}/`) ||
url.includes(`/${RoomOpenModeToPath[RoomOpenMode.READ_ONLY_LEGACY]}/`)
)
}
@ -41,7 +42,7 @@ function getFreshShareState(): ShareState {
const isReadOnly = isReadonlyUrl(href)
return {
state: isShared ? 'shared' : isReadOnly ? 'readonly' : 'offline',
state: isShared ? 'shared' : isReadOnly ? RoomOpenMode.READ_ONLY : 'offline',
url: window.location.href,
readonlyUrl: isReadOnly ? window.location.href : null,
qrCodeDataUrl: '',
@ -55,7 +56,7 @@ async function getReadonlyUrl() {
if (isReadOnly) return href
const segs = href.split('/')
segs[segs.length - 2] = RoomOpenModeToPath['readonly']
segs[segs.length - 2] = RoomOpenModeToPath[RoomOpenMode.READ_ONLY]
const [roomId, params] = segs[segs.length - 1].split('?')
const result = await fetch(`/api/readonly-slug/${roomId}`)

Wyświetl plik

@ -1,4 +1,5 @@
import { useParams } from 'react-router-dom'
import { RoomOpenMode } from 'tldraw'
import '../../styles/globals.css'
import { IFrameProtector } from '../components/IFrameProtector'
import { MultiplayerEditor } from '../components/MultiplayerEditor'
@ -7,7 +8,7 @@ export function Component() {
const id = useParams()['roomId'] as string
return (
<IFrameProtector slug={id} context="public-multiplayer">
<MultiplayerEditor roomOpenMode="read-write" roomSlug={id} />
<MultiplayerEditor roomOpenMode={RoomOpenMode.READ_WRITE} roomSlug={id} />
</IFrameProtector>
)
}

Wyświetl plik

@ -1,4 +1,5 @@
import { useParams } from 'react-router-dom'
import { RoomOpenMode } from 'tldraw'
import '../../styles/globals.css'
import { IFrameProtector } from '../components/IFrameProtector'
import { MultiplayerEditor } from '../components/MultiplayerEditor'
@ -7,7 +8,7 @@ export function Component() {
const id = useParams()['roomId'] as string
return (
<IFrameProtector slug={id} context="public-readonly">
<MultiplayerEditor roomOpenMode="readonly-legacy" roomSlug={id} />
<MultiplayerEditor roomOpenMode={RoomOpenMode.READ_ONLY_LEGACY} roomSlug={id} />
</IFrameProtector>
)
}

Wyświetl plik

@ -1,4 +1,5 @@
import { useParams } from 'react-router-dom'
import { RoomOpenMode } from 'tldraw'
import '../../styles/globals.css'
import { IFrameProtector } from '../components/IFrameProtector'
import { MultiplayerEditor } from '../components/MultiplayerEditor'
@ -7,7 +8,7 @@ export function Component() {
const id = useParams()['roomId'] as string
return (
<IFrameProtector slug={id} context="public-readonly">
<MultiplayerEditor roomOpenMode="readonly" roomSlug={id} />
<MultiplayerEditor roomOpenMode={RoomOpenMode.READ_ONLY} roomSlug={id} />
</IFrameProtector>
)
}

Wyświetl plik

@ -298,7 +298,14 @@ export const Result: {
export function rng(seed?: string): () => number;
// @public (undocumented)
export type RoomOpenMode = 'read-write' | 'readonly-legacy' | 'readonly';
export enum RoomOpenMode {
// (undocumented)
READ_ONLY = "readonly",
// (undocumented)
READ_ONLY_LEGACY = "readonly-legacy",
// (undocumented)
READ_WRITE = "read-write"
}
// @public (undocumented)
export const RoomOpenModeToPath: Record<RoomOpenMode, string>;

Wyświetl plik

@ -2984,30 +2984,84 @@
"name": "rng"
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/utils!RoomOpenMode:type",
"kind": "Enum",
"canonicalReference": "@tldraw/utils!RoomOpenMode:enum",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type RoomOpenMode = "
},
{
"kind": "Content",
"text": "'read-write' | 'readonly-legacy' | 'readonly'"
},
{
"kind": "Content",
"text": ";"
"text": "export declare enum RoomOpenMode "
}
],
"fileUrlPath": "packages/utils/src/lib/routes.ts",
"releaseTag": "Public",
"name": "RoomOpenMode",
"typeTokenRange": {
"preserveMemberOrder": false,
"members": [
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/utils!RoomOpenMode.READ_ONLY:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "READ_ONLY = "
},
{
"kind": "Content",
"text": "\"readonly\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "READ_ONLY"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/utils!RoomOpenMode.READ_ONLY_LEGACY:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "READ_ONLY_LEGACY = "
},
{
"kind": "Content",
"text": "\"readonly-legacy\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "READ_ONLY_LEGACY"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/utils!RoomOpenMode.READ_WRITE:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "READ_WRITE = "
},
{
"kind": "Content",
"text": "\"read-write\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "READ_WRITE"
}
]
},
{
"kind": "Variable",
@ -3030,7 +3084,7 @@
{
"kind": "Reference",
"text": "RoomOpenMode",
"canonicalReference": "@tldraw/utils!RoomOpenMode:type"
"canonicalReference": "@tldraw/utils!RoomOpenMode:enum"
},
{
"kind": "Content",

Wyświetl plik

@ -51,7 +51,7 @@ export {
sortByIndex,
validateIndexKey,
} from './lib/reordering/reordering'
export { RoomOpenModeToPath, type RoomOpenMode } from './lib/routes'
export { RoomOpenMode, RoomOpenModeToPath } from './lib/routes'
export { sortById } from './lib/sort'
export {
clearLocalStorage,

Wyświetl plik

@ -1,8 +1,13 @@
/** @public */
export type RoomOpenMode = 'readonly' | 'readonly-legacy' | 'read-write'
export enum RoomOpenMode {
READ_ONLY = 'readonly',
READ_ONLY_LEGACY = 'readonly-legacy',
READ_WRITE = 'read-write',
}
/** @public */
export const RoomOpenModeToPath: Record<RoomOpenMode, string> = {
readonly: 'ro',
'readonly-legacy': 'v',
'read-write': 'r',
[RoomOpenMode.READ_ONLY]: 'ro',
[RoomOpenMode.READ_ONLY_LEGACY]: 'v',
[RoomOpenMode.READ_WRITE]: 'r',
}