mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-09 00:18:00 +01:00
refactor: detach ApplicationList from global settings (#666)
* refactor: add missing prop-types dependency * refactor: detach ApplicationList from global settings * refactor: destructure props inline Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>
This commit is contained in:
parent
dfe8250c26
commit
d146c1fcf9
@ -71,6 +71,7 @@
|
|||||||
"lodash.flow": "3.5.0",
|
"lodash.flow": "3.5.0",
|
||||||
"node-fetch": "2.6.7",
|
"node-fetch": "2.6.7",
|
||||||
"prettier": "2.5.1",
|
"prettier": "2.5.1",
|
||||||
|
"prop-types": "^15.8.1",
|
||||||
"react": "17.0.2",
|
"react": "17.0.2",
|
||||||
"react-dnd": "14.0.5",
|
"react-dnd": "14.0.5",
|
||||||
"react-dnd-html5-backend": "14.1.0",
|
"react-dnd-html5-backend": "14.1.0",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { CircularProgress } from '@material-ui/core';
|
import { CircularProgress } from '@material-ui/core';
|
||||||
import { Warning } from '@material-ui/icons';
|
import { Warning } from '@material-ui/icons';
|
||||||
@ -25,41 +25,33 @@ const Empty = () => (
|
|||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
|
||||||
class ClientStrategies extends Component {
|
const ClientStrategies = ({ fetchAll, applications }) => {
|
||||||
static propTypes = {
|
const [filter, setFilter] = useState('');
|
||||||
applications: PropTypes.array,
|
|
||||||
fetchAll: PropTypes.func.isRequired,
|
|
||||||
settings: PropTypes.object.isRequired,
|
|
||||||
updateSetting: PropTypes.func.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount() {
|
useEffect(() => {
|
||||||
this.props.fetchAll();
|
fetchAll();
|
||||||
}
|
}, [fetchAll]);
|
||||||
|
|
||||||
render() {
|
const filteredApplications = useMemo(() => {
|
||||||
const { applications } = this.props;
|
const regExp = new RegExp(filter, 'i');
|
||||||
|
return filter
|
||||||
|
? applications?.filter(a => regExp.test(a.appName))
|
||||||
|
: applications;
|
||||||
|
}, [applications, filter]);
|
||||||
|
|
||||||
if (!applications) {
|
if (!filteredApplications) {
|
||||||
return <CircularProgress variant="indeterminate" />;
|
return <CircularProgress variant="indeterminate" />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className={commonStyles.searchField}>
|
<div className={commonStyles.searchField}>
|
||||||
<SearchField
|
<SearchField value={filter} updateValue={setFilter} />
|
||||||
value={this.props.settings.filter}
|
|
||||||
updateValue={this.props.updateSetting.bind(
|
|
||||||
this,
|
|
||||||
'filter'
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<PageContent
|
<PageContent headerContent={<HeaderTitle title="Applications" />}>
|
||||||
headerContent={<HeaderTitle title="Applications" />}
|
|
||||||
>
|
|
||||||
<div className={commonStyles.fullwidth}>
|
<div className={commonStyles.fullwidth}>
|
||||||
{applications.length > 0 ? (
|
{filteredApplications.length > 0 ? (
|
||||||
<AppsLinkList apps={applications} />
|
<AppsLinkList apps={filteredApplications} />
|
||||||
) : (
|
) : (
|
||||||
<Empty />
|
<Empty />
|
||||||
)}
|
)}
|
||||||
@ -67,7 +59,11 @@ class ClientStrategies extends Component {
|
|||||||
</PageContent>
|
</PageContent>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
ClientStrategies.propTypes = {
|
||||||
|
applications: PropTypes.array,
|
||||||
|
fetchAll: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
export default ClientStrategies;
|
export default ClientStrategies;
|
||||||
|
@ -1,20 +1,14 @@
|
|||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import ApplicationList from './application-list-component';
|
import ApplicationList from './application-list-component';
|
||||||
import { fetchAll } from './../../store/application/actions';
|
import { fetchAll } from '../../store/application/actions';
|
||||||
import { updateSettingForGroup } from '../../store/settings/actions';
|
|
||||||
|
|
||||||
const mapStateToProps = state => {
|
const mapStateToProps = state => ({
|
||||||
const applications = state.applications.get('list').toJS();
|
applications: state.applications.get('list').toJS(),
|
||||||
const settings = state.settings.toJS().application || {};
|
});
|
||||||
|
|
||||||
const regex = new RegExp(settings.filter, 'i');
|
const mapDispatchToProps = {
|
||||||
|
fetchAll,
|
||||||
return {
|
|
||||||
applications: settings.filter ? applications.filter(a => regex.test(a.appName)) : applications,
|
|
||||||
settings,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
const mapDispatchToProps = { fetchAll, updateSetting: updateSettingForGroup('application') };
|
|
||||||
|
|
||||||
const Container = connect(mapStateToProps, mapDispatchToProps)(ApplicationList);
|
const Container = connect(mapStateToProps, mapDispatchToProps)(ApplicationList);
|
||||||
|
|
||||||
|
@ -10062,6 +10062,15 @@ prop-types@^15.6.2, prop-types@^15.7.2:
|
|||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
react-is "^16.8.1"
|
react-is "^16.8.1"
|
||||||
|
|
||||||
|
prop-types@^15.8.1:
|
||||||
|
version "15.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||||
|
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.4.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
react-is "^16.13.1"
|
||||||
|
|
||||||
proxy-addr@~2.0.5:
|
proxy-addr@~2.0.5:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"
|
resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"
|
||||||
|
Loading…
Reference in New Issue
Block a user