import { FunctionComponent } from 'react' import AdminPage from './AdminPage' import Link from 'next/link' import theme from '../../styles/theme' import { QueryResult, MutationTuple, QueryHookOptions, MutationHookOptions } from '@apollo/client' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faEdit, faTrash, faPlusCircle } from '@fortawesome/free-solid-svg-icons' interface IAdminList { name: string adminMenu?: string dataKey: keyof TQueryData get: ( baseOptions?: QueryHookOptions ) => QueryResult remove?: ( baseOptions?: MutationHookOptions ) => MutationTuple Component: FunctionComponent } const AdminList = < TQueryData extends { [dataKey: string]: any[] }, TQueryVariables, TDeleteData, TDeleteVariables >({ name, adminMenu, dataKey, get, remove, Component, }: IAdminList) => { const [removeFunction, removeResult] = remove ? remove() : [undefined, undefined] const { data, error, loading, refetch } = get({ fetchPolicy: 'network-only' }) let content if (loading) content =

Loading data...

else if (error) content =

Error loading data.

else if (!data) content =

No data found.

else content = (
    {data[dataKey].map((item: any) => (
  • {removeFunction && ( )}
  • ))}
) return (

{name}

{content}
) } export default AdminList