import { FC } from 'react' import { useRouter } from 'next/router' import { includes } from 'lodash' import { Button, Dropdown, IconEdit3, IconFileText, IconMoreVertical, IconTrash } from 'ui' import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useStore } from 'hooks' import Table from 'components/to-be-cleaned/Table' interface Props { schema: string filterString: string editFunction: (fn: any) => void deleteFunction: (fn: any) => void } const FunctionList: FC = ({ schema, filterString, editFunction = () => {}, deleteFunction = () => {}, }) => { const router = useRouter() const { ui, meta } = useStore() const functions = meta.functions.list((fn: any) => !meta.excludedSchemas.includes(fn.schema)) const filteredFunctions = functions.filter((x: any) => includes(x.name.toLowerCase(), filterString.toLowerCase()) ) const _functions = filteredFunctions.filter((x) => x.schema == schema) const isApiDocumentAvailable = schema == 'public' const projectRef = ui.selectedProject?.ref const canUpdateFunctions = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'functions') function onEdit(func: any) { editFunction(func) } function onDelete(func: any) { deleteFunction(func) } return ( <> {_functions.map((x) => (

{x.name}

{x.argument_types}

{x.return_type}

{canUpdateFunctions ? ( {isApiDocumentAvailable && ( } onClick={() => router.push(`/project/${projectRef}/api?rpc=${x.name}`)} > Client API docs )} } onClick={() => onEdit(x)}> Edit function } onClick={() => onDelete(x)} > Delete function } >
))} ) } export default observer(FunctionList)