kopia lustrzana https://github.com/Tldraw/Tldraw
enum for RoomOpenMode
rodzic
a32b5e77fa
commit
673cbaca66
|
@ -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 }))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) => {
|
||||
|
|
|
@ -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}`)
|
||||
|
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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',
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue