roomConnect with username

This commit is contained in:
tonyrewin 2022-10-04 13:45:10 +03:00
parent 97a2f7bcfb
commit fc26e25cf0
3 changed files with 19 additions and 13 deletions

View File

@ -441,8 +441,8 @@ export const createCtrl = (initial: State): [Store<State>, any] => {
const doStartCollab = (state: State): State => { const doStartCollab = (state: State): State => {
const backup = state.args?.room && state.collab?.room !== state.args.room const backup = state.args?.room && state.collab?.room !== state.args.room
const room = state.args?.room ?? uuidv4() const room = state.args?.room ?? uuidv4()
const username = '' // FIXME: use authenticated user name
const [type, provider] = roomConnect(room) const [type, provider] = roomConnect(room, username)
const extensions = createExtensions({ const extensions = createExtensions({
config: state.config, config: state.config,

View File

@ -27,7 +27,7 @@ export const loadArticleReactions = async ({
offset?: number offset?: number
}): Promise<void> => { }): Promise<void> => {
const data = await apiClient.getArticleReactions({ articleSlug, limit, offset }) const data = await apiClient.getArticleReactions({ articleSlug, limit, offset })
// TODO: const [data, provider] = roomConnect(articleSlug) // TODO: const [data, provider] = roomConnect(articleSlug, username, "reactions")
reactionsOrdered.set(data) reactionsOrdered.set(data)
} }

View File

@ -4,7 +4,11 @@ import { WebrtcProvider } from 'y-webrtc'
import * as Y from 'yjs' import * as Y from 'yjs'
// import type { Reaction } from '../graphql/types.gen' // import type { Reaction } from '../graphql/types.gen'
export const roomConnect = (room, keyname = 'reactions'): [Y.XmlFragment, WebrtcProvider] => { export const roomConnect = (
room,
username = '',
keyname = 'reactions'
): [Y.XmlFragment, WebrtcProvider] => {
const ydoc = new Y.Doc() const ydoc = new Y.Doc()
const yxmlfrag = ydoc.getXmlFragment(keyname) // TODO: encode/decode payload to Reactions[] const yxmlfrag = ydoc.getXmlFragment(keyname) // TODO: encode/decode payload to Reactions[]
const webrtcOptions = { const webrtcOptions = {
@ -21,15 +25,17 @@ export const roomConnect = (room, keyname = 'reactions'): [Y.XmlFragment, Webrtc
password: '' password: ''
} }
const provider = new WebrtcProvider(room, ydoc, webrtcOptions) const provider = new WebrtcProvider(room, ydoc, webrtcOptions)
const username = uniqueNamesGenerator({ let name = username
if (Boolean(name) === false) {
name = uniqueNamesGenerator({
dictionaries: [adjectives, animals], dictionaries: [adjectives, animals],
style: 'capital', style: 'capital',
separator: ' ', separator: ' ',
length: 2 length: 2
}) })
}
provider.awareness.setLocalStateField('user', { provider.awareness.setLocalStateField('user', { name })
name: username
})
return [yxmlfrag, provider] return [yxmlfrag, provider]
} }