Allow setting multiple many-to-many relationships
This commit is contained in:
parent
af2da7c6d8
commit
94d3466113
|
@ -65,7 +65,7 @@
|
|||
let tableOptions
|
||||
let errorChecker = new RelationshipErrorChecker(
|
||||
invalidThroughTable,
|
||||
relationshipExists
|
||||
manyToManyRelationshipExistsFn
|
||||
)
|
||||
let errors = {}
|
||||
let fromPrimary, fromForeign, fromColumn, toColumn
|
||||
|
@ -125,7 +125,7 @@
|
|||
}
|
||||
return false
|
||||
}
|
||||
function relationshipExists() {
|
||||
function manyToManyRelationshipExistsFn() {
|
||||
if (
|
||||
originalFromTable &&
|
||||
originalToTable &&
|
||||
|
@ -141,16 +141,14 @@
|
|||
datasource.entities[getTable(toId).name].schema
|
||||
).filter(value => value.through)
|
||||
|
||||
const matchAgainstUserInput = (fromTableId, toTableId) =>
|
||||
(fromTableId === fromId && toTableId === toId) ||
|
||||
(fromTableId === toId && toTableId === fromId)
|
||||
const matchAgainstUserInput = link =>
|
||||
(link.throughTo === throughToKey &&
|
||||
link.throughFrom === throughFromKey) ||
|
||||
(link.throughTo === throughFromKey && link.throughFrom === throughToKey)
|
||||
|
||||
return !!fromThroughLinks.find(from =>
|
||||
toThroughLinks.find(
|
||||
to =>
|
||||
from.through === to.through &&
|
||||
matchAgainstUserInput(from.tableId, to.tableId)
|
||||
)
|
||||
const allLinks = [...fromThroughLinks, ...toThroughLinks]
|
||||
return !!allLinks.find(
|
||||
link => link.through === throughId && matchAgainstUserInput(link)
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -181,16 +179,15 @@
|
|||
relationshipType: errorChecker.relationshipTypeSet(relationshipType),
|
||||
fromTable:
|
||||
errorChecker.tableSet(fromTable) ||
|
||||
errorChecker.doesRelationshipExists() ||
|
||||
errorChecker.differentTables(fromId, toId, throughId),
|
||||
toTable:
|
||||
errorChecker.tableSet(toTable) ||
|
||||
errorChecker.doesRelationshipExists() ||
|
||||
errorChecker.differentTables(toId, fromId, throughId),
|
||||
throughTable:
|
||||
errorChecker.throughTableSet(throughTable) ||
|
||||
errorChecker.throughIsNullable() ||
|
||||
errorChecker.differentTables(throughId, fromId, toId),
|
||||
errorChecker.differentTables(throughId, fromId, toId) ||
|
||||
errorChecker.doesRelationshipExists(),
|
||||
throughFromKey:
|
||||
errorChecker.manyForeignKeySet(throughFromKey) ||
|
||||
errorChecker.manyTypeMismatch(
|
||||
|
|
|
@ -30,9 +30,9 @@ function typeMismatchCheck(fromTable, toTable, primary, foreign) {
|
|||
}
|
||||
|
||||
export class RelationshipErrorChecker {
|
||||
constructor(invalidThroughTableFn, relationshipExistsFn) {
|
||||
constructor(invalidThroughTableFn, manyToManyRelationshipExistsFn) {
|
||||
this.invalidThroughTable = invalidThroughTableFn
|
||||
this.relationshipExists = relationshipExistsFn
|
||||
this.manyToManyRelationshipExists = manyToManyRelationshipExistsFn
|
||||
}
|
||||
|
||||
setType(type) {
|
||||
|
@ -72,7 +72,7 @@ export class RelationshipErrorChecker {
|
|||
}
|
||||
|
||||
doesRelationshipExists() {
|
||||
return this.isMany() && this.relationshipExists()
|
||||
return this.isMany() && this.manyToManyRelationshipExists()
|
||||
? relationshipAlreadyExists
|
||||
: null
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue