mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +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", | ||||
|     "node-fetch": "2.6.7", | ||||
|     "prettier": "2.5.1", | ||||
|     "prop-types": "^15.8.1", | ||||
|     "react": "17.0.2", | ||||
|     "react-dnd": "14.0.5", | ||||
|     "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 { CircularProgress } from '@material-ui/core'; | ||||
| import { Warning } from '@material-ui/icons'; | ||||
| @ -25,49 +25,45 @@ const Empty = () => ( | ||||
|     </React.Fragment> | ||||
| ); | ||||
| 
 | ||||
| class ClientStrategies extends Component { | ||||
|     static propTypes = { | ||||
|         applications: PropTypes.array, | ||||
|         fetchAll: PropTypes.func.isRequired, | ||||
|         settings: PropTypes.object.isRequired, | ||||
|         updateSetting: PropTypes.func.isRequired, | ||||
|     }; | ||||
| const ClientStrategies = ({ fetchAll, applications }) => { | ||||
|     const [filter, setFilter] = useState(''); | ||||
| 
 | ||||
|     componentDidMount() { | ||||
|         this.props.fetchAll(); | ||||
|     useEffect(() => { | ||||
|         fetchAll(); | ||||
|     }, [fetchAll]); | ||||
| 
 | ||||
|     const filteredApplications = useMemo(() => { | ||||
|         const regExp = new RegExp(filter, 'i'); | ||||
|         return filter | ||||
|             ? applications?.filter(a => regExp.test(a.appName)) | ||||
|             : applications; | ||||
|     }, [applications, filter]); | ||||
| 
 | ||||
|     if (!filteredApplications) { | ||||
|         return <CircularProgress variant="indeterminate" />; | ||||
|     } | ||||
| 
 | ||||
|     render() { | ||||
|         const { applications } = this.props; | ||||
| 
 | ||||
|         if (!applications) { | ||||
|             return <CircularProgress variant="indeterminate" />; | ||||
|         } | ||||
|         return ( | ||||
|             <> | ||||
|                 <div className={commonStyles.searchField}> | ||||
|                     <SearchField | ||||
|                         value={this.props.settings.filter} | ||||
|                         updateValue={this.props.updateSetting.bind( | ||||
|                             this, | ||||
|                             'filter' | ||||
|                         )} | ||||
|                     /> | ||||
|     return ( | ||||
|         <> | ||||
|             <div className={commonStyles.searchField}> | ||||
|                 <SearchField value={filter} updateValue={setFilter} /> | ||||
|             </div> | ||||
|             <PageContent headerContent={<HeaderTitle title="Applications" />}> | ||||
|                 <div className={commonStyles.fullwidth}> | ||||
|                     {filteredApplications.length > 0 ? ( | ||||
|                         <AppsLinkList apps={filteredApplications} /> | ||||
|                     ) : ( | ||||
|                         <Empty /> | ||||
|                     )} | ||||
|                 </div> | ||||
|                 <PageContent | ||||
|                     headerContent={<HeaderTitle title="Applications" />} | ||||
|                 > | ||||
|                     <div className={commonStyles.fullwidth}> | ||||
|                         {applications.length > 0 ? ( | ||||
|                             <AppsLinkList apps={applications} /> | ||||
|                         ) : ( | ||||
|                             <Empty /> | ||||
|                         )} | ||||
|                     </div> | ||||
|                 </PageContent> | ||||
|             </> | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|             </PageContent> | ||||
|         </> | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| ClientStrategies.propTypes = { | ||||
|     applications: PropTypes.array, | ||||
|     fetchAll: PropTypes.func.isRequired, | ||||
| }; | ||||
| 
 | ||||
| export default ClientStrategies; | ||||
|  | ||||
| @ -1,20 +1,14 @@ | ||||
| import { connect } from 'react-redux'; | ||||
| import ApplicationList from './application-list-component'; | ||||
| import { fetchAll } from './../../store/application/actions'; | ||||
| import { updateSettingForGroup } from '../../store/settings/actions'; | ||||
| import { fetchAll } from '../../store/application/actions'; | ||||
| 
 | ||||
| const mapStateToProps = state => { | ||||
|     const applications = state.applications.get('list').toJS(); | ||||
|     const settings = state.settings.toJS().application || {}; | ||||
| const mapStateToProps = state => ({ | ||||
|     applications: state.applications.get('list').toJS(), | ||||
| }); | ||||
| 
 | ||||
|     const regex = new RegExp(settings.filter, 'i'); | ||||
| 
 | ||||
|     return { | ||||
|         applications: settings.filter ? applications.filter(a => regex.test(a.appName)) : applications, | ||||
|         settings, | ||||
|     }; | ||||
| const mapDispatchToProps = { | ||||
|     fetchAll, | ||||
| }; | ||||
| const mapDispatchToProps = { fetchAll, updateSetting: updateSettingForGroup('application') }; | ||||
| 
 | ||||
| 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" | ||||
|     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: | ||||
|   version "2.0.6" | ||||
|   resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user