72 lines
3.0 KiB
TypeScript
72 lines
3.0 KiB
TypeScript
import { EntityRelationshipWithDetails } from "../db/entities/entityRelationships.db.server";
|
|
|
|
// function getTopEntities({ entity }: { entity: EntityWithDetails }) {
|
|
// return [...entity.parentEntities.filter((f) => f.type !== "one-to-one")];
|
|
// }
|
|
|
|
// function getBottomEntities({ entity }: { entity: EntityWithDetails }) {
|
|
// return [...entity.childEntities, ...entity.parentEntities.filter((f) => f.type === "one-to-one")];
|
|
// }
|
|
|
|
function getTitle({ fromEntityId, relationship }: { fromEntityId: string; relationship: EntityRelationshipWithDetails }) {
|
|
if (relationship.title) {
|
|
return relationship.title;
|
|
}
|
|
const isParent = relationship.parentId === fromEntityId;
|
|
switch (relationship.type) {
|
|
case "one-to-one":
|
|
return isParent ? relationship.child.title : relationship.parent.title;
|
|
case "one-to-many":
|
|
return isParent ? relationship.child.titlePlural : relationship.parent.title;
|
|
case "many-to-one":
|
|
return isParent ? relationship.child.title : relationship.parent.titlePlural;
|
|
case "many-to-many":
|
|
return isParent ? relationship.child.titlePlural : relationship.parent.titlePlural;
|
|
default:
|
|
return isParent ? relationship.child.titlePlural : relationship.parent.title;
|
|
}
|
|
}
|
|
|
|
function getTitleWithName({ fromEntityId, relationship }: { fromEntityId: string; relationship: EntityRelationshipWithDetails }) {
|
|
if (relationship.title) {
|
|
return relationship.title;
|
|
}
|
|
const isParent = relationship.parentId === fromEntityId;
|
|
switch (relationship.type) {
|
|
case "one-to-one":
|
|
return isParent ? `${relationship.child.title} (1)` : `${relationship.parent.title} (1)${relationship.required ? "*" : ""}`;
|
|
case "one-to-many":
|
|
return isParent ? `${relationship.child.titlePlural} (N)` : `${relationship.parent.title} (1)${relationship.required ? "*" : ""}`;
|
|
case "many-to-one":
|
|
return isParent ? `${relationship.child.title} (1)${relationship.required ? "*" : ""}` : `${relationship.parent.titlePlural} (N)`;
|
|
case "many-to-many":
|
|
return isParent ? `${relationship.child.titlePlural} (N)` : `${relationship.parent.titlePlural} (N)${relationship.required ? "*" : ""}`;
|
|
default:
|
|
return isParent ? `${relationship.child.titlePlural} (N)` : `${relationship.parent.title} (1)${relationship.required ? "*" : ""}`;
|
|
}
|
|
}
|
|
|
|
function getInputType({ fromEntityId, relationship }: { fromEntityId: string; relationship: EntityRelationshipWithDetails }): "single-select" | "multi-select" {
|
|
const isParent = relationship.parentId === fromEntityId;
|
|
switch (relationship.type) {
|
|
case "one-to-one":
|
|
return "single-select";
|
|
case "one-to-many":
|
|
return isParent ? "multi-select" : "single-select";
|
|
case "many-to-one":
|
|
return isParent ? "single-select" : "multi-select";
|
|
case "many-to-many":
|
|
return "multi-select";
|
|
default:
|
|
return isParent ? "multi-select" : "single-select";
|
|
}
|
|
}
|
|
|
|
export default {
|
|
// getTopEntities,
|
|
// getBottomEntities,
|
|
getTitle,
|
|
getTitleWithName,
|
|
getInputType,
|
|
};
|