Updates to sidebar tree

* Maintain tree open state on route change and return
* Load page tree ancestors and their children when a page is accessed directly
* Show correct breadcrumb path
* Add emoji to breadcrumbs
* Backend api to get page breadcrumbs/ancestors
This commit is contained in:
Philipinho
2024-04-21 16:38:59 +01:00
parent 3e2c13a22e
commit 3462c7fdbc
13 changed files with 348 additions and 116 deletions

View File

@ -104,4 +104,10 @@ export class PageController {
async movePage(@Body() movePageDto: MovePageDto) {
return this.pageService.movePage(movePageDto);
}
@HttpCode(HttpStatus.OK)
@Post('/breadcrumbs')
async getPageBreadcrumbs(@Body() dto: PageIdDto) {
return this.pageService.getPageBreadCrumbs(dto.pageId);
}
}

View File

@ -222,6 +222,59 @@ export class PageService {
// permissions
}
async getPageBreadCrumbs(childPageId: string) {
const ancestors = await this.db
.withRecursive('page_ancestors', (db) =>
db
.selectFrom('pages')
.select([
'id',
'title',
'icon',
'position',
'parentPageId',
'spaceId',
])
.select((eb) => this.withHasChildren(eb))
.where('id', '=', childPageId)
.unionAll((exp) =>
exp
.selectFrom('pages as p')
.select([
'p.id',
'p.title',
'p.icon',
'p.position',
'p.parentPageId',
'p.spaceId',
])
.select(
exp
.selectFrom('pages as child')
.select((eb) =>
eb
.case()
.when(eb.fn.countAll(), '>', 0)
.then(true)
.else(false)
.end()
.as('count'),
)
.whereRef('child.parentPageId', '=', 'id')
.limit(1)
.as('hasChildren'),
)
//.select((eb) => this.withHasChildren(eb))
.innerJoin('page_ancestors as pa', 'pa.parentPageId', 'p.id'),
),
)
.selectFrom('page_ancestors')
.selectAll()
.execute();
return ancestors.reverse();
}
async getRecentSpacePages(
spaceId: string,
pagination: PaginationOptions,