mirror of
https://github.com/status-im/MyCrypto.git
synced 2025-02-16 04:57:08 +00:00
* Align footer to bottom * Fix request payment offset padding * Update request payment padding * Add new Input and Dropdown components * Fix offset margins in equiv vals * Update all send tx inputs & dropdowns * Update generate wallet dropdowns * Update inputs & dropdowns for contracts tab * Add inputs & dropdowns for all but swap tab * amend * Fix imports * inputs are invalid when not disabled or readonly * Fix offset refresh button * Add togglable password back to wallet generation * Update swap inputs, textareas, and dropdowns * Update any outstanding inputs * Make UnitDropDown searchable * unitdropdown searchanble if options > 10 * Fix css issues * Reset before setting currentTo
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import React, { PureComponent } from 'react';
|
|
import './SwapDropdown.scss';
|
|
import { DropDown } from 'components/ui';
|
|
|
|
export interface SingleCoin {
|
|
id: string;
|
|
name: string;
|
|
image: string;
|
|
status: string;
|
|
}
|
|
|
|
interface Props<T> {
|
|
options: SingleCoin[];
|
|
value: string;
|
|
onChange(value: T): void;
|
|
}
|
|
|
|
const ValueComp: React.SFC = (props: any) => {
|
|
return (
|
|
<div className={`${props.className} swap-option-wrapper`}>
|
|
<img src={props.value.img} className="swap-option-img" />
|
|
<span className="swap-option-label">{props.value.label}</span>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const OptionComp: React.SFC = (props: any) => {
|
|
const handleMouseDown = event => {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
props.onSelect(props.option, event);
|
|
};
|
|
const handleMouseEnter = event => {
|
|
props.onFocus(props.option, event);
|
|
};
|
|
const handleMouseMove = event => {
|
|
if (props.isFocused) {
|
|
return;
|
|
}
|
|
props.onFocus(props.option, event);
|
|
};
|
|
return (
|
|
<div
|
|
className={`${props.className} swap-option-wrapper`}
|
|
onMouseDown={handleMouseDown}
|
|
onMouseEnter={handleMouseEnter}
|
|
onMouseMove={handleMouseMove}
|
|
>
|
|
<img src={props.option.img} className="swap-option-img" />
|
|
<span className="swap-option-label">{props.option.label}</span>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
class SwapDropdown<T> extends PureComponent<Props<T>> {
|
|
public render() {
|
|
const { options, value, onChange } = this.props;
|
|
const mappedOptions = options.map(opt => {
|
|
return { label: opt.id, value: opt.name, img: opt.image, status: opt.status };
|
|
});
|
|
return (
|
|
<DropDown
|
|
className="Swap-dropdown"
|
|
options={mappedOptions}
|
|
optionComponent={(props: any) => {
|
|
return <OptionComp {...props} />;
|
|
}}
|
|
value={value}
|
|
clearable={false}
|
|
onChange={onChange}
|
|
valueComponent={(props: any) => {
|
|
return <ValueComp {...props} />;
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default SwapDropdown;
|