From 29fd09fa8ab9364c7662bf52036311bbae030df7 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 18 Nov 2022 16:52:57 +0800 Subject: [PATCH] Tie up column editor and keys --- .../Settings/Vault/EncryptionKeySelector.tsx | 13 +++- .../ColumnEditor/ColumnEditor.tsx | 69 +++++++++++++------ .../SidePanelEditor/SidePanelEditor.tsx | 11 --- .../SidePanelEditor/SidePanelEditor.types.ts | 15 ++-- 4 files changed, 62 insertions(+), 46 deletions(-) diff --git a/studio/components/interfaces/Settings/Vault/EncryptionKeySelector.tsx b/studio/components/interfaces/Settings/Vault/EncryptionKeySelector.tsx index d7746c4667c..a1fff01ee77 100644 --- a/studio/components/interfaces/Settings/Vault/EncryptionKeySelector.tsx +++ b/studio/components/interfaces/Settings/Vault/EncryptionKeySelector.tsx @@ -8,7 +8,8 @@ interface Props { label?: string labelOptional?: string selectedKeyId?: any - onSelectKey?: (keyId: string) => void + onSelectKey: (keyId: string) => void + onUpdateDescription?: (desc: string) => void } const EncryptionKeySelector: FC = ({ @@ -18,6 +19,7 @@ const EncryptionKeySelector: FC = ({ labelOptional, selectedKeyId, onSelectKey = () => {}, + onUpdateDescription = () => {}, }) => { const { vault } = useStore() const keys = vault.listKeys() @@ -49,7 +51,7 @@ const EncryptionKeySelector: FC = ({ value={key.id} >
-

{key.comment ?? 'No description provided'}

+

{key.comment || 'No description provided'}

ID: {key.id}

@@ -58,7 +60,12 @@ const EncryptionKeySelector: FC = ({ ))} {selectedKeyId === 'create-new' && ( - + onUpdateDescription(event.target.value)} + /> )} ) diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx index 67f26dfb54c..507257664c8 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx @@ -10,6 +10,7 @@ import { PostgresType, } from '@supabase/postgres-meta' +import { useStore } from 'hooks' import ActionBar from '../ActionBar' import HeaderTitle from './HeaderTitle' import ColumnType from './ColumnType' @@ -33,7 +34,6 @@ interface Props { column?: PostgresColumn selectedTable: PostgresTable tables: PostgresTable[] - enumTypes: PostgresType[] visible: boolean closePanel: () => void saveChanges: ( @@ -50,15 +50,22 @@ const ColumnEditor: FC = ({ column, selectedTable, tables = [], - enumTypes = [], visible = false, closePanel = () => {}, saveChanges = () => {}, updateEditorDirty = () => {}, }) => { + const { meta, vault } = useStore() + const isNewRecord = isUndefined(column) const originalForeignKey = column ? getColumnForeignKey(column, selectedTable) : undefined + const enumTypes = meta.types.list( + (type: PostgresType) => !meta.excludedSchemas.includes(type.schema) + ) + const keys = vault.listKeys() + const defaultKey = keys.find((key) => key.status === 'default') + const [errors, setErrors] = useState>({}) const [columnFields, setColumnFields] = useState() const [isEditingRelation, setIsEditingRelation] = useState(false) @@ -67,7 +74,7 @@ const ColumnEditor: FC = ({ if (visible) { setErrors({}) const columnFields = isNewRecord - ? generateColumnField() + ? { ...generateColumnField(), keyId: defaultKey?.id } : generateColumnFieldFromPostgresColumn(column!, selectedTable) setColumnFields(columnFields) } @@ -128,8 +135,19 @@ const ColumnEditor: FC = ({ const foreignKey = columnFields.foreignKey ? { ...columnFields.foreignKey, source_column_name: columnFields.name } : undefined - const configuration = { columnId: column?.id } - saveChanges(payload, foreignKey, isNewRecord, configuration, resolve) + const configuration = { + columnId: column?.id, + isEncrypted: columnFields.isEncrypted, + keyId: columnFields.keyId, + keyDescription: columnFields.keyDescription, + } + console.log('onSaveChangses', { + payload, + foreignKey, + configuration, + }) + resolve() + // saveChanges(payload, foreignKey, isNewRecord, configuration, resolve) } else { resolve() } @@ -288,22 +306,31 @@ const ColumnEditor: FC = ({ /> - - Security} - > - - onUpdateField({ isEncrypted: !columnFields.isEncrypted })} - /> - {columnFields.isEncrypted && ( - - )} - - + {isNewRecord && ( + <> + + Security} + > + + onUpdateField({ isEncrypted: !columnFields.isEncrypted })} + /> + {columnFields.isEncrypted && ( + onUpdateField({ keyId: id })} + onUpdateDescription={(desc) => onUpdateField({ keyDescription: desc })} + /> + )} + + + + )} = ({ const [isClosingPanel, setIsClosingPanel] = useState(false) const tables = meta.tables.list() - const enumTypes = meta.types.list( - (type: PostgresType) => !meta.excludedSchemas.includes(type.schema) - ) const saveRow = async ( payload: any, @@ -271,7 +268,6 @@ const SidePanelEditor: FC = ({ )} {!isUndefined(selectedTable) && ( = ({ saveChanges={saveColumn} updateEditorDirty={() => setIsEdited(true)} /> - // )} { [Key: string]: T