79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import { Property } from "@toolctrl/db/prisma-browser";
|
|
import { EntityWithDetails } from "../db/entities/entities.db.server";
|
|
import { defaultDisplayProperties } from "./PropertyHelper";
|
|
|
|
function isPropertyVisible(property: Property) {
|
|
return !["id"].includes(property.name);
|
|
}
|
|
|
|
function getDefaultEntityColumns(entity: EntityWithDetails) {
|
|
let properties: { name: string; title: string; visible: boolean }[] = [];
|
|
|
|
// first default properties
|
|
properties = [
|
|
...properties,
|
|
...defaultDisplayProperties
|
|
.filter((f) => f.position === "before")
|
|
.map((p) => {
|
|
return { name: p.name, title: p.title, visible: p.displayedByDefault };
|
|
}),
|
|
];
|
|
|
|
// properties
|
|
const entityProperties = entity.properties
|
|
.filter((f) => !f.isDefault)
|
|
.map((i) => {
|
|
return { name: i.name, title: i.title, visible: true };
|
|
});
|
|
if (entityProperties.length > 0) {
|
|
properties = [...properties, ...entityProperties];
|
|
}
|
|
|
|
// parents
|
|
const parents = entity.parentEntities
|
|
.filter((f) => !f.hiddenIfEmpty)
|
|
.map((i) => {
|
|
return { name: "parent." + i.parent.name, title: i.parent.titlePlural, visible: true };
|
|
});
|
|
if (parents.length > 0) {
|
|
properties = [...properties, ...parents];
|
|
}
|
|
|
|
// children
|
|
const children = entity.childEntities
|
|
.filter((f) => !f.hiddenIfEmpty)
|
|
.map((i) => {
|
|
return { name: "child." + i.child.name, title: i.child.titlePlural, visible: true };
|
|
});
|
|
if (children.length > 0) {
|
|
properties = [...properties, ...children];
|
|
}
|
|
|
|
const hiddenParents = entity.parentEntities.filter((f) => f.hiddenIfEmpty);
|
|
if (hiddenParents.length > 0) {
|
|
properties = [...properties, { name: "default.hiddenParents", title: "", visible: true }];
|
|
}
|
|
|
|
const hiddenChildren = entity.childEntities.filter((f) => f.hiddenIfEmpty);
|
|
if (hiddenChildren.length > 0) {
|
|
properties = [...properties, { name: "default.hiddenChildren", title: "", visible: true }];
|
|
}
|
|
|
|
// last default properties
|
|
properties = [
|
|
...properties,
|
|
...defaultDisplayProperties
|
|
.filter((f) => f.position === "after")
|
|
.map((p) => {
|
|
return { name: p.name, title: p.title, visible: p.displayedByDefault };
|
|
}),
|
|
];
|
|
|
|
return properties;
|
|
}
|
|
|
|
export default {
|
|
isPropertyVisible,
|
|
getDefaultEntityColumns,
|
|
};
|