Fixed pagination. Added entity page channel tile expand.

This commit is contained in:
2024-01-25 03:07:26 +01:00
parent 0b3f98826b
commit d739975d36
29 changed files with 1056 additions and 128 deletions

View File

@@ -14,15 +14,39 @@ function curateEntity(entity, context) {
name: entity.name,
slug: entity.slug,
type: entity.type,
url: entity.url,
isIndependent: entity.independent,
hasLogo: entity.has_logo,
parent: curateEntity(entity.parent, context),
children: context?.children?.filter((child) => child.parent_id === entity.id).map((child) => curateEntity({ ...child, parent: entity }, { parent: entity })) || [],
...context?.append?.[entity.id],
};
}
export async function fetchEntities(options) {
const entities = await knex('entities')
.modify((builder) => {
if (options.type === 'primary') {
builder
.where('type', 'network')
.orWhere('independent', true)
.orWhereNull('parent_id');
return;
}
if (options.type) {
builder.where('type', options.type);
}
})
.orderBy(...(options.order || ['name', 'asc']))
.limit(options.limit || 1000);
return entities.map((entityEntry) => curateEntity(entityEntry));
}
export async function fetchEntitiesById(entityIds, options = {}) {
const [entities] = await Promise.all([
const [entities, children] = await Promise.all([
knex('entities')
.select('entities.*', knex.raw('row_to_json(parents) as parent'))
.whereIn('entities.id', entityIds)
@@ -33,10 +57,16 @@ export async function fetchEntitiesById(entityIds, options = {}) {
}
})
.groupBy('entities.id', 'parents.id'),
options.includeChildren ? knex('entities')
.whereIn('entities.parent_id', entityIds)
.orderBy('slug') : [],
]);
if (options.order) {
return entities.map((entityEntry) => curateEntity(entityEntry, { append: options.append }));
return entities.map((entityEntry) => curateEntity(entityEntry, {
append: options.append,
children,
}));
}
const curatedEntities = entityIds.map((entityId) => {
@@ -47,7 +77,10 @@ export async function fetchEntitiesById(entityIds, options = {}) {
return null;
}
return curateEntity(entity, { append: options.append });
return curateEntity(entity, {
append: options.append,
children,
});
}).filter(Boolean);
return curatedEntities;