MyCrypto/common/components/ui/Expandable.tsx
William O'Beirne d1a2c885a2 Performance Improvements (Pure components, debounced gas slider) (#899)
* PureComponent a ton of non-connected components.

* Debounce gas price slider. Keep gas price in state to reflect changes immediately.

* PureComponent balance sidebar and swap unconnected components.

* Import correct component.

* Move debouncing of gas slider to sagas via gasPriceInputIntent action.

* Remove console log.

* Remove leftover file from merge.
2018-01-29 13:13:46 -06:00

31 lines
780 B
TypeScript

import React, { PureComponent } from 'react';
export type ExpandHandler = (ev: React.FormEvent<HTMLAnchorElement>) => void;
interface Props {
children: React.ReactElement<any>;
expandLabel(expandHandler: ExpandHandler): React.ReactElement<any>;
}
interface State {
expanded: boolean;
}
const initialState: State = { expanded: false };
export class Expandable extends PureComponent<Props, State> {
public state: State = initialState;
public render() {
return (
<React.Fragment>
{this.props.expandLabel(this.expandHandler)}
{this.state.expanded && this.props.children}
</React.Fragment>
);
}
private expandHandler = (_: React.FormEvent<HTMLAnchorElement>) =>
this.setState(({ expanded }) => ({ expanded: !expanded }));
}