import { type ChangeEvent, useState } from 'react' import { getRouteApi } from '@tanstack/react-router' import { SlidersHorizontal, ArrowUpAZ, ArrowDownAZ } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Separator } from '@/components/ui/separator' import { ConfigDrawer } from '@/components/config-drawer' import { Header } from '@/components/layout/header' import { Main } from '@/components/layout/main' import { ProfileDropdown } from '@/components/profile-dropdown' import { Search } from '@/components/search' import { ThemeSwitch } from '@/components/theme-switch' import { apps } from './data/apps' const route = getRouteApi('/_authenticated/apps/') type AppType = 'all' | 'connected' | 'notConnected' const appText = new Map([ ['all', 'All Apps'], ['connected', 'Connected'], ['notConnected', 'Not Connected'], ]) export function Apps() { const { filter = '', type = 'all', sort: initSort = 'asc', } = route.useSearch() const navigate = route.useNavigate() const [sort, setSort] = useState(initSort) const [appType, setAppType] = useState(type) const [searchTerm, setSearchTerm] = useState(filter) const filteredApps = apps .sort((a, b) => sort === 'asc' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name) ) .filter((app) => appType === 'connected' ? app.connected : appType === 'notConnected' ? !app.connected : true ) .filter((app) => app.name.toLowerCase().includes(searchTerm.toLowerCase())) const handleSearch = (e: ChangeEvent) => { setSearchTerm(e.target.value) navigate({ search: (prev) => ({ ...prev, filter: e.target.value || undefined, }), }) } const handleTypeChange = (value: AppType) => { setAppType(value) navigate({ search: (prev) => ({ ...prev, type: value === 'all' ? undefined : value, }), }) } const handleSortChange = (sort: 'asc' | 'desc') => { setSort(sort) navigate({ search: (prev) => ({ ...prev, sort }) }) } return ( <> {/* ===== Top Heading ===== */}
{/* ===== Content ===== */}

App Integrations

Here's a list of your apps for the integration!

    {filteredApps.map((app) => (
  • {app.logo}

    {app.name}

    {app.desc}

  • ))}
) }