mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	refactor: create ApplicationList component
This commit is contained in:
		
							parent
							
								
									c316382ba5
								
							
						
					
					
						commit
						fb403255ef
					
				
							
								
								
									
										70
									
								
								frontend/src/component/application/ApplicationList.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								frontend/src/component/application/ApplicationList.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| import React, { Component, useEffect } from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import { CircularProgress } from '@material-ui/core'; | ||||
| import { Warning } from '@material-ui/icons'; | ||||
| 
 | ||||
| import { AppsLinkList, styles as commonStyles } from '../common'; | ||||
| import SearchField from '../common/SearchField/SearchField'; | ||||
| import PageContent from '../common/PageContent/PageContent'; | ||||
| import HeaderTitle from '../common/HeaderTitle'; | ||||
| import useApplications from '../../hooks/api/getters/useApplications/useApplications'; | ||||
| 
 | ||||
| const ApplicationList = () => { | ||||
|     //missing useSettings
 | ||||
|     const { applications, refetchApplications } = useApplications(); | ||||
| 
 | ||||
|     useEffect(() => { | ||||
|         refetchApplications(); | ||||
|     }, []); | ||||
| 
 | ||||
|     if (!applications) { | ||||
|         return <CircularProgress variant="indeterminate" />; | ||||
|     } | ||||
|     return ( | ||||
|         <> | ||||
|             <div className={commonStyles.searchField}> | ||||
|                 <SearchField | ||||
|                     value={this.props.settings.filter} | ||||
|                     updateValue={this.props.updateSetting.bind(this, 'filter')} | ||||
|                 /> | ||||
|             </div> | ||||
|             <PageContent headerContent={<HeaderTitle title="Applications" />}> | ||||
|                 <div className={commonStyles.fullwidth}> | ||||
|                     {applications.length > 0 ? ( | ||||
|                         <AppsLinkList apps={applications} /> | ||||
|                     ) : ( | ||||
|                         <Empty /> | ||||
|                     )} | ||||
|                 </div> | ||||
|             </PageContent> | ||||
|         </> | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| export default ApplicationList; | ||||
| 
 | ||||
| const Empty = () => ( | ||||
|     <React.Fragment> | ||||
|         <section style={{ textAlign: 'center' }}> | ||||
|             <Warning /> <br /> | ||||
|             <br /> | ||||
|             Oh snap, it does not seem like you have connected any applications. | ||||
|             To connect your application to Unleash you will require a Client | ||||
|             SDK. | ||||
|             <br /> | ||||
|             <br /> | ||||
|             You can read more about how to use Unleash in your application in | ||||
|             the{' '} | ||||
|             <a href="https://docs.getunleash.io/docs/sdks/">documentation.</a> | ||||
|         </section> | ||||
|     </React.Fragment> | ||||
| ); | ||||
| 
 | ||||
| class ClientStrategies extends Component { | ||||
|     static propTypes = { | ||||
|         applications: PropTypes.array, | ||||
|         fetchAll: PropTypes.func.isRequired, | ||||
|         settings: PropTypes.object.isRequired, | ||||
|         updateSetting: PropTypes.func.isRequired, | ||||
|     }; | ||||
| } | ||||
							
								
								
									
										70
									
								
								frontend/src/component/application/ApplicationUpdate.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								frontend/src/component/application/ApplicationUpdate.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| import { useState } from 'react'; | ||||
| import { TextField, Grid } from '@material-ui/core'; | ||||
| import { useCommonStyles } from '../../common.styles'; | ||||
| import icons from './icon-names'; | ||||
| import GeneralSelect from '../common/GeneralSelect/GeneralSelect'; | ||||
| import useApplicationsApi from '../../hooks/api/actions/useApplicationsApi/useApplicationsApi'; | ||||
| 
 | ||||
| const ApplicationUpdate = ({ application }) => { | ||||
|     const { storeApplicationMetaData } = useApplicationsApi(); | ||||
|     const { appName, icon, url, description } = application; | ||||
|     const [localUrl, setLocalUrl] = useState(url); | ||||
|     const [localDescription, setLocalDescription] = useState(description); | ||||
|     const commonStyles = useCommonStyles(); | ||||
| 
 | ||||
|     return ( | ||||
|         <Grid container style={{ marginTop: '1rem' }}> | ||||
|             <Grid item sm={12} xs={12} className={commonStyles.contentSpacingY}> | ||||
|                 <Grid item> | ||||
|                     <GeneralSelect | ||||
|                         name="iconSelect" | ||||
|                         id="selectIcon" | ||||
|                         label="Icon" | ||||
|                         options={icons.map(v => ({ key: v, label: v }))} | ||||
|                         value={icon || 'apps'} | ||||
|                         onChange={e => | ||||
|                             storeApplicationMetaData( | ||||
|                                 appName, | ||||
|                                 'icon', | ||||
|                                 e.target.value as string | ||||
|                             ) | ||||
|                         } | ||||
|                     /> | ||||
|                 </Grid> | ||||
|                 <Grid item> | ||||
|                     <TextField | ||||
|                         value={localUrl} | ||||
|                         onChange={e => setLocalUrl(e.target.value)} | ||||
|                         label="Application URL" | ||||
|                         placeholder="https://example.com" | ||||
|                         type="url" | ||||
|                         variant="outlined" | ||||
|                         size="small" | ||||
|                         onBlur={() => | ||||
|                             storeApplicationMetaData(appName, 'url', localUrl) | ||||
|                         } | ||||
|                     /> | ||||
|                 </Grid> | ||||
|                 <Grid item> | ||||
|                     <TextField | ||||
|                         value={localDescription} | ||||
|                         label="Description" | ||||
|                         variant="outlined" | ||||
|                         size="small" | ||||
|                         rows={2} | ||||
|                         onChange={e => setLocalDescription(e.target.value)} | ||||
|                         onBlur={() => | ||||
|                             storeApplicationMetaData( | ||||
|                                 appName, | ||||
|                                 'description', | ||||
|                                 localDescription | ||||
|                             ) | ||||
|                         } | ||||
|                     /> | ||||
|                 </Grid> | ||||
|             </Grid> | ||||
|         </Grid> | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| export default ApplicationUpdate; | ||||
| @ -18,7 +18,7 @@ import { | ||||
| } from '../common/util'; | ||||
| import { UPDATE_APPLICATION } from '../providers/AccessProvider/permissions'; | ||||
| import ApplicationView from './ApplicationView'; | ||||
| import ApplicationUpdate from './application-update'; | ||||
| import ApplicationUpdate from './ApplicationUpdate'; | ||||
| import TabNav from '../common/TabNav/TabNav'; | ||||
| import Dialogue from '../common/Dialogue'; | ||||
| import PageContent from '../common/PageContent'; | ||||
| @ -67,7 +67,6 @@ const EditApplication = () => { | ||||
|             title="Are you sure you want to delete this application?" | ||||
|         /> | ||||
|     ); | ||||
| 
 | ||||
|     const tabData = [ | ||||
|         { | ||||
|             label: 'Application overview', | ||||
| @ -75,12 +74,7 @@ const EditApplication = () => { | ||||
|         }, | ||||
|         { | ||||
|             label: 'Edit application', | ||||
|             component: ( | ||||
|                 <ApplicationUpdate | ||||
|                     application={application} | ||||
|                     storeApplicationMetaData={storeApplicationMetaData} | ||||
|                 /> | ||||
|             ), | ||||
|             component: <ApplicationUpdate application={application} />, | ||||
|         }, | ||||
|     ]; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user