I do not like how the alert component is hyper specialized for two distinct use cases. It would be much better to refactor the alerts so that the alerter can just fill the alert with whatever they want. But I do not feel comfortable making that refactor because I know ben and evelyn have gone back and forth about these alerts.
98 lines
2.9 KiB
React
98 lines
2.9 KiB
React
import React from 'react';
|
|
import bindAll from 'lodash.bindall';
|
|
import PropTypes from 'prop-types';
|
|
import {connect} from 'react-redux';
|
|
import SB3Downloader from './sb3-downloader.jsx';
|
|
import AlertComponent from '../components/alerts/alert.jsx';
|
|
import {openConnectionModal} from '../reducers/modals';
|
|
import {setConnectionModalExtensionId} from '../reducers/connection-modal';
|
|
import {manualUpdateProject} from '../reducers/project-state';
|
|
|
|
class Alert extends React.Component {
|
|
constructor (props) {
|
|
super(props);
|
|
bindAll(this, [
|
|
'handleOnCloseAlert',
|
|
'handleOnReconnect'
|
|
]);
|
|
}
|
|
handleOnCloseAlert () {
|
|
this.props.onCloseAlert(this.props.index);
|
|
}
|
|
handleOnReconnect () {
|
|
this.props.onOpenConnectionModal(this.props.extensionId);
|
|
this.handleOnCloseAlert();
|
|
}
|
|
render () {
|
|
const {
|
|
closeButton,
|
|
content,
|
|
extensionName,
|
|
index, // eslint-disable-line no-unused-vars
|
|
level,
|
|
iconSpinner,
|
|
iconURL,
|
|
message,
|
|
onSaveNow,
|
|
showDownload,
|
|
showReconnect,
|
|
showSaveNow
|
|
} = this.props;
|
|
return (
|
|
<SB3Downloader>{(_, downloadProject) => (
|
|
<AlertComponent
|
|
closeButton={closeButton}
|
|
content={content}
|
|
extensionName={extensionName}
|
|
iconSpinner={iconSpinner}
|
|
iconURL={iconURL}
|
|
level={level}
|
|
message={message}
|
|
showDownload={showDownload}
|
|
showReconnect={showReconnect}
|
|
showSaveNow={showSaveNow}
|
|
onCloseAlert={this.handleOnCloseAlert}
|
|
onDownload={downloadProject}
|
|
onReconnect={this.handleOnReconnect}
|
|
onSaveNow={onSaveNow}
|
|
/>
|
|
)}</SB3Downloader>
|
|
);
|
|
}
|
|
}
|
|
|
|
const mapStateToProps = () => ({});
|
|
|
|
const mapDispatchToProps = dispatch => ({
|
|
onOpenConnectionModal: id => {
|
|
dispatch(setConnectionModalExtensionId(id));
|
|
dispatch(openConnectionModal());
|
|
},
|
|
onSaveNow: () => {
|
|
dispatch(manualUpdateProject());
|
|
}
|
|
});
|
|
|
|
Alert.propTypes = {
|
|
closeButton: PropTypes.bool,
|
|
content: PropTypes.element,
|
|
extensionId: PropTypes.string,
|
|
extensionName: PropTypes.string,
|
|
iconSpinner: PropTypes.bool,
|
|
iconURL: PropTypes.string,
|
|
index: PropTypes.number,
|
|
level: PropTypes.string.isRequired,
|
|
message: PropTypes.string,
|
|
onCloseAlert: PropTypes.func.isRequired,
|
|
onOpenConnectionModal: PropTypes.func,
|
|
onSaveNow: PropTypes.func,
|
|
showDownload: PropTypes.bool,
|
|
showReconnect: PropTypes.bool,
|
|
showSaveNow: PropTypes.bool
|
|
};
|
|
|
|
export default connect(
|
|
mapStateToProps,
|
|
mapDispatchToProps
|
|
)(Alert);
|