/* eslint-disable react-hooks/exhaustive-deps */ import React, { useState, useCallback, useMemo, useEffect } from 'react'; import { useNavigate } from 'react-router'; import { SearchIcon } from '@heroicons/react/solid'; import { showToast, ToastType } from 'src/common/util/show-toast'; import _, { debounce } from 'lodash'; import { Table } from 'src/components'; import { App, AppStatus, useApps } from 'src/services/apps'; import { AppInstallModal } from './components'; import { getConstForStatus } from './consts'; export const Apps: React.FC = () => { const [search, setSearch] = useState(''); const [installModalOpen, setInstallModalOpen] = useState(false); const [appSlug, setAppSlug] = useState(null); const { apps, appTableLoading, loadApps } = useApps(); const handleSearch = useCallback((event: any) => { setSearch(event.target.value); }, []); const debouncedSearch = useCallback(debounce(handleSearch, 250), []); useEffect(() => { loadApps(); return () => { debouncedSearch.cancel(); }; }, []); const filterSearch = useMemo(() => { return _.filter(apps, (item) => item.name?.toLowerCase().includes(search.toLowerCase())); }, [apps, search]); const columns: any = [ { Header: 'Name', accessor: 'name', Cell: (e: any) => { const app = e.cell.row.original as App; return (
{app.name}
{app.name}
); }, width: 'auto', }, { Header: 'Status', accessor: 'status', Cell: (e: any) => { const status = e.cell.row.original.status as AppStatus; return (
{status === AppStatus.Installing ? (
showToast('Installing an app can take up to 10 minutes.', ToastType.Success)} > {status}
) : (
{status}
)}
); }, width: 'auto', }, { Header: ' ', Cell: (e: any) => { const navigate = useNavigate(); const appStatus = e.cell.row.original.status as AppStatus; if (appStatus === AppStatus.Installing) { return null; } const { slug } = e.cell.row.original; let buttonFuntion = () => navigate(`/apps/${slug}`); if (appStatus === AppStatus.NotInstalled) { buttonFuntion = () => { setAppSlug(slug); setInstallModalOpen(true); }; } return (
); }, width: 'auto', }, ]; return (

Apps

app.slug !== 'dashboard') as any} columns={columns} loading={appTableLoading} /> {installModalOpen && ( setInstallModalOpen(false)} open={installModalOpen} /> )} ); };