redux-devtools/packages/redux-devtools-app-core/src/components/InstanceSelector.tsx
Matt Oakes 96ac1f291a
Move the logic from @redux-devtools/app into @redux-devtools/app-core (#1655)
This change splits out the main logic from the Redux Devtools App into a new
core package but keeps the socket connection management in @redux-devtools/app.
The aim is to allow for easier reuse of the rest of the app in other envioronments
with their own transport methods, such as React Native or Electron.
2024-06-12 09:18:46 -04:00

45 lines
1.3 KiB
TypeScript

import React, { Component } from 'react';
import { connect, ResolveThunks } from 'react-redux';
import { Select } from '@redux-devtools/ui';
import { selectInstance } from '../actions';
import { CoreStoreState } from '../reducers';
type StateProps = ReturnType<typeof mapStateToProps>;
type DispatchProps = ResolveThunks<typeof actionCreators>;
type Props = StateProps & DispatchProps;
class InstanceSelector extends Component<Props> {
select?: { readonly value: string; readonly label: string | number }[];
render() {
this.select = [{ value: '', label: 'Autoselect instances' }];
const instances = this.props.instances;
let name;
Object.keys(instances).forEach((key) => {
name = instances[key].name;
if (name !== undefined) this.select!.push({ value: key, label: name });
});
return (
<Select
options={this.select}
onChange={(option) => this.props.onSelect(option!.value)}
value={this.select.find(
(option) => option.value === this.props.selected,
)}
/>
);
}
}
const mapStateToProps = (state: CoreStoreState) => ({
selected: state.instances.selected,
instances: state.instances.options,
});
const actionCreators = {
onSelect: selectInstance,
};
export default connect(mapStateToProps, actionCreators)(InstanceSelector);