feat: Document presence indicator (#1114)

* Update websockets to allow joining document-based rooms

* dynamic websocket joining

* emit user.join/leave events when entering and exiting document rooms

* presence storage

* feat: frontend presence store

* lint

* UI updates

* First pass editing state

* refactoring

* Timeout per user/doc
lint

* Document data loading refactor to keep Socket mounted

* restore: Mark as viewed functionality
Add display of 'you' to collaborators

* fix: Socket/document remount when document slug changes due to title change

* Revert unneccessary package update

* Move editing ping interval to a shared constant

* fix: Flash of sidebar when loading page directly on editing mode

* separate document and revision loading

* add comments for socket events

* fix: Socket events getting bound multiple times on reconnect

* fix: Clear client side presence state on disconnect

* fix: Don't ignore server side error
Improved documentation

* More comments / why comments

* rename Socket -> SocketPresence

* fix: Handle redis is down
remove unneccessary join

* fix: PR feedback
This commit is contained in:
Tom Moor
2020-01-02 21:17:59 -08:00
committed by GitHub
parent 541e4ebe37
commit 146e4da73b
31 changed files with 1013 additions and 484 deletions

View File

@ -27,7 +27,6 @@ import Error404 from 'scenes/Error404';
import Layout from 'components/Layout';
import SocketProvider from 'components/SocketProvider';
import Authenticated from 'components/Authenticated';
import RouteSidebarHidden from 'components/RouteSidebarHidden';
import { matchDocumentSlug as slug } from 'utils/routeHelpers';
const NotFound = () => <Search notFound />;
@ -75,7 +74,7 @@ export default function Routes() {
component={Zapier}
/>
<Route exact path="/settings/export" component={Export} />
<RouteSidebarHidden
<Route
exact
path="/collections/:id/new"
component={DocumentNew}
@ -92,7 +91,7 @@ export default function Routes() {
path={`/doc/${slug}/history/:revisionId?`}
component={KeyedDocument}
/>
<RouteSidebarHidden
<Route
exact
path={`/doc/${slug}/edit`}
component={KeyedDocument}