Git Product home page Git Product logo

react-leaf-polls's Introduction

react-leaf-polls is a set of multiple reusable and customizable poll types.

JavaScript Style Guide ts License: MIT

Install

NPM

npm i --save react-leaf-polls

Yarn

yarn add react-leaf-polls

Usage

import { LeafPoll, Result } from 'react-leaf-polls'
import 'react-leaf-polls/dist/index.css'

// Persistent data array (typically fetched from the server)
const resData = [
  { id: 0, text: 'Answer 1', votes: 0 },
  { id: 1, text: 'Answer 2', votes: 0 },
  { id: 2, text: 'Answer 3', votes: 0 }
]

// Object keys may vary on the poll type (see the 'Theme options' table below)
const customTheme = {
  textColor: 'black',
  mainColor: '#00B87B',
  backgroundColor: 'rgb(255,255,255)',
  alignment: 'center'
}

function vote(item: Result, results: Result[]) {
  // Here you probably want to manage
  // and return the modified data to the server.
}

const App = () => {
  return (
    <LeafPoll
      type='multiple'
      question='What you wanna ask?'
      results={resData}
      theme={customTheme}
      onVote={vote}
      isVoted={false}
    />
  )
}

Component Props

Prop Type/Options Required Default Description
type "multiple" or "binary" โœ” binary Determines rendered poll type. Binary is recommended for yes-no questions where multiple is "one from many".
question String โœ– Question visible on top of the poll. Invisible if not set.
results Array of objects with keys "text" and "votes". โœ” Results data is visible to the user after the vote.
Should be stored permanently! Usually red and wrote to the persistent storage source.
Array is modified every time user votes by incrementing the "votes" value and adding "percentage" element.
theme Object
More in the table below
โœ– More in the table below Theme allows you to customize the look and feel of given poll. Depending on poll type there are different options.
isVoted Boolean โœ– false When set to true, poll will show the results by default on mount and user won't be able to vote. Might be helpful when we want to keep showing results on every rerender after user has voted.
*isVotedId Number โœ– When an id is set, poll will indicate with the main theme color the result which the user has already voted on. To be used in conjunction with isVoted. *Only enabled for multiple.
onVote Function โœ– Callback function running when user picks the answer. Returns the clicked item's and whole results modified object as arguments.

Theme options

Theme is an object where no value is mandatory. Colors can get any type of color notations.

Option Default Poll type Description
mainColor #00B87B multiple Marks the picked answer after the vote.
textColor #19181f both Color of question's and answer's text.
leftColor binary Color of left cell's text in the binary poll.
rightColor binary Color of right cell's text in the binary poll.
backgroundColor #ffffff both Background of answer's pane.
alignment center both Changes container's align-items property.
"start", "center" or "end" is only allowed.

License

MIT ยฉ salalo

react-leaf-polls's People

Contributors

hwb15 avatar ivnxyz avatar salalo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

react-leaf-polls's Issues

Boolean props

  • animations
  • show % (make calculations)
  • show number of votes
  • show question
  • allow decision change

Polls options text aligning vertically instead of taking the required width

Whenever a poll object is rendered on the page, the answer or the options text align themselves character by character in vertical position. For example: if i have 3 answers, Answer1, Answer2, Answer3, then these texts align themselves in vertical position like below:
A
n
s
w
e
r
1
instead of taking the width of the div in horizontal way.
image
. I can't figure out why this is happening. And yeah when i click on one of the answers it behaves normally like below.
image

Animation not working when isVotedId is passed

Hi,

Great package!
I just have one but.
When I set isVoted={true} and isVotedId={0} animation with the green bar does not work but isVoted is working as the input is blocked.
Any idea why that happens?

here is my code:

<LeafPoll
type='multiple'
question='Who grows the best "Movember Moustache"? Please vote now.'
results={candidates}
theme={customTheme}
onVote={vote}
isVoted={true}
isVotedId={1}
// isVoted={userVoted.isVoted}
// isVotedId={userVoted.isVotedId}
/>

Error:
reactLeafPolls

TIA

Data prop

id: {
text: string,
votes: int,
}

Style poll results

I was wondering what tweaks can I make to style my poll results like this:
image

onVote modification

Return modified data object as the user can decide on his own, if he:

  • wants to modify the data himself
  • get the modified object

The object has to be modified client side no matter what, because the data update has to be visible

Fixes

  • fixed height after vote (binary)
  • squeezed text when 9:1 proportions (binary)
  • parent styles tests

Whitespace for long text

polls with very long text on mobile are having the text interfere with the percentages. Failing to customise it so that text falls into the next line

Doesn't add up to 100%

[
      { id: 0, text: 'Yes', votes: 9999000 },
      { id: 1, text: 'No', votes: 1000 },
],

for "multiple"
will result in 99% and 0%

NPM and yarn + update documentation

  • Update npm links
  • Add gifs
  • Add booleans to the table
  • Host example on gh pages
  • Mention that results array is modified every time user votes.
  • Move theme table to lower tier (###)
  • Logo
  • onVote

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.