git ssb

16+

Dominic / patchbay



Tree: ed0d0518717fe16a686399588766fb35b3e6e37a

Files: ed0d0518717fe16a686399588766fb35b3e6e37a / app / page / network / invite-pub.js

1715 bytesRaw
1const { h, Value, resolve, onceTrue, computed } = require('mutant')
2const { isInvite } = require('ssb-ref')
3
4module.exports = function InvitePub ({ connection }) {
5 const state = {
6 invite: Value(),
7 inviteProcessing: Value(false),
8 inviteResult: Value(null)
9 }
10
11 const body = h('InvitePub', [
12 h('input', {
13 'placeholder': 'invite code for a remote peer (pub)',
14 'ev-input': handleInviteInput
15 }),
16 computed([state.invite, state.inviteProcessing], (invite, processing) => {
17 if (processing) return h('i.fa.fa-spinner.fa-pulse')
18 if (invite) return h('button -primary', { 'ev-click': useInvite }, 'use invite')
19
20 return h('button', { disabled: 'disabled', title: 'not a valid invite code' }, 'use invite')
21 }),
22 computed(state.inviteResult, result => {
23 if (result === null) return
24
25 return result
26 ? h('i.fa.fa-check')
27 : h('i.fa.fa-times')
28 })
29 ])
30
31 function handleInviteInput (ev) {
32 state.inviteResult.set(null)
33 const invite = ev.target.value.replace(/^\s*"?/, '').replace(/"?\s*$/, '')
34 if (!isInvite(invite)) {
35 state.invite.set()
36 return
37 }
38
39 ev.target.value = invite
40 state.invite.set(invite)
41 }
42
43 function useInvite () {
44 state.inviteProcessing.set(true)
45
46 onceTrue(connection, server => {
47 server.invite.accept(resolve(state.invite), (err, data) => {
48 state.inviteProcessing.set(false)
49 state.invite.set()
50
51 if (err) {
52 state.inviteResult.set(false)
53 console.error(err)
54 return
55 }
56 state.inviteResult.set(true)
57 console.log(data)
58 })
59 })
60 }
61
62 return {
63 title: 'pub invites (classic)',
64 body
65 }
66}
67

Built with git-ssb-web