diff --git a/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx b/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx index 3b9fababfa3..d9bb520cd85 100644 --- a/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx +++ b/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx @@ -132,7 +132,6 @@ const WrapperRow: FC = ({ wrapper, isLoading, isEnabled, isOpen, onOpen } category: 'success', message: `Successfully created ${wrapper.label} foreign data wrapper`, }) - onOpen('') setNewTables([]) setFormState(getInitialFormState) } catch (error: any) { @@ -296,7 +295,9 @@ const WrapperRow: FC = ({ wrapper, isLoading, isEnabled, isOpen, onOpen } {newTables.map((table, i) => (
-

{table.table_name}

+

+ {table.schema_name}.{table.table_name} +

{wrapper.tables[table.index].label}: {table.columns.join(', ')}

diff --git a/studio/components/interfaces/Database/Wrappers/WrapperTableEditor.tsx b/studio/components/interfaces/Database/Wrappers/WrapperTableEditor.tsx index 6c33cb7a71a..e454ee7db4e 100644 --- a/studio/components/interfaces/Database/Wrappers/WrapperTableEditor.tsx +++ b/studio/components/interfaces/Database/Wrappers/WrapperTableEditor.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react' -import { Form, Input, Listbox, SidePanel } from 'ui' +import { Form, IconDatabase, Input, Listbox, SidePanel, Modal, IconPlus } from 'ui' +import { useStore } from 'hooks' import { Table, TableOption } from './Wrappers.types' import { makeValidateRequired } from './Wrappers.utils' import MultiSelect from 'components/ui/MultiSelect' @@ -39,7 +40,12 @@ const WrapperTableEditor = ({ } const onSubmit: OnSubmitFn = (values, { resetForm }) => { - onSave({ ...values, index: parseInt(selectedTableIndex) }) + onSave({ + ...values, + index: parseInt(selectedTableIndex), + schema_name: values.schema === 'custom' ? values.schema_name : values.schema, + is_new_schema: values.schema === 'custom', + }) resetForm() setSelectedTableIndex('') } @@ -121,6 +127,9 @@ const TableForm = ({ onSubmit: OnSubmitFn initialData: any }) => { + const { meta } = useStore() + const schemas = meta.schemas.list() + const requiredOptions = table.options.filter((option) => option.editable && option.required && !option.defaultValue) ?? [] @@ -133,6 +142,8 @@ const TableForm = ({ table_name: '', columns: table.availableColumns.map((column) => column.name), ...Object.fromEntries(table.options.map((option) => [option.name, option.defaultValue ?? ''])), + schema: 'public', + schema_name: '', } const validate = makeValidateRequired([ @@ -152,17 +163,44 @@ const TableForm = ({ {({ errors, values, resetForm }: any) => { return (
+ + } + > + Create a new schema + + + {/* @ts-ignore */} + {schemas.map((schema: PostgresSchema) => { + return ( + } + > + {schema.name} + + ) + })} + + {values.schema === 'custom' && ( + + )} - {requiredOptions.map((option) => (