0.0.6 • Published 6 years ago

sseqrcode v0.0.6

Weekly downloads
17
License
MIT
Repository
github
Last release
6 years ago

SSEQRCode

a qrcode component for Server-Sent Event.

Installation

The package can be installed via NPM:

npm install sseqrcode --save

Basic Concept

SSE: Using server-sent events on MDN.

                +-------+                  +---------+                         +---------+
                | user  |                  | browser |                         | server  |
                +-------+                  +---------+                         +---------+
                    |                           |                                   |
                    |                           | request login                     |
                    |                           |---------------------------------->|
                    |                ---------\ |                                   |
                    |                | onInit |-|                                   |
                    |                |--------| |                                   |
                    |                           |                                   |
                    |                           |        send('qrcode', base64/url) |
                    |                           |<----------------------------------|
                    |              -----------\ |                                   |
                    |              | onQrcode |-|                                   |
                    |              |----------| |                                   |
                    |                           |                                   |
                    |      present QRCode image |                                   |
                    |<--------------------------|                                   |
                    |                           |                                   |
                    |                           |        send('pending', 'pending') |
                    |                           |<----------------------------------|
                    |             ------------\ |                                   |
                    |             | onPending |-|                                   |
                    |             |-----------| |                                   |
------------------\ |                           |                                   |
| scan the QRCode |-|                           |                                   |
|-----------------| |                           |                                   |
                    |                           |                                   |
                    | access the login url      |                                   |
                    |-------------------------------------------------------------->|
                    |                           |                                   |
                    |                           |      send('scanned', 'logged in') |
                    |                           |<----------------------------------|
                    |             ------------\ |                                   |
                    |             | onScanned |-|                                   |
                    |             |-----------| |                                   |
                    |                           |                                   |

Usage

import React from 'react'
import { SSEQRCode } from 'SSEQRCode'

class App extends React.Component {
  handleScan = ret => {
    alert(`Logged in as ${ret}`)
  }

  render() {
    return (
      <div>
        <SSEQRCode
          sseURL='/api/sse'
          onScanned={this.handleScan} />
      </div>
    )
  }
}

Props

proptyperequireddescription
sseSourceEventSourcewhen sseURL is nullprovided EventSource
sseURLstringwhen sseSource is nullURL of the source
widthnumber or stringwidth property on img tag, default 200
heightnumber or stringheight property on img tag, default 200
keepAlivebooleanwhether to close connection after qrcodeEvent was received, default false
errorEventstringname of error event, default 'error'
pendingEventstringname of pending event, default 'pending'
scannedEventstringname of scanned event, default 'scanned'
qrcodeEventstringname of qrcode event, default 'qrcode'
onInitFunctionwill be called when EventSource is opened
onQrcodeFunctionwill be called when qrcodeEvent received
onPendingFunctionwill be called when pendingEvent received
onScannedFunctionwill be called when scannedEvent received
onErrorFunctionwill be called when errorEvent received or error occurred
onQRCodeLoadedFunctionwill be called when QRCode image is loaded

onQrcode

function onQrcode(data)

where:

  • data - string the received message from server, should be base64 or URL of QRCode image

onPending

function onPending(data)

where:

  • data - string the received message from server

onScanned

function onScanned(data)

where:

  • data - string the received message from server, can be used for notification

onError

function onError(data)

where:

  • data - string the received message from server or the error message

onQRCodeLoaded

function onQRCodeLoaded()

you can use this prop to control loading indicator.

For example,

class Spin extends React.component {
  state = {
    loading: true,
  }

  handleLoaded = () => {
    this.setState({ loading: false })
  }

  render() {
    return (
      <div style={{ border: `1px solid ${this.state.loading ? 'grey' : 'red'}` }}>
        <SSEQRCode
          sseURL="/api/sse"
          onQRCodeLoaded={this.handleLoaded} />
      </div>
    )
  }
}
0.0.6

6 years ago

0.0.5

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago