npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ipui/clipboard

v0.1.1

Published

clipboard reactjs context for ipui

Downloads

2

Readme

@ipui/clipboard

persistant clipboard for ipui

this is not an implementation of an entire ipfs node, this project only use the api that the daemon binds in the port 5001 (by default). go or javascript implementation is by your own.

This project was bootstrapped with Create React App.

ip[fn]s links

description

this provider uses dag api of ipfs to store a kind of clipboard accesible from any piece of your application.

technologies

depends on

how it works

  • it uses the context api of reactjs to provide an accessible service to any component inside the context itself.

  • uses mutable file system of ipfs to store a config file that contains the dag address of the clipboard (maybe there are a better ways to do this task, would you like to share?).

  • uses dag to store the elements of the clipboard.

  • binds withClipboard on the props or this.props when is used as consumer.

propTypes

| name | default | description | | - | - | - | | config | | where the config file is stored or needs to be. |

state

this state variables are accesible by the component that uses withClipboard consumer.

clip

contains the actual elements in the clipboard.

methods

this methods are accesible by the component that uses withClipboard consumer.

put

put one element in the clipboard.

put( item )

  • item any type of value that can be stored in a dag node.

remove

remove an element index of the collection.

remove( index )

  • index is a position in the collection of the element that needs to be removed.

clean

reset the clipboard state to an empty array [].

clean()

usage

provider

import Clipboard from '@ipui/clipboard'

const MyComponent = props => {

  return (
    <Clipboard filepath="/.conf/my-app/clipboard">
      
      { /*
        your app code that requires a clipboard provider
      */}

    </Clipboard>
  )
}

export default MyComponent

consumer

put file example

import { withClipboard } from '@ipui/clipboard'

const PutFile = props => {

  function handleClick() {
    const { clip, put } = props.withClipboard
    const { file } = props
    if ( !inClip( file ) )
      put( file )
  }

  function inClip( file ) {
    const { clip } = props.withClipboard
    return clip.filter( el => el.hash === file.hash ).shift() || false
  }

  return (
    <button onClick={ handleClick }>
      copiar
    </button>
  )
}

PutFile.propTypes = {
  file: PropTypes.object.isRequired
}

export default withClipboard( PutFile )

remove element example

import { withClipboard } from '@ipui/clipboard'

const RemoveProduct = props => {

  function handleClick() {
    const { remove } = props.withClipboard
    const { product } = props

    const index = cartIndex( product )

    if ( index >= 0 )
      remove( index )
  }

  cartIndex( product ) {
    const { clip } = props.withClipboard
    const item = clip.filter( el => el.sku === product.sku ).shift()
    if ( !item )
      return -1

    return clip.indexOf( item )
  }

  return (
    <button onClick={ handleClick }>
      remove from cart
    </button>
  )
}

RemoveProduct.propTypes = {
  product: PropTypes.object.isRequired
}

export default withClipboard( RemoveProduct )

last updated

aug 24, 2019