5.6.4 • Published 7 months ago

cozy-realtime v5.6.4

Weekly downloads
353
License
MIT
Repository
github
Last release
7 months ago

Subscribe to cozy-stack server side events cozy-stack via Websocket.

Install

npm install --save cozy-realtime`
yarn add cozy-realtime

Setup

CozyRealtime comes with a plugin for cozy-client. This is the recommended way to setup:

// setup.js
import CozyClient from 'cozy-client'
import { RealtimePlugin } from 'cozy-realtime'

const client = new CozyClient({})
client.registerPlugin(RealtimePlugin)

Then, you can listen for a whole doctype, thanks to the <RealTimeQueries> component, provided by cozy-client. This will automatically subscribe to all the events occuring on the specified doctype and accordingly update the store, so your app will reflect the data changes in realtime.

// App.js
import { RealTimeQueries } from 'cozy-client'

<App>
  <RealTimeQueries doctype="io.cozy.files" />
  ...
</App>

Simple, isn't it?

You can also provide your own method to instantiate Websockets. This can be useful when using cozy-realtime from a Node application for example.

// main.node.js
import { Agent } from 'http'
import { WebSocket } from 'ws'

import CozyClient from 'cozy-client'
import { RealtimePlugin } from 'cozy-realtime'

const agent = new Agent({ keepAlive: true })
const createWebSocket = (uri, protocol) => {
  return new WebSocket(uri, protocol, { agent })
}

const client = new CozyClient({})
client.registerPlugin(RealtimePlugin, { createWebSocket })

Manual subscribe

If your app needs to handle specific events on the data, you need to subscribe/unsubscribe like this:

const realtime = client.plugins.realtime
realtime.subscribe('created', 'io.cozy.bank.accounts', handleBankAccountCreated)
realtime.unsubscribe('created', 'io.cozy.bank.accounts', handleBankAccountCreated)

Example

It is important to unsubscribe when unmounting React components.

// some-component.js

const handleCreate = accounts => {
  console.log(`A new 'io.cozy.accounts' is created with id '${accounts._id}'.`)
}

const handleUpdate = accounts => {
  console.log(`An account is updated with id '${accounts._id}'.`)
}

class MyComp extends Component {

  constructor(props){
    super(props)
  }

  componentDidMount(){
    this.realtime = this.props.client.plugins.realtime
    if(this.realtime){
      // Listen to document creations
      await this.realtime.subscribe('created', type, this.handleCreate)
      //listen of the update for a type
      await this.realtime.subscribe('updated', type, this.handleUpdate)
      // Listen to a specific document
      await this.realtime.subscribe('updated', type, id, this.handleUpdate)
    }

  }

  componentWillUnmount(){
    if(this.realtime){
      // To unsubscribe
      await this.realtime.unsubscribe('created', type, handleCreate)
      await this.realtime.unsubscribe('updated', type, handleUpdate)
      await this.realtime.unsubscribe('updated', type, id, handleUpdate)

      // To unsubscribe all
      await this.realtime.unsubscribeAll()
    }
  }
}

export default withClient(MyComp)

Subscribe to multiple events

Here we subscribe to

  • The creation event
  • The update of a single document
import CozyRealtime from 'cozy-realtime'

/**
 * In Node applications, provide a function to instantiate Websockets:
 *
 * const createWebSocket = (uri, protocol) => { ... }
 *
 * const realtime = new CozyRealtime({ client: cozyClient, createWebSocket })
 *
 */
const realtime = new CozyRealtime({ client: cozyClient })

const type = 'io.cozy.accounts'
const id = 'document_id'

const handleCreate = accounts => {
  console.log(`A new 'io.cozy.accounts' is created with id '${accounts._id}'.`)
}
const handleUpdate = accounts => {
  console.log(`An account is updated with id '${accounts._id}'.`)
}

// To subscribe
await realtime.subscribe('created', type, handleCreate)
await realtime.subscribe('updated', type, id, handleUpdate)

// To unsubscribe
await realtime.unsubscribe('created', type, handleCreate)
await realtime.unsubscribe('updated', type, id, handleUpdate)

// To unsubscribe all events in one go
await realtime.unsubscribeAll()

License

cozy-realtime is distributed under the MIT license.

5.6.4

7 months ago

5.6.3

7 months ago

5.6.2

9 months ago

5.3.1

10 months ago

5.4.0

10 months ago

5.5.0

10 months ago

5.6.1

10 months ago

5.6.0

10 months ago

5.3.0

10 months ago

5.2.0

10 months ago

5.0.5

10 months ago

5.1.0

10 months ago

5.0.4

10 months ago

5.0.3

10 months ago

5.0.2

12 months ago

5.0.1

1 year ago

5.0.0

2 years ago

4.6.0

2 years ago

4.5.0

2 years ago

4.4.1

2 years ago

4.4.0

2 years ago

4.3.0

3 years ago

4.2.7

3 years ago

4.2.6

3 years ago

4.2.9

3 years ago

4.2.8

3 years ago

4.2.5

3 years ago

4.2.4

3 years ago

4.2.3

3 years ago

4.2.2

3 years ago

4.2.1

3 years ago

4.2.0

3 years ago

4.1.0

3 years ago

4.0.7

3 years ago

4.0.6

3 years ago

4.0.8

3 years ago

4.0.5

4 years ago

4.0.4

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

4.0.3

4 years ago

4.0.2

4 years ago

3.14.1

4 years ago

3.14.3

4 years ago

3.14.2

4 years ago

3.14.4

4 years ago

3.14.0

4 years ago

3.13.1

4 years ago

3.13.0

4 years ago

3.12.2

5 years ago

3.12.1

5 years ago

3.12.0

5 years ago

3.11.0

5 years ago

3.10.6

5 years ago

3.10.5

5 years ago

3.10.4

5 years ago

3.10.3

5 years ago

3.10.2

5 years ago

3.10.1

5 years ago

3.10.0

5 years ago

3.9.1

5 years ago

3.9.0

5 years ago

3.8.2

5 years ago

3.8.1

5 years ago

3.8.0

5 years ago

3.7.0

5 years ago

3.6.4

5 years ago

3.6.2

5 years ago

3.6.3

5 years ago

3.6.1

5 years ago

3.6.0

6 years ago

3.5.0

6 years ago

3.4.0

6 years ago

3.3.1

6 years ago

3.3.0

6 years ago

3.2.3

6 years ago

3.2.2

6 years ago

3.2.1

6 years ago

3.2.0

6 years ago

3.1.6

6 years ago

3.1.5

6 years ago

3.1.4

6 years ago

3.1.3

6 years ago

3.1.2

6 years ago

3.1.1

6 years ago

3.1.0

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.1.0

6 years ago

3.0.0-beta.11

6 years ago

3.0.0-beta.10

6 years ago

3.0.0-beta.9

6 years ago

3.0.0-beta.8

6 years ago

3.0.0-beta.7

6 years ago

3.0.0-beta.6

6 years ago

3.0.0-beta.5

6 years ago

3.0.0-beta.4

6 years ago

3.0.0-beta.3

6 years ago

3.0.0-beta.2

6 years ago

2.0.8

6 years ago

3.0.0-beta.1

6 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

2.0.4

6 years ago

2.0.3

7 years ago

2.0.2

7 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.4.0

7 years ago

1.3.0

7 years ago

1.2.8

7 years ago

1.2.7

7 years ago

1.2.6

7 years ago

1.2.5

7 years ago

1.2.4

7 years ago

1.2.3

7 years ago

1.2.2

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.10

7 years ago

1.1.9

7 years ago

1.1.8

7 years ago

1.1.7

7 years ago

1.1.6

7 years ago

1.1.5

7 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago