fk editor

This commit is contained in:
Jan Prochazka
2021-06-24 11:42:26 +02:00
parent 4db464772e
commit 8f3c479642
2 changed files with 35 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
import uuidv1 from 'uuid/v1'; import uuidv1 from 'uuid/v1';
import _omit from 'lodash/omit'; import _omit from 'lodash/omit';
import { ColumnInfo, ConstraintInfo, PrimaryKeyInfo, TableInfo } from 'dbgate-types'; import { ColumnInfo, ConstraintInfo, ForeignKeyInfo, PrimaryKeyInfo, TableInfo } from 'dbgate-types';
export interface EditorColumnInfo extends ColumnInfo { export interface EditorColumnInfo extends ColumnInfo {
isPrimaryKey?: boolean; isPrimaryKey?: boolean;
@@ -107,6 +107,16 @@ export function editorAddConstraint(table: TableInfo, constraint: ConstraintInfo
} as PrimaryKeyInfo; } as PrimaryKeyInfo;
} }
if (constraint.constraintType == 'foreignKey') {
res.foreignKeys = [
...(res.foreignKeys || []),
{
pairingId: uuidv1(),
...constraint,
} as ForeignKeyInfo,
];
}
return res; return res;
} }
@@ -122,6 +132,12 @@ export function editorModifyConstraint(table: TableInfo, constraint: ConstraintI
}; };
} }
if (constraint.constraintType == 'foreignKey') {
res.foreignKeys = table.foreignKeys.map(fk =>
fk.pairingId == constraint.pairingId ? { ...fk, ...constraint } : fk
);
}
return res; return res;
} }
@@ -134,5 +150,9 @@ export function editorDeleteConstraint(table: TableInfo, constraint: ConstraintI
res.primaryKey = null; res.primaryKey = null;
} }
if (constraint.constraintType == 'foreignKey') {
res.foreignKeys = table.foreignKeys.filter(x => x.pairingId != constraint.pairingId);
}
return res; return res;
} }

View File

@@ -71,10 +71,13 @@
<SelectField <SelectField
value={column.columnName} value={column.columnName}
isNative isNative
options={tableInfo.columns.map(col => ({ options={[
label: col.columnName, { label: '(Not selected)', value: '' },
value: col.columnName, ...tableInfo.columns.map(col => ({
}))} label: col.columnName,
value: col.columnName,
})),
]}
on:change={e => { on:change={e => {
if (e.detail) { if (e.detail) {
columns = columns.map((col, i) => (i == index ? { ...col, columnName: e.detail } : col)); columns = columns.map((col, i) => (i == index ? { ...col, columnName: e.detail } : col));
@@ -88,10 +91,13 @@
<SelectField <SelectField
value={column.refColumnName} value={column.refColumnName}
isNative isNative
options={(refTableInfo?.columns || []).map(col => ({ options={[
label: col.columnName, { label: '(Not selected)', value: '' },
value: col.columnName, ...(refTableInfo?.columns || []).map(col => ({
}))} label: col.columnName,
value: col.columnName,
})),
]}
on:change={e => { on:change={e => {
if (e.detail) { if (e.detail) {
columns = columns.map((col, i) => (i == index ? { ...col, refColumnName: e.detail } : col)); columns = columns.map((col, i) => (i == index ? { ...col, refColumnName: e.detail } : col));