|
|
|
|
@ -47,7 +47,6 @@ import {
@@ -47,7 +47,6 @@ import {
|
|
|
|
|
loadScene, |
|
|
|
|
loadFromBlob, |
|
|
|
|
SOCKET_SERVER, |
|
|
|
|
SocketUpdateDataSource, |
|
|
|
|
exportCanvas, |
|
|
|
|
} from "../data"; |
|
|
|
|
import Portal from "./Portal"; |
|
|
|
|
@ -505,7 +504,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -505,7 +504,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const roomID = roomMatch[1]; |
|
|
|
|
const roomId = roomMatch[1]; |
|
|
|
|
|
|
|
|
|
let collabForceLoadFlag; |
|
|
|
|
try { |
|
|
|
|
@ -524,7 +523,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -524,7 +523,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
); |
|
|
|
|
// if loading same room as the one previously unloaded within 15sec
|
|
|
|
|
// force reload without prompting
|
|
|
|
|
if (previousRoom === roomID && Date.now() - timestamp < 15000) { |
|
|
|
|
if (previousRoom === roomId && Date.now() - timestamp < 15000) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} catch {} |
|
|
|
|
@ -828,13 +827,13 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -828,13 +827,13 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private beforeUnload = withBatchedUpdates((event: BeforeUnloadEvent) => { |
|
|
|
|
if (this.state.isCollaborating && this.portal.roomID) { |
|
|
|
|
if (this.state.isCollaborating && this.portal.roomId) { |
|
|
|
|
try { |
|
|
|
|
localStorage?.setItem( |
|
|
|
|
LOCAL_STORAGE_KEY_COLLAB_FORCE_FLAG, |
|
|
|
|
JSON.stringify({ |
|
|
|
|
timestamp: Date.now(), |
|
|
|
|
room: this.portal.roomID, |
|
|
|
|
room: this.portal.roomId, |
|
|
|
|
}), |
|
|
|
|
); |
|
|
|
|
} catch {} |
|
|
|
|
@ -962,7 +961,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -962,7 +961,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
zoom: this.state.zoom, |
|
|
|
|
remotePointerViewportCoords: pointerViewportCoords, |
|
|
|
|
remotePointerButton: cursorButton, |
|
|
|
|
remoteSelectedElementIds: remoteSelectedElementIds, |
|
|
|
|
remoteSelectedElementIds, |
|
|
|
|
remotePointerUsernames: pointerUsernames, |
|
|
|
|
shouldCacheIgnoreZoom: this.state.shouldCacheIgnoreZoom, |
|
|
|
|
}, |
|
|
|
|
@ -979,7 +978,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -979,7 +978,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
? false |
|
|
|
|
: !atLeastOneVisibleElement && elements.length > 0; |
|
|
|
|
if (this.state.scrolledOutside !== scrolledOutside) { |
|
|
|
|
this.setState({ scrolledOutside: scrolledOutside }); |
|
|
|
|
this.setState({ scrolledOutside }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
@ -1205,8 +1204,8 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1205,8 +1204,8 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
const element = newTextElement({ |
|
|
|
|
x: x, |
|
|
|
|
y: y, |
|
|
|
|
x, |
|
|
|
|
y, |
|
|
|
|
strokeColor: this.state.currentItemStrokeColor, |
|
|
|
|
backgroundColor: this.state.currentItemBackgroundColor, |
|
|
|
|
fillStyle: this.state.currentItemFillStyle, |
|
|
|
|
@ -1215,7 +1214,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1215,7 +1214,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
roughness: this.state.currentItemRoughness, |
|
|
|
|
opacity: this.state.currentItemOpacity, |
|
|
|
|
strokeSharpness: this.state.currentItemStrokeSharpness, |
|
|
|
|
text: text, |
|
|
|
|
text, |
|
|
|
|
fontSize: this.state.currentItemFontSize, |
|
|
|
|
fontFamily: this.state.currentItemFontFamily, |
|
|
|
|
textAlign: this.state.currentItemTextAlign, |
|
|
|
|
@ -1376,7 +1375,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1376,7 +1375,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
|
|
|
|
|
const roomMatch = getCollaborationLinkData(window.location.href); |
|
|
|
|
if (roomMatch) { |
|
|
|
|
const roomID = roomMatch[1]; |
|
|
|
|
const roomId = roomMatch[1]; |
|
|
|
|
const roomKey = roomMatch[2]; |
|
|
|
|
|
|
|
|
|
// fallback in case you're not alone in the room but still don't receive
|
|
|
|
|
@ -1386,11 +1385,9 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1386,11 +1385,9 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
INITIAL_SCENE_UPDATE_TIMEOUT, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
const { default: socketIOClient }: any = await import( |
|
|
|
|
/* webpackChunkName: "socketIoClient" */ "socket.io-client" |
|
|
|
|
); |
|
|
|
|
const { default: socketIOClient }: any = await import("socket.io-client"); |
|
|
|
|
|
|
|
|
|
this.portal.open(socketIOClient(SOCKET_SERVER), roomID, roomKey); |
|
|
|
|
this.portal.open(socketIOClient(SOCKET_SERVER), roomId, roomKey); |
|
|
|
|
|
|
|
|
|
// All socket listeners are moving to Portal
|
|
|
|
|
this.portal.socket!.on( |
|
|
|
|
@ -1420,17 +1417,12 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1420,17 +1417,12 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
break; |
|
|
|
|
case "MOUSE_LOCATION": { |
|
|
|
|
const { |
|
|
|
|
socketId, |
|
|
|
|
pointer, |
|
|
|
|
button, |
|
|
|
|
username, |
|
|
|
|
selectedElementIds, |
|
|
|
|
} = decryptedData.payload; |
|
|
|
|
|
|
|
|
|
const socketId: SocketUpdateDataSource["MOUSE_LOCATION"]["payload"]["socketId"] = |
|
|
|
|
decryptedData.payload.socketId || |
|
|
|
|
// @ts-ignore legacy, see #2094 (#2097)
|
|
|
|
|
decryptedData.payload.socketID; |
|
|
|
|
|
|
|
|
|
// NOTE purposefully mutating collaborators map in case of
|
|
|
|
|
// pointer updates so as not to trigger LayerUI rerender
|
|
|
|
|
this.setState((state) => { |
|
|
|
|
@ -1463,7 +1455,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1463,7 +1455,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
const elements = await loadFromFirebase(roomID, roomKey); |
|
|
|
|
const elements = await loadFromFirebase(roomId, roomKey); |
|
|
|
|
if (elements) { |
|
|
|
|
this.handleRemoteSceneUpdate(elements, { initFromSnapshot: true }); |
|
|
|
|
} |
|
|
|
|
|