import { computed } from 'mobx'; import { observer } from 'mobx-react'; import * as mobxUtils from 'mobx-utils'; import * as React from 'react'; import * as uuid from 'uuid'; import CursorField from '../../../../fields/CursorField'; import { Doc, FieldResult } from '../../../../fields/Doc'; import { Id } from '../../../../fields/FieldSymbols'; import { List } from '../../../../fields/List'; import { listSpec } from '../../../../fields/Schema'; import { Cast } from '../../../../fields/Types'; import { CollectionViewProps } from '../CollectionView'; import './CollectionFreeFormView.scss'; @observer export class CollectionFreeFormRemoteCursors extends React.Component { @computed protected get cursors(): CursorField[] { const doc = this.props.Document; let cursors: FieldResult>; const id = Doc.UserDoc()[Id]; if (!id || !(cursors = Cast(doc.cursors, listSpec(CursorField)))) { return []; } const now = mobxUtils.now(); return (cursors || []).filter(({ data: { metadata } }) => metadata.id !== id && now - metadata.timestamp < 1000); } @computed get renderedCursors() { return this.cursors.map( ({ data: { metadata, position: { x, y }, }, }) => { return (
{ if (el) { const ctx = el.getContext('2d'); if (ctx) { ctx.fillStyle = '#' + uuid.v5(metadata.id, uuid.v5.URL).substring(0, 6).toUpperCase() + '22'; ctx.fillRect(0, 0, 20, 20); ctx.fillStyle = 'black'; ctx.lineWidth = 0.5; ctx.beginPath(); ctx.moveTo(10, 0); ctx.lineTo(10, 8); ctx.moveTo(10, 20); ctx.lineTo(10, 12); ctx.moveTo(0, 10); ctx.lineTo(8, 10); ctx.moveTo(20, 10); ctx.lineTo(12, 10); ctx.stroke(); } } }} width={20} height={20} />

{metadata.identifier[0].toUpperCase()}

); } ); } render() { return this.renderedCursors; } }