Coder Social home page Coder Social logo

juangabreil / react-tether Goto Github PK

View Code? Open in Web Editor NEW

This project forked from danreeves/react-tether

0.0 0.0 0.0 2.73 MB

React wrapper around Tether from Hub Spot

Home Page: https://danreeves.github.io/react-tether/

License: MIT License

HTML 4.53% JavaScript 91.04% Shell 2.49% TypeScript 1.09% CSS 0.85%

react-tether's Introduction

React Tether

Build Status Dependency Status Coverage Status

Sauce Test Status

Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs.


React wrapper around Tether from Hub Spot.

alt tag

Install

npm install react-tether --save

As of version 2, a minimum of React 16.3 is required. If you need support for React < 16.3 please use the 1.x branch.

Example Usage

import TetherComponent from 'react-tether';

class SimpleDemo extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isOpen: false,
    };
  }

  render() {
    const { isOpen } = this.state;

    return (
      <TetherComponent
        attachment="top center"
        constraints={[
          {
            to: 'scrollParent',
            attachment: 'together',
          },
        ]}
        /* renderTarget: This is what the item will be tethered to, make sure to attach the ref */
        renderTarget={ref => (
          <button
            ref={ref}
            onClick={() => {
              this.setState({ isOpen: !isOpen });
            }}
          >
            Toggle Tethered Content
          </button>
        )}
        /* renderElement: If present, this item will be tethered to the the component returned by renderTarget */
        renderElement={ref =>
          isOpen && (
            <div ref={ref}>
              <h2>Tethered Content</h2>
              <p>A paragraph to accompany the title.</p>
            </div>
          )
        }
      />
    );
  }
}

Props

renderTarget: PropTypes.func

This is a render prop, the component returned from this function will be Tether's target. One argument, ref, is passed into this function. This is a ref that must be attached to the highest possible DOM node in the tree. If this is not done the element will not render.

renderElement: PropTypes.func

This is a render prop, the component returned from this function will be Tether's element, that will be moved. If no component is returned, the target will still render, but with no element tethered. One argument, ref, is passed into this function. This is a ref that must be attached to the highest possible DOM node in the tree. If this is not done the element will not render.

renderElementTag: PropTypes.string

The tag that is used to render the Tether element, defaults to div.

renderElementTo: PropTypes.string

Where in the DOM the Tether element is appended. Passes in any valid selector to document.querySelector. Defaults to document.body.

Tether requires this element to be position: static;, otherwise it will default to document.body. See this example for more information.

Tether Options:

Any valid Tether options.

children:

Previous versions of react-tether used children to render the target and component, using children will now throw an error. Please use renderTarget and renderElement instead

Imperative API

The following methods are exposed on the component instance:

  • getTetherInstance(): Tether
  • disable(): void
  • enable(): void
  • on(event: string, handler: function, ctx: any): void
  • once(event: string, handler: function, ctx: any): void
  • off(event: string, handler: function): void
  • position(): void

Example usage:

<TetherComponent
  ref={tether => (this.tether = tether)}
  renderTarget={ref => <Target ref={ref} />}
  renderElement={ref => (
    <Element ref={ref} onResize={() => this.tether && this.tether.position()} />
  )}
/>

Run Example

clone repo

git clone [email protected]:danreeves/react-tether.git

move into folder

cd ~/react-tether

install dependencies

npm install

run dev mode

npm run demo

open your browser and visit: http://localhost:1234/

react-tether's People

Contributors

renovate[bot] avatar souporserious avatar danreeves avatar jrmyio avatar rafeememon avatar slorber avatar corinchappy avatar anomen avatar jabbypanda avatar basarat avatar dylan-baskind avatar flacerdk avatar ilyamkin avatar j3tan avatar minznerjosh avatar holmari avatar leabaertschi avatar reintroducing avatar maxkostow avatar zyml avatar reidmit avatar ryprice avatar shw6rn avatar nilset avatar m7kvqbe1 avatar yasyf avatar doronbrikman avatar eaglus avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.