Centralize configure-able factory classes
This commit is contained in:
@@ -3,6 +3,7 @@ import {collect, Collection, ErrorWithContext, Maybe} from '../../util'
|
||||
import {HasSubtree} from './relation/HasSubtree'
|
||||
import {Related} from './relation/decorators'
|
||||
import {HasTreeParent} from './relation/HasTreeParent'
|
||||
import {ModelBuilder} from './ModelBuilder'
|
||||
|
||||
/**
|
||||
* Model implementation with helpers for querying tree-structured data.
|
||||
@@ -44,6 +45,12 @@ export abstract class TreeModel<T extends TreeModel<T>> extends Model<T> {
|
||||
|
||||
public static readonly parentIdField = 'parent_id'
|
||||
|
||||
/** @override to include the tree fields */
|
||||
public static query<T2 extends Model<T2>>(): ModelBuilder<T2> {
|
||||
return super.query<T2>()
|
||||
.fields(this.rightTreeField, this.leftTreeField, this.parentIdField)
|
||||
}
|
||||
|
||||
/**
|
||||
* @override to eager-load the subtree by default
|
||||
* @protected
|
||||
@@ -52,6 +59,13 @@ export abstract class TreeModel<T extends TreeModel<T>> extends Model<T> {
|
||||
|
||||
protected removedChildren: Collection<TreeModel<T>> = collect()
|
||||
|
||||
/** @override to include the tree fields */
|
||||
public query(): ModelBuilder<T> {
|
||||
const ctor = this.constructor as typeof TreeModel
|
||||
return super.query()
|
||||
.fields(ctor.leftTreeField, ctor.rightTreeField, ctor.parentIdField)
|
||||
}
|
||||
|
||||
/** Get the left tree number for this model. */
|
||||
public leftTreeNum(): Maybe<number> {
|
||||
const ctor = this.constructor as typeof TreeModel
|
||||
|
||||
Reference in New Issue
Block a user