4.0.1 • Published 7 years ago

nesquirk v4.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

Nesquirk Build Status dependencies Status

Ties Nes + minimongo together for gloryful reactive apps.

Server

const Hapi = require('hapi')
const Nesquirk = require('nesquirk')

const server = new Hapi.Server()

server.connection({ host: 'localhost', port: 3000 })

server.register(Nesquirk, () => {
  // Declare a nesquirk subscription
  // opts are Nes server.subscription options
  server.nq.subscription('/item/{_id}', opts, (socket, path, params, reply) => {
    // Get your initial object, reply(obj)
  })
  // Behind the scenes, the callback is attached to opts.onSubscribe
  // We call socket.publish for sending results, and then next
})

Managing the subscription

We don't keep subscription documents in memory, so you have to maintain your subscriptions, just like with Nes.

// Single item (_id) must be in the url, or in the update obj to work
server.nq.update('/item/{_id}', { _id: '59527fc54cad8b7efd5f5835', status: 'complete' })

// Multiple items
server.nq.add('/items', { _id: '5953813562844d958c6f6815', status: 'pending' })
server.nq.add('/items', [/* ... */]) // Also pass arrays here (and update/remove)
server.nq.update('/items', { _id: '5953813562844d958c6f6815', status: 'active' }) // Note: needs _id in object(s) to merge
server.nq.remove('/items', '5953813562844d958c6f6815') // Note: only pass ID(s)

Client

const { Client, Collection } = require('nesquirk')
const client = new Client('ws://localhost:3000')

// A mingo backed minimongo collection
const Items = new Collection('items')

client.connect((err) => {
  // Hook the '/items' publication up to the Items collection
  const handle = client.subscribe('/items', Items, (err) => {
    console.log('Ready or error')
  })

  // Stop
  handle.stop() // or
  client.unsubscribe('/items', Items)
})

React

More typically, you'll use the nesquirk React components to manage your subscriptions and retrieve data from minimongo collections.

main.js

import React from 'react'
import ReactDOM from 'react-dom'
import { Client, Provider } from 'nesquirk'

import MyComponent from './MyComponent'

// Setup the client connection
const client = new Client('ws://localhost:3000')
client.connect((err) => { if (err) console.error('Failed to connect', err) })

// The Provider allows you to gain access to the client from child components
// using the `withClient` helper (see below)
ReactDOM.render(
  <Provider client={client}>
    <MyComponent />
  </Provider>,
  document.getElementById('root')
)

MyComponent.js

import React from 'react'
import { createContainer } from 'nesquirk'
import Items from './Items'

const MyComponent = ({ items }) => items.map((i) => <div>{i._id}</div>)

export default createContainer(function (props) {
  // Subscribe - will be auto unsubscribed on componentWillUnmount
  // Hooks the Items collection up to the '/items' subscription
  const handle = this.subscribe('/items', Items)

  // Fetch any data from your collections
  return {
    items: Items.find().all(),
    loading: !handle.ready()
  }
}, MyComponent))

Items.js

import { Collection } from 'nesquirk'
export default new Collection('items')
4.0.1

7 years ago

4.0.0

7 years ago

3.0.0

7 years ago

2.0.0

7 years ago

1.2.2

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.1

7 years ago

0.0.0

7 years ago