1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

refactor: finish ApplicationList and add it to routes

This commit is contained in:
Youssef 2022-02-04 16:26:51 +01:00
parent fb403255ef
commit f342d4d904
5 changed files with 40 additions and 44 deletions

View File

@ -1,5 +1,4 @@
import React, { Component, useEffect } from 'react';
import PropTypes from 'prop-types';
import React, { useEffect, useMemo, useState } from 'react';
import { CircularProgress } from '@material-ui/core';
import { Warning } from '@material-ui/icons';
@ -10,28 +9,52 @@ import HeaderTitle from '../common/HeaderTitle';
import useApplications from '../../hooks/api/getters/useApplications/useApplications';
const ApplicationList = () => {
//missing useSettings
const { applications, refetchApplications } = useApplications();
const [filter, setFilter] = useState('');
useEffect(() => {
refetchApplications();
// eslint-disable-next-line
}, []);
if (!applications) {
const filteredApplications = useMemo(() => {
const regExp = new RegExp(filter, 'i');
return filter
? applications?.filter(a => regExp.test(a.appName))
: applications;
}, [applications, filter]);
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>
);
if (!filteredApplications) {
return <CircularProgress variant="indeterminate" />;
}
return (
<>
<div className={commonStyles.searchField}>
<SearchField
value={this.props.settings.filter}
updateValue={this.props.updateSetting.bind(this, 'filter')}
/>
<SearchField value={filter} updateValue={setFilter} />
</div>
<PageContent headerContent={<HeaderTitle title="Applications" />}>
<div className={commonStyles.fullwidth}>
{applications.length > 0 ? (
<AppsLinkList apps={applications} />
{filteredApplications.length > 0 ? (
<AppsLinkList apps={filteredApplications} />
) : (
<Empty />
)}
@ -42,29 +65,3 @@ const ApplicationList = () => {
};
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,
};
}

View File

@ -8,8 +8,8 @@ import useApplicationsApi from '../../hooks/api/actions/useApplicationsApi/useAp
const ApplicationUpdate = ({ application }) => {
const { storeApplicationMetaData } = useApplicationsApi();
const { appName, icon, url, description } = application;
const [localUrl, setLocalUrl] = useState(url);
const [localDescription, setLocalDescription] = useState(description);
const [localUrl, setLocalUrl] = useState(url || '');
const [localDescription, setLocalDescription] = useState(description || '');
const commonStyles = useCommonStyles();
return (

View File

@ -34,8 +34,7 @@ const EditApplication = () => {
const { refetchApplication, application } = useApplication(name);
const { appName, url, description, icon = 'apps', createdAt } = application;
const { hasAccess } = useContext(AccessContext);
const { storeApplicationMetaData, deleteApplication } =
useApplicationsApi();
const { deleteApplication } = useApplicationsApi();
const [loading, setLoading] = useState(true);
const [showDialog, setShowDialog] = useState(false);

View File

@ -7,7 +7,7 @@ import SearchIcon from '@material-ui/icons/Search';
import { useStyles } from './styles';
function SearchField({ updateValue, className }) {
function SearchField({ updateValue, className = '' }) {
const styles = useStyles();
const [localValue, setLocalValue] = useState('');

View File

@ -8,7 +8,6 @@ import HistoryPage from '../../page/history';
import HistoryTogglePage from '../../page/history/toggle';
import ShowArchive from '../../page/archive/show';
import Archive from '../../page/archive';
import Applications from '../../page/applications';
import ContextFields from '../../page/context';
import ListTagTypes from '../../page/tag-types';
import Addons from '../../page/addons';
@ -47,6 +46,7 @@ import CreateProject from '../project/Project/CreateProject/CreateProject';
import CreateFeature from '../feature/CreateFeature/CreateFeature/CreateFeature';
import EditFeature from '../feature/CreateFeature/EditFeature/EditFeature';
import EditApplication from '../application/EditApplication';
import ApplicationList from '../application/ApplicationList';
export const routes = [
// Project
@ -203,7 +203,7 @@ export const routes = [
{
path: '/applications',
title: 'Applications',
component: Applications,
component: ApplicationList,
type: 'protected',
layout: 'main',
menu: { mobile: true, advanced: true },