diff --git a/frontend/src/component/application/EditApplication.tsx b/frontend/src/component/application/ApplicationEdit.tsx similarity index 98% rename from frontend/src/component/application/EditApplication.tsx rename to frontend/src/component/application/ApplicationEdit.tsx index d431754d4f..edfd3b1667 100644 --- a/frontend/src/component/application/EditApplication.tsx +++ b/frontend/src/component/application/ApplicationEdit.tsx @@ -27,7 +27,7 @@ import useApplication from '../../hooks/api/getters/useApplication/useApplicatio import { useHistory, useParams } from 'react-router-dom'; import { useLocationSettings } from '../../hooks/useLocationSettings'; -const EditApplication = () => { +const ApplicationEdit = () => { const history = useHistory(); const { name } = useParams<{ name: string }>(); const { refetchApplication, application } = useApplication(name); @@ -36,8 +36,6 @@ const EditApplication = () => { const { deleteApplication } = useApplicationsApi(); const { locationSettings } = useLocationSettings(); - console.log(locationSettings) - const [loading, setLoading] = useState(true); const [showDialog, setShowDialog] = useState(false); @@ -153,4 +151,4 @@ const EditApplication = () => { ); }; -export default EditApplication; +export default ApplicationEdit; diff --git a/frontend/src/component/application/ApplicationUpdate.tsx b/frontend/src/component/application/ApplicationUpdate.tsx index 29c7587472..c6e425aa12 100644 --- a/frontend/src/component/application/ApplicationUpdate.tsx +++ b/frontend/src/component/application/ApplicationUpdate.tsx @@ -5,7 +5,23 @@ import icons from './icon-names'; import GeneralSelect from '../common/GeneralSelect/GeneralSelect'; import useApplicationsApi from '../../hooks/api/actions/useApplicationsApi/useApplicationsApi'; -const ApplicationUpdate = ({ application }) => { +interface IApplication { + appName: string; + color: string; + createdAt: string; + description: string; + icon: string; + instances: []; + links: object; + seenToggles: []; + strategies: []; + url: string; +} +interface IApplicationUpdateProps { + application: IApplication; +} + +const ApplicationUpdate = ({ application }: IApplicationUpdateProps) => { const { storeApplicationMetaData } = useApplicationsApi(); const { appName, icon, url, description } = application; const [localUrl, setLocalUrl] = useState(url || ''); diff --git a/frontend/src/component/application/application-edit-component.js b/frontend/src/component/application/application-edit-component.js deleted file mode 100644 index f242e5b37c..0000000000 --- a/frontend/src/component/application/application-edit-component.js +++ /dev/null @@ -1,196 +0,0 @@ -/* eslint react/no-multi-comp:off */ -import React, { PureComponent } from 'react'; -import PropTypes from 'prop-types'; - -import { - Avatar, - Link, - Icon, - IconButton, - Button, - LinearProgress, - Typography, -} from '@material-ui/core'; -import { Link as LinkIcon } from '@material-ui/icons'; - -import ConditionallyRender from '../common/ConditionallyRender/ConditionallyRender'; -import { - formatFullDateTimeWithLocale, - formatDateWithLocale, -} from '../common/util'; -import { UPDATE_APPLICATION } from '../providers/AccessProvider/permissions'; -import ApplicationView from './ApplicationView'; -import ApplicationUpdate from './application-update'; -import TabNav from '../common/TabNav/TabNav'; -import Dialogue from '../common/Dialogue'; -import PageContent from '../common/PageContent'; -import HeaderTitle from '../common/HeaderTitle'; -import AccessContext from '../../contexts/AccessContext'; -class ClientApplications extends PureComponent { - static contextType = AccessContext; - - static propTypes = { - fetchApplication: PropTypes.func.isRequired, - appName: PropTypes.string, - application: PropTypes.object, - locationSettings: PropTypes.object.isRequired, - storeApplicationMetaData: PropTypes.func.isRequired, - deleteApplication: PropTypes.func.isRequired, - history: PropTypes.object.isRequired, - }; - - constructor(props) { - super(); - this.state = { - activeTab: 0, - loading: !props.application, - prompt: false, - }; - } - - componentDidMount() { - this.props - .fetchApplication(this.props.appName) - .finally(() => this.setState({ loading: false })); - } - formatFullDateTime = v => - formatFullDateTimeWithLocale(v, this.props.locationSettings.locale); - formatDate = v => formatDateWithLocale(v, this.props.locationSettings.locale); - - deleteApplication = async evt => { - evt.preventDefault(); - // if (window.confirm('Are you sure you want to remove this application?')) { - const { deleteApplication, appName } = this.props; - await deleteApplication(appName); - this.props.history.push('/applications'); - // } - }; - - render() { - if (this.state.loading) { - return ( -
-

Loading...

- -
- ); - } else if (!this.props.application) { - return

Application ({this.props.appName}) not found

; - } - const { hasAccess } = this.context; - const { application, storeApplicationMetaData } = this.props; - const { - appName, - instances, - strategies, - seenToggles, - url, - description, - icon = 'apps', - createdAt, - } = application; - - const toggleModal = () => { - this.setState(prev => ({ ...prev, prompt: !prev.prompt })); - }; - - const renderModal = () => ( - - ); - - const tabData = [ - { - label: 'Application overview', - component: ( - - ), - }, - { - label: 'Edit application', - component: ( - - ), - }, - ]; - - return ( - - - {icon || 'apps'} - - {appName} - - } - actions={ - <> - - - - } - /> - - - Delete - - } - /> - - } - /> - } - > -
- {description || ''} - - Created: {this.formatDate(createdAt)} - -
- - {renderModal()} - - - - } - /> -
- ); - } -} - -export default ClientApplications; diff --git a/frontend/src/component/application/application-edit-container.jsx b/frontend/src/component/application/application-edit-container.jsx deleted file mode 100644 index 4c732b0ed5..0000000000 --- a/frontend/src/component/application/application-edit-container.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import { connect } from 'react-redux'; -import ApplicationEdit from './application-edit-component'; -import { - deleteApplication, - fetchApplication, - storeApplicationMetaData, -} from '../../store/application/actions'; -import { useLocationSettings } from '../../hooks/useLocationSettings'; - -const ApplicationEditContainer = props => { - const { locationSettings } = useLocationSettings(); - - return ; -}; - -const mapStateToProps = (state, props) => { - let application = state.applications.getIn(['apps', props.appName]); - if (application) { - application = application.toJS(); - } - return { - application, - }; -}; - -export default connect(mapStateToProps, { - fetchApplication, - storeApplicationMetaData, - deleteApplication, -})(ApplicationEditContainer); diff --git a/frontend/src/component/application/application-list-component.js b/frontend/src/component/application/application-list-component.js deleted file mode 100644 index 65da487cfe..0000000000 --- a/frontend/src/component/application/application-list-component.js +++ /dev/null @@ -1,69 +0,0 @@ -import React, { useEffect, useMemo, useState } 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'; - -const Empty = () => ( - -
-
-
- Oh snap, it does not seem like you have connected any applications. - To connect your application to Unleash you will require a Client - SDK. -
-
- You can read more about how to use Unleash in your application in - the{' '} - documentation. -
-
-); - -const ClientStrategies = ({ fetchAll, applications }) => { - const [filter, setFilter] = useState(''); - - 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 ; - } - - return ( - <> -
- -
- }> -
- {filteredApplications.length > 0 ? ( - - ) : ( - - )} -
-
- - ); -}; - -ClientStrategies.propTypes = { - applications: PropTypes.array, - fetchAll: PropTypes.func.isRequired, -}; - -export default ClientStrategies; diff --git a/frontend/src/component/application/application-list-container.js b/frontend/src/component/application/application-list-container.js deleted file mode 100644 index 201ceece2d..0000000000 --- a/frontend/src/component/application/application-list-container.js +++ /dev/null @@ -1,15 +0,0 @@ -import { connect } from 'react-redux'; -import ApplicationList from './application-list-component'; -import { fetchAll } from '../../store/application/actions'; - -const mapStateToProps = state => ({ - applications: state.applications.get('list').toJS(), -}); - -const mapDispatchToProps = { - fetchAll, -}; - -const Container = connect(mapStateToProps, mapDispatchToProps)(ApplicationList); - -export default Container; diff --git a/frontend/src/component/application/application-update.jsx b/frontend/src/component/application/application-update.jsx deleted file mode 100644 index 842d088b4d..0000000000 --- a/frontend/src/component/application/application-update.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { TextField, Grid } from '@material-ui/core'; -import { useCommonStyles } from '../../common.styles'; -import icons from './icon-names'; -import GeneralSelect from '../common/GeneralSelect/GeneralSelect'; - -function ApplicationUpdate({ application, storeApplicationMetaData }) { - const { appName, icon, url, description } = application; - const [localUrl, setLocalUrl] = useState(url); - const [localDescription, setLocalDescription] = useState(description); - const commonStyles = useCommonStyles(); - - return ( - - - - ({ key: v, label: v }))} - value={icon || 'apps'} - onChange={e => - storeApplicationMetaData( - appName, - 'icon', - e.target.value - ) - } - /> - - - setLocalUrl(e.target.value)} - label="Application URL" - placeholder="https://example.com" - type="url" - variant="outlined" - size="small" - onBlur={() => - storeApplicationMetaData(appName, 'url', localUrl) - } - /> - - - setLocalDescription(e.target.value)} - onBlur={() => - storeApplicationMetaData( - appName, - 'description', - localDescription - ) - } - /> - - - - ); -} - -ApplicationUpdate.propTypes = { - application: PropTypes.object.isRequired, - storeApplicationMetaData: PropTypes.func.isRequired, -}; - -export default ApplicationUpdate; diff --git a/frontend/src/component/application/icon-names.js b/frontend/src/component/application/icon-names.ts similarity index 100% rename from frontend/src/component/application/icon-names.js rename to frontend/src/component/application/icon-names.ts diff --git a/frontend/src/component/menu/routes.js b/frontend/src/component/menu/routes.js index b79a753365..c39561f1b7 100644 --- a/frontend/src/component/menu/routes.js +++ b/frontend/src/component/menu/routes.js @@ -41,7 +41,7 @@ import EditProject from '../project/Project/EditProject/EditProject'; import CreateProject from '../project/Project/CreateProject/CreateProject'; import CreateFeature from '../feature/CreateFeature/CreateFeature'; import EditFeature from '../feature/EditFeature/EditFeature'; -import EditApplication from '../application/EditApplication'; +import ApplicationEdit from '../application/ApplicationEdit'; import ApplicationList from '../application/ApplicationList'; import ContextList from '../context/ContextList/ContextList'; import RedirectFeatureView from '../feature/RedirectFeatureView/RedirectFeatureView'; @@ -194,7 +194,7 @@ export const routes = [ path: '/applications/:name', title: ':name', parent: '/applications', - component: EditApplication, + component: ApplicationEdit, type: 'protected', layout: 'main', menu: {},