repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
public Clawd ADK gateway launch mirror
stars
latest
clone command
git clone gitlawb://did:key:z6Mkq5mY...iFZ5/my-project-publ...git clone gitlawb://did:key:z6Mkq5mY.../my-project-publ...2fa351d6docs: add automaton and perps launch sources16d ago| #1 | "use client"; |
| #2 | import { useEffect } from "react"; |
| #3 | import { useSelector } from "react-redux"; |
| #4 | import { RootState } from "@/store/store"; |
| #5 | import { useAppsApi } from "@/hooks/useAppsApi"; |
| #6 | import { AppCard } from "./AppCard"; |
| #7 | import { AppCardSkeleton } from "@/skeleton/AppCardSkeleton"; |
| #8 | |
| #9 | export function AppGrid() { |
| #10 | const { fetchApps, isLoading } = useAppsApi(); |
| #11 | const apps = useSelector((state: RootState) => state.apps.apps); |
| #12 | const filters = useSelector((state: RootState) => state.apps.filters); |
| #13 | |
| #14 | useEffect(() => { |
| #15 | fetchApps({ |
| #16 | name: filters.searchQuery, |
| #17 | is_active: filters.isActive === "all" ? undefined : filters.isActive, |
| #18 | sort_by: filters.sortBy, |
| #19 | sort_direction: filters.sortDirection, |
| #20 | }); |
| #21 | }, [fetchApps, filters]); |
| #22 | |
| #23 | if (isLoading) { |
| #24 | return ( |
| #25 | <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> |
| #26 | {[...Array(3)].map((_, i) => ( |
| #27 | <AppCardSkeleton key={i} /> |
| #28 | ))} |
| #29 | </div> |
| #30 | ); |
| #31 | } |
| #32 | |
| #33 | if (apps.length === 0) { |
| #34 | return ( |
| #35 | <div className="text-center text-zinc-500 py-8"> |
| #36 | No apps found matching your filters |
| #37 | </div> |
| #38 | ); |
| #39 | } |
| #40 | |
| #41 | return ( |
| #42 | <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> |
| #43 | {apps.map((app) => ( |
| #44 | <AppCard key={app.id} app={app} /> |
| #45 | ))} |
| #46 | </div> |
| #47 | ); |
| #48 | } |
| #49 |