diff --git a/src/backend/src/routes.js b/src/backend/src/routes.js index 81ad828..a593b64 100644 --- a/src/backend/src/routes.js +++ b/src/backend/src/routes.js @@ -447,8 +447,9 @@ router.get('/public/apps', (req, res) => { // getAllStatuses() retourne un tableau vide si aucun check n'a encore été effectué // On ne déclenche PAS checkAllApps() ici pour éviter de bloquer la réponse const statuses = getAllStatuses(); + // Le portail répartit lui-même les applications par onglet, y compris INFRA. + // L’API expose donc toutes les applications du registre local, sans en masquer. const publicApps = config.apps - .filter((a) => a.category !== 'INFRA') // Exclure les apps infra (portail, dashboard) .map((a) => { const status = statuses.find((s) => s.id === a.id); return { diff --git a/src/frontend/src/pages/AppsPage.jsx b/src/frontend/src/pages/AppsPage.jsx index b5d727e..cc880d1 100644 --- a/src/frontend/src/pages/AppsPage.jsx +++ b/src/frontend/src/pages/AppsPage.jsx @@ -3,6 +3,7 @@ import { Box, RefreshCw, Plus } from 'lucide-react'; import AppCard from '../components/AppCard'; import AddAppModal from '../components/AddAppModal'; import { getApps, getGiteaCommits } from '../utils/api'; +import { sortAppsWithInfraFirst } from '../utils/appSorting'; export default function AppsPage({ apps, onRefresh }) { const [commitsMap, setCommitsMap] = useState({}); @@ -26,6 +27,9 @@ export default function AppsPage({ apps, onRefresh }) { }); }, [apps]); + // Les services d’infrastructure restent visibles en premier, sans modifier les données API. + const sortedApps = sortAppsWithInfraFirst(apps); + const handleAddSuccess = () => { setShowAddModal(false); // Rafraîchir la liste après un délai pour laisser le temps au health check @@ -86,7 +90,7 @@ export default function AppsPage({ apps, onRefresh }) { ) : (
Aucune application détectée
) : (