Files
outline/app/scenes/DocumentShare.js
Tom Moor 146e4da73b 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
2020-01-02 21:17:59 -08:00

68 lines
1.7 KiB
JavaScript

// @flow
import * as React from 'react';
import { observable } from 'mobx';
import { observer } from 'mobx-react';
import { Link } from 'react-router-dom';
import Input from 'components/Input';
import Button from 'components/Button';
import CopyToClipboard from 'components/CopyToClipboard';
import HelpText from 'components/HelpText';
import Document from 'models/Document';
type Props = {
document: Document,
onSubmit: () => void,
};
@observer
class DocumentShare extends React.Component<Props> {
@observable isCopied: boolean;
timeout: TimeoutID;
componentWillUnmount() {
clearTimeout(this.timeout);
}
handleCopied = () => {
this.isCopied = true;
this.timeout = setTimeout(() => {
this.isCopied = false;
this.props.onSubmit();
}, 1500);
};
render() {
const { document, onSubmit } = this.props;
return (
<div>
<HelpText>
The link below allows anyone in the world to access a read-only
version of the document <strong>{document.title}</strong>. You can
revoke this link in settings at any time.{' '}
<Link to="/settings/shares" onClick={onSubmit}>
Manage share links
</Link>.
</HelpText>
<Input
type="text"
label="Share link"
value={document.shareUrl || 'Loading…'}
disabled
/>
<CopyToClipboard
text={document.shareUrl || ''}
onCopy={this.handleCopied}
>
<Button type="submit" disabled={this.isCopied} primary>
{this.isCopied ? 'Copied!' : 'Copy Link'}
</Button>
</CopyToClipboard>
</div>
);
}
}
export default DocumentShare;