diff --git a/studio/components/README.md b/studio/components/README.md index 42687fd8e57..e98e5723878 100644 --- a/studio/components/README.md +++ b/studio/components/README.md @@ -29,16 +29,15 @@ ## Template for building components ```ts -import { FC } from 'react' import { observer } from 'mobx-react-lite' // Declare the prop types of your component -interface Props { +interface ComponentAProps { sampleProp: string } // Name your component accordingly -const ComponentA: FC = ({ sampleProp }) => { +const ComponentA = ({ sampleProp }: ComponentAProps) => { return
ComponentA: {sampleProp}
} diff --git a/studio/components/grid/components/common/BlockKeys.tsx b/studio/components/grid/components/common/BlockKeys.tsx index 388fb92703c..bb3ecbab495 100644 --- a/studio/components/grid/components/common/BlockKeys.tsx +++ b/studio/components/grid/components/common/BlockKeys.tsx @@ -1,5 +1,5 @@ import { useClickedOutside } from 'hooks' -import { FC, useRef, useEffect, useCallback, KeyboardEvent, ReactNode } from 'react' +import { KeyboardEvent, ReactNode, useCallback, useEffect, useRef } from 'react' interface BlockKeysProps { value: string | null @@ -13,7 +13,7 @@ interface BlockKeysProps { * We use this with cell editor to allow editor component to handle keys. * Example: press enter to add newline on textEditor */ -export const BlockKeys: FC = ({ value, children, onEscape, onEnter }) => { +export const BlockKeys = ({ value, children, onEscape, onEnter }: BlockKeysProps) => { const ref = useRef(null) const isClickedOutside = useClickedOutside(ref) diff --git a/studio/components/grid/components/common/DropdownControl.tsx b/studio/components/grid/components/common/DropdownControl.tsx index e57ddf97e9a..3b51e0471ca 100644 --- a/studio/components/grid/components/common/DropdownControl.tsx +++ b/studio/components/grid/components/common/DropdownControl.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react' +import { PropsWithChildren } from 'react' import { Dropdown } from 'ui' interface DropdownControlProps { @@ -15,7 +15,7 @@ interface DropdownControlProps { isNested?: boolean } -export const DropdownControl: FC = (p) => { +export const DropdownControl = (p: PropsWithChildren) => { const { className, children, side, align, isNested } = p return ( = (p) => { ) } -const DropdownItems: FC = ({ options, onSelect }) => { +const DropdownItems = ({ options, onSelect }: DropdownControlProps) => { return (
{options.length == 0 &&

No more items

} diff --git a/studio/components/grid/components/common/EmptyValue.tsx b/studio/components/grid/components/common/EmptyValue.tsx index d5f7b7d13c7..b1196a5c556 100644 --- a/studio/components/grid/components/common/EmptyValue.tsx +++ b/studio/components/grid/components/common/EmptyValue.tsx @@ -1,11 +1,3 @@ -import * as React from 'react' - -type EmptyValueProps = {} - -export const EmptyValue: React.FC = ({}) => { - return ( - - EMPTY - - ) +export const EmptyValue = () => { + return EMPTY } diff --git a/studio/components/grid/components/common/MonacoEditor.tsx b/studio/components/grid/components/common/MonacoEditor.tsx index f1cf3b61b8f..8ffa784ebeb 100644 --- a/studio/components/grid/components/common/MonacoEditor.tsx +++ b/studio/components/grid/components/common/MonacoEditor.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import Editor from '@monaco-editor/react' type MonacoEditorProps = { @@ -10,14 +9,14 @@ type MonacoEditorProps = { onMount?: (editor: any) => void } -export const MonacoEditor: React.FC = ({ +export const MonacoEditor = ({ width, height, value, language, onChange, onMount, -}) => { +}: MonacoEditorProps) => { function handleEditorOnMount(editor: any) { // add margin above first line editor.changeViewZones((accessor: any) => { diff --git a/studio/components/grid/components/common/NullValue.tsx b/studio/components/grid/components/common/NullValue.tsx index 342c1ac1365..a2f45c9398c 100644 --- a/studio/components/grid/components/common/NullValue.tsx +++ b/studio/components/grid/components/common/NullValue.tsx @@ -1,11 +1,3 @@ -import * as React from 'react' - -type NullValueProps = {} - -export const NullValue: React.FC = ({}) => { - return ( - - NULL - - ) +export const NullValue = () => { + return NULL } diff --git a/studio/components/grid/components/grid/AddColumn.tsx b/studio/components/grid/components/grid/AddColumn.tsx index d4daba4c134..23a318f9bf4 100644 --- a/studio/components/grid/components/grid/AddColumn.tsx +++ b/studio/components/grid/components/grid/AddColumn.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' import { CalculatedColumn } from '@supabase/react-data-grid' import { Button, IconPlus } from 'ui' + import { ADD_COLUMN_KEY } from '../../constants' import { useTrackedState } from '../../store' import { DefaultFormatter } from '../formatter' @@ -17,13 +17,7 @@ export const AddColumn: CalculatedColumn = { isLastFrozenColumn: false, rowGroup: false, headerRenderer(props) { - return ( - - ) + return }, formatter: DefaultFormatter, } @@ -33,12 +27,7 @@ type SharedInputProps = Pick< 'disabled' | 'tabIndex' | 'onClick' | 'aria-label' | 'aria-labelledby' > -interface AddColumnHeaderProps extends SharedInputProps { - value: boolean - onChange: (value: boolean, isShiftClick: boolean) => void -} - -const AddColumnHeader: React.FC = () => { +const AddColumnHeader = ({}: SharedInputProps) => { const state = useTrackedState() const { onAddColumn } = state return ( diff --git a/studio/components/grid/components/menu/ColumnMenu.tsx b/studio/components/grid/components/menu/ColumnMenu.tsx index 70938ad12ee..a9d79bc014e 100644 --- a/studio/components/grid/components/menu/ColumnMenu.tsx +++ b/studio/components/grid/components/menu/ColumnMenu.tsx @@ -1,23 +1,24 @@ -import { CalculatedColumn } from '@supabase/react-data-grid' import * as Tooltip from '@radix-ui/react-tooltip' +import { CalculatedColumn } from '@supabase/react-data-grid' import { Button, + Divider, Dropdown, IconChevronDown, - Divider, IconEdit, - IconTrash, IconLock, + IconTrash, IconUnlock, } from 'ui' + import { useDispatch, useTrackedState } from '../../store' -type ColumnMenuProps = { +interface ColumnMenuProps { column: CalculatedColumn isEncrypted?: boolean } -const ColumnMenu: React.FC = ({ column, isEncrypted }) => { +const ColumnMenu = ({ column, isEncrypted }: ColumnMenuProps) => { const state = useTrackedState() const dispatch = useDispatch() const { onEditColumn: onEditColumnFunc, onDeleteColumn: onDeleteColumnFunc } = state diff --git a/studio/components/interfaces/Auth/AuthProvidersForm/FormField.tsx b/studio/components/interfaces/Auth/AuthProvidersForm/FormField.tsx index a9665541e76..a40dd0dbdf8 100644 --- a/studio/components/interfaces/Auth/AuthProvidersForm/FormField.tsx +++ b/studio/components/interfaces/Auth/AuthProvidersForm/FormField.tsx @@ -1,17 +1,18 @@ -import { BASE_PATH } from 'lib/constants' -import { FC, useState } from 'react' +import { useState } from 'react' import ReactMarkdown from 'react-markdown' -import { Button, Input, InputNumber, Toggle, Listbox, IconEye, IconEyeOff } from 'ui' +import { Button, IconEye, IconEyeOff, Input, InputNumber, Listbox, Toggle } from 'ui' + +import { BASE_PATH } from 'lib/constants' import { Enum } from './AuthProvidersForm.types' -interface Props { +interface FormFieldProps { name: string properties: any formValues: any disabled?: boolean } -const FormField: FC = ({ name, properties, formValues, disabled = false }) => { +const FormField = ({ name, properties, formValues, disabled = false }: FormFieldProps) => { const [hidden, setHidden] = useState(!!properties.isSecret) if (properties.show && !properties.show.matches.includes(formValues[properties.show.key])) diff --git a/studio/components/interfaces/Auth/EmailTemplates/TemplateEditor.tsx b/studio/components/interfaces/Auth/EmailTemplates/TemplateEditor.tsx index d1e9e700792..4ab4bdf3300 100644 --- a/studio/components/interfaces/Auth/EmailTemplates/TemplateEditor.tsx +++ b/studio/components/interfaces/Auth/EmailTemplates/TemplateEditor.tsx @@ -1,20 +1,20 @@ -import ReactMarkdown from 'react-markdown' -import { FC, useState, useEffect } from 'react' -import { observer } from 'mobx-react-lite' -import { Input, Form } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { observer } from 'mobx-react-lite' +import { useEffect, useState } from 'react' +import ReactMarkdown from 'react-markdown' +import { Form, Input } from 'ui' -import { useStore, useCheckPermissions } from 'hooks' -import { FormSchema } from 'types' -import { FormActions, FormSection, FormSectionContent, FormSectionLabel } from 'components/ui/Forms' import CodeEditor from 'components/ui/CodeEditor' +import { FormActions, FormSection, FormSectionContent, FormSectionLabel } from 'components/ui/Forms' import InformationBox from 'components/ui/InformationBox' +import { useCheckPermissions, useStore } from 'hooks' +import { FormSchema } from 'types' -interface Props { +interface TemplateEditorProps { template: FormSchema } -const TemplateEditor: FC = ({ template }) => { +const TemplateEditor = ({ template }: TemplateEditorProps) => { const { ui, authConfig } = useStore() const [bodyValue, setBodyValue] = useState('') diff --git a/studio/components/interfaces/Auth/Policies/Policies.tsx b/studio/components/interfaces/Auth/Policies/Policies.tsx index 17e208dba11..512efd4fcad 100644 --- a/studio/components/interfaces/Auth/Policies/Policies.tsx +++ b/studio/components/interfaces/Auth/Policies/Policies.tsx @@ -1,25 +1,25 @@ -import { useState, FC } from 'react' -import { isEmpty } from 'lodash' -import { IconHelpCircle } from 'ui' -import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' -import { useStore } from 'hooks' +import type { PostgresRole, PostgresTable } from '@supabase/postgres-meta' import { useParams } from 'common/hooks' import { PolicyEditorModal, PolicyTableRow } from 'components/interfaces/Auth/Policies' -import type { PostgresRole, PostgresTable } from '@supabase/postgres-meta' +import { useStore } from 'hooks' +import { isEmpty } from 'lodash' +import { observer } from 'mobx-react-lite' +import { useRouter } from 'next/router' +import { useState } from 'react' +import { IconHelpCircle } from 'ui' -import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' import ProductEmptyState from 'components/to-be-cleaned/ProductEmptyState' +import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' import InformationBox from 'components/ui/InformationBox' -interface Props { +interface PoliciesProps { tables: PostgresTable[] hasTables: boolean isLocked: boolean } -const Policies: FC = ({ tables, hasTables, isLocked }) => { +const Policies = ({ tables, hasTables, isLocked }: PoliciesProps) => { const router = useRouter() const { ref } = useParams() diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyAllowedOperation.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyAllowedOperation.tsx index 41a33ad7c28..e5470be4daf 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyAllowedOperation.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyAllowedOperation.tsx @@ -1,12 +1,15 @@ -import { FC } from 'react' +import { noop } from 'lodash' import { Radio } from 'ui' -interface Props { +interface PolicyAllowedOperationProps { operation: string onSelectOperation: (operation: string) => void } -const PolicyAllowedOperation: FC = ({ operation = '', onSelectOperation }) => { +const PolicyAllowedOperation = ({ + operation = '', + onSelectOperation = noop, +}: PolicyAllowedOperationProps) => { return (
diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyDefinition.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyDefinition.tsx index 5cc064272fc..6f87834faae 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyDefinition.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyDefinition.tsx @@ -1,11 +1,12 @@ -import { FC, useEffect } from 'react' -import { IconHelpCircle } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' +import { noop } from 'lodash' +import { useEffect } from 'react' +import { IconHelpCircle } from 'ui' -import { usePrevious } from 'hooks' import SqlEditor from 'components/ui/SqlEditor' +import { usePrevious } from 'hooks' -interface Props { +interface PolicyDefinitionProps { operation: string definition: string check: string @@ -13,13 +14,13 @@ interface Props { onUpdatePolicyCheck: (check: string | undefined) => void } -const PolicyDefinition: FC = ({ +const PolicyDefinition = ({ operation = '', definition = '', check = '', - onUpdatePolicyUsing, - onUpdatePolicyCheck, -}) => { + onUpdatePolicyUsing = noop, + onUpdatePolicyCheck = noop, +}: PolicyDefinitionProps) => { const showUsing = (operation: string) => ['SELECT', 'UPDATE', 'DELETE', 'ALL'].includes(operation) || !operation const showCheck = (operation: string) => ['INSERT', 'UPDATE', 'ALL'].includes(operation) diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyEditorFooter.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyEditorFooter.tsx index 0cef3581c9d..df2b9690668 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyEditorFooter.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyEditorFooter.tsx @@ -1,13 +1,17 @@ -import { FC } from 'react' +import { noop } from 'lodash' import { Button, IconExternalLink } from 'ui' -interface Props { +interface PolicyEditorFooterProps { showTemplates: boolean onViewTemplates: () => void onReviewPolicy: () => void } -const PolicyEditorFooter: FC = ({ showTemplates, onViewTemplates, onReviewPolicy }) => ( +const PolicyEditorFooter = ({ + showTemplates, + onViewTemplates = noop, + onReviewPolicy = noop, +}: PolicyEditorFooterProps) => (
void } -const PolicyName: FC = ({ name = '', limit = 100, onUpdatePolicyName }) => { +const PolicyName = ({ name = '', limit = 100, onUpdatePolicyName }: PolicyNameProps) => { return (
diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx index 27ab7ffc122..4ddb70f931f 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx @@ -1,15 +1,14 @@ -import { FC } from 'react' import type { PostgresRole } from '@supabase/postgres-meta' import MultiSelect from 'components/ui/MultiSelect' -interface Props { +interface PolicyRolesProps { roles: PostgresRole[] selectedRoles: string[] onUpdateSelectedRoles: (roles: string[]) => void } -const PolicyRoles: FC = ({ roles, selectedRoles, onUpdateSelectedRoles }) => { +const PolicyRoles = ({ roles, selectedRoles, onUpdateSelectedRoles }: PolicyRolesProps) => { // @ts-ignore const formattedRoles = roles.map((role) => { return { diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx index 5b249d11b2d..20225f7153b 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx @@ -1,17 +1,16 @@ -import { FC } from 'react' +import type { PostgresRole } from '@supabase/postgres-meta' import { Modal } from 'ui' -import PolicyName from './PolicyName' -import PolicyDefinition from './PolicyDefinition' import PolicyAllowedOperation from './PolicyAllowedOperation' -import PolicyRoles from './PolicyRoles' +import PolicyDefinition from './PolicyDefinition' import PolicyEditorFooter from './PolicyEditorFooter' -import type { PostgresRole } from '@supabase/postgres-meta' +import PolicyName from './PolicyName' +import PolicyRoles from './PolicyRoles' // Exposed for StoragePoliciesEditor.js export { PolicyName, PolicyRoles } -interface Props { +interface PolicyEditorProps { isNewPolicy: boolean roles: PostgresRole[] policyFormFields: any @@ -20,14 +19,14 @@ interface Props { onReviewPolicy: () => void } -const PolicyEditor: FC = ({ +const PolicyEditor = ({ isNewPolicy = true, roles = [], policyFormFields = {}, onUpdatePolicyFormFields = () => {}, onViewTemplates = () => {}, onReviewPolicy = () => {}, -}) => { +}: PolicyEditorProps) => { const operation = policyFormFields?.command ?? '' const definition = policyFormFields?.definition ?? '' const check = policyFormFields?.check ?? '' diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx index 4d1ffb1107f..c6fc98dfefe 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx @@ -1,31 +1,30 @@ -import { Modal } from 'ui' -import { FC, useState, useEffect } from 'react' -import { isEmpty } from 'lodash' import type { PostgresRole } from '@supabase/postgres-meta' +import { isEmpty, noop } from 'lodash' +import { useEffect, useState } from 'react' +import { Modal } from 'ui' +import ConfirmationModal from 'components/ui/ConfirmationModal' import { useStore } from 'hooks' -import PolicyEditorModalTitle from './PolicyEditorModalTitle' -import { getGeneralPolicyTemplates } from './PolicyEditorModal.constants' - -import PolicyEditor from '../PolicyEditor' -import PolicyReview from '../PolicyReview' -import PolicyTemplates from '../PolicyTemplates' -import PolicySelection from '../PolicySelection' -import { - createSQLPolicy, - createPayloadForCreatePolicy, - createPayloadForUpdatePolicy, -} from '../Policies.utils' import { POLICY_MODAL_VIEWS } from '../Policies.constants' import { PolicyFormField, PostgresPolicyCreatePayload, PostgresPolicyUpdatePayload, } from '../Policies.types' +import { + createPayloadForCreatePolicy, + createPayloadForUpdatePolicy, + createSQLPolicy, +} from '../Policies.utils' +import PolicyEditor from '../PolicyEditor' +import PolicyReview from '../PolicyReview' +import PolicySelection from '../PolicySelection' +import PolicyTemplates from '../PolicyTemplates' import { PolicyTemplate } from '../PolicyTemplates/PolicyTemplates.constants' -import ConfirmationModal from 'components/ui/ConfirmationModal' +import { getGeneralPolicyTemplates } from './PolicyEditorModal.constants' +import PolicyEditorModalTitle from './PolicyEditorModalTitle' -interface Props { +interface PolicyEditorModalProps { visible: boolean roles?: PostgresRole[] schema: string @@ -37,17 +36,17 @@ interface Props { onSaveSuccess: () => void } -const PolicyEditorModal: FC = ({ +const PolicyEditorModal = ({ visible = false, roles = [], schema = '', table = '', selectedPolicyToEdit = {}, - onSelectCancel = () => {}, - onCreatePolicy = () => {}, - onUpdatePolicy = () => {}, - onSaveSuccess = () => {}, -}) => { + onSelectCancel = noop, + onCreatePolicy = () => false, + onUpdatePolicy = () => false, + onSaveSuccess = noop, +}: PolicyEditorModalProps) => { const { ui } = useStore() const newPolicyTemplate: PolicyFormField = { diff --git a/studio/components/interfaces/Auth/Policies/PolicyReview.tsx b/studio/components/interfaces/Auth/Policies/PolicyReview.tsx index 4e532247ff6..50812e2bb05 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyReview.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyReview.tsx @@ -1,20 +1,20 @@ -import { Button, Modal } from 'ui' -import { isEmpty } from 'lodash' -import { FC, useState } from 'react' import SqlEditor from 'components/ui/SqlEditor' +import { isEmpty, noop } from 'lodash' +import { useState } from 'react' +import { Button, Modal } from 'ui' import { PolicyForReview } from './Policies.types' -interface Props { +interface PolicyReviewProps { policy: PolicyForReview onSelectBack: () => void onSelectSave: () => void } -const PolicyReview: FC = ({ +const PolicyReview = ({ policy = {}, - onSelectBack = () => {}, - onSelectSave = () => {}, -}) => { + onSelectBack = noop, + onSelectSave = noop, +}: PolicyReviewProps) => { const [isSaving, setIsSaving] = useState(false) const onSavePolicy = () => { setIsSaving(true) diff --git a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx index 5598c600550..2eaabd516ee 100644 --- a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx @@ -1,18 +1,19 @@ -import { FC } from 'react' +import { noop } from 'lodash' import { IconEdit, IconGrid, Modal } from 'ui' + import CardButton from 'components/ui/CardButton' -interface Props { +interface PolicySelectionProps { description: string onViewTemplates: () => void onViewEditor: () => void } -const PolicySelection: FC = ({ +const PolicySelection = ({ description = '', - onViewTemplates = () => {}, - onViewEditor = () => {}, -}) => { + onViewTemplates = noop, + onViewEditor = noop, +}: PolicySelectionProps) => { return (
diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx index aa9dcb9cc88..5ba615f4159 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx @@ -1,23 +1,23 @@ -import { FC } from 'react' import * as Tooltip from '@radix-ui/react-tooltip' -import { Button, Dropdown, IconEdit, IconTrash, IconMoreVertical } from 'ui' import type { PostgresPolicy } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { noop } from 'lodash' +import { Button, Dropdown, IconEdit, IconMoreVertical, IconTrash } from 'ui' -import { useCheckPermissions } from 'hooks' import Panel from 'components/ui/Panel' +import { useCheckPermissions } from 'hooks' -interface Props { +interface PolicyRowProps { policy: PostgresPolicy onSelectEditPolicy: (policy: PostgresPolicy) => void onSelectDeletePolicy: (policy: PostgresPolicy) => void } -const PolicyRow: FC = ({ +const PolicyRow = ({ policy, - onSelectEditPolicy = () => {}, - onSelectDeletePolicy = () => {}, -}) => { + onSelectEditPolicy = noop, + onSelectDeletePolicy = noop, +}: PolicyRowProps) => { const canUpdatePolicies = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'policies') return ( diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx index 4a7b088580c..4fefe5456e8 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx @@ -1,25 +1,26 @@ -import Link from 'next/link' -import { FC } from 'react' -import { useRouter } from 'next/router' import * as Tooltip from '@radix-ui/react-tooltip' -import { Badge, Button, IconLock } from 'ui' import type { PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { noop } from 'lodash' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Badge, Button, IconLock } from 'ui' + import { useCheckPermissions } from 'hooks' -interface Props { +interface PolicyTableRowHeaderProps { table: PostgresTable isLocked: boolean onSelectToggleRLS: (table: PostgresTable) => void onSelectCreatePolicy: (table: PostgresTable) => void } -const PolicyTableRowHeader: FC = ({ +const PolicyTableRowHeader = ({ table, isLocked, - onSelectToggleRLS = () => {}, - onSelectCreatePolicy = () => {}, -}) => { + onSelectToggleRLS = noop, + onSelectCreatePolicy = noop, +}: PolicyTableRowHeaderProps) => { const router = useRouter() const { ref } = router.query const canToggleRLS = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx index 70c4b48f9cb..1bdc4ec26c5 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx @@ -1,13 +1,14 @@ -import { FC } from 'react' -import type { PostgresTable, PostgresPolicy } from '@supabase/postgres-meta' +import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' +import { noop } from 'lodash' import { observer } from 'mobx-react-lite' -import { useStore } from 'hooks' -import PolicyTableRowHeader from './PolicyTableRowHeader' -import PolicyRow from './PolicyRow' -import Panel from 'components/ui/Panel' import { Alert } from 'ui' -interface Props { +import Panel from 'components/ui/Panel' +import { useStore } from 'hooks' +import PolicyRow from './PolicyRow' +import PolicyTableRowHeader from './PolicyTableRowHeader' + +interface PolicyTableRowProps { table: PostgresTable isLocked: boolean onSelectToggleRLS: (table: PostgresTable) => void @@ -16,14 +17,14 @@ interface Props { onSelectDeletePolicy: (policy: PostgresPolicy) => void } -const PolicyTableRow: FC = ({ +const PolicyTableRow = ({ table, isLocked, - onSelectToggleRLS = () => {}, - onSelectCreatePolicy = () => {}, - onSelectEditPolicy = () => {}, - onSelectDeletePolicy = () => {}, -}) => { + onSelectToggleRLS = noop, + onSelectCreatePolicy = noop, + onSelectEditPolicy = noop, + onSelectDeletePolicy = noop, +}: PolicyTableRowProps) => { const { meta } = useStore() const policies = meta.policies.list( (policy: PostgresPolicy) => policy.schema === table.schema && policy.table === table.name diff --git a/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatePreview.tsx b/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatePreview.tsx index 97b59f24ad2..f3b57719a60 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatePreview.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatePreview.tsx @@ -1,13 +1,12 @@ -import { FC } from 'react' -import { isEmpty } from 'lodash' import SqlEditor from 'components/ui/SqlEditor' +import { isEmpty } from 'lodash' import { PolicyTemplate } from './PolicyTemplates.constants' -interface Props { +interface TemplatePreviewProps { selectedTemplate: PolicyTemplate } -const TemplatePreview: FC = ({ selectedTemplate }) => { +const TemplatePreview = ({ selectedTemplate }: TemplatePreviewProps) => { const { id, templateName, description, statement } = selectedTemplate return (
diff --git a/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatesList.tsx b/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatesList.tsx index 897ea16839a..7b595e819b8 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatesList.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTemplates/TemplatesList.tsx @@ -1,20 +1,21 @@ -import { FC } from 'react' +import { noop } from 'lodash' import { Menu } from 'ui' + import { PolicyTemplate } from './PolicyTemplates.constants' -interface Props { +interface TemplatesListProps { templates: PolicyTemplate[] templatesNote: string selectedTemplate: PolicyTemplate setSelectedTemplate: (template: PolicyTemplate) => void } -const TemplatesList: FC = ({ +const TemplatesList = ({ templates = [], templatesNote = '', selectedTemplate, - setSelectedTemplate = () => {}, -}) => ( + setSelectedTemplate = noop, +}: TemplatesListProps) => (
void } -const PolicyTemplates: FC = ({ +const PolicyTemplates = ({ templates = [], templatesNote = '', - onUseTemplate = () => {}, -}) => { + onUseTemplate = noop, +}: PolicyTemplatesProps) => { const [selectedTemplate, setSelectedTemplate] = useState(templates[0]) return (
diff --git a/studio/components/interfaces/Auth/RedirectUrls/RedirectUrlList.tsx b/studio/components/interfaces/Auth/RedirectUrls/RedirectUrlList.tsx index 44f60d3b15b..81bbb966fda 100644 --- a/studio/components/interfaces/Auth/RedirectUrls/RedirectUrlList.tsx +++ b/studio/components/interfaces/Auth/RedirectUrls/RedirectUrlList.tsx @@ -1,18 +1,18 @@ -import { FC } from 'react' +import { noop } from 'lodash' import { observer } from 'mobx-react-lite' import { Button, IconGlobe, IconTrash } from 'ui' +import { HorizontalShimmerWithIcon } from 'components/ui/Shimmers' +import { EmptyListState } from 'components/ui/States' import { useStore } from 'hooks' import ValueContainer from './ValueContainer' -import { EmptyListState } from 'components/ui/States' -import { HorizontalShimmerWithIcon } from 'components/ui/Shimmers' -interface Props { +interface RedirectUrlListProps { canUpdate: boolean onSelectUrlToDelete: (url: string) => void } -const RedirectUrlList: FC = ({ canUpdate, onSelectUrlToDelete }) => { +const RedirectUrlList = ({ canUpdate, onSelectUrlToDelete = noop }: RedirectUrlListProps) => { const { authConfig } = useStore() const URI_ALLOW_LIST_ARRAY = authConfig.config.URI_ALLOW_LIST diff --git a/studio/components/interfaces/Auth/RedirectUrls/ValueContainer.tsx b/studio/components/interfaces/Auth/RedirectUrls/ValueContainer.tsx index c7dd41fb552..610817e94fe 100644 --- a/studio/components/interfaces/Auth/RedirectUrls/ValueContainer.tsx +++ b/studio/components/interfaces/Auth/RedirectUrls/ValueContainer.tsx @@ -1,10 +1,6 @@ -import { FC, ReactNode } from 'react' +import { PropsWithChildren } from 'react' -interface Props { - children: ReactNode -} - -const ValueContainer: FC = ({ children }) => ( +const ValueContainer = ({ children }: PropsWithChildren<{}>) => (