0.8.7 • Published 1 year ago

glissando-react v0.8.7

Weekly downloads
11
License
MIT
Repository
-
Last release
1 year ago

Glissando for React

A simple content slider for anything that needs to move.

API

See: Main documentation

Demos

Standalone use

Directed use

Usage

Standalone use

Import the component and model factory and slider CSS:

import { GlissandoSlider, useGlissandoModel } from 'glissando-react'
import 'glissando-react/glissando.global.min.css'

Create a new model instance:

const model = useGlissandoModel();

Use the slider component. Pass the model as a prop and the pages as children.

<GlissandoSlider model={model}>
  <Page1 />
  <Page2 />
  <Page3 />
  {/* ... add as many as needed - only 3 will be rendered */}
</GlissandoSlider>

The pages can be added and removed dynamically. Each time the GlissandoSlider's children change, the model is updated automatically.

Control the slider with methods and query its state using selectors:

const Slider = () => {
  const { previous, next, hasPrevious, hasNext, isAnimating } = model

  return (
    <>
      <button
        type="button"
        onClick={() =>
          previous()
        }
        disabled={!hasPrevious() || isAnimating()}
      >
        Previous
      </button>
      <button
        type="button"
        onClick={() => next()}
        disabled={!hasNext() || isAnimating()}
      >
        Next
      </button>
      <GlissandoSlider model={model}>
        <Page1 />
        <Page2 />
        <Page2 />
      </GlissandoSlider>
   </>
  )
}

Directed use

Use application state to tell the slider what to show:

const pages = ["page-1", "page-2", "page-3"];

const Slider = () => {
  const match = useRouteMatch();
  const currentPage = match.params.page;

  return (
    <GlissandoSlider model={model} locations={pages} location={currentPage}>
      {pages.map(id => {
        return <Page key={id} location={id} />;
      })}
    </GlissandoSlider>
  );
};

The counterparts of component props locations and location are model selectors getLocation, getNextLocation and getPreviousLocation:

const Header = ({ model }) => {
  const history = useHistory();

  const {
    isAnimating,
    getLocation,
    getNextLocation,
    getPreviousLocation,
  } = model;
  const location = getLocation();
  const previousLocation = getPreviousLocation();
  const nextLocation = getNextLocation();

  return (
    <>
      <button
        type="button"
        onClick={() => history.push(previousLocation)}
        disabled={!previousLocation || isAnimating()}
      >
        Previous
      </button>
      <button
        type="button"
        onClick={() => history.push(nextLocation)}
        disabled={!nextLocation || isAnimating()}
      >
        Next
      </button>
    </>
  );
};

Size

7.6 KB with all dependencies, minified and gzipped

0.8.7

1 year ago

0.8.6

1 year ago

0.8.5

3 years ago

0.8.4

3 years ago

0.8.3

3 years ago

0.8.2

3 years ago

0.8.1

3 years ago

0.8.0

3 years ago

0.7.4

3 years ago

0.7.2

3 years ago

0.7.3

3 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.0

4 years ago