mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-09 00:18:00 +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