Skip to content

Commit c5f8f4e

Browse files
committed
remove coupling by moving implementation details to component
1 parent 1f4a334 commit c5f8f4e

File tree

4 files changed

+35
-14
lines changed

4 files changed

+35
-14
lines changed

src/containers/currency-converter-container/components/currency-converter.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { CurrencySelect } from './currency-select';
55
import { CurrencyInput } from './currency-input';
66

77
interface LocalProps {
8-
currencies: Object;
8+
currencies: string[];
99
baseCurrency: string;
1010
targetCurrency: string;
1111
baseValue: number;
1212
targetValue: number;
13-
onBaseCurrencyChange: (newCurrency: string) => void;
14-
onTargetCurrencyChange: (newCurrency: string) => void;
15-
onBaseValueChange: (newCurrency: string) => void;
16-
onTargetValueChange: (newCurrency: string) => void;
13+
onBaseCurrencyChange: (newCurrency: string) => FluxStandardAction<string>;
14+
onTargetCurrencyChange: (newCurrency: string) => FluxStandardAction<string>;
15+
onBaseValueChange: (newCurrency: string) => FluxStandardAction<string>;
16+
onTargetValueChange: (newCurrency: string) => FluxStandardAction<string>;
1717
}
1818

1919
interface LocalState {
@@ -38,7 +38,7 @@ export class CurrencyConverter extends React.Component<LocalProps, LocalState> {
3838
<div className="o-grid__cell">
3939
<CurrencySelect
4040
currencies={currencies}
41-
selectedCurrency={baseCurrency}
41+
value={baseCurrency}
4242
onChange={onBaseCurrencyChange}
4343
/>
4444
<CurrencyInput
@@ -49,7 +49,7 @@ export class CurrencyConverter extends React.Component<LocalProps, LocalState> {
4949
<div className="o-grid__cell">
5050
<CurrencySelect
5151
currencies={currencies}
52-
selectedCurrency={targetCurrency}
52+
value={targetCurrency}
5353
onChange={onTargetCurrencyChange}
5454
/>
5555
<CurrencyInput

src/containers/currency-converter-container/components/currency-input.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
import * as React from 'react';
2+
interface IProps {
3+
value: number;
4+
onChange: (newValue: string) => FluxStandardAction<string>;
5+
}
6+
7+
export function CurrencyInput({value = 0, onChange = null}: IProps) {
8+
9+
const handleChange = (ev) => {
10+
onChange(ev.target.value);
11+
};
212

3-
export function CurrencyInput({value, onChange}) {
413
return (
514
<div className="u-letter-box--medium">
615
<input
716
className="c-field c-field--xlarge"
817
type="text"
918
value={value}
10-
onChange={onChange}
11-
onBlur={onChange}
19+
onChange={handleChange}
20+
onBlur={handleChange}
1221
/>
1322
</div>
1423
);

src/containers/currency-converter-container/components/currency-select.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
11
import * as React from 'react';
2+
interface IProps {
3+
currencies: string[];
4+
value: string;
5+
onChange: (newValue: string) => FluxStandardAction<string>;
6+
}
7+
8+
export function CurrencySelect({currencies = [], value = null, onChange = null}: IProps) {
9+
10+
const handleChange = (ev) => {
11+
onChange(ev.target.value);
12+
};
213

3-
export function CurrencySelect({currencies, selectedCurrency, onChange}) {
414
return (
5-
<select className="c-choice c-choice--padded"
6-
value={selectedCurrency} onChange={onChange}>
15+
<select
16+
className="c-choice c-choice--padded"
17+
value={value}
18+
onChange={handleChange}>
719
{currencies.map(currency =>
820
<option key={currency}>{currency}</option>
921
)}

src/reducers/currency-converter-reducer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const initialState = Immutable({
2121
targetValue: 0
2222
});
2323

24-
export default function reducer(state = initialState, action: FluxStandardAction<any> = {}) {
24+
export default function reducer(state = initialState, action: FluxStandardAction<any>) {
2525
switch (action.type) {
2626
case UPDATE_BASE_CURRENCY:
2727
return state.merge({

0 commit comments

Comments
 (0)