Skip to content
This repository has been archived by the owner on Apr 15, 2019. It is now read-only.

Create priced button component - Closes #583 #585

Merged
merged 5 commits into from
Aug 9, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions src/components/pricedButton/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import React from 'react';
import Button from 'react-toolbox/lib/button';
import { fromRawLsk } from '../../utils/lsk';
import styles from './pricedButton.css';

const PricedButton = ({
balance, fee, label, customClassName, onClick, disabled,
}) => {
const hasFunds = balance >= fee;
return (
<div className='primary-button'>
{
fee &&
(<span className={`${styles.fee} ${hasFunds ? '' : styles.error}`}>
{
hasFunds ? `Fee: ${fromRawLsk(fee)} LSK` :
`Insufficient funds for ${fromRawLsk(fee)} LSK fee`
}
</span>)
}
<Button
label={label}
primary={true}
raised={true}
className={`next-button ${customClassName}`}
disabled={disabled || (fee && !hasFunds)}
onClick={onClick} />
</div>
);
};

export default PricedButton;
56 changes: 56 additions & 0 deletions src/components/pricedButton/index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import React from 'react';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
import sinon from 'sinon';
import { shallow } from 'enzyme';
import chaiEnzyme from 'chai-enzyme';
import Button from 'react-toolbox/lib/button';
import PricedButton from './index';

chai.use(sinonChai);
chai.use(chaiEnzyme());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you guys do this in every file?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


describe('PricedButton', () => {
let wrapper;
const props = {
fee: 5e8,
onClick: sinon.spy(),
};
const insufficientBalance = 4.9999e8;
const sufficientBalance = 6e8;

it('renders <Button /> component from react-toolbox', () => {
wrapper = shallow(<PricedButton {...props} balance={sufficientBalance} />);
expect(wrapper.find(Button)).to.have.length(1);
});

describe('Sufficient funds', () => {
beforeEach(() => {
wrapper = shallow(<PricedButton {...props} balance={sufficientBalance} />);
});

it('renders a span saying "Fee: 5 LSK"', () => {
expect(wrapper.find('span').text()).to.be.equal('Fee: 5 LSK');
});

it('allows to click on Button', () => {
wrapper.find(Button).simulate('click');
expect(props.onClick).to.have.been.calledWithExactly();
});
});

describe('Insufficient funds', () => {
beforeEach(() => {
wrapper = shallow(<PricedButton {...props} balance={insufficientBalance} />);
});

it('renders a span saying "Insufficient funds for 5 LSK fee"', () => {
expect(wrapper.find('span').text()).to.be.equal('Insufficient funds for 5 LSK fee');
});

it('sets the disabled attribute of the button', () => {
const buttonProps = wrapper.find(Button).props();
expect(buttonProps.disabled).to.be.equal(true);
});
});
});
12 changes: 12 additions & 0 deletions src/components/pricedButton/pricedButton.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.fee {
font-size: 12px;
line-height: 14px;
color: grey;
text-align: right;
margin: 0 16px;
transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space between selectors.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done


.error {
color: #dd2c00 !important;
}
6 changes: 6 additions & 0 deletions src/constants/fees.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
setSecondPassphrase: 5e8,
send: 0.1e8,
registerDelegate: 25e8,
vote: 1e8,
};