/* 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 (