The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/admin/apps/AppsRoute.js

75 lines
2.0 KiB

import React, { useState, useEffect } from 'react';
import { usePermission } from '../../contexts/AuthorizationContext';
import { useRouteParameter, useRoute, useCurrentRoute } from '../../contexts/RouterContext';
import { useMethod } from '../../contexts/ServerContext';
import NotAuthorizedPage from '../../components/NotAuthorizedPage';
import PageSkeleton from '../PageSkeleton';
import AppDetailsPage from './AppDetailsPage';
import MarketplacePage from './MarketplacePage';
import AppsPage from './AppsPage';
import AppInstallPage from './AppInstallPage';
import AppProvider from './AppProvider';
import AppLogsPage from './AppLogsPage';
function AppsRoute() {
const [isLoading, setLoading] = useState(true);
const canViewAppsAndMarketplace = usePermission('manage-apps');
const isAppsEngineEnabled = useMethod('apps/is-enabled');
const appsWhatIsItRoute = useRoute('admin-apps-disabled');
useEffect(() => {
let mounted = true;
const initialize = async () => {
if (!canViewAppsAndMarketplace) {
return;
}
if (!await isAppsEngineEnabled()) {
appsWhatIsItRoute.push();
return;
}
if (!mounted) {
return;
}
setLoading(false);
};
initialize();
return () => {
mounted = false;
};
}, [canViewAppsAndMarketplace, isAppsEngineEnabled, appsWhatIsItRoute]);
const [currentRouteName] = useCurrentRoute();
const isMarketPlace = currentRouteName === 'admin-marketplace';
const context = useRouteParameter('context');
const id = useRouteParameter('id');
const version = useRouteParameter('version');
if (!canViewAppsAndMarketplace) {
return <NotAuthorizedPage />;
}
if (isLoading) {
return <PageSkeleton />;
}
return <AppProvider>
{
(!context && isMarketPlace && <MarketplacePage />)
|| (!context && !isMarketPlace && <AppsPage />)
|| (context === 'details' && <AppDetailsPage id={id} marketplaceVersion={version}/>)
|| (context === 'logs' && <AppLogsPage id={id}/>)
|| (context === 'install' && <AppInstallPage />)
}
</AppProvider>;
}
export default AppsRoute;