redux-devtools/packages/redux-devtools-app-core/src/components/Settings/Themes.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

61 lines
1.6 KiB
TypeScript

import React, { Component } from 'react';
import { connect, ResolveThunks } from 'react-redux';
import { Container, Form } from '@redux-devtools/ui';
import { listSchemes, listThemes } from '@redux-devtools/ui';
import { changeTheme } from '../../actions';
import { CoreStoreState } from '../../reducers';
type StateProps = ReturnType<typeof mapStateToProps>;
type DispatchProps = ResolveThunks<typeof actionCreators>;
type Props = StateProps & DispatchProps;
export class Themes extends Component<Props> {
render() {
const theme = this.props.theme;
const formData = {
theme: theme.theme,
scheme: theme.scheme,
colorPreference: theme.colorPreference,
};
return (
<Container>
<Form
schema={{
type: 'object',
properties: {
theme: {
type: 'string',
enum: listThemes(),
},
scheme: {
title: 'color scheme',
type: 'string',
enum: listSchemes(),
},
colorPreference: {
title: 'theme color',
type: 'string',
enum: ['auto', 'light', 'dark'],
},
},
}}
formData={formData}
noSubmit
onChange={this.props.changeTheme}
/>
</Container>
);
}
}
const mapStateToProps = (state: CoreStoreState) => ({
theme: state.theme,
});
const actionCreators = {
changeTheme,
};
export default connect(mapStateToProps, actionCreators)(Themes);