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';
|
} from '../common/util';
|
||||||
import { UPDATE_APPLICATION } from '../providers/AccessProvider/permissions';
|
import { UPDATE_APPLICATION } from '../providers/AccessProvider/permissions';
|
||||||
import ApplicationView from './ApplicationView';
|
import ApplicationView from './ApplicationView';
|
||||||
import ApplicationUpdate from './application-update';
|
import ApplicationUpdate from './ApplicationUpdate';
|
||||||
import TabNav from '../common/TabNav/TabNav';
|
import TabNav from '../common/TabNav/TabNav';
|
||||||
import Dialogue from '../common/Dialogue';
|
import Dialogue from '../common/Dialogue';
|
||||||
import PageContent from '../common/PageContent';
|
import PageContent from '../common/PageContent';
|
||||||
@ -67,7 +67,6 @@ const EditApplication = () => {
|
|||||||
title="Are you sure you want to delete this application?"
|
title="Are you sure you want to delete this application?"
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
const tabData = [
|
const tabData = [
|
||||||
{
|
{
|
||||||
label: 'Application overview',
|
label: 'Application overview',
|
||||||
@ -75,12 +74,7 @@ const EditApplication = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit application',
|
label: 'Edit application',
|
||||||
component: (
|
component: <ApplicationUpdate application={application} />,
|
||||||
<ApplicationUpdate
|
|
||||||
application={application}
|
|
||||||
storeApplicationMetaData={storeApplicationMetaData}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user